《c程序设计实践报告之通讯录管理系统》由会员分享,可在线阅读,更多相关《c程序设计实践报告之通讯录管理系统(44页珍藏版)》请在金锄头文库上搜索。
1、C 语言程序设计实践 通讯录管理系统实 践 报 告组长:吴政 组员:吴政吴伟明王成武北京师范大学信息科学与技术学院本科生 2010 级 1 班二二一一年三月二十六日一一年三月二十六日实践报告:C 语言程序设计之通讯录管理系统- 2 -实践前论:实践前论: 实践的目的、要求与内容实践的目的、要求与内容一、实践的目的和要求一、实践的目的和要求经过了一个学期对 C 语言的学习,大家对 C 语言有了一定的认识。在此基础上,为了加深对 C 语言课程所学知识的理解,进一步巩固 C 语言算法规则,学会编制结构清晰、风格良好、数据结构适当的 C 程序,从而具备解决综合性问题的能力,特设此课程实践内容,通过完成
2、一项具体的程序来检验对所学知识的掌握情况。要求能够完成一项完整并且具有初步实用性,经编写调试,确保能够正常运行的小型程序。二、实践所涉及的内容二、实践所涉及的内容实践内容所涉及的均为 C 语言的基础知识,包括:数据类型(整型、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数定义与调用)等,以及进一步掌握各种函数的应用以及文件的读写操作等。实践报告:C 语言程序设计之通讯录管理系统- 3 -实践细述:实践细述: 通讯录管理系统通讯录管理系统一、任务概述一、任务概述: :通讯录管
3、理系统通讯录管理系统程序通过用户录入的通讯录成员信息,由计算机自动实现数据的存储,读取,修改等功能,用户可以根据计算机的提示完成各项操作,实现电脑协助人工管理信息的功能。二、程序功能:二、程序功能:1、导入通讯录文件,如果文件不存在,则按照输入的路径自动创建;2、录入通讯录成员记录,包括姓名、电话号码、电子邮箱、qq 号及分类;3、查询成员信息,根据用户输入的姓名检索出该成员的所有录入信息;4、删除记录,选择通讯录成员的姓名并将其所有信息从存储的数据中删除;5、修改成员信息,选择数据中某一成员,并依次修改各项记录;6、显示成员信息,可以一次性显示所有成员的记录,或是按照分类显示某一类成员的所有
4、记录;7、拨打电话,选择某一成员,依次显示其电话号码各个数实践报告:C 语言程序设计之通讯录管理系统- 4 -字来实现拨号(此项功能为模拟实现功能) ;8、保存记录,用户可将记录保存为文件存在硬盘上。三、设计思路三、设计思路所有成员的记录用结构体数组存储,每个结构体包括姓名、电话号码、电子邮箱、qq 号及分类五个字符型数组;上述的各项功能由定义函数分别实现,由主函数控制各个函数的调用;整个程序产生于文本界面,通过一些字符简单对界面进行装饰。具体的各个函数设计思路如下:1、导入通讯录函数:通过 fopen 函数打开指定文件,并用fread 函数将文件内的数据读入结构体数组中,这两个标准库函数都定
5、义在 stdio.h 头文件中。整个函数的返回值为整形 i,用来并表示导入的数据成员个数,而后将该值赋给全局变量count 用来计数。2、保存文件函数:通过将文件名字符串作为参数传入,用fwrite 函数将当前结构体数组中的全部数据写入文件中并关闭文件。该函数无返回值。3、分类显示成员信息函数:无参数传入,无返回值,用户根据提示输入指令,用 switch 语句分析指令并遍历所有结构体数据,将符合的数据输出。该函数也没有返回值。4、录入新成员信息函数:该函数没有参数,通过提示用户输入数据;当输入的姓名或电话号码重复时,提示用户重复并实践报告:C 语言程序设计之通讯录管理系统- 5 -重新输入;被
6、录入一个完整的新数据后让全局变量 count 自增,并将其作为函数的返回值返回。5、查找记录函数:将用户要找的成员姓名作为参数传入,遍历所有结构体并找出符合的输出,若输出成功则返回整数1,用户所输姓名不存在则返回 0。6、删除记录函数:将用户要删除的成员姓名作为参数传入,遍历所有结构体并找出符合的删除,并将后面的所有数据向前移动一个位置,返回值同查找记录函数。7、修改记录函数:将用户要修改的成员姓名作为参数传入,遍历所有结构体并找出符合的,依次提示修改项目,由用户输新数据并保存,返回值同查找记录函数。8、拨号功能函数:无参数传入,显示已存入的所有成员的姓名,由用户选择拨打电话的姓名,依次显示电
7、话号码的各个数字,并用 Sleep 函数设置一定时间的延时以表现号码依次输出的效果,该函数包含在 windows.h 头文件中。成功拨号则返回整数 1,输入了错误的姓名则返回 0。9、主函数:用 switch 语句来判断用户输入的指令,转向具体的函数来执行,并根据函数的返回值判断执行结果并予以提示。主函数中用 exit(0);语句结束程序,并在结束前提示用户保存数据。整个程序由上述 9 个函数组成。此外,源程序将结构体数组和计数变量 count 以及文件指针 fp 设为全局变量,目的是为实践报告:C 语言程序设计之通讯录管理系统- 6 -了让所有函数都能正常使用这几个变量,保证整个程序的正常运
8、行。四、附加功能及优化四、附加功能及优化整个程序比较顺利的完成了既定任务中的所有功能要求,并增加了读取和保存文件的功能,使通讯录记录课一永久保存与硬盘上。另外,在程序与用户交互时用 Sleep 函数进行一定时间的延时,方便用户交互,使得在文本界面中交互内容不会因一闪而过而无法看清。延时的时间用#define 定义为常量,可以方便修改,数据的总容量也用#define 定义,可以随时“扩容” 。五、程序流程图五、程序流程图实践报告:C 语言程序设计之通讯录管理系统- 7 -开始路径存在输入文件路径读取文件内容创建新文件是否实践报告:C 语言程序设计之通讯录管理系统- 8 -分析指令输入指令1新增2
9、删除3查询4修改5分类显示6拨打电话7保存0退出结束保存? 是否六、程序源代码及注释六、程序源代码及注释#include #include #include #include #define SUM 100实践报告:C 语言程序设计之通讯录管理系统- 9 -#define STOP 1000typedef struct /*结构体,存放通讯录成员信息,重新定义成member 型变量*/char name10;char tel15;char cla5;char mail20;char qq15;member;member infoSUM; /所有成员空间FILE *fp; /文件指针,用于打开或
10、保存通讯录文件int count=0; /全局变量,用于计数已存入数量/*-*/int load(char filename)/打开通讯录文件member *p;int i=0;实践报告:C 语言程序设计之通讯录管理系统- 10 -if(fp=fopen(filename,“rb“)=NULL)return i;elsewhile(!feof(fp)p=(member *)malloc(sizeof(member);if(fread(p,sizeof(member),1,fp)=1)strcpy(infoi.name,p-name);strcpy(infoi.tel,p-tel);strcpy
11、(infoi.cla,p-cla);strcpy(infoi.mail,p-mail);strcpy(infoi.qq,p-qq);i+;free(p);return i;/*-*/实践报告:C 语言程序设计之通讯录管理系统- 11 -void save(char filename) /保存通讯录文件int i;member *p;if(fp=fopen(filename,“wb“)=NULL)printf(“无法保存!打开文件%s 时出错n“,filename);exit(1);elsefor(i=0;iname,infoi.name);strcpy(p-tel,infoi.tel);str
12、cpy(p-cla,infoi.cla);strcpy(p-mail,infoi.mail);strcpy(p-qq,infoi.qq);fwrite(p,sizeof(member),1,fp);free(p);实践报告:C 语言程序设计之通讯录管理系统- 12 -fclose(fp);/*-*/void display(void) /分类查看功能char dis;char way5;int i,j=0;choice:printf(“* 请选择查看分类 *“);printf(“* 1.亲友 *“);printf(“* 2.同学 *“);printf(“* 3.老师 *“);printf(“*
13、 4.其他 *“);printf(“* 5.查看全部 *“);printf(“* 0.返回上一级菜单 *“);printf(“*“);printf(“请选择(15 或 0):“);dis=getchar();getchar();switch(dis)实践报告:C 语言程序设计之通讯录管理系统- 13 -case 1:strcpy(way,“亲友“);break;case 2:strcpy(way,“同学“);break;case 3:strcpy(way,“老师“);break;case 4:strcpy(way,“其他“);break;case 5:printf(“*通讯成员全部*“);fo
14、r(i=0;icount;i+)printf(“* 姓名:%sn“,infoi.name);printf(“* 电话号码:%sn“,infoi.tel);printf(“* 电子邮箱:%sn“,infoi.mail);printf(“* QQ 号:%sn“,infoi.qq);printf(“* 分类:%sn“,infoi.cla);printf(“*“);j+;if(j=0)printf(“*“);printf(“ 无任何通讯成员! “);printf(“*“);j=0;Sleep(STOP);goto choice; break;实践报告:C 语言程序设计之通讯录管理系统- 14 -case 0:return; break;default:printf(“*“);printf(“ 输入指令有误! “);printf(“*“);Sleep(STOP);goto choic