-0-长沙学院课程设计说明书题目设计一个电子通讯录程序系(部)计算机科学与技术系专业(班级)姓名学号指导教师起止日期2010年1月4日到2010年1月8日---1-程序设计基础课程设计任务书一、题目:设计一个电子通讯录程序二、目的与要求1.目的:(1)使学生更加系统地理解和掌握C++语言的基本概念、语言特点和编程技巧。(2)使学生应用C++语言在程序设计方面得到系统锻炼,为将来VC进行软件开发打下良好基础。(3)提高学生建立程序文档、归纳总结的能力。2.基本要求:(1)要求用C++模块化设计的思想来完成程序的设计;(2)培养上机动手能力,巩固分支结构和循环结构,应用函数和数据结构的知识。(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。(4)程序调试通过后,完成程序文档的整理,加必要的注释。3.创新要求在基本达到题目要求外,进行创新设计,如界面优美、功能更加完善(如增加按生日先后排序的功能),用不同的cpp文件来实现等。4.书写设计报告的要求设计报告中包含以下几个方面:1、设计题目2、总体设计1)用自顶而下或自底而上的方法,划分功能模块。2)确定各模块的算法3、根据算法画出流程图4、列出程序清单,并加以必要的注释5、写出调试程序的方法6、指出所设计问题的不足和改进方案5.课程设计材料的装订顺序为:1)设计说明书封面2)课程设计任务书3)课程设计鉴定表4)目录5)设计报告书正文三、设计内容及其基本原理和设计方法---2-1.问题描述:电子通讯录功能如下:1.Read2.Append3.Delete4.Search5.Isert。说明:上图是电子通讯录的主菜单,利用它,将能够轻松地录入一个朋友的性别、出生日期、通讯地址、电话号码,而且它还提供了浏览、删除、检索和插入功能。1)添加:在原有数据资料的基础上按顺序增加记录;2)删除:给出删除位置,执行删除后,查询是否被删除,显示通讯录的内容;3)查询:给出姓名,列出该记录的信息。4)插入:给出插入位置,执行插入后,查询是否被插入,显示通讯录的内容;2.解决方案:用线性表顺序表设计电子通讯录的结构,为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定义所需要的各项信息。一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子通讯录的基本结构。四、主要技术问题的描述对于电子通讯录这样一张线性表来说,内容的录入和显示是必不可少的操作。可构造函数Data_Input()完成了信息的录入工作:可以构造Data_Show()完成信息的显示工作。五、课程设计时间:18周六、课程设计的考核方式及评分方法1.考核方式课程设计结束时,在机房当场验收。1)教师提供测试数据,检查运行结果是否正确。2)回答教师提出的问题。3)学生提交课程设计文档(A4纸打印)2.评分方法上机检查:书面报告=7:3,没有通过上机检查的其成绩直接记录不及格指导教师签名:日期:教研室主任签名:日期:系主任签名:日期:---3-长沙学院课程设计鉴定表姓名学号专业班级设计题目设计一个电子通讯录程序指导教师指导教师意见:评定等级:教师签名:日期:答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名:日期:系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;---4-摘要本程序是一个电子通讯录。用于实现对好友通讯信息的记录以及基本的管理。本程序在完美实现改程序应有的功能的同时还增加了很多的人性化设计,比如温馨的提示。本程序在界面上改变了程序执行时的单一色彩的缺陷,做到了丰富多彩,美观大方!关键词:电子通讯录;人性化设计;美观---5-目录1设计内容与要求…………………………………………………………………………………52.设计说明…………………………………………………………………………………………72.1问题描述与功能设计…………………………………………………………………………72.2算法与数据结构………………………………………………………………………………72.3函数定义………………………………………………………………………………………102.4界面设计………………………………………………………………………………………102.5编码……………………………………………………………………………………………102.6测试……………………………………………………………………………………………103总结…………………………………………………………………………………………………12参考文献……………………………………………………………………………………………13附录A源代码………………………………………………………………………………………14附录B流程图………………………………………………………………………………………27---6-1设计内容与要求我设计的是一个电子通讯录程序,用于管理通讯信息。本程序的要求分为“基本要求”和“创新要求”部分,具体如下:基本要求:(1)要求用C++模块化设计的思想来完成程序的设计;(2)培养上机动手能力,巩固分支结构和循环结构,应用函数和数据结构的知识。(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。(4)程序调试通过后,完成程序文档的整理,加必要的注释。创新要求在基本达到题目要求外,进行创新设计,如界面优美、功能更加完善(如增加按生日先后排序的功能),用不同的cpp文件来实现等。---7-2.设计说明2.1问题描述与功能设计本程序是一个电子通讯录,主要实现对朋友的通讯信息的记录和管理。能够轻松地录入一个朋友的性别、出生日期、通讯地址、电话号码,而且它还提供了浏览、删除、检索和插入功能。1)添加:在原有数据资料的基础上按顺序增加记录;2)删除:给出删除位置,执行删除后,查询是否被删除,显示通讯录的内容;3)查询:给出姓名,列出该记录的信息。4)插入:给出插入位置,执行插入后,查询是否被插入,显示通讯录的内容。对于该问题我用线性表顺序表设计电子通讯录的结构,为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定义所需要的各项信息。一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子通讯录的基本结构。该通讯录功能如下清单1.建立通讯录对通讯录进行录入,实现通讯录最基本的功能建立一个通讯录,进行信息的记忆。2.查看通讯录对已有的通讯信息进行查看,读取信息。3.查找联系人当通讯录中信息太多时,用户可以使用该功能进行对联系人的查找。方便快捷!4.修改联系人当联系人的信息有所更改、变动。用户可以使用该功能进行更改联系人信息。5.删除联系人如果联系人的信息因某种原因,用户不再需要,可以使用该功能删除!6.增加联系人该功能用于解决在建立通讯录后,要增加新的联系人信息。2.2算法与数据结构本程序的算法可以根据程序要实现功能进行算法说明。1.建立通讯录建立通讯录是在函数person*create(int)中实现的。本质上是一个链表的建立。首先我们需要三个指针person*head,*tail=NULL,*temp=NULL进行链表数据的保存。建立表头对指针head分配内存,head=newperson。对分配内存是否成功进行判断if成功,进行数据的输入。else内存分配不成功,结束程序!然后进行表体的建立,因为要输入多次,而且次数是清楚地,所以我用for循环为主体结构,进行表体的建立及朋友信息的录入。---8-2.查看通讯录查看通讯录实质是对链表的遍历。并且是在函数voidoutPut(person*curPer)中实现。循环次数不确定,我选择while循环对数据进行输出。while(curPer)及当curPer不为空(NULL)时,一直循环。当当前指针为空(curPer==NULL)时,跳出循环体。这样就实现了通讯录的查看功能。3.查找联系人本功能的实质就是传入一个关键词(及朋友姓名),然后在链表中进行查找。找到后对该节点进行输出。具体算法是:同时传入两个参数进入person*search(person*curPer,charx[20])函数。如果curPer不为空,就进入while循环,if(strcmp(x,curPer-name)==0)就对curPer保存的数据进行输出。如果直到curPer==NULL还没有得到(strcmp(x,curPer-name)==0),那么就输出“无此朋友信息!”该功能算法解说完毕!!4.修改联系人本功能的实质和“查找联系人”的功能相同。就是传入一个关键词(及朋友姓名),然后在链表中进行查找。找到后对相应数据进行修改!首先传入两个参数到函数voidrevise(person*curPer,charx[20])中。当curPer不为空时进入while循环体。if(strcmp(x,curPer-name)==0)就对curPer储存的信息进行编码如图2-2-1。当输入相应的代码,在if语句的控制下,就可以进行相应的数据的修改。5.删除联系人删除联系人,查找到该联系人,链表调整,删除指定节点!把删除联系人的姓名和表头同时传入函数person*del(person*head,charx[20]),用while循环对链表进行条件遍历。当当前节点的姓名等于传入姓名,跳出循环体。然后对当前节点和前节点进行判断。如果当前节点为空。无此朋友信息。如果前节点为空,删除的是表头。其他情况删除为表体。最后返回head到主函数即可。6.增加联系人在增加联系人这一模块中,因为通讯录是无序的没必要排序,我利用的是加在链表的表尾的方法。把表头传入函数person*insert(person*head),然后定义三个指针person图2-2-1---9-*newPer,*prePer=NULL,*curPer=head,用while循环找到表尾,再为newPer分配内存空间,if分配成功进行数据的输入。else不成功,返回主函数。7.桌面输出本模块就是一个简单的cout语句,但经过输出控制做出了漂亮的桌面。8.退出系统本功能的算法很简单。适用于用户确认退出此程序的界面。If-else语句控制。当用户输入相应的代码。程序执行退出系统还是返回!数据结构表structbirthday{intyear;intmonth;intday;};structmessage{charaddress[30];intpostCode;};structperson{charname[20];charsex[5];birthdaybirth;messagemes;person*next;};序号成员名数据类型字段含义1naneChar[20]名字2sexChar[5]性别3birthbirthday生日4mesmessage通讯信息5yearint年6monthint月7dayint日8addresschar[30]通讯地址9postCodeint通讯邮编---10-2.3函数定义我总共定义了八个函数分别用于1.建立通讯录2.查看通讯录3.查找联系人4.修改联系人5.删除联系6.增加联系人7.桌面输出8.退出系统函数名分别为person*create(intm)、voidoutPut(person*curPer)、person*search(person*curPer,charx[20])、voidrevise(person*curPer,charx[20])、person*del(person*head,charx[20])、person*insert(perso