一、设计题目单位员工通讯录管理系统(线性表的应用)[问题描述]为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。[实现提示]可以采用单链表的存储结构,如可定义如下的存储结构:typedefstruct{/*员工通讯信息的结构类型定义*/charnum[5];/*员工编号*/charname[10];/*员工姓名*/charphone[15];/*办公室电话号码*/charcall[15];/*手机号码*/charmail[25];/*邮箱*/}DataType;/*通讯录单链表的结点类型*/typedefstructnode{DataTypedata;/*结点的数据域*/structnode*next;/*结点的指针域*/}ListNode,*LinkList;二、需求分析为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。三、算法设计1.算法思想为建立单位员工通讯录系统,我们要实现很多的功能,先要实现将员工的信息录入、保存等基本操作。需要把相应的信息录入对应的员工里,其次是实现这些信息的查询、修改、删除功能,并且能直接输出整个所有员工信息等。而这些所有的实现需要我们特别熟悉链表的基本操作。2.算法设计分析对于这个算法设计,我最先想到的就是,用链表将题中的叙述的问题解决。所以我们要先建立一个链表,链表的节点信息保存的有员工姓名、员工编号、员工办公室电话号码、手机号、员工邮箱等信息。而链表的节点信息保存的有员工信息及其指针域。然后我们添加员工信息,对于刚来的员工我们将其放到节点的表尾。在添加之前我们要进行一项操作,及遍历链表找到其尾指针,然后开辟一个节点并将其加在链尾。我们还可以进行员工信息查询操作,在进行查询时我们先要遍历整个链表。然后在遍历的同时与关键字进行比较从而找到员工信息并输出,员工信息删除操作,也是如此,此操作首先要找到要删除的员工信息,然后将此节点的前一节点的后续指针直接指向要删除的结点的后续指针,并且释放要删除的结点空间即可。员工信息修改,首先找到要修改的员工,然后输入要修改的员工信息,将要修改的员工信息输入其中即可,这就是以上要完成的实验目的的过程,明确了这些,接下来就好操作了。3.流程图四、调试分析与结果开始主菜单建立通信链表添加各项信息是否继续添加是否已建表添加各项信息成功输出确定删除删除成功按编号查找查询完毕插入成功主菜单退出是否退出退出程序结束插入信息查询记录删除记录输出记录是否已建表是否已建表是否已建表按姓名查找通讯录的建立添加人员信息删除人员信息查询人员信息输出人员信息人员的修改五、课设总结当地一次看到单位员工通讯管理系统时,感觉是一头雾水,不知道该如何下手。随后就拿出了杀手锏,百度,通过百度了解了这个系统我该如何的去做,让代码从无到有,从不懂到了一知半解。这也增进了我们算法设计的兴趣,虽然其中有很大的困难,但是在自己和同学们的帮助下,有了不少的收获,理解了程序代码,完成了作业,而这第一的作业也让我明白的许多,对于一个问题的解决不一定局限于死的答案,只有对问题的思想有一个很好的了解才算真正的理解和学会。这也让我在以后的学习中能有很大的提升。六、附录(源代码)单位员工通讯管理系统#includestdio.h#includestring.h#includestdlib.htypedefstruct{charnum[5];charname[15];charphone[13];charcall[15];chare_mail[30];}datatype;typedefstructnode{datatypedata;structnode*next;}Dnode;Dnode*head;Dnode*p;typedefstructnodelinklist;intmenu();Dnode*createlist();voidAdd(Dnode*head,Dnode*p);Dnode*research(Dnode*head);voidDelete(Dnode*head);voidprint_list(Dnode*head);Dnode*Change(Dnode*head,chark[]);voidSaveandfree();voidOpen();intmenu(){inti;printf(*********************************************);printf(\n);printf(通讯录系统清单\n);printf(\n);printf(*********************************************);printf(\n);printf(1.通讯录的建立);printf(\n);printf(2.添加人员信息);printf(\n);printf(3.删除人员信息);printf(\n);printf(4.查询人员信息);printf(\n);printf(5.输出人员信息);printf(\n);printf(6.修改人员信息);printf(\n);printf(0.退出并保存);printf(\n);printf(请选择0-6:);scanf(%d,&i);while(i0||i6){printf(系统提示:您输入错误!\n);printf(请重新输入0-6:);scanf(%d,&i);printf(\n\n);}returni;}Dnode*createlist(){Dnode*head=(Dnode*)malloc(sizeof(Dnode));Dnode*p;Dnode*rear;charc='n';rear=head;while(c=='n'){p=(Dnode*)malloc(sizeof(Dnode));printf(请输入编号:\n);scanf(%s,p-data.num);printf(请输入姓名:\n);scanf(%s,p-data.name);printf(请输入办公室电话:\n);scanf(%s,p-data.phone);printf(请输入手机:\n);scanf(%s,p-data.call);printf(请输入电子邮箱:\n);scanf(%s,p-data.e_mail);rear-next=p;rear=p;printf(要继续创建请按(n),结束创建请按其它键:\n);scanf(%c,&c);}rear-next=NULL;returnhead;}voidAdd(Dnode*head,Dnode*p){Dnode*p1;Dnode*p2;p1=head;p2=p1-next;while(p2!=NULL&&strcmp(p2-data.num,p-data.num)0){p1=p2;p2=p2-next;}p1-next=p;p-next=p2;}voidDelete(Dnode*head){chara,b;Dnode*p;Dnode*q;charnum[5];charname[10];intx;printf(1.按编号删除\n);printf(2.按姓名删除\n);printf(请选择(1或2):);p=head-next;scanf(%d,&x);if(x==1){printf(请输入要查询者的编号:);scanf(%s,num);while(p&&strcmp(p-data.num,num)0)p=p-next;if(p==NULL||strcmp(p-data.num,num)0)p=NULL;}if(x==2){printf(请输入要查询者的姓名:);scanf(%s,name);while(p&&strcmp(p-data.name,name)!=0)p=p-next;}scanf(%c,&b);if(p==NULL){printf(对不起没有您要查询者的信息\n);return;}printf(要删除该结点吗?(y/n):);scanf(%c,&a);if(a=='y'||a=='Y'){q=head;while(q!=NULL&&q-next!=p)q=q-next;q-next=p-next;free(p);printf(通讯者已经被删除\n);}}Dnode*research(Dnode*head){Dnode*p;charnum[5];charname[10];charphone[15];charcall[15];intx;printf(1.按编号查询:\n);printf(2.按姓名查询:\n);printf(3.按电话号码查询:\n);printf(4.按手机号码查询:\n);printf(请选择(1-4):);p=head-next;scanf(%d,&x);if(x==1){printf(请输入要查询者的编号:);scanf(%s,num);while(p&&strcmp(p-data.num,num)0)p=p-next;if(p==NULL||strcmp(p-data.num,num)0)p=NULL;}if(x==2){printf(请输入要查询者的姓名:);scanf(%s,name);while(p&&strcmp(p-data.name,name)!=0)p=p-next;}if(x==3){printf(请输入要查询者的办公室电话号码:);scanf(%s,phone);while(p&&strcmp(p-data.phone,phone)!=0)p=p-next;}if(x==4){printf(请输入要查询者的手机号码:);scanf(%s,call);while(p&&strcmp(p-data.call,call)!=0)p=p-next;}returnp;}voidprint_list(Dnode*head){Dnode*p;p=head-next;printf(编号姓名办公室电话手机号码邮箱);printf(\n);while(p!=NULL){printf(%-5s\t,p-data.num);printf(%-10s\t,p-data.name);printf(%-10s\t,p-data.phone);printf(%-10s\t,p-data.call);printf(%-15s\t\n,p-data.e_mail);p=p-next;}}Dnode*Change(Dnode*head,chark[]){Dnode*q;q=research(head);if(q==0){printf(没有要修改的信息!\n);return0;}else{inti;k[15]='\0';printf(编号姓名办公室电话手机号码邮箱\n);printf(%-5s\t%-10s\t%-10s\t%-10s\t%-15s\t\n,q-data.num,q-data.name,q-data.phone,q-data.call,q-data.e_mail);printf(1--修改姓名\n);printf(2--修改办公室电话号码\n);printf(3--修改手机号码\n);printf(4--修改电子邮箱\n);printf(\n);printf(请选择按键(1-4):);scanf(%d,&i);printf(\n);switch(i){case1:printf(修改姓名----\n);strcpy(q-data.name,k);printf(请输入要改的姓名:\n);getchar();gets(k);printf(\n);strcpy(q-data.name,k);break;case2:printf(修改办公室电话号码----\n);strcpy(