c语言个人通信录管理系统课程设计报告_第1页
c语言个人通信录管理系统课程设计报告_第2页
c语言个人通信录管理系统课程设计报告_第3页
c语言个人通信录管理系统课程设计报告_第4页
c语言个人通信录管理系统课程设计报告_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、语言程序设计报(个人通信录管理系统)通信与信息工程学院系:级:通信工程1104班员:间:2012年7月2日课程设计名称基于链表的个人通信录管理系统指导教师姓名职称需学生数6人组长杨文刚成员李岩、王皓升、罗洋、王志旭、沈洋基于链表的个人通信录管理系统课程设计任务书课 程 设 计 情 况各成 员 主 要 负 责 内 容杨文刚王皓升王志旭负责主体函数框架建立和函数模块整合负责程序的添加模块负责程序的删除模块负责程序的查找模块负责程序的输出模块负责程序的输入模块程序的调试和测试由小组成员共同参与完成课程设计的报告撰写由杨文刚、李岩完成1目录2. 总体设计3. 详细设计4. 程序调试与测试5. 程序清单

2、与执行结果14程序清单程序执行结果206. 课程设计总结1.设计目的问题描述编写一 C语言程序,其功能是建立一个基于链表的个人通信录管理系统,个 人通信录进行建立、输出、添加、查找及删除运行结果进行打印等相关操作。问题分析首先,选择合适的存储结构构造个人通信录,对该程序可以分为几个模 块进行分析,每个模块在该程序中的作用进行了解。最后用设计连接图将各 模块之间的联系连接起来,以方便我们更容易理解。然后,该程序需要一个详细的设计流程图来表示各个步骤所完成的先后 顺序,(如,对个人通信录进行添加,查找输出打印结果)。最后,按流程图进行编写个人通信录的程序,输出结果,并将打印的结 果显示出。设计分析

3、本次实验设计主要是建立个人通信录,要实现个人通信录的建立,个人 通信录的查找,个人通信录的添加及个人通信录的删除功能。.设计需求上我们需要掌握以下几点:(1).设计部分1.2.3.4.写出本次实验的详细设计方案。画出该次程序的流程图。分析该次程序的程序清单,进行程序测试并输出运行结果。对该次程序中个函数的功能分析结果。对该次实验完成后有总结。5.(2).设计大纲1.2.3.4.5.了解,分析这次实验的主要问题。 讨论解决问题的方案。分配组员的个人任务。进行各部分的整合、修改、完善。 进行这次实验的总体报告实验总结。2.总体设计程序设计组成框图个人通信个人通信个人通信录 主函数模块 个人通信图1

4、个人通信个人通信流程图I开始菜单诜择否否是否是否是否是1r是按身份、证号查信息输信息输信息添信息删信息查卄V结束3. 详细设计模块功能说明通信录建立模块 创建链表,并返回表头指针创建新节点;while (判断读入编号)读入联系人信息;保存到指定的域;指针指向下一新节点;按指定格式输出通讯录表头信息;if( 头指针不为空 )按指定格式输出联系人信息; 记录联系人数;else通信录为空;通信录添加模块新建节点;屏幕提示输入要添加的联系人信息;读入联系人信息; 按联系人编号升序排序;通信录删除模块提示输入要删除的联系人编号; 读入编号信息;if (找到)输出找到的联系人信息; 询问是否删除该联系人;

5、else提示没有该联系人;通信录查找模块提示输入要查找的联系人身份证号; 读入身份证号信息;If( 找到 ) 显示查找到的联系人信息; else提示没有该联系人;4. 程序调试与测试参照教材编写完程序的各个模块后, 我们将各个模块和主函数整合, 运行之 后主要存在以下几个问题:1. 程序输出信息部分不正确运行程序, 输入通信录中联系人信息后, 程序输出的电话号码和身份证号信 息错误,有时还会出现负数。经过查找发现在读入联系人信息时,这两项采用了 长整型数据类型,但是长整型最大支持的值仍然小于电话号码和身份证号的值。 我们换用字符串类型读入信息后为问题解决。2. 结束联系人信息的输入(以数字 0

6、结束)存在问题0时,程序才会结束让程序先判断输入的联0时继续读入联系人信息。这样在我们运行程序,我们在输入联系人信息完毕后是用数字 0结束的,但是当我们输 入完信息后,得将下一个联系人的所有信息全部输入为数字 输入。针对这个问题我们修改了输入模块的循环体顺序, 系人编号是否为 0,是 0时结束输入,不是 结束输入时只需按一次 0即可结束输入。当我们输入通信录中存在的联系人的 但当我们输入的身份证号信息在通信 if 语句中的 通信录中没3. 联系人的查找存在问题我们在查找(用身份证号)联系人时, 身份证号时,程序能准确查找到该联系人; 录中不存在时,程序会非法结束。为此,我们请教了老师,修改了

7、判断条件,程序能够在我们输入的身份证号信息不存在时正常提示 有该联系人”,问题解决。因为我们的程序是根据教材中的程序编写的, 所以在调试过程中, 程序没有 出现大的错误, 在模块连接上也没有问题, 只是有一些输入输出以及一些循环体 上的错误。5. 程序清单与执行结果程序清单/* 主控菜单程序 */#include ""#include ""#include ""struct per /*long int num; char name20; char tel12;char mail30; char add50;long int mnum

8、; 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); */*声明查找联系人函数struct per *head=NULL;void main

9、() /*主函数 */int select;int pass1;int pass=123456;printf("n 欢迎使用个人通信录管理系统,请输入登录密码 :"); scanf("%d",&pass1);if(pass=pass1)printf("n 登录成功 !nn");doprintf("nt*欢迎进入个人通信录管理系统*n");/* 主控菜单 */printf("nt >>1:建立通信录printf("nt >>2:输出通信录printf("n

10、t >>3:添加联系人printf("nt >>4:删除联系人printf("nt >>5:查找联系人printf("nt >>0:退出系统<<<<<<<<<<<<IIIIIIn");printf("nt*n");printf("nt 请选择( 0-5 ): ");对应模块函数 */*scanf("%d",&select); printf("n");

11、 switch(select) case 1:head=jianli();break;case 2:shuchu(head);break;case 3:head=tianjia(head);break;case 4:head=shanchu(head);break;case 5:head=chazhao(head);break;case 0:break; default:printf(" 您的输入有误,请重新输入( 0-5 ):n");while(select!=0);对不起,您输入的密码不正确,请按任意键退出程/*创建链表,并返回表头指针 */*/*/*表头 */ 新建节

12、点 */ 表尾节点 */*无任何节点,表头指向空 */姓名、电话、身份证号、邮箱、地址及新建一存入else printf("n序!nn");*/* 建立通信录函数struct per *jianli()struct per *head;struct per *p1;struct per *p2;long int num1;char name120;char tel112;char mail130;char add150;long int mnum1;char id118;head=NULL;printf(" 请输入联系人编邮编(用空格分隔,用 0结束) n&quo

13、t;); scanf("%d",&num1);while(num1!=0)/* 假设 num=0表示输入结束 */scanf(" %s%s%s%s%s%d",name1,tel1,id1,mail1,add1,&mnum1); /* 读入第一个联系人的信息 */p1=(struct per *)malloc(sizeof(struct per); /* 个节点*/*p1->num=num1;联系人的信息 */ strcpy(p1->name,name1); strcpy(p1->tel,tel1); strcpy(p1-

14、>id,id1); strcpy(p1->mail,mail1); strcpy(p1->add,add1);点*/八、*/*p1->mnum=mnum1;p1->next=NULL;if(head=NULL) head=p1;elsep2->next=p1;p2=p1;scanf("%d",&num1);return head;/*输出通信录函数 */ void shuchu(struct per *head) struct per *p; int n=0;/*/*/*/*/*将 next 域置为空,表示尾节第一个新建节点是表头

15、 */原表尾的下一个节点是新节点新建节点成为表尾 */返回表头指针 */printf("nt* *n");printf("n%-5s%-12s%-12s%-19s%-17s%-9s%-7sn"," "," 电话号码 "," 身份证号 "," 邮箱"," 地址"," 邮编 ");if(head!=NULL)for(p=head;p!=NULL;p=p->next) /* 出循环,否则继续 */II II统计节点数,即联系人数 */信

16、 * 录通 *编 号 "," 姓 名如果到达尾节点退printf("%-5d%-12s%-12s%-19s%-17s%-9s%-7dn",p->num,p->name,p->tel,p->id,p->mail,p->add,p->mnum);n+;printf(" 联系人总数: %dnn",n);elseprintf("n 对不起,该通信录中没有任何联系人 !nn");/* 添加联系人函数 */ struct per*tianjia(struct per*head)stru

17、ct 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- >mail,p->add,&p->mnum);printf(" 成功添加联系人 %

18、s !n",p->name);if(head=NULL)head=p; p->next=NULL;else查找添加 while(p->num>p2->num)&&(p2->next!=NULL) /* 位置*/p1=p2; p2=p2->next;if(p->num<=p2->num) /* 从小到大排列,添加至表内 */ if(p2=head)head=p;p->next=p2;elsep1->next=p;p->next=p2; else/*添加至表尾 */p2->next=p;

19、p->next=NULL;return(head);/* 删除联系人函数 */struct per * shanchu(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 &&a

20、mp; p2->next !=NULL)根据输入信息查找p1=p2; p2=p2->next; if(num1=p2->num)编 号 "," 姓II IIprintf("n 成功查询到该联系人! n"); printf("n%-5s%-12s%-12s%-19s%-17s%-9s%-7sn"," 名"," 电话号码 "," 身份证号 "," 邮箱 "," 地址 "," 邮编");printf(&q

21、uot;%-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

22、的联系人! nn",num1);break; case 0:printf("n 您取消了删除任务,联系人未被删除! n"); break;elseprintf("n 对不起,该通信录中没有任何联系人 !nn"); return(head);/* 查找函数 */struct per *chazhao(struct per *head)struct per*p2;char id120;printf(" 请输入要查找的联系人身份证号: n");scanf("%s",id1);if(head=NULL)print

23、f("n 通讯录为空 nn");return(head);p2=head;while (p2)if(strcmp(p2->id,id1)=0) printf("n 成功查询到该联系人! n"); printf("n%-5s%-12s%-12s%-19s%-17s%-9s%-7sn","编号 ","姓名"," 电话号码 "," 身份证号 "," 邮箱"," 地址"," 邮编");printf("%-5d%-12s%-12s%-19s%-17s%-9s%-7dn",p2->num,p2->name,p2->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论