1、c语言程序设计通讯录管理系统312020年4月19日文档仅供参考1.需求分析根据题目要求,通讯录保存在文件中,要提供文件的输入和输出功能;还有就是要提供通讯录添加(个人信息包括姓名、学号、年龄、住址、电子邮件等)、删除、显示、修改等基本功能。2.概要设计系统总体设计是信息的输入、信息的编辑和退出。系统功能模块如下:1. 添加通讯录;2. 输出通讯录;3. 查找通讯录;4. 修改通讯录;5. 删除通讯录;6. 退出通讯录;3.详细设计1.通讯录里无信息,因此要添加信息。用键盘逐个输入通讯录里联系人的信息。YN开始新建联系人是否继续添加联系人?结束2.输出通讯录用于让使用者观看通讯录里所有的信息。
2、开始输出所有联系人信息结束3.查找通讯录是让使用者能够经过电话或姓名来查找通讯录里的联系人。开始按姓名查找按号码查找结束4.修改通讯录是让使用者经过姓名查找到通讯录里的联系人,然后 其作出修改。开始输入姓名查找联系人选择要修改的信息是否继续修改其它联系人结束YN5.删除通讯录是用来按照联系人的姓名或电话来单独删除通讯录中一些不想要的联系人。还能够集体删除通讯录中的联系人。开始删除单人按姓名删除按电话删除删除集体结束6.退出通讯录系统。4.主要源程序代码#include #include #include #include struct record char name20;char age20
3、; char phone20; char adress40; char number30;char e_mail20; contact500; int NO=0;FILE *fp; void mainmenu(); void newrecord();void browsemenu();void searchmenu(); void searchname(); void searchphone();void modifymenu(); void deletemenu();void deleteall(); void deletesingle();void deletename();void de
4、letephone();int loadfile(); void savefile(); void main() printf(ntt :)欢迎使用通讯录管理系统beta);printf(ntt文件导入中请稍后nnnnn); system(cls);loadfile();while (1) mainmenu(); void mainmenu() char choice; system(cls); printf(ntt* 主菜单 *); printf(ntt* 1-新建菜单 *); printf(ntt* 2-浏览菜单 *);printf(ntt* 3-查找菜单 *); printf(ntt*
5、4-修改菜单 *);printf(ntt* 5-删除菜单 *); printf(ntt* 6-退 出 *); printf(ntt*); printf(ntt请选择:); choice=getch(); switch (choice) case 1:newrecord();break; case 2:browsemenu();break; case 3:searchmenu();break; case 4:modifymenu();break; case 5:deletemenu();break;case 6:exit(0);default:mainmenu(); void newrecord
6、() printf(ntt* 请输入联系人信息 *n); printf(ntt输入姓名:); scanf(%s,&contactNO.name);printf(ntt输入年龄:); scanf(%s,&contactNO.age); printf(ntt输入电话号码:); scanf(%s,&contactNO.phone);printf(ntt输入家庭住址:); scanf(%s,&contactNO.adress);printf(ntt输入学号:); scanf(%s,&contactNO.number);printf(ntt输入电子邮件:); scanf(%s,&contactNO.e_
7、mail);NO+;savefile(); printf(ntt是否继续添加?(y/n):); if (getch()=y) newrecord();return; void browsemenu() int i; system(cls); if(NO!=0) printf(ntt* 以下为通讯录所有信息*); for (i=0;iNO;i+) printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone); printf(ntt家庭住址: %s,conta
8、cti.adress); printf(ntt 学 号: %s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mail); printf(tt); if (i+1NO) printf(ntt_); system(pause); printf(ntt*); else printf(ntt通讯录中无任何纪录); printf(ntt按任意键返回主菜单:); getch(); return; void searchmenu() char choice; system(cls); printf(ntt* 查找菜单 *); printf(ntt* 1-按姓
9、名查找 *); printf(ntt* 2-按电话查找 *); printf(ntt* 3-返回主菜单 *); printf(ntt*); printf(ntt请选择:); choice=getch(); switch (choice) case 1:searchname();break; case 2:searchphone();break; case 3:mainmenu();break; void searchname() int mark=0; int i; int a=0;char name20; printf(ntt* 按姓名查找 *); printf(ntt请输入姓名:); sc
10、anf(%s,name); for(i=a;iNO;i+) if (strcmp(contacti.name,name)=0) printf(ntt* 以下是您查找的联系人信息 *); printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone);printf(ntt家庭住址: %s,contacti.adress); printf(ntt 学 号: %s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mai
11、l); printf(ntt*);printf(ntt按任意键返回主菜单:); mark+; getch(); return; return;if(mark=0) printf(ntt没有该姓名的联系人纪录); printf(ntt按任意键返回主菜单); getch(); return; void searchphone() int mark=0; int i; int a=0; char phone10; printf(ntt* 按电话查找 *); printf(ntt请输入电话:); scanf(%s,phone); for(i=0;iNO;i+) if (strcmp(contacti.
12、phone,phone)=0) printf(ntt* 以下是您查找的联系人信息 *); printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone); printf(ntt家庭住址: %s,contacti.adress); printf(ntt 学 号:%s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mail); printf(ntt*); printf(ntt按任意键返回主菜单:); mark+;
13、getch(); return; if (mark=0) printf(ntt没有该联系人信息); printf(ntt按任意键返回主菜单); getch(); return; void modifymenu() int mark=0; int i,k; int a=0;int t=0;char choice;char name20;struct record modify;system(cls);printf(ntt请输入您要修改的姓名:); scanf(%s,name); for(i=a;iNO;i+) if (strcmp(contacti.name,name)=0) k=i;mark=
14、1;modify=contacti;printf(ntt* 以下是您将修改的联系人信息 *); printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone);printf(ntt家庭住址: %s,contacti.adress); printf(ntt 学 号: %s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mail); printf(ntt是否继续?y/n);if(getch()=n) modifym
15、enu(); else printf(ntt选择您要修改的选项:); printf(nttt(1).姓 名);printf(nttt(2).年 龄); printf(nttt(3).联系电话); printf(nttt(4).家庭住址); printf(nttt(5). 学 号);printf(nttt(6).电子邮件); printf(nttt(7).返 回); printf(ntt请选择: ); choice=getch(); switch(choice) case 1: printf(姓 名:); scanf(%s,contacti.name); break;case 2: printf
16、(年 龄:); scanf(%s,contacti.age); break; case 3: printf(联系电话:); scanf(%s,contacti.phone); break; case 4: printf(家庭住址:); scanf(%s,contacti.adress); break;case 5: printf( 学 号:); scanf(%s,contacti.number); break;case 6: printf(电子邮件:); scanf(%s,contacti.e_mail); break; case 7: mainmenu(); break; default:
17、modifymenu(); printf(ntt您的修改结果为:);printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone); printf(ntt家庭住址: %s,contacti.adress); printf(ntt 学号: %s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mail); printf(ntt确认修改?y/n);if(getch()=n)contacti=modify; print
18、f(ntt修改未保存!);else printf(ntt修改成功!);savefile();mark=0; printf(ntt是否继续修改?(y/n); if (getch()=y) modifymenu(); if (mark=0) printf(ntt没有该联系人的纪录); printf(ntt是否继续修改?(y/n); if (getch()=y) modifymenu(); return;void deletemenu() char choice; if(NO=0) printf(ntt对不起,文件中无任何纪录); printf(ntt按任意键返回主菜单); getch(); ret
19、urn; system(cls); printf(ntt* 删除菜单 *); printf(ntt* 1-删除所有 *); printf(ntt* 2-删除单个 *); printf(ntt* 3-返回主菜单 *); printf(ntt*); printf(ntt请选择:); choice=getch(); switch(choice) case 1:deleteall();break; case 2:deletesingle();break; case 3:mainmenu();break; default:mainmenu(); void deleteall() printf(ntt确认
20、删除?(y/n); if (getch()=y) if (fp=fopen(contact,w)=0) printf(ntt不能打开文件,删除失败); loadfile(); NO=0; printf(ntt纪录已删除,按任意键返回主菜单); getch(); fclose(fp);return; else return; void deletesingle() char choice; printf(nttt1-按姓名删除); printf(nttt2-按号码删除);printf(nttt3-返回删除菜单);printf(ntt请选择:); choice=getch(); switch (c
21、hoice) case 1:deletename();break; case 2:deletephone();break; case 3:deletemenu();break; void deletename() int i,j; int mark=0; char name20; printf(ntt请输入要删除联系人姓名:); scanf(%s,name); if(NO=0) printf(ntt对不起,文件中无任何纪录); printf(ntt按任意键返回主菜单); getch(); return; for (i=0;iNO;i+) if (strcmp(contacti.name,nam
22、e)=0) printf(ntt以下是您要删除的联系人纪录:); printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone); printf(ntt家庭住址: %s,contacti.adress); printf(ntt 学号: %s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mail); printf(ntt是否删除?(y/n); if (getch()=y) for (j=i;jNO-1;j+)
23、contactj=contactj+1; NO-; mark+; printf(ntt删除成功); savefile();printf(ntt是否继续删除?(y/n); if (getch()=y) deletename(); return; else return; continue; if (mark=0) printf(ntt没有该联系人的纪录); printf(ntt是否继续删除?(y/n); if (getch()=y) deletename(); return; void deletephone() int i,j; int mark=0; char phone20; printf
24、(ntt请输入要删除联系电话:); scanf(%s,phone); if(NO=0) printf(ntt对不起,文件中无任何纪录); printf(ntt按任意键返回主菜单); getch(); return; for (i=0;iNO;i+) if (strcmp(contacti.phone,phone)=0) printf(ntt以下是您要删除的联系人纪录:); printf(ntt姓 名: %s,contacti.name);printf(ntt年 龄: %s,contacti.age); printf(ntt联系电话: %s,contacti.phone); printf(ntt
25、家庭住址: %s,contacti.adress); printf(ntt 学号: %s,contacti.number);printf(ntt电子邮件: %s,contacti.e_mail); printf(ntt是否删除?(y/n); if (getch()=y) for (j=i;j0) rewind(fp); for (NO=0;!feof(fp) & fread(&contactNO,sizeof(struct record),1,fp);NO+); printf(nnnntttt :)文件导入成功); printf(ntttt 按任意键返回主菜单); getch(); retur
26、n(NO); printf(nnnnttt :)文件导入成功); printf(nttt电话簿文件中无任何纪录); printf(nttt 按任意键返回主菜单); getch(); return(NO); void savefile() int i; if (fp=fopen(student.txt,wb)=0) printf(ntt文件打开失败!n); for (i=0;iNO;i+) if (fwrite(&contacti,sizeof(struct record),1,fp)!=1) printf(ntt写入文件错误!n); printf(ntt已成功保存至文件!n);fclose(f
27、p); 本程序中大量使用了结构体和结构体数组,系统的功能模块都是使用子函数完成的,子函数中也存在大量结构体数组。5.调试分析过程描述1.软件进入界面后按任意键进入主菜单:2.就能够按照主菜单的提示进行操作了。我就以新建菜单的例子来说,按1以后输入系列信息即可:因为程序过大,因此遇到了很多问题,特别是最后的文件的导入和导出一直没搞好,最后是到网上找到了相关的模块,做了些参考才完成的。不过这个程序中大部分子函数定义明确,能够看书,上网查资料一遍一遍尝试着去写,虽然很麻烦,但断断续续的还是能够完成的。6.课程设计小结在这短时间的编写过程中我对c语言有啦更进一步的认识和了解。此次编程过程的经验和知识肯定能促进我以后的学习,对我的帮助是很多的,无论是学到的知识还是经验。在程序的编写过程中学习了很多对函数运用的方法,其中真的遇到了很多困难,还是慢慢坚持下来了。程序写完后也感到了很兴奋和快乐,毕竟有了个结果。当然因为其中个别模块的程序是参考其它资料写的,因此有些地方还需要我进一步去学习和巩固,以便于查漏补缺。