1、c+通讯录设计郭海军 计算机科学与技术学院C高级语言程序设计课程设计报告 ( 2014 / 2015 学年 第 1 学期)学生姓名: 郭海军 学生专业: 计算机科学与技术专业 学生班级: 计算机16302班学生学号: 201326040207指导教师: 李建伟 2015年1月9日计算机科学与技术学院课程设计任务书课程设计名称C高级语言程序设计课程设计课程设计题目 小型通讯录程序学生姓名郭海军专业班级计算机132602班学号201326040207课程设计任务内容问题描述 设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和
2、数字混合编码。电话号码可由字符和数字组成 基本要求 (1)系统以菜单方式工作(2)信息录入功能(3)信息浏览功能(4)信息查询功能(5)信息修改功能(6)系统退出功能测试要求 (1) 具有添加,查询和删除功能、 (2) 能正常运行、设计简便的小型通讯录程序、 指导老师:李伟健 时 间: 2015 年 1 月 12日 计算机科学与技术学院课程设计成绩评审表课程设计名称C高级语言程序设计课程设计课程设计题目 小型通讯录软件学生姓名郭海军专业班级计算机132602班同组人学号 201326040207指导教师设计成绩评价内容签 字: 时 间: 2015 年 1 月 12 日 (1)设计问题描述与分析
3、一问题描述 世界的发展天翻地覆,而作为社会主角的我们之间的联系可为更加密切,因此,人与人之间的联系很重要,发展的快,事情固然也就多,这时就需要引入我们的通讯录帮忙了,所以,通讯录的需求是我们现当代所不可缺少的东西。使用专业的流程图绘制框架图,让通讯录中各个版块都能够清晰的展现在系统中,增删查改也是必须的品质之一,一切为服务大众。二问题分析(1)保存通讯录。输入联系人的姓名、电话号码、家庭详细地址等,并将它们一一存放在对应的数组当中去。(2)显示通讯录:将记录联系人姓名、电话号码的数组中的数据一一输出到屏幕上供使用。(3)查询通讯录。分别按联系人姓名和联系人的电话号码进行查询,查询时将输入的联系
4、人信息通过循环与相应数组成员一一进行比较。(4)修改通讯录。输入需要修改记录的联系人姓名,通过循环查找到该记录后,再输入新数据替代原有数据。(5)添加通讯录。判断输入的电话号码是否重复,若不重复再将输入的信息添加到对应的数组中每输入一组数据,记录数增1。(6)删除通讯录。分别按联系人姓名和电话号码进行删除 (2)算法设计与流程图(1)功能模块图 图(1)(2)查询联系人流程图 NO YES YES NO (3)程序设计编码与测试(1)程序代码:#include #include #include #include #define N 100 void input();/添加新用户函数 void
5、 amend();/修改用户信息函数 void delete_client();/删除用户信息函数 void demand_client();/用户信息查询函数 void collect_telephone();/用户信息汇总函数 void save_client(struct telephone message);/保存函数 void demand_name();/按用户名查询 void demand_telephone();/按电话号码查询 struct telephone char client_name20; char client_address30; char client_tel
6、ephone15; ; /添加新用户函数 void input() struct telephone message; char reply=y; char save=y; while (reply=y) printf(用户姓名:); scanf(%s,message.client_name); printf(电话号码:); scanf(%s,message.client_telephone); save_client(message); printf(要继续吗?(y/n):); scanf( %c,&reply); printf(按任意键返回主菜单n); getchar(); getchar
7、(); /保存函数 void save_client(struct telephone message) FILE *fp; fp=fopen(message.dat,a+); if (fp!=NULL) fwrite(&message,sizeof(struct telephone),1,fp); else printf(n打开文件时出现错误,按任意键返回n); getchar(); return; fclose(fp); /修改用户信息函数 void amend() struct telephone message; FILE *fp; char amend_name20; char re
8、ply=y; char found=y; char save=y; int size=sizeof(struct telephone); while (reply=y) found=n; fp=fopen(message.dat,r+w); if (fp!=NULL) system(cls); printf(n请输入要修改的姓名:); scanf(%s,amend_name); while (fread(&message,size,1,fp)=1) if (strcmp(amend_name,message.client_name)=0) found=y; break; if (found=y
9、) printf(=n); printf(n用户姓名:%sn,message.client_name); printf(n电话号码:%sn,message.client_telephone); printf(=n); printf(修改用户信息:n); printf(n用户姓名:); scanf(%s,message.client_name); printf(n电话号码:); scanf(%s,message.client_telephone); printf(n要保存吗?(y/n):); scanf( %c,&save); if (save=y) fseek(fp,-size,1); fwr
10、ite(&message,sizeof(struct telephone),1,fp); else printf(无此人信息!n); else printf(打开文件时出现错误,按任意键返回n); getchar(); return; fclose(fp); printf(要继续吗?(y/n):); scanf( %c,&reply); printf(按任意键返回主菜单n); getchar(); getchar(); /删除用户信息函数 void delete_client() struct telephone message100; / 源文件为struct telephone messa
11、geN; struct telephone temp_str; struct telephone delete_str; int i=0,j=0; char reply=y; char found=y; char confirm=y; char delete_name20; FILE *fp; while (reply=y) system(cls); fp=fopen(message.dat,r); if (fp!=NULL) i=0; found=n; printf(n请输入姓名:); scanf(%s,delete_name); while (fread(&temp_str,sizeof(
12、struct telephone),1,fp)=1) if (strcmp(delete_name,temp_str.client_name)=0) found=y; delete_str=temp_str; /查找要删除的记录 else messagei=temp_str; i+; /将其它无关记录保存起来 else printf(打开文件时出现错误,按任意键返回n); getchar(); return; fclose(fp); if (found=y) printf(=n); printf(用户姓名:%sn,delete_str.client_name); printf(电话号码:%sn
13、,delete_str.client_telephone); printf(=n); else printf(无此人信息,按任意键返回n); getchar(); break; printf(确定要删除吗?(y/n):); scanf( %c,&confirm); if (confirm=y) fp=fopen(message.dat,w); if (fp!=NULL) for(j=0;j3) printf(请输入1-6之间的整数n); printf(按任意键返回菜单n); getchar(); continue; if (choice=1) demand_name(); else if (c
14、hoice=2) demand_telephone(); /按用户名查询 void demand_name() struct telephone message; FILE *fp; char amend_name20; char reply=y; char found=y; while (reply=y) found=n; fp=fopen(message.dat,r+w); if (fp!=NULL) system(cls); printf(n请输入姓名:); scanf(%s,amend_name); while (fread(&message,sizeof(struct telepho
15、ne),1,fp)=1) if (strcmp(amend_name,message.client_name)=0) found=y; break; if (found=y) printf(=n); printf(用户姓名:%sn,message.client_name); printf(电话号码:%sn,message.client_telephone); printf(=n); else printf(无此人信息!n); else printf(打开文件时出现错误,按任意键返回n); getchar(); return; fclose(fp); printf(要继续吗?(y/n):); s
16、canf( %c,&reply); printf(按任意键返回主菜单n); getchar(); getchar(); /按电话号码查询 void demand_telephone() struct telephone message; FILE *fp; char telephone20; char reply=y; char found=y; while (reply=y) found=n; fp=fopen(message.dat,r+w); if (fp!=NULL) system(cls); printf(n请输入电话号码:); scanf(%s,telephone); while
17、(fread(&message,sizeof(struct telephone),1,fp)=1) if (strcmp(telephone,message.client_telephone)=0) found=y; break; if (found=y) printf(=n); printf(用户姓名:%sn,message.client_name); printf(电话号码:%sn,message.client_telephone); printf(=n); else printf(无此电话号码的有关信息!n); else printf(打开文件时出现错误,按任意键返回n); getcha
18、r(); return; fclose(fp); printf(要继续吗?(y/n):); scanf( %c,&reply); printf(按任意键返回主菜单n); getchar(); getchar(); /用户信息汇总函数 void collect_telephone() struct telephone message; FILE *fp; fp=fopen(message.dat,r); if (fp!=NULL) system(cls); printf(n用户姓名tt电话号码n); while (fread(&message,sizeof(struct telephone),1
19、,fp)=1) printf(n%-24s,message.client_name); printf(%-12sn,message.client_telephone); else printf(打开文件时出现错误,按任意键返回n); getchar(); return; fclose(fp); printf(按任意键返回主菜单n); getch(); void main() char choice10=; int len=0; while (choice0!=7) printf(t=ghj电话本号码查询系统=n); printf(tt 1、添加新联系人n); printf(tt 2、修改联系人
20、信息n); printf(tt 3、删除联系人信息n); printf(tt 4、联系人信息查询n); printf(tt 5、联系人信息汇总n); printf(tt 7、退出n); printf(t=n); printf(请选择(1-7):); scanf(%s,choice); len=strlen(choice); if (len1) printf(请输入1-6之间的整数n); printf(按任意键返回主菜单n); getchar(); getchar(); continue; switch (choice0) case 1: input(); break; case 2: amen
21、d(); break; case 3: delete_client(); break; case 4: demand_client(); break; case 5: collect_telephone(); break; default: break; (2)测试结果正常(演示结果如下): 图(1) 图(2) 图(三) (4)设计过程总结与分析 从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里头不时的有一种喜悦。这让我认识到书上和老师教的内容是有限的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去寻找资料去学习,同时我们还应向他人请教,与同学相互讨论,从而更深的理解
22、和运用结构化程序设计的思想和方法,掌握开发一个小型实用通讯系统的基本方法,提高了书写程序设计开发文档的能力。同时在软件的设计过程中遇到很多的困难。一次一次的调试失败下曾经想过要放弃。我最后还是让自己坚持啦下来,毫不畏惧困难,在同学的帮助与讲解下我总算是顺利完成软件的设计!虽然在调试程序遇到拉很多的困难,当软件调试成功时那种喜悦的感觉没有什么东西可以代替。在程序的编写过程中我发现我自己有很多的知识漏洞和缺陷,需要进一步努力学习来完善自己。而这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中
23、彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的。当我抽到通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,除了链表本身特别难以外,我也觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。其实,文件这个知识我们并没有学过,但通过看书,也可以得知,虽然说文件难以理解,但是比起链表来说,我觉得指针相对而言要容易很多,知识要记要背的东西比较多,因此这个程序我选择了用文件而不是用链表来解决。这一周的实践让我受益匪浅,在此我要感谢孜孜不倦指导我们的三位老师,感谢在我困惑时给我帮助的同学,感谢学校给我们一个这样动手动脑的机会,使我们在理论与实践相结合方面又得到了一次很好的锻炼,让我们得到很大的收获。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1