个人通讯录管理系统c文件在最后 个人通讯录管理系统C语言编写 获得优秀 老师表扬的 绝不雷同.doc
重庆科技学院 C语言程序设计课程设计报告 学 院:_电气与信息工程学院_ 专业班级:学生姓名: 学 号:设计地点(单位)_ I515 _ _设计题目:_个人通讯录管理系统 _完成日期: 2012 年12月28日 指导教师评语: _ _ _ 成绩(五级记分制):_ _指导教师(签字): 重庆科技学院C语言程序设计课程设计报告 摘要 本次课程设计的题目为个人通讯录管理系统,要求将程序中所输入的联系人姓名、电话和地址信息这三个数据以文本方式保存在磁盘中,并且能够对所储存的联系人信息进行显示、查询、修改、删除等功能。我编写的程序从整体上看可分为两个部分,一部分为文件的建立、读取和保存,另一部分为通讯录功能的实现。在文件部分,我通过readfile()函数和writefile()函数从而实现了对磁盘上数据的进行写和读,通过刚开始的界面提示可以知道文件是否建立,以免丢失数据,我还为用户设计了保存退出和不保存退出两大功能供用户做选择。在模块功能实现部分,通过scanf从键盘上输入的数字放到switch() case 循环中来实现调用zengjia()、shanchu()、xiugai()、chazhao()等十五个函数来实现“添加”、“查询和显示”、“修改”、“删除”等不同功能。 关键字:文件、数组、循环、函数1重庆科技学院C语言程序设计课程设计报告 重庆科技学院课程设计任务书2012年12月10日2重庆科技学院C语言程序设计课程设计报告 目录 第一章 软件需求分析说明书 . 11.1设计软件的目的分析 . 11.2软件的界面要求 . 11.3详细的功能分析 . 11.3.1创建文件 . 11.3.2 添加联系人 . 11.3.3显示和查询联系人 . 11.3.4 删除联系人 . 11.3.5 修改联系人 . 11.3.6 保存退出与不保存退出 . 11.4设计要求分析 . 21.5软件的数据结构分析 . 21.5.1 软件的函数 . 21.5.2 文件的调用和保存 . 2第二章 系统分析与设计 . 32.1 软件界面设计 . 32.2 软件的数据(结构)设计 . 32.2.1 软件的文件功能 . 32.2.2 文件 软件的实现 . 83.1 函数声明 . 83.2 zhucaidan()主菜单函数 . 83.3 main()主函数 . 93.4 readfile()读取文件函数 . 93.5 writefile()联系人写入文件函数 . 103.6 zengjia()增加联系人函数 . 113.7 shanchu()删除函数主界面 . 113.8 xianshi()显示和查询函数 . 123.9 xianshi()显示所有人函数 . 133.10 chazhao_xingming()姓名查询函数 . 133.11 chazhao_dianhua()按号码查询函数 . 143.12 shanchu_dange()删除单个联系人函数 . 153.13 shanchu_quanbu()删除所有联系人函数 . 153.14 shanchu_xingming()按姓名删除联系人函数 . 163.15 shanchu_dianhua()按电话号码删除函数 . 173.16 xiugai()修改函数主体界面 . 18I重庆科技学院C语言程序设计课程设计报告3.17 xiugai_xingming()按姓名修改 . 193.18 xiugai_dianhua()按号码修改联系人函数 . 20第四章 软件测试 . 224.1 文件导入界面 . 224.2 软件的主界面 . 224.3 添加联系人模块 . 224.4 显示和查找联系人界面 . 234.4.1主界面 . 234.4.2无联系人的显示界面 . 234.4.3有联系人的显示界面 . 234.4.4按姓名查找 . 234.4.5 按电话号码查找 . 244.5 删除联系人模块 . 244.5.1删除联系人主界面 . 244.5.2没有对应联系人的删除界面 . 244.5.3按姓名删除 . 254.5.4按电话号码删除 . 254.6 修改联系人模块 . 254.6.1修改联系人主菜单 . 254.6.2 按姓名修改 . 254.6.3按电话修改 . 254.7 退出 . 264.7.1 保存退出 . 264.7.2 不保存退出 . 26第五章 总结与体会 . 27致谢 . 28参考文献 . 29II重庆科技学院C语言程序设计课程设计报告 第一章 软件需求分析说明书 1.1设计软件的目的分析本软件要求用C语言建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信录进行显示、查找、添加、修改及删除。1.2软件的界面要求本软件要求软件的界面简洁、美观,让人一目了然,使用起来方便。于是我设计的软件首先提示您是否有通讯录文件存在,如没有文件,则自动建立一个,如有文件存在,则提示导入成功,让人直观明白的了解文件的情况。按任意键便可以进入主菜单,在主菜单上显示出软件的功能,通过输入数字0到5来进行选择便可以实现你所需要的功能,每个模块进入模块内部实现软件的具体功能,实现您所需要的功能。1.3详细的功能分析该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。下面六个模块都是利用C语言文件,向文件中添加数据、修改数据、查询数据、删除数据和保存数据。1.3.1创建文件用fopen()建立一个文1.3.2 添加联系人通过键盘输入通讯录人员的姓名、电话号码、地址信息便可实现将信息添加到通讯录文件内,添加完毕后,系统会自动询问你是否继续添加,如你想继续添加,再通过键盘输入通讯录人员的姓名、电话号码、地址信息即可实现继续添加。1.3.3显示和查询联系人通过前面第一个模块打得录入我们便可以执行第二个模块,通过第二个模块我们可以进行对联系人进行显示和查找。我通过调用showall()函数来进行显示所有的联系人,showall()函数可以实现逐个显示联系人。对于查找联系人我则采用了search()函数来进行查找联系人,我提供了两种查找方法:按照姓名查找;按照电话号码查找。1.3.4 删除联系人我调用deletecd()函数来实现删除功能,同样我也提供给了两种删除方法:全部删除;单个删除。其中全部删除会提示是否全部删除,以免误删。1.3.5 修改联系人我调用modify()函数来实现修改功能,我同样提供了两种修改方法:对姓名进行修改;对电话号码进行修改。修改完毕后会提示是否据需修改。1.3.6 保存退出与不保存退出你还在为误添加、误修改、误删除后悔吗?还想回到以前的数据吗?这个担忧在我的程序中您就不必担心了,我为程序提供了两种退出方式:保存退出;不保存退出。完全解决您的后顾之忧。1重庆科技学院C语言程序设计课程设计报告1.4设计要求分析进一步掌握利用C语言进行程序设计的能力;进一步理解和运用结构化程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用流程图表示算法。根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。1.5软件的数据结构分析1.5.1 软件的函数本软件采用了不同的函数来进行定义不同模块的功能,通过调用不同的函数,可以实现不同的功能。软件中采用了五个主体函数来实现添加联系人,修改联系人,查找联系人,显示联系人,删除联系人的功能。1.5.2 文件的调用和保存本软件通过文本方式对用户所录入的信息进行保存。通过保存下来的文本,您可以在电脑磁盘中找到您存入文件的位置,打开后便可以找到您所录入的通讯录信息。2重庆科技学院C语言程序设计课程设计报告 第二章 系统分析与设计 2.1 软件界面设计画出软件全部输入、输出数据的界面,并对每一个界面进行详细的操作说明2.2 软件的数据(结构)设计软件调用不同的函数来实现不同的功能,通过反复调用函数来实现反复输入。代码中通过scanf从键盘上输入不同的数字选项,然后通过swtich case()来实现对不同函数的调用。2.2.1 软件的文件功能软件采用了文2.2.2 文件内部的数据格式我采用了readfile()函数来读取文件,使用if(fp=fopen("c:通讯录.txt","r")=NULL)以只读方式打开判定文件是否为空,如果不空,则使用fseek(fp,0,2); 文件位置指针移动到文件末尾以来进行写入数据。使用writefile()将联系人写入文件,用if (fp=fopen("c:通讯录.txt","w")=NULL)以只写的方式来对判定文件是否为空,如果不为空,则从键盘上录入所需要录入的信息存到相应的文件中。最后通过fclose(fp)来关闭文件,回到主界面上等待用户输入新的操作。2.3 软件的模块图软件的模块图很直观的反映出软件能够实现的功能,由下面的模块图可以很直观的看出我设计的通讯录软件能够方便的实现添加联系人、显示联系人、删除联系人、修改联系人功能,另外,我设计的软件还实现了保存退出和不保存退出功能,这个功能很独特。在增加联系人部分,我用了三个函数调用来分别实现录入联系人姓名、号码、地址。在显示和查询联系人部分,我也有三个模块: 逐个显示联系人,按姓名查询,按号码查询。在删除联系人部分,我设计了三个界面,可以实现全部删除,单个删除,回到主菜单。在修改联系人模块,我也设计了三个界面,按姓名修改,按号码修改,回到主菜单。最后我设计了保存退出和不保存退出,针对那些修改后却又后悔修改的用户需要。3重庆科技学院C语言程序设计课程设计报告图2.1软件的模块图2.4 软件的流程图由于程序流程图较为复杂,我采用了分块画出程序流程图2.4.1 添加联系人程序流程图由添加联系人的程序流程图可以看出,在添加联系人板块上,我设计了三种信息,输入姓名,输入电话和输入地址,输入完成后会提示是否继续输入,如果输入y后则可以继续输入,输入n后返回主菜单。图2.2添加联系人程序流程图4 重庆科技学院C语言程序设计课程设计报告2.4.2 显示和查找联系人程序流程图在主菜单上输入2后便可以进入显示和查询联系人的主界面,我为您提供了三个选项,1.显示全部 2.按姓名查询 3.按电话查询。输入对应的数字便可以实现对应的功能,同理,系统会在您查询完毕后询问您是否继续查询,操作同上。 图2.3显示和查找联系人程序流程图 2.4.3 删除联系人流程图在删除联系人流程图上,我设计了全部删除和单个删除功能,单个删除设计了按照姓名删除和按电话号码删除两种选择,在删除时,系统都会询问您是否删除,以免误删。5重庆科技学院C语言程序设计课程设计报告图2.4删除联系人流程图2.4.4 修改联系人流程图修改联系人界面上我设计了按姓名修改和按号码修改两种方式,当选择时系统会提示您是否修改,若不修改则返回主界面,若选择是,则系统会该处三个修改项目:修改姓名,修改电话,修改地址,修改完毕后系统会提示您是否继续修改,如不修改,则又返回主界面等待输入。6重庆科技学院C语言程序设计课程设计报告图2.5修改联系人流程图 7重庆科技学院C语言程序设计课程设计报告 第三章 软件的实现 3.1 函数声明void zhucaidan(); /*主菜单函数*/void zengjia(); /*增加联系人函数*/void readfile(); /*文件中读入函数*/void writefile(); /*文件中写入函数*/void xiugai(); /*修改联系人函数*/void xiugai_xingming(); /*姓名修改*/void xiugai_dianhua(); /*电话号码修改*/void chazhao(); /*查找联系人函数*/void chazhao_xingming(); /*按姓名查找*/void chazhao_dianhua(); /*按号码查找*/void shanchu(); /*删除联系人函数*/void shanchu_quanbu(); /*全部删除*/void shanchu_dange(); /*单个删除*/void xianshi(); /*号码显示*/3.2 zhucaidan()主菜单函数其源代码如下:void zhucaidan()char c;system("cls");printf("ntt|- 欢迎您使用通讯录管理系统1.0beat版 -|");printf("ntt| 1-添加联系人 2-查询和显示联系人 |"); printf("ntt| 3-删除联系人 4-修改联系人 |"); printf("ntt| 5-保存退出 0-不保存退出 |"); printf("ntt|-|");printf("ntt请选择您所所要的服务:");c=getch();switch (c) /*对于上边的选择项目*/case 1:zengjia();break;case 2:chazhao();break;case 3:shanchu();break;case 4:xiugai();break;case 5:writefile();break;case 0:exit(0);default:zhucaidan(); /*如果没有则返回主菜单等待输入*/较难语句分析: system("cls");清除输入在屏幕上的数据;8重庆科技学院C语言程序设计课程设计报告 c=getch(); 将键盘上输入的数据赋予c; switch (c) case : 实现对主菜单上的选项的控制;3.3 main()主函数main()函数的源代码见下:void main() /*主函数main*/ readfile(); /*读入文件*/while(1) /* 循环(永远进行)*/zhucaiidan(); /*调用主菜单函数*/main()函数功能分析:main()函数通过调用readfile()函数和循环menu()函数实现对入文件和界面进行控制。3.4 readfile()读取文件函数其源代码如下:void readfile()if(fp=fopen("c:通讯录.txt","r")=NULL) /*以只读方式打开判定文件是否为空*/printf("nttt 通讯录文件不存在"); /*判断结论*/if (fp=fopen("同通讯录.txt","w")=NULL) /*只写方式判断*/printf("ntt建立失败"); /*为空结论*/exit(0); /*退出*/else /*不为空则执行else*/printf("nt-欢迎使用通讯录管理系统-");printf("nt 通讯录文件已建立 "); printf("nt 按任意键进入主菜单 "); printf("nt-");getch();return ;exit(0);fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/rewind(fp); /*文件位置指针移动到文件开始位置*/for (n=0;!feof(fp) && fread(&txln,sizeof(struct tongxunlu),1,fp);n+); printf("nt-欢迎使用通讯录管理系统1.0beat版-");printf("nt 文件导入成功 ");9重庆科技学院C语言程序设计课程设计报告printf("nt 按任意键返回主菜单 "); printf("nt-");getch();return;printf("nt-欢迎使用通讯录管理系统1.0beat版-");printf("nt 文件导入成功 "); printf("nt 通讯录文件中无任何纪录 "); printf("nt 按任意键返回主菜单 "); printf("nt-");getch();return;较难语句分析: if(fp=fopen("c:通讯录.txt","r")=NULL) 以只读方式打开判定文件是否为空; fseek(fp,0,2); 文件位置指针移动到文件末尾; ftell(fp): 返回当前文件位置,也就是说返回FILE指针当前位置; rewind(fp); 文件位置指针移动到文件开始位置; feof(fp) 检测流上的文件结束符; fread(&txln,sizeof(struct tongxunlu),1,fp);n+) 从fp指向的文件中向txl n中读入一个(struct tongxunlu)类型的值并输出后面的判断文件是否存在,如果不存在,则显示通讯录文件不存在,如果文件为空,则显示建立失败;若建立成功,则显示通讯录文件已建立,然后利用fseek(fp,0,2); 将文件位置指针移动到文件末尾等待输入。3.5 writefile()联系人写入文件函数函数源程序见下:void writefile() /*联系人写入文件*/int i;if (fp=fopen("c:通讯录.txt","w")=NULL)printf("ntt文件打开失败");for (i=0;i<n;i+)if (fwrite(&txli,sizeof(struct tongxunlu),1,fp)!=1)printf("ntt写入文件错误!n");fclose(fp); /*关闭文件*/printf("nt-"); /*输出提示信息*/printf("ntt通讯录文件已保存");10重庆科技学院C语言程序设计课程设计报告printf("ntt谢谢使用,欢迎再次使用!n");printf("如果对本软件有疑问,请到我们官网()提出您的问题,我们将为您解答.n");printf("我们的软件有不足之处,欢迎到官网()反映,我们将努力改正!");printf("ntt按任意键退出程序ntt"); /*输出完毕*/exit(0);printf("nt-");较难语句分析: fp=fopen("c:通讯录.txt","w") 以只写的方式打开c:txl.txt 文件赋予fp; if (fwrite(&txli,sizeof(struct tongxunlu),1,fp)!=1) 从fp指向的文件中向txln中写入一个(struct tongxunlu)类型的值并输出后面的zengjia()增加联系人函数其源程序如下:void zengjia()printf("ntt- 请输入联系人信息 -n");printf("ntt输入联系人姓名:");scanf("%s",txln.xingming); /*键盘输入*/printf("ntt输入联系人电话号码:");scanf("%s",txln.dianhua);printf("ntt输入联系人地址:");scanf("%s",txln.dizhi);n+; /*统计个数*/printf("ntt是否继续添加联系人?(Y/N):"); /*是否继续输入联系人.*/if (getch()=y)zengjia();return;功能分析:调用zengjia()函数后,就可以通过txln. xingming,txln.dianhua ,txln.dizhi 数组从键盘上输入联系人的姓名,电话,地址,输入完毕后,系统会提示是否继续输入,输入“y”后,则再次调用zengjia(); 函数,如此循环,直到不输入联系人为止。3.7 shanchu()删除函数主界面原函数代码:void shanchu()11重庆科技学院C语言程序设计课程设计报告char c;if(n=0) /*如果通讯录中没有一个记录输出以下部分*/printf("ntt对不起,文件中无任何纪录");printf("ntt按任意键返回主菜单");getch();return;system("cls"); /*清屏*/printf("ntt- 删除菜单 -");printf("ntt| 1-删除所有 2-删除单个 |"); printf("ntt| 3-返回主菜单 |"); printf("ntt|-");printf("ntt请选择您所所要的服务:");c=getch(); /*输入的赋予choice*/switch (c)case 1:shanchu_quanbu();break;case 2:shanchu_dange();break;case 3:zhucaidan();break;default:zhucaidan();break;函数功能分析:通过界面上的数字选项,调用shanchu_quanbu()、shanchu_dange();和zhucaidan()函数来实现不同的删除功能。3.8 xianshi()显示和查询函数函数源程序:void chazhao()char c;system("cls");printf("ntt- 显示和查询联系人 -");printf("ntt| 1-逐个显示所有 2-按姓名查询 |"); printf("ntt| 3-按电话查询 4-返回主菜单 |"); printf("ntt|-");printf("ntt请选择您所所要的服务:");c=ge