【題目描述】
為某個機關建立一個員工通訊錄管理系統,可以友善查詢每一個員工的手機号、及電子郵箱。其功能包括通訊錄連結清單的建立、員工通訊資訊的查詢、修改、插入與删除、以及整個通訊錄表的輸出。
操作分為查詢(query)、修改(modify)、添加(add)、删除(del)、列印(print)
1. 查詢:輸入員工姓名,輸出員工資訊,若員工不存在,輸出“NOT FOUND!”
2. 修改:輸入員工姓名、要修改的屬性、修改資訊。姓名為name、電話為tel、郵箱為email。
3. 添加:輸入員工編号、姓名、電話号碼、郵箱。
4. 删除:輸入員工姓名,将其從通訊錄中删除。
5. 列印:輸出通訊錄 。
【輸入】
第一行是一個整數n(1<=n<=100),表示通訊錄原有n個人。接下來n行是員工資訊,每行有編号、姓名、電話号碼、郵箱四個員工屬性。
接下來輸入一個整數m(1<=m<=100),表示有m次操作。接下來是m行操作,每行為一次操作,操作如題意所示。
資料保證編号、姓名不重複;編号小于200且升序給出,名字隻由小寫字母組成,電話隻由數字組成,郵箱隻由數字、小寫字母、“@”、“.”組成;名字、電話、郵箱字元串長度都不超過20。
輸出
對于每個query和print,輸出查詢或列印結果。
樣例輸入 Copy
2
1 aaa 13579246811 [email protected]
2 csl 13579246833 [email protected]
9
del aaa
query aaa
query csl
modify csl email [email protected]
query csl
add 3 cnz 01234567890 [email protected]
modify cnz name cnznb
modify cnznb tel 13579246822
樣例輸出 Copy
NOT FOUND!
2 csl 13579246833 [email protected]
2 csl 13579246833 [email protected]
2 csl 13579246833 [email protected]
3 cnznb 13579246822 [email protected]
提示
樣例中,
del aaa 表示删除aaa的資訊
query aaa 查詢aaa的資訊,不存在,輸出“NOT FOUND!”
query csl 表示查詢csl的資訊,輸出“2 csl 13579246833 [email protected]”
modify csl email [email protected] 表示修改csl的郵箱為“[email protected]”
query csl 表示查詢csl的資訊,輸出“2 csl 13579246833 [email protected]”
add 3 cnz 01234567890 [email protected] 添加一條員工資訊
modify cnz name cnznb 修改cnz的name為cnznb
modify cnznb tel 13579246822 修改cnz的tel為13579246822
print 按編号順序列印通訊錄
代碼示例
#include<iostream>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<cstring>
using namespace std;
typedef struct //通訊錄的資料存儲類型
{
int num;
char name[10];
char call[15];
char mail[25];
} DataType;
typedef struct Node//連結清單的構造
{
DataType data;//資料域
struct Node *next;//指針域
} LNode,*LinkList;
void InitList(LinkList &L)//初始化
{
L = new LNode;
L->next = NULL;
}
void creatList(LinkList &L) //頭插法建立連結清單
{
LNode *p, *r, *v; //LinkList p;
int i,n;
cin>>n;
L= new LNode;
r= L;
for(i = 0; i<n; i++)
{
p= new LNode;
r->next= p;
r= p;
p->next= NULL;
loop:
cin>> p->data.num>>p->data.name>>p->data.call>>p->data.mail;
v=L;
while(v)
{
if(v != p&&v->data.num==p->data.num)
goto loop;
else
v= v->next;
}
}
}
void add(LinkList &L)
{
LinkList p, s, v;
p= L;
while(p->next != NULL)
p= p->next;
s=new LNode;
s->next= NULL;
loop:
cin>> s->data.num;
v= L;
while(v)
{
if(v != s&&v->data.num==s->data.num)
goto loop;
else
v= v->next;
}
cin>> s->data.name>>s->data.call>>s->data.mail;
p->next= s;
p= p->next;
}
void query(LinkList &L,char name[10])
{
LNode *p;
p = L->next;
while (p != NULL)
{
if (strcmp(p->data.name,name) == 0)
{
cout<<p->data.num<<" "<<p->data.name<<" "<<p->data.call<<" "<<p->data.mail<<endl;
return;
}
p = p->next;
}
if(p==NULL)
cout << "NOT FOUND!"<<endl;
}
void modify(LinkList &L,char name[10])
{
LNode *p;
p = L->next;
while (p != NULL)
{
if (strcmp(p->data.name,name) == 0)
{
char str[20],ch[20];
int num1;
char str1[]="num",str2[]="name",str3[]="tel",str4[]="email";
cin>>str>>ch;
if(strcmp(str,str1)==0)
{
cin>>num1;
p->data.num=num1;;
}
else if(strcmp(str,str2)==0)
strcpy(p->data.name,ch);
else if(strcmp(str,str3)==0)
strcpy(p->data.call, ch);
else if(strcmp(str,str4)==0)
strcpy(p->data.mail, ch);
}
p = p->next;
}
}
void del(LinkList &L,char name[10])
{
if (L != NULL)
{
LNode *p= new LNode;
p = L;
while (p->next != NULL)
{
if (strcmp(p->next->data.name, name) == 0)
{
LNode *q;
q = p->next;
p->next = q->next;
free(q);
q = NULL;
}
p = p->next;
}
}
}
void print(LinkList &L)
{
LNode *p;
p = L->next;
while(p!=NULL)
{
cout<<p->data.num<<" "<<p->data.name<<" "<<p->data.call<<" "<<p->data.mail<<endl;
p = p->next;
}
}
int main()
{
LinkList l;
char str[10],name[10];
char str1[]="add",str2[]="query",str3[]="modify",str4[]="del",str5[]="print";
creatList(l);
int m;
cin>>m;
while(m--)
{
cin>>str;
if(strcmp(str1,str)==0)
add(l);
else if(strcmp(str2,str)==0)
{
cin>>name;
query(l,name);
}
else if(strcmp(str3,str)==0)
{
cin>>name;
modify(l,name);
}
else if(strcmp(str4,str)==0)
{
cin>>name;
del(l,name);
}
else if(strcmp(str5,str)==0)
print(l);
}
return 0;
}