资源预览内容
第1页 / 共37页
第2页 / 共37页
第3页 / 共37页
第4页 / 共37页
第5页 / 共37页
第6页 / 共37页
第7页 / 共37页
第8页 / 共37页
第9页 / 共37页
第10页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
。 数据结构课程设计 通讯录的制作 班级: 信计081 组员: 王 琪 0809290106杨赫桐 0809290108隋欣桐0809290103 一、摘要:运用数据结构中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。二、问题的重述: 制作通讯录,要求每条信息至包含姓名(name )城市(city)电话(tel)QQ号(qq),完成如下功能:输入信息;显示信息; 查找以姓名作为关键字;删除信息;修改信息;存盘(将数据保存在文件中,此功能选做);清除信息; 三、问题的分析:结合数据结构和C语言的知识运用链表和文件。本系统应完成一下几方面的功能:输入信息(enter(): 调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取;显示信息(display():用以显示输入的数据;查找(search()):以姓名作为关键字查找要找的信息;删除信息(delete_name ():用以删除选定的输入信息(姓名作为关键字);修改信息(change(): 用以修改选定的输入信息(姓名作为关键字);打开通讯录(load():存储从文件中读取的字符;添加信息(inster():用尾插法以添加信息;保存(save()):调用此函数将内存中的数据保存至磁盘中;清屏(system(cls)):执行cls命令。四、程序的建立与运行结果检验1、定义主函数:void main() list *head=NULL;/头指针初始化FILE *fp;/定义文件指针int m;/功能代号吗do printf(n #请选择#n); printf( # 1、信息输入 );printf( 2、显示信息 #n);printf( # 3、查找姓名 );printf( 4、删除信息 #n);printf( # 5、修改信息 );printf( 6、打开通讯录 #n);printf( # 7、添加信息 );printf( 8、 保存 #n);printf( # 9、清屏 );printf( 0、退出 #);printf(n #n);printf( 提示:信息输入和添加信息时最好存入字符,否则,在打开存储文件时,可能会出现乱码!n);printf(=输入要执行的功能代号:_);scanf(%d,&m);switch(m)case 1:enter(head);break;case 2:display(head); break;case 3:search(head); break;case 4:delete_name(head);break;case 5:change(head);break;case 6:load(head);break; case 7:insert(head);break;case 8:save(head,fp);printf(=保存成功=n);break;case 9:system(cls);break;while(m!=0);2、信息输入:void enter(list *&head)list *p0,*p1,*p2;/定义指针 int m;/作为判断是否继续新建的条件FILE *fp;p0=(list *)malloc(LEN);/开辟一个新单元p0-next=NULL;/结点指针域为空 head=p0;/第一个结点,即为头结点printf(请输入信息建立通讯录:n);getchar();scanfdata(p0);/输入数据p2=p0;printf(是否继续按1输入,按0结束_);scanf(%d,&m);while(m)getchar();p1=(list *)malloc(LEN);/开辟一个新单元p1-next=NULL; p2-next=p1;scanfdata(p1);/输入数据p2=p1;head-n = head-n+1;/表长printf(是否继续按1输入,按0结束_);scanf(%d,&m);if(m=0)save(head,fp);/把信息存到相应文件3、显示信息void display(list *head)list *p; /定义移动指针int i;char *menu=姓名,城市,电话, QQ;p=head;printf(-n);for(i=0;iname);printf(%-20s,p-city);printf(%-20s,p-phone);printf(%-20s,p-qq);printf(n);p=p-next; elseprintf(不好意思,列表为空n);printf(-n);4、查找信息:void search(list *head ) list *p1,*p2;/定义临时指针变量char check_name20; /定义存储查找人的姓名printf(请输入要查找的姓名n);scanf(%s,check_name); /输入要查找的人的姓名if(head=NULL)printf(n不好意思,列表为空n);p1=head;while(p1!=NULL&strcmp(check_name,p1-name)!=0) /p1指向的不是所要找的结点,后面还有 p2=p1;p1=p1-next; /p1后移一个结点 if(p1!=NULL&strcmp(check_name,p1-name)=0) /找到了用strcmp比较两个字符串printf( 姓名: %s ,p1-name);printf( 城市: %s ,p1-city);printf( 电话: %s ,p1-phone);printf( QQ : %s ,p1-qq);printf(n);/输出结点数据else printf(n没有%s的通讯信息n,check_name);/否则提示没有此人的通讯信息5、删除信息:void del(list *&head) list *p1,*p2;/定义临时指针char delname20;/保存要删除人的姓名FILE *fp;/文件指针int i;printf(请输入要删除人的姓名:);scanf(%s,delname);/输入要删除人的姓名if(head=NULL)/如果头指针为空,则输出提示语:通讯录为空printf(n =通讯录为空=n);p1=head; /通讯录不为空时,把头指针赋值给p1while(p1&(i=strcmp(delname,p1-name) /p1指向的不是所要找的结点,且p1不是最后一个结点 p2=p1; /保存前驱结点地址p1=p1-next; /p1后移一个结点if(i=0) /找到了用strcmp比较两个字符串 printf(删除人为:%sn,p1-name);if(p1=head) head=p1-next; /若p1指向的是首结点,指第二个结点的地址给P1else p2-next=p1-next;/修改指针域head-n=head-n-1; /书P302printf(刚刚删除的是:%sn,delname); /提示刚才删除的人的姓名free(p1); /把此人的信息所占内存释放datawrite(head,fp); /重新写入文件保存else if(p1=NULL)printf(n姓名为%s的通讯信息没有被找到!n,delname);/否则没有找到此人6、修改信息:void change(list *head ) list *p1,*p2; /定义临时指针变量char change_name20; /定义存储修改人的姓名数组FILE *fp; /文件指针printf(请输入要修改的姓名n); scanf(%s,&change_name); /输入要修改的人的姓名getchar();if(head=NULL)printf(n不好意思,列表为空n);p1=head;while(p1!=NULL &strcmp(chan
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号