您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 通讯录管理系统实验报告(C语言)
通讯录管理系统实验报告学院:物理与电子工程学院专业:电子信息科学与技术学号:1319200011姓名:朱大神日期:2014年6月12日一.题目要求•用C设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。•功能要求•(1)查看功能:选择此功能时,列出下列三类选择。A办公类,B个人类,C商务类,当选中某类时,显示出此类中的所有数据。•(2)增加功能:能录入新数据,一个结点包括:姓名、电话号码、分类(可选项有:A办公类,B个人类,C商务类)、电子邮件。例如:杨春13589664454商务类chuny@126.com。•当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;录入的新数据能按递增的顺序自动进行条目编号。•(3)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。•(4)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。二.程序功能主要包含以下功能:1.建立功能——建立通讯录2.保存功能——保存通讯录3.读取功能——读取文件4.查找功能——查找联系人5.删除功能——删除联系人6.添加功能——添加联系人7.修改功能——修改联系人8.退出功能——退出系统三.系统功能模块建立功能:在主菜单中输入1,进入建立功能。用户输入联系人姓名,电话,类别,邮箱,建立一个新的通讯录。在输入姓名处输入“*”结束添加。保存功能:在主菜单中输入2,进入保存功能。将已创建的通讯录保存到文件中。读取功能:在主菜单中输入3,进入读取功能。读取已经存在的通讯录文件。查找功能:在主菜单中输入4,进入查找功能。创建通讯录或读取文件之后才能进行查找。查找方式有三种:1.按姓名查找2.按类型查找3.查看所有人。删除功能:在主菜单中输入5,进入删除功能。创建通讯录或读取文件之后才能进行删除。用户输入待删除联系人的姓名,系统显示待删除联系人的信息,并提示是否删除该联系人。添加功能:在主菜单中输入6,进入添加功能。创建通讯录或读取文件之后才能按提示添加联系人。修改功能:在主菜单中输入7,进入修改功能。创建通讯录或读取文件之后才能进行修该。通过姓名查找到联系人进行修改。退出功能:在主菜单中输入8,退出通讯录管理系统。主菜单建立通讯录保存通讯录读取文件查找联系人删除联系人添加联系人修改联系人退出系统四.函数流程图1.建立通讯录(单链表)联系人是否重复输入联系人姓名保存文件NY开始姓名是否为“*”YN输入联系人类别输入联系人电话输入联系人邮箱N是否保存通讯录Y结束2.保存通讯录3.读取文件开始文件是否为空保存关闭文件NY结束读取开始文件是否为空NY关闭文件结束4.查找联系人开始选择查询方式1.姓名2.类别3.显示所有123输入姓名判断名字是否存在YN输出联系人信息输出所有联系人信息输入类别判断类别是否存在输出联系人信息NY是否继续查找NY结束5.删除联系人开始输入联系人姓名Y判断名字是否存在是否删除联系人YNN是否保存YN保存结束6.添加联系人NY开始输入联系人姓名判断名字是否存在Y是否保存N保存结束输入联系人信息7.修改联系人开始输入联系人姓名判断名字是否存在Y是否保存N保存结束修改联系人信息YN五.实验结果开始界面:建立通讯录:保存通讯录:读取文件:查找联系人:1.按姓名查找2.按类别查找3.显示所有删除联系人:添加联系人:修改联系人:退出系统:六.体会终于写到体会这部分了,这个程序设计花了我不少时间和精力。从一开始拿到题目,完全没有头绪,到后来慢慢分析题目,选数据结构,查资料,请教前辈,到最后终于用将近一个星期写出了这个通讯录管理系统,满满的都是泪啊。这次程序设计让我对单链表有了新的认识。之前学习C语言的时候觉得单链表没什么用,经过这次程序设计,我发现单链表的功能是十分强大的,主要看你会不会用而已。尽管单链表相对简单,但是第一学期学习链表的时候我并没有学好,这导致我在编程的过程中指针的使用出了很多问题,后来通过重温书本,请教同学,终于搞定了这部分。这也让我更加掌握链表这块知识。还有文件读取与保存这块,第一学期C语言课并没有讲,我当时觉得它很难也懒得去自学了,后来到了这个程序设计,我不得不去学习这部分的知识。但让我意想不到的是,文件这部分内容比我想象的要简单得多,文件应该是这个通讯录管理系统中最简单的两个函数了。所以,有些事情你不去探索,不知道难易,有些事情你不去摸索,不知道它多有趣。最后,尽管编程过程痛苦,但是让我巩固了以前的知识,提高了动手能力,而且程序写出来让我非常有成就感,所以还是很感谢有这门课程的。七.参考文献1.C语言程序设计(第四版)2.数据结构(C语言版)3.百度知道八.源程序#includestdio.h#includestdlib.h#includestring.h#includeconio.h#defineTELstructtelephone_liststructtelephone_list{charname[100];//姓名chartel[100];//电话chartype[100];//类型charmail[100];//邮箱TEL*next;};inttotal=0;//统计联系人voidSave(TEL*head);//函数声明TEL*Create(){total=0;intk=0;//判断是否成功添加第一个联系人inti=0;//判断联系人是否重复TEL*head,*p1,*p2,*p3;charsaveflag;head=p1=p2=NULL;while(1)//添加联系人{p1=(TEL*)malloc(sizeof(TEL));//分配动态存储空间printf(请输入姓名,添加完成时在姓名后输入*,结束添加\n);scanf(%s,p1-name);if(strcmp(p1-name,*)==0)//结束添加联系人{if(total==0){printf(添加了0个联系人\n);free(p1);//释放p1空间return(head);}else{break;//跳出while(1)}}printf(请输入电话号码:\n);scanf(%s,p1-tel);printf(请输入类别:(办公类/个人类/商务类)\n);scanf(%s,p1-type);printf(请输入邮箱:\n);scanf(%s,p1-mail);if(k0)//添加第一个联系人之后{p3=head;//遍历链表while(p3!=NULL)//判断联系人是否重复{if((strcmp(p1-name,p3-name)==0)&&(strcmp(p1-tel,p3-tel)==0))//重复{free(p1);printf(该联系人已存在\n);i=1;printf(按任意键返回主菜单\n);getch();//任意键break;}if((strcmp(p1-name,p3-name))&&(strcmp(p1-tel,p3-tel))&&(p3==p2))//无重复{i=0;break;//跳出if(k0)}p3=p3-next;//下一个结点}if(i==1)//联系人重复{break;//跳出while(p3!=NULL)}}if(head==NULL)//添加第一个联系人head为空{head=p1;p2=p1;}else{p2-next=p1;p2=p1;}total++;//人数+1k++;}p2-next=NULL;//最后一个结点的指针域为空if(i==0){free(p1);printf(\n新建通讯录成功,共有%d个联系人,是否保存?(Y/N)\n,total);getchar();scanf(%c,&saveflag);if(saveflag=='y'||saveflag=='Y')Save(head);//保存elseprintf(\联系人未保存\n);}returnhead;//返回头指针}voidSave(TEL*head){FILE*fp;//文件指针TEL*f;if((fp=fopen(telephone.txt,w))==NULL)//打开输出文件{printf(文件打开失败\n);getch();exit(0);//退出}f=head;while(f!=NULL){fwrite(f,sizeof(TEL),1,fp);//从f所指向的文件中读入一个大小为sizeof(TEL)的数据存到fp中f=f-next;//下一个结点}fclose(fp);//关闭文件printf(文件保存成功,按任意键返回主菜单\n);getch();}TEL*Read(){FILE*fp;//文件指针TEL*f1,*f2,*head=NULL;charch;//存放文件的第一个字符if((fp=fopen(telephone.txt,r))==NULL)//打开输入文件{printf(该文件不存在,按任意键返回主菜单\n);getch();exit(0);}ch=fgetc(fp);//从fp所指文件读入一个字符,读取成功带回所读字符,失败则返回文件结束标志EOF(即-1)if(ch==EOF)//文件为空{printf(文件为空,请建立通讯录,按任意键返回主菜单\n);getch();returnhead;//返回头指针}else{rewind(fp);//把文件位置指针移至文件开头}f1=(TEL*)malloc(sizeof(TEL));head=f1;while(!feof(fp))//文件结束,feof返回非零值,否则返回0{if(fread(f1,sizeof(TEL),1,fp)!=1)//fread函数执行成功返回1break;//跳出while(!feof(fp))total++;//人数+1f1-next=(TEL*)malloc(sizeof(TEL));//为下一个结点申请存储空间f2=f1;f1=f1-next;}f2-next=NULL;//最后一个结点的指针域为空free(f1);fclose(fp);//关闭文件printf(文件读取成功,按任意键返回主菜单\n);getch();returnhead;//返回头指针}voidSearch(TEL*head){intchoice;intcount=1;//联系人序号TEL*p;intflag;intsearchflag=1;chargo;charname[100];chartype[100];printf(查询方式:(请输入序号)\n);printf(1.姓名\n);printf(2.类别\n);printf(3.显示所有\n);scanf(%d,&choice);getchar();switch(choice)//选择查询方式{case1:while(searchflag){flag=0;printf(\n请输入待查找联系人的姓名:\n);scanf(%s,&name);getchar();p=head;while(p!=NULL){if(strcmp(p-name,name)==0){printf(%d.,count);count++;//编号printf(姓名:%s\t电话号码:%s\t类型:%s\t邮箱:%s\n,p-name,p-tel,p-type,p-mail);flag=1;//找到该联系人}p=p-next;}if(flag==0)//没有找到该联系人{printf(\n该联系人不存在\n);}printf(\n查找完毕,是否继续查询?(Y/N)\n);scanf(%c,&go);getchar();if(go=='y'||go=='Y'){searchflag=1;//继续查找}else{searchflag=0;//停止查找}}break;case2://与case1相似while(searchflag){flag=0;printf(\n请输入类别:\n);scanf(%s,type);getcha
本文标题:通讯录管理系统实验报告(C语言)
链接地址:https://www.777doc.com/doc-4831133 .html