宁夏师范学院数学与计算机科学学院《数据结构实验》实验报告实验序号:14实验项目名称:期末大作业学号2016210556姓名韩雪萍专业班级16级计本一班实验地点文科楼222指导教师康凯时间2017.12.28一、实验目的二、实验要求三、实验设备(环境)及要求1.环境要求:硬件:PC(PII以上,128M以上内存);软件:WindowsXP及以上操作系统、VisualC++6.0版本。四、实验内容、步骤与结果期末大作业:单位员工通讯录管理系统(线性表应用)[问题描述与要求]为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。[实现提示]可以采用单链表的存储结构,如可定义如下的存储结构:typedefstruct{/*员工通讯信息的结构类型定义*/charnum[5];/*员工编号*/charname[10];/*员工姓名*/charphone[15];/*办公室电话号码*/charcall[15];/*手机号码*/}DataType;/*通讯录单链表的结点类型*/typedefstructnode{DataTypedata;/*结点的数据域*/structnode*next;/*结点的指针域*/}ListNode,*LinkList;五、程序实现(写出每个操作的算法)#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(q-data.phone,k);printf(请输入要修改的号码:\n);getchar();gets(k);printf(\n);strcpy(q-data.phone,k);break;case3:printf(修改电话号码----\n);strcpy(q-data.call,k);printf(请输入要修改的号码:\n);getchar();gets(k);printf(\n);strcpy(q-data.call,k);break;case4:printf(修改电子邮箱----\n);strcpy(q-data.e_mail,k);printf(请输入要修改的电子邮箱:\n);getchar();gets(k);printf(\n);strcpy(q-data.e_mail,k);break;default:printf(输入错误!\n);break;}}returnq;}voidSaveandfree(){linklist*p=NULL;FILE*fp;char*ziliao=ziliao.txt;if(head==NULL){printf(\n记录为空!\n);return;}elsep=head-next;if((fp=fopen(ziliao,wb+))==NULL){printf(\n打不开文件!\n);return;}while(p!=NULL){fwrite(p,sizeof(linklist),1,fp);p=p-next;}printf(保存完毕!\n);fclose(fp);for(head-next!=NULL;;){p=head-next;head-next=head-next-next;free(p);}free(head);}voidOpen(){FILE*fp;linklist*p1=NULL,*p2=NULL,*temp