【题目描述】
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
操作分为查询(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;
}