《课程设计报告书倪博 完结篇 .doc》由会员分享,可在线阅读,更多相关《课程设计报告书倪博 完结篇 .doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计报告书通信录管理系统设计 班 级: 方0953-1 学 号: 姓 名: 倪博 指导教师: 杨子光 石 家 庄 铁 道 大 学 四 方 学 院2010年7月15日1.选择题目题目:通信录管理系统设计2.内容摘要摘要:随着科技的进步和信息产业的飞速发展,通讯录成为了现代生活中一个重要的工具。此通讯录管理系统为方便管通讯信息,帮助企业公司职员的联系旨在服务社会。整个系统程序采用c语言来实现。c语言是目前国际上比较流行的计算机高级编程语言之一,因其简洁、使用方便且具备强大的功能而受到编程人员的普通青睐。它既适合作为系统描述语言,也可用来编写系统软件,还可用来编写应用软件。用C/C+设计出模拟手
2、机通信录管理系统,实现对手机中的通信录进行管理。本文介绍课程设计课题的选题意义,说明了本系统提供的主要功能:查询,修改,添加,删除等,并画出功能框图,最后给出了作者在小学期设计过程的体会。3.索引关键字关键词:通讯录管理,查询,添加,功能框图4. 目录1. 题目要求-42. 设计思想-43. 系统完成功能及框图-54. 界面设计-65. 核心算法及说明-86. 结论-117. 后记-118. 参考资料-125.正文5.1课程设计题目要求5.1.1实验目的培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新月异的发展形势;本次实验是以学生独立思考解决问题为主,教师指导为辅
3、,结合上机操作,完成指定的任务,作出设计报告。5.1.2设计要求 (建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等; 能够提供添加、删除和修改通讯录信息的功能; 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询; 将通讯录保存在文件中; 能够按表格方式输出通讯录信息。设计一个实用的通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索。5.2设计思想1.在设计时考虑以下几个方面:操作简单。该系统要求设计的界面美观,操作方便。便于使用人员快速上手。易于维护。一个软件的好坏,关键在于产品的可靠,稳定,便于维护。易于升级。随着社会的发展,对系统的要求会越来越高。要
4、求系统具有更高的安全性;更丰富的功能以及更快的操作速度。所以在设计时要考虑到到以后的升级问题。实用性。注重采用成熟而实用的技术,使系统建设的投入产出比最高,能产生良好的反应。2开发语言的选择本系统的编译选择的是C语言,作为一种计算机程序设计语言,C语言既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。C语言具有简介紧凑、灵活方便、运算符丰富、数据结构丰富、语法限制不太严格、程序自由度
5、大、程序执行效率高、可移植性好等优点。它既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序,它是一种受欢迎、应用广泛的程序设计语言。综上所述,选择C语言作为本系统的编译时非常适合的。5.3系统完成功能及功能框图添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带
6、后缀名)后,即可将通讯录信息保存到文件5.4界面设计本系统针对,信息查询和修改做了5个界面,下面举例说明部分界面得设计。5.4.1建立一个登录界面建立一个界面做登录界面,包括信息录入和信息查询5.4.2添加通讯录信息5.4.3保存记录界面5.5核心算法及说明1、 运用顺序程序设计结构,考查getchar,printf,scanf的知识点,例如:printf(请输入便条的数量:); scanf(%d,&num);2、 运用循环设计结构,考查for,ifelse循环的知识点,例如:for(j=i;jn-1;j+) strcpy(perj.num,perj+1.num); strcpy(perj.n
7、ame,perj+1.name); strcpy(perj.age,perj+1.age);strcpy(perj.adds,perj+1.adds);strcpy(perj.email,perj+1.email);perj.score=perj+1.score; 1、 运用数组知识,2、 运用函数知识,3、 运用指针,文件,结构体等知识点。4、 核心代码 通讯录:typedef struct char score; /*编号*/char name10; /*姓名*/ char num15; /*号码*/ char email20;/*邮箱*/char age8;/*年龄*/char adds
8、20;/*住址*/Person;void main() /*主函数*/ int n=0; for(;) switch(menu_select() case 1: printf(nt添加记录到通讯录n); /*添加记录*/ n=Input(pe,n); break; case 2: printf(nttt 通讯录记录表n); /*显示记录*/ Display(pe,n); break;case 3: printf(nt从通讯录中删除记录n); n=Delete_a_record(pe,n); /*删除记录*/ printf(t); system(pause); break; case 4: pr
9、intf(nt在通讯录中查找记录n); Query_a_record(pe,n); /*查找记录*/ printf(t); system(pause); break;case 5: printf(nt修改通讯录中的记录n); Change(pe,n); /*修改数据*/ printf(t); system(pause); break; case 6: printf(nt保存功能n); WritetoText(pe,n); /*保存数据*/ printf(t); system(pause); break; case 0: printf(ntt谢谢使用,再见!n); /*结束程序*/ printf
10、(ntt); system(pause); exit(0); 5.6结论现在社会人与人之间的交往越来越频繁,通讯录成为生活的必须品,对通讯录进行必要的管理,对通讯录中的人进行快速查询记录提供了极大方便在以往学习的知识、参考课外资料和寻求老师的帮助下终于完成了一个简单的软件。这个软件功能非常简单,因而我想,在实际运用中,还有些不足。因为知识和能力的不足,我们还无法做出满足实际需求的优秀软件,许多功能还欠缺和不完善,如无法实现快速查询。由于我的知识浅薄,经验不足及阅历颇浅,因此,在该系统的设计方面还有很多不足,比如功能过少,界面不醒目等问题,我会在学习的使用过程中,根据学习的具体要求不断的修改、完
11、善,争取使系统慢慢趋于完美。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。 6.后记这次实践中我们学习到了以前在课本上无法理解和没有见到过的知识,提高自身的知识面和实践能力,收获颇丰。因为我刚接触编程不久,对于数据结构、软件工程这些专业名词知之甚少;甚至对于编程应该如何开始都感觉茫然,不知该从哪里下手。但是我知道编写程序不能急于求成,必须循序渐进。首先在动手以前,必须理解用户对于程序的要求,从而明确所要编
12、写程序的功能,倘若不知道所要编的程序目的何在,那么编程时就会失去目标,程序自然编不好,也就是说要先进行“可行性分析”。然后,要明确编程思想,即在编程之前要对程序有一个总体的构思、总体的框架;这样编程时才能条理清晰,不致出现程序结构混乱这样的大错误。完成了总体设计之后,再进行详细设计、模块设计,这样编程时才能心中有数。我是通过把一些主要的函数、算法用笔先写出来,这样做是为了在真正编写程序的时候不至于忙东忙西,把思路打断。否则要是在上机时才进行构思,往往只有看着屏幕发呆的份。设计大体完工之后,就可以敲上屏幕了。在我们的辛勤努力下,终于做出一个简单的软件,虽然这个软件功能非常简单,而且有很多不足,离
13、实际应用还有很大的距离,但是我们在发现问题的过程中不断去完善自己制作的软件,力求把它作到趋于完美。在我们制作程序的过程中,老师和同学们都给与了我们很大的帮助,帮助我们查阅资料寻找知识点,指出我们的软件的错误和不足,在我们遇到困难时给我们鼓励和帮助,在这里,我向这些无私帮助我的人表示由衷的谢意。7、参考文献:1.c语言成语设计教程2.王萍. C+面向对象程序设计. 北京:清华大学出版社,2002 3.谭浩强. C程序设计(第二版). 北京:清华大学出版社,1999 8、附录#include #include #include #include int n=0;/定义全局变量 存储电话联系人个数s
14、truct phone_info/定义结构体 存储联系人信息char name20;/姓名char phone20;/电话char type;/分类char email20;/邮箱struct phone_info *next;/指向下一个节点的指针;/*-错误函数-*/所需参数:无/函数功能:显示错误信息/返回参数:无void error()printf(代码错误nn);system( pause );/*-输出函数-*/所需参数:链表头指针/函数功能:输出链表中的联系人信息/返回参数:无void output(struct phone_info *head)struct phone_inf
15、o *p1=head,*p2;system(cls);/清屏if(head=NULL)/如果当前链表头指针为空printf(当前没有任何联系人信息nn);system( pause ); return;/返回printf(电话联系薄(共%d条信息)nn,n);for(;)p2=p1-next;printf(姓名:%sn,p1-name);printf(电话:%sn,p1-phone);if(p1-type=A|p1-type=a)printf(类别:办公类n);else if(p1-type=B|p1-type=b)printf(类别:个人类n);elseprintf(类别:商务类n);pri
16、ntf(邮箱:%sn,p1-email);printf(n);if(p1-next=NULL)/如果当前指针所指向的结构体中next指向空则链表输出完毕break;/返回p1=p2;/*-新增函数-*/所需参数:链表头指针/函数功能:新增联系人信息 并自动添加到链表末尾/返回参数:链表头指针struct phone_info *new_info(struct phone_info *head)/新增struct phone_info *p1,*p2,*p;char c;int flag;system(cls);/清屏for(;)if(n=15)/判断当前联系人数目是否超过系统限制printf(
17、存储空间已满,不能再录入新数据!nn);system( pause);return head;if(n=0)/判断当前联系人数目是否为0head=p1=p2=(struct phone_info *)malloc(sizeof(struct phone_info);/新建结构体 并将结构体指针赋予链表头指针p1-next=NULL;elsep1=head;p2=(struct phone_info *)malloc(sizeof(struct phone_info);/新建结构体printf(请输入要新增的联系人姓名:n(如果输入“0”则停止新增,并返回主菜单)n);scanf(%s,p2-n
18、ame);if(strcmp(p2-name,0)=0)/判断输入的姓名是否为“0”free(p2);/为“0”则释放新开辟的空间return head;/返回printf(n请输入联系人的电话号码:n);scanf(%s,p2-phone);for(flag=1,p=head;n!=0&p!=NULL;)/判断是否输入了相同的联系人电话if(strcmp(p2-phone,p-phone)=0)printf(n录入了相同的联系人电话nn);system( pause );flag=0;/标志位赋“0”free(p2);system(cls);break;/退出循环p=p-next;if(fl
19、ag=0)/判断标志位是否为“0”continue;/如果为“0”则进入下一次循环printf(n请输入联系人的类别:n(A为办公类 B为个人类 C为商务类)n);scanf(%c,&c);/保存上一次输入的回车键scanf(%c,&p2-type);printf(n请输入联系人的电子邮箱:n);scanf(%s,p2-email);while(p1-next!=NULL)p1=p1-next;/找到链表的尾部p1-next=p2;/将链表的尾部指向新添加的联系人p2-next=NULL;/新的链表尾部赋结束标记system(cls);printf(新增成功nn);n+;/保存的联系人数目加1
20、return head;/*-删除函数-*/所需参数:链表头指针/函数功能:在链表中删除指定的联系人信息/返回参数:链表头指针struct phone_info *del(struct phone_info *head)struct phone_info *p1=head,*p2;char name20;system(cls);for(;)if(n=0)/判断当前联系人数目是否为0printf(当前没有任何联系人信息nn);system(pause);return head;/返回output(head);/调用输出函数 显示当前所有联系人的信息printf(请输入要删除的联系人的姓名:n(如
21、果输入“0”则停止删除,并返回主菜单)n);scanf(%s,name);if(strcmp(name,0)=0)/判断输入的姓名是否为0return head;/返回elseif(strcmp(name,head-name)=0)/找到指定的联系人所在节点if(head-next=NULL)/判断指定的联系人是否为链表中唯一的联系人信息printf(n删除成功nn);printf(当前没有任何学生信息nn);system(pause);free(head);/释放头节点n-;/保存的联系人数目减1return NULL;/返回空指针head=p1-next;/指定的联系人为链表的头节点 将下
22、一节点的地址赋予链表头指针free(p1);/释放头节点printf(删除成功nn);system(pause);n-;else/指定的联系人不是链表的头节点p1=p2=head;for(;)/找到指定的联系人所在节点if(strcmp(name,p1-name)=0)p2-next=p1-next;free(p1);/释放节点printf(删除成功nn);system(pause);n-;/保存的联系人数目减1system(cls);/清屏break;/退出循环p2=p1;p1=p1-next;/指向下一节点if(p1=NULL)/节点为空printf(n姓名为%s的联系人不存在!nn,na
23、me);system(pause);system(cls);/清屏break;/退出循环return head;/返回/*-音乐函数-*/所需参数:存储数字的字符串指针/函数功能:依次显示字符串里存储的数字并放出指定声音/返回参数:无void music(char *p)int freq=300,400,523,587,659,698,784,880,988,1046;/定义音频数组int i;printf(n);for(i=0;*(p+i)!=0;i+)printf(%c,*(p+i);/显示数字Beep(freq*(p+i)-48,500);/调用扬声器发出指定频率的声响printf(n)
24、;/*-拨号函数-*/所需参数:链表头指针/函数功能:在链表中查找指定的联系人 并模拟拨号效果/返回参数:无void diag(struct phone_info *head)char name20;struct phone_info *p1;system(cls);for(;)if(n=0)/判断当前联系人数目是否为0printf(当前没有任何联系人信息nn);system(pause);return;system(cls);output(head);/调用输出函数 显示当前所有联系人的信息printf(请输入要拨号的联系人姓名:n(如果输入“0”则停止拨号,并返回主菜单)n);scanf(
25、%s,name);if(strcmp(name,0)=0)/判断输入的姓名是否为0return;/返回elsep1=head;for(;)if(strcmp(name,p1-name)=0)/找到指定联系人所在节点music(p1-phone);printf(n拨号成功nn);system(pause);break;p1=p1-next;/找到下一节点if(p1=NULL)/指针为空printf(n姓名为%s的联系人不存在!nn,name);system(pause);break;/*-修改函数-*/所需参数:链表头指针/函数功能:在链表中修改指定联系人的信息/返回参数:无void revis
26、e(struct phone_info *head)int flag;int a;char c;char name20;struct phone_info *p1;system(cls);for(;)if(n=0)/判断当前联系人数目是否为0printf(当前没有任何联系人信息nn);system(pause);return;output(head);/调用输出函数 显示当前所有联系人的信息printf(请输入要修改的联系人姓名:n(如果输入“0”则停止修改,并返回主菜单)n);scanf(%s,name);if(strcmp(name,0)=0)/判断输入的姓名是否为0return;/返回e
27、lsep1=head;for(;)if(strcmp(name,p1-name)=0)/找到指定联系人所在节点system(cls);for(a=0;)system(cls);if(a!=0)printf(修改成功nn);printf(姓名为%s的联系人信息如下n,p1-name);printf(电话:%sn,p1-phone);if(p1-type=A|p1-type=a)printf(类别:办公类n);else if(p1-type=B|p1-type=b)printf(类别:个人类n);elseprintf(类别:商务类n);printf(邮箱:%sn,p1-email);printf(
28、n);printf(1.修改姓名n);printf(2.修改电话n);printf(3.修改类别n);printf(4.修改邮箱n);printf(0.返回n);printf(n请输入操作步骤代码:n);scanf(%d,&flag);printf(n);switch(flag)case 1:printf(请输入新的姓名:n);scanf(%s,p1-name);break;case 2:printf(请输入新的电话:n);scanf(%s,p1-phone);break;case 3:printf(请输入新的类别:n(A为办公类 B为个人类 C为商务类)n);scanf(%c,&c);/保存
29、上一次输入的回车scanf(%c,&p1-type);break;case 4:printf(请输入新的邮箱:n);scanf(%s,p1-email);break;case 0:break;default:error();a=1;if(flag=0)break;if(flag=0)system(cls);break;elsep1=p1-next;/找到下一个节点if(p1=NULL)/指针为空printf(n姓名为%s的联系人不存在!nn,name);system(pause);system(cls);break;/*-释放函数-*/所需参数:链表头指针/函数功能:释放链表存储空间的内容/返
30、回参数:无void freelist(struct phone_info *head)struct phone_info *p1=head,*p2;for(;)if(p1-next=NULL)free(p1);break;elsep2=p1-next;free(p1);p1=p2;/*-查看函数-*/所需参数:链表头指针/函数功能:显示指定类别的联系人信息/返回参数:无void look(struct phone_info *head)struct phone_info *p;int c;int flag;char type;system(cls);if(n=0)/判断当前联系人数目是否为0p
31、rintf(当前没有任何联系人信息nn);system(pause);return;/返回for(;)system(cls);printf(1.查看办公类联系人n);printf(2.查看个人类联系人n);printf(3.查看商务类联系人n);printf(0.返回n);printf(n请输入操作步骤的代码:);scanf(%d,&c);switch(c)case 1:type=a;break;case 2:type=b;break;case 3:type=c;break;case 0:return;default:error();flag=0;/标志位赋予0p=head;while(p!=
32、NULL)if(p-type=type|p-type=type-32)if(flag=0)system(cls);if(type=a)printf(-办公类联系人-nn);else if(type=b)printf(-个人类联系人-nn);elseprintf(-商务类联系人-nn);flag=1;printf(姓名:%sn,p-name);printf(电话:%sn,p-phone);printf(邮箱:%sn,p-email);printf(n);p=p-next;/找到下一节点if(flag=0)if(type=a)printf(n当前没有办公类联系人信息nn);else if(type
33、=b)printf(n当前没有个人类联系人信息nn);elseprintf(n当前没有商务类联系人信息nn);system(pause);/*-主函数-*/void main()struct phone_info *head=NULL;int n;for(;)system(cls);printf(-手机通信录管理系统-nn);printf(1.新增联系人n);printf(2.拨号联系人n);printf(3.删除联系人n);printf(4.修改联系人n);printf(5.查看联系人n);printf(0.退出n);printf(n请输入操作步骤的代码:);scanf(%d,&n);printf(n);switch(n)case 1: head=new_info(head);break;case 2: diag(head);break;case 3: head=del(head);break;case 4: revise(head);break;case 5: look(head);break;case 0: if(head!=NULL)freelist(head);break;default :error();break;if(n=0)break;printf(程序结束nn);