1、c语言个人通信录标准管理系统课程设计报告高级语言程序设计报告(个人通信录管理系统)院 系: 通信与信息工程学院 班 级: 通信工程1104班 成 员: 杨文刚(1107020420) 李 岩(1107020421) 王皓升(1107020417) 罗 洋(1107020418) 沈 洋(1107020419) 王志旭(1107020422) 时 间: 2012年7月2日 基于链表的个人通信录管理系统课程设计任务书课程设计情况课程设计名称基于链表的个人通信录管理系统指导教师姓名职称 需学生数6人组长杨文刚成员李岩、王皓升、罗洋、王志旭、沈洋各成员主要负责内容杨文刚 负责主体函数框架建立和函数模块
2、整合李 岩 负责程序的添加模块王皓升 负责程序的删除模块王志旭 负责程序的查找模块罗 洋 负责程序的输出模块沈 洋 负责程序的输入模块程序的调试和测试由小组成员共同参与完成课程设计的报告撰写由杨文刚、李岩完成目 录123 5 6 程序清单6 程序执行结果1420 问题描述编写一C语言程序,其功能是建立一个基于链表的个人通信录管理系统,个 人通信录进行建立、输出、添加、查找及删除运行结果进行打印等相关操作。 问题分析首先,选择合适的存储结构构造个人通信录,对该程序可以分为几个模块进行分析,每个模块在该程序中的作用进行了解。最后用设计连接图将各模块之间的联系连接起来,以方便我们更容易理解。然后,该
3、程序需要一个详细的设计流程图来表示各个步骤所完成的先后顺序,(如,对个人通信录进行添加,查找输出打印结果)。最后,按流程图进行编写个人通信录的程序,输出结果,并将打印的结果显示出。 设计分析 本次实验设计主要是建立个人通信录,要实现个人通信录的建立,个人通信录的查找,个人通信录的添加及个人通信录的删除功能。.设计需求上我们需要掌握以下几点:(1).设计部分1. 写出本次实验的详细设计方案。2. 画出该次程序的流程图。3. 分析该次程序的程序清单,进行程序测试并输出运行结果。4. 对该次程序中个函数的功能分析结果。5. 对该次实验完成后有总结。(2).设计大纲1. 了解, 分析这次实验的主要问题
4、。2. 讨论解决问题的方案。3. 分配组员的个人任务。4. 进行各部分的整合、修改、完善。5. 进行这次实验的总体报告实验总结。 程序设计组成框图个人通信录主函数模块个人通信录查找模块个人通信录删除模块个人通信录添加模块个人通信录输出模块个人通信录建立模块 图1 流程图开始菜单选择建立输出添加查找删除信息输入信息删除信息查找信息添加信息输出按身份证号查找结束否否否否否是是是是是 模块功能说明 通信录建立模块创建链表,并返回表头指针 创建新节点; while (判断读入编号)读入联系人信息;保存到指定的域;指针指向下一新节点;按指定格式输出通讯录表头信息;if(头指针不为空) 按指定格式输出联系
5、人信息;记录联系人数;else通信录为空; 通信录添加模块新建节点;屏幕提示输入要添加的联系人信息;读入联系人信息;按联系人编号升序排序; 通信录删除模块提示输入要删除的联系人编号;读入编号信息;if(找到)输出找到的联系人信息;询问是否删除该联系人;else提示没有该联系人; 通信录查找模块提示输入要查找的联系人身份证号;读入身份证号信息;If(找到)显示查找到的联系人信息;else 提示没有该联系人;参照教材编写完程序的各个模块后,我们将各个模块和主函数整合,运行之后主要存在以下几个问题:1. 程序输出信息部分不正确运行程序,输入通信录中联系人信息后,程序输出的电话号码和身份证号信息错误,
6、有时还会出现负数。经过查找发现在读入联系人信息时,这两项采用了长整型数据类型,但是长整型最大支持的值仍然小于电话号码和身份证号的值。我们换用字符串类型读入信息后为问题解决。2. 结束联系人信息的输入(以数字0结束)存在问题运行程序,我们在输入联系人信息完毕后是用数字0结束的,但是当我们输入完信息后,得将下一个联系人的所有信息全部输入为数字0时,程序才会结束输入。针对这个问题我们修改了输入模块的循环体顺序,让程序先判断输入的联系人编号是否为0,是0时结束输入,不是0时继续读入联系人信息。这样在我们结束输入时只需按一次0即可结束输入。3. 联系人的查找存在问题我们在查找(用身份证号)联系人时,当我
7、们输入通信录中存在的联系人的身份证号时,程序能准确查找到该联系人;但当我们输入的身份证号信息在通信录中不存在时,程序会非法结束。为此,我们请教了老师,修改了if语句中的判断条件,程序能够在我们输入的身份证号信息不存在时正常提示“通信录中没有该联系人”,问题解决。因为我们的程序是根据教材中的程序编写的,所以在调试过程中,程序没有出现大的错误,在模块连接上也没有问题,只是有一些输入输出以及一些循环体上的错误。 程序清单/*主控菜单程序*/#include #include #include struct per /*定义结构体类型*/long int num;char name20;char te
8、l12;char mail30;char add50;long int mnum;char id18;struct per *next;struct per *jianli(); /*声明建立通信录函数*/void shuchu(struct per *head); /*声明输出通信录函数*/struct per *tianjia(struct per *head); /*声明添加联系人函数*/struct per *shanchu(struct per *head); /*声明删除联系人函数*/struct per *chazhao(struct per *head); /*声明查找联系人函
9、数*/struct per *head=NULL;void main() /*主函数*/ int select;int pass1;int pass=123456;printf(n欢迎使用个人通信录管理系统,请输入登录密码:);scanf(%d,&pass1);if(pass=pass1)printf(n登录成功!nn);doprintf(nt* 欢迎进入个人通信录管理系统 *n); /*主控菜单*/printf(nt - 1: 建 立 通 信 录 2: 输 出 通 信 录 3: 添 加 联 系 人 4: 删 除 联 系 人 5: 查 找 联 系 人 0: 退 出 系 统 num=num1;
10、/*存入联系人的信息*/strcpy(p1-name,name1);strcpy(p1-tel,tel1);strcpy(p1-id,id1);strcpy(p1-mail,mail1);strcpy(p1-add,add1);p1-mnum=mnum1;p1-next=NULL; /*将next域置为空,表示尾节点*/if(head=NULL)head=p1; /*第一个新建节点是表头*/elsep2-next=p1; /*原表尾的下一个节点是新节点*/p2=p1; /*新建节点成为表尾*/scanf(%d,&num1);return head; /*返回表头指针*/*输出通信录函数*/vo
11、id shuchu(struct per *head)struct per *p;int n=0; /*统计节点数,即联系人数*/ printf(nt*通*信*录*n);printf(n%-5s%-12s%-12s%-19s%-17s%-9s%-7sn,编号,姓名,电话号码,身份证号,地址,邮编);if(head!=NULL)for(p=head;p!=NULL;p=p-next) /*如果到达尾节点退出循环,否则继续*/printf(%-5d%-12s%-12s%-19s%-17s%-9s%-7dn,p-num,p-name,p-tel,p-id,p-mail,p-add,p-mnum);n
12、+;printf(联系人总数:%dnn,n);elseprintf(n对不起,该通信录中没有任何联系人!nn);/*添加联系人函数*/struct per*tianjia(struct per*head)struct per*p;struct per*p1;struct per*p2;p2=head;p=(struct per*)malloc(sizeof(struct per); /*新建节点p*/printf(请输入要添加的联系人的编号、姓名、电话、身份证号、地址、邮编:n);scanf(%d %s %s %s %s %s %d,&p-num,p-name,p-tel,p-id,p-mai
13、l,p-add,&p-mnum);printf(成功添加联系人%s !n,p-name);if(head=NULL)head=p;p-next=NULL;elsewhile(p-nump2-num)&(p2-next!=NULL) /*查找添加位置*/p1=p2;p2=p2-next;if(p-numnum) /*从小到大排列,添加至表内*/if(p2=head)head=p;p-next=p2;elsep1-next=p;p-next=p2;else /*添加至表尾*/p2-next=p;p-next=NULL;return(head);/*删除联系人函数*/struct per * sha
14、nchu(struct person*head)struct per *p2;struct per *p1;int num1,n;printf(请输入要删除的联系人编号:); /*根据输入信息查找联系人*/scanf(%d,&num1);if(head=NULL)printf(n通讯录为空nn);return(head);p2=head;while(num1 != p2- num & p2-next !=NULL)p1=p2;p2=p2-next;if(num1=p2-num)printf(n成功查询到该联系人!n);printf(n%-5s%-12s%-12s%-19s%-17s%-9s%-
15、7sn,编号,姓名,电话号码,身份证号,地址,邮编);printf(%-5d%-12s%-12s%-19s%-17s%-9s%-7d,p2-num,p2-name,p2-tel,p2-id,p2-mail,p2-add,p2-mnum);printf(n确定删除? 1确定 0取消 );scanf(%d,&n);switch(n)case 1:if(p2=head)head=p2-next;elsep1-next=p2-next;free(p2);printf(n成功删除编号为%ld的联系人!nn,num1);break;case 0:printf(n您取消了删除任务,联系人未被删除!n);br
16、eak;elseprintf(n对不起,该通信录中没有任何联系人!nn);return(head);/*查找函数*/struct per *chazhao(struct per *head) struct per*p2;char id120;printf( 请输入要查找的联系人身份证号:n);scanf(%s,id1);if(head=NULL)printf(n通讯录为空nn);return(head);p2=head;while (p2)if(strcmp(p2-id,id1)=0)printf(n成功查询到该联系人!n);printf(n%-5s%-12s%-12s%-19s%-17s%-
17、9s%-7sn,编号,姓名,电话号码,身份证号,地址,邮编);printf(%-5d%-12s%-12s%-19s%-17s%-9s%-7dn,p2-num,p2-name,p2-tel,p2-id,p2-mail,p2-add,p2-mnum);break;p2=p2-next;if(!p2)printf(n对不起,该通信录没有该联系人!nn); return (head); 程序执行结果 密码登录界面 密码输入错误界面 成功登录主界面 建立通信录 输出通信录 添加联系人 添加后输出通信录 成功查找联系人 找不到联系人时界面 删除询问界面 确认后成功删除联系人 通过这次的课程设计使我们充分了
18、解了个人通信录的建立、输出、添加、删除、查找的基本原理,并可以编写出其程序。虽然说程序不是很完美的,但是总体上完成了老师的要求,当然这只能相对于我们这些初学者来说。除了课本上仅有的知识外,我们还借用了一些其他书上比较好的算法思想,以至于让我们的课程设计更加完美。在这次课程设计中,让我们深知仅仅掌握课本上的知识是远远不够的。在刚开始编程时,让我们感觉到自己不知道应该从哪里下手。在操作时,常常会遇到一些棘手的问题难以解决,但经过我们组员的不断思考、共同努力,尝试着去更改出现问题的程序,直至程序可以正常运行输出。开始很困难,但在老师和同学们的帮助下,我们了解了很多操作,使后面变得更容易操作。 程序设计过程中,小组中的各成员快速行动,积极配合,分工合作,在完成了各自的函数模块程序的编写后,有积极参与程序的调试与测试,并快速的发现和解决了问题,过程中遇到了查找模块的问题,我们请教了老师,在老师的帮助下,我们解决了查找模块的问题。至此,我们的程序能够保证成功并且正确的运行。参考文献C程序设计(第二版) 谭浩强 清华大学出版社 C语言程序设计 田祥松 西安电子科技大学出版社C语言课程设计 黄明等 电子工业出版社C语言时尚编程百例 网冠科技 机械工业出版社标准C机能百练 焦 华 中国铁道出版社
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100