通讯录设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计报告
系(部、中心)
姓名学号
专业班级
课程名称
设计题目名称
起止时间
成绩
指导教师签名
目录
第1章题目与要求 (3)
1.1 基本要求(及格 (3)
1.2 高级要求(加分)... (3)
第2章用户需求分析 (3)
2.1 功能需求 (3)
第3章设计方案 (3)
3.1设计思路 (3)
3.2功能设计 (3)
第4章实施方案 (4)
第5章软件调试 (5)
5.1 错误介绍 (5)
5.2 错误分析及解决方案 (5)
第6章程序流程图及结构说明 (6)
第7章程序清单 (7)
第8章效果展示 (18)
第1章题目与要求
本次程序设计实践的题目是《通信录管理系统的设计》。
1.1基本要求(及格)
(1)使用C语言,设计一个字符界面并带有菜单的通信录管理系统,每个记录中应包含:姓名、性别、年龄、联系电话、电子邮箱等项目。
(2)最大记录数:100。
(3)程序基本功能:显示记录、添加记录、删除记录。
1.2高级要求(加分)
(1)以多文件方式设计该程序。
(2)对程序中的数据类型进行自定义(为方便程序的阅读和管理,定义自己的类型名)。
(3)能将该通讯录制作成文件保存于磁盘。
第2章用户需求分析
2.1 功能需求
通过《程序设计实践I(能源11-12)》指导书中的相关要求,以及参考程序流程图的基本程序的框架,同时用户需求的基本功能,要求系统需要有以下功能:(1)有菜单选择界面;
(2)联系人信息修改简单方便,支持多种方式的修改;
(3)方便的联系人信息查询,支持多种方式的查询;
(4)联系人信息查看功能能供用户详细的查看;
(5)退出时若用户更改了联系人相关信息或添加、删除联系人时,会提示用户联系人信息已更改是否保存;
(8)有动态的开始界面。
第3章设计方案
3.1 设计思路
为了更好地实现上述内容,此程序采用了结构体、链表,来处理联系人的数据。结构体能够包含联系人的各项信息,如姓名、家庭地址、电话号码等,克服了数组只能包含同种类型的数据的缺点。链表数据的存放不需要连续的内存,相对于结构体数组减少了内存空间的浪费。利用fopen等函数创建文件、保存文件数据等,实现退出程序后联系人的数据能够保存,方便以后的查看、添加、修改等动作。采取多文件的方式,能够更好地对程序进行维护调试。
3.2 功能设计
本程序一共有13个子文件,共11个模块,有实现9项功能。
(1)创建联系人列表模块
能够建立新的文件,实现联系人的分类存放,方便用户的对联系人的管理。
(2)添加功能
能够打开已有的文件,用户需选择添加的联系人所在的文件,事先联系人的分类存放,方便以后的查看修改等操作。添加完成后,程序将自动的进行排序操作。
(3)删除联系人
选择此功能后,用户需要选择要删除联系人所在文件,再行删除。提醒用户是否保存设置。
(4)修改联系人信息
选择此功能后,用户需要选择要删除联系人所在文件,再进行各项修改。提示用户是否保存修改。
(5)查询联系人信息
用户选择了打开的文件后,可以按照姓名、手机号等对联系人进行查找。然后打印在屏幕上。
(6)查看联系人列表
用户只需选择要查看的联系人所在的文件。系统将自动将此文件中的所有所有人打印在屏幕上。
(7)删除文件
(8)退出系统
第4章实施方案
(1)数据结构采用链表,定义如下结构体用来建立节点:
typedef struct LinkPerson
{
char name[20],mobile[15];
char home_ph[15],E_mail[40],work_units[40];
char qq[11];
struct LinkPerson *next;
}LP;
将此结构体的typedef式的名字是LP。next是是结构体指针,用来指向下一节点,保证链表的连续性,最后一个节点的next=NULL,作为链表的结束标志。
(2)建立链表
部分代码如下:里面的所有变量已经在函数中声明
while(1)
{
n++;
if(n==1) head->next=p1;
else p2->next=p1;
p2=p1;
p1=(struct LinkPerson *)malloc(LEN);
printf("姓名\n");
scanf("%s",p1->name);
if(strcmp(p1->name,"0")==0)
break;
printf("手机号\n");
scanf("%s",p1->mobile);
printf("家庭电话\n");
scanf("%s",p1->home_ph);
printf("电子邮箱\n");
scanf("%s",p1->E_mail);
printf("班级\n");
scanf("%s",p1->work_units);
printf("QQ\n");
scanf("%s",p1->qq);
}
free(p1);
当用户输入的姓名为0,程序会退出链表的创建。循环对出后,p1->next=NULL;将最后一个节点指向空(NULL),
(3)文件操作
本程序对文件进行的主要操作有打开、关闭、顺序读写操作。采用fopen函数打开文件,打开方式采用了w+、r、r+,当文件不存在时采取w+方式打开能够创建一个新的文本,r用来打开已经存在的文件,当文本不存在时将对出系统。
(4)通过对以上介绍的算法的不同组合完成了整个程序的需要的函数creat()、read ()add()等。
(5)函数的衔接
各个功能函数之间的衔接主要通过函数的返回值以及函数的参数。例如完成创建功能时,第一步调用函数creat()时会产生一个结构体指针指向结构体的头,第二部在调用save ()函数时将利用creat产生的返回值完成文件的创建以及数据的保存。其他的功能亦如此。
第5章软件的调试
5.1 错误介绍
(1)变量重复定义。
(2)无法统计人数,统计人数超过实际人数。
(3)进行某项功能时,出现提示,点击确定后,软件退出运行。
(4)输出联系人列表时,屏幕上出现乱码。
5.2错误分析及解决方案
(1)在本程序中有全局变量n用来统计人数,当n出现问题后将不能完成统计以及排