通讯录管理子系统 [文档在线提供].doc通讯录管理子系统 [文档在线提供].doc

收藏 分享

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

题目通讯录管理子系统一、问题描述1.题目内容使用有关单链表的操作来实现通讯录信息系统的管理。2.基本要求首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。这几种操作功能包括单通讯录链表的建立,通讯者的插入,通讯者的删除,通讯者的查询,通讯录表的输出,通讯者人数的统计以及按通讯者编号排序等。3.实验目的掌握线性表这一数据结构中最简单、最常用的一种线性结构既线性表的顺序存储结构。4.数据测试见(七.测试结果)5.完成人员郭湫钍完成日期201114二、需求分析1.本程序的功能包括单通讯录链表的建立,通讯录的插入,通讯者的删除,通讯者的查询,通讯录表的输出,通讯者人数的统计以及按通讯者编号排序等。2.程序运行后显现提示信息,等候用户输入07以进入相应的操作功能。3.用户输入数据完毕,程序将输出运行结束。4.测试数据应为通讯者的编号、姓名、性别、联系电话、地址。三、概要设计1.带头结点的单链表抽象数据类型定义为ADTHLINK_LIST{数据集合KK{K1,K2,,KN},N≥0,K中的元素是DATATYPE类型;数据关系RR{R}R{KI,KI1|I1,2,,N1}。操作集合1LINKLISTCREATELISTVOID建立一个带头结点的通讯录单链表;2VOIDINSERNODELINKLISTHEAD,LISTNODEP在带头结点的通讯录链表中插入结点;3LISTNODELISTFINDLINKLISTHEAD在带头结点的通讯录链表中查找结点;4VOIDDELNODELINKLISTHEAD在带头结点的通讯录链表中删除结点;5VOIDPRINTLISTLINKLISTHEAD输出带头结点的通讯录链表中各个结点的值;6VOIDBUBBLESORTLINKLISTHEAD将带头结点的通讯录链表中各个结点按通讯者编号排序。}ADTHLINK_LIST;12.见图3.见图四、详细设计1.元素类型,结点类型,指针类型TYPEDEFSTRUCT{//通讯录结点类型INTNUM;//编号CHARNAME9;//姓名CHARSEX3;//性别CHARPHONE13;//电话CHARADDR31;//地址}DATATYPE;2TYPEDEFSTRUCTNODE{//结点类型定义DATATYPEDATA;//结点数据域STRUCTNODENEXT;//结点指针域}LISTNODE;TYPEDEFLISTNODELINKLIST;LINKLISTHEAD;//定义指向单链表的头指针LISTNODEP;//定义一个指向结点的指针变量INTN0;INTPERSON10;2.部分基本操作的伪码算法如下INTMENU_SELECT//{//菜单选择函数程序INTSN;PRINTF通讯录管理系统\N;PRINTF\N;PRINTF1通讯录链表的建立\N;PRINTF2通讯录结点的插入\N;PRINTF3通讯录结点的查询\N;PRINTF4通讯录结点的删除\N;PRINTF5通讯录链表的输出\N;PRINTF6通讯录链表的人数\N;PRINTF7按通讯者编号排序\N;PRINTF0退出管理系统\N;PRINTF\N;PRINTF请选择07;FOR;;{SCANFD,SN;IFSN0||SN7PRINTF\N\T输入错误,重选07;ELSEBREAK;}RETURNSN;}LINKLISTCREATELISTVOID//{//尾插法建立带头结点的通讯录链表算法LINKLISTHEADNEWLISTNODE;//申请头结点LISTNODEP,REAR;INTFLAG0;//结束标志置0REARHEAD;//尾指针初始指向头结点3WHILEFLAG0{PLISTNODEMALLOCSIZEOFLISTNODE;//申请新结点PRINTF编号姓名8性别2电话11地址31\N;PRINTF\N;SCANFDSSSS,PDATANUM,PDATANAME,PDATASEX,PDATAPHONE,PDATAADDR;N;REARNEXTP;//新结点连接到尾结点之后REARP;//尾指针指向新结点PRINTF结束建表吗1/0;SCANFD,FLAG;//读入一个标志数据}REARNEXTNULL;//终端结点指针域置空RETURNHEAD;//返回链表头指针}VOIDINSERTNODELINKLISTHEAD,LISTNODEP//{//在通讯录链表HEAD中插入结点LISTNODEP1,P2;P1HEAD;P2P1NEXT;WHILEP2NULLP2DATANUMPDATANUM{P1P2;//P1指向刚访问过的结点P2P2NEXT;//P2指向表的下一个结点}P1NEXTP;//插入P所指向的结点N;PNEXTP2;//连接表中剩余部分}LISTNODELISTFINDLINKLISTHEAD//{//有序通讯链表的查找LISTNODEP;INTNUM;CHARNAME9;INTXZ;PRINTF\N;PRINTF1按编号查询\N;PRINTF2按姓名查询\N;PRINTF\N;PRINTF请选择;PHEADNEXT;//假定通讯录表带头结点4SCANFD,XZ;IFXZ1{PRINTF请输入要查找者的编号;SCANFD,NUM;WHILEPPDATANUMNUMPPNEXT;IFPNULL||PDATANUMNUMPNULL;//没有查到要查找的通讯者}ELSEIFXZ2{PRINTF请输入要查找者的姓名;SCANFS,NAME;WHILEPSTRCMPPDATANAME,NAME0PPNEXT;}RETURNP;}VOIDDELNODELINKLISTHEAD//{//通讯录链表上结点的删除CHARJX;LISTNODEP,Q;PLISTFINDHEAD;//调用查找函数IFPNULL{PRINTF没有查到要删除的通讯者\N;RETURN;}PRINTF真的要删除该节点吗1/0;SCANFD,JX;IFJX1{QHEAD;WHILEQNULLQNEXTPQQNEXT;QNEXTPNEXT;//删除结点FREEP;//释放被删除的结点空间N;PRINTF该通讯者已被删除\N;}}VOIDPRINTLISTLINKLISTHEAD//{//通讯录链表的输出函数5LISTNODEP;PHEADNEXT;//因为链表带头结点,使P指向链表开始结点PRINTF编号姓名性别联系电话地址\N;PRINTF\N;WHILEPNULL{PRINTFD,S,S,S,S\N,PDATANUM,PDATANAME,PDATASEX,PDATAPHONE,PDATAADDR;PRINTF\N;PPNEXT;//后移一个结点}}VOIDBUBBLESORTLINKLISTHEAD//{//将带头结点的通讯录链表中各个结点按通讯者编号排序INTI,J,K;LISTNODEP;PHEADNEXT;FORI1;IN;I{PERSONIPDATANUM;PPNEXT;}FORI1;IN;I{FORJN;JI1;JIFPERSONJPERSONJ1{PERSON0PERSONJ;PERSONJPERSONJ1;PERSONJ1PERSON0;}}PRINTF\N;PRINTF最终排序结果是\N;FORK1;KN;K{PRINTFD,,PERSONK;PHEADNEXT;WHILEPDATANUMPERSONKPPNEXT;{PRINTFS,S,S,S\N,PDATANAME,PDATASEX,PDATAPHONE,PDATAADDR;}PRINTF\N;}}63.主函数的伪码算法VOIDMAIN//{FOR;;{SWITCHMENU_SELECT{CASE1PRINTF\N;PRINTF通讯录链表的建立\N;PRINTF\N;HEADCREATELIST;BREAK;CASE2PRINTF\N;PRINTF通讯者信息的添加\N;PRINTF\N;PRINTF编号姓名8性别电话11地址31\N;PRINTF\N;PLISTNODEMALLOCSIZEOFLISTNODE;SCANFDSSSS,PDATANUM,PDATANAME,PDATASEX,PDATAPHONE,PDATAADDR;INSERTNODEHEAD,P;BREAK;CASE3PRINTF\N;PRINTF通讯录信息的查询\N;PRINTF\N;PLISTFINDHEAD;IFPNULL{PRINTF编号姓名性别联系电话地址\N;PRINTF\N;PRINTFD,S,S,S,S\N,PDATANUM,PDATANAME,PDATASEX,PDATAPHONE,PDATAADDR;PRINTF\N;}ELSEPRINTF没查到要查询的通讯者\N;BREAK;CASE4PRINTF\N;PRINTF通讯录信息的删除\N;PRINTF\N;DELNODEHEAD;BREAK;CASE57PRINTF\N;PRINTF通讯录链表的输出\N;PRINTF\N;PRINTLISTHEAD;BREAK;CASE6PRINTF\N;PRINTF求通讯者人数\N;PRINTF\N;PRINTF\N\T通讯者人数为D\N\N,N;BREAK;CASE7PRINTF\N;PRINTF按通讯者编号排序\N;PRINTF\N;BUBBLESORTHEAD;BREAK;CASE0PRINTF\T再见\N;RETURN;}}}4.函数调用关系图见图五、调试分析1.链表中的结点变量是通过指针变量来访问的。因为在C语言中是用P来表示P所指的变量,又由于结点类型是一个结构类型,因此可用PDATA和PNEXT分别表示结点的数据域变量和指针域变量。指针变量的值要么为空NULL,不指向任何结点;要么其值为非空,即它的值是一个结点的存储地址。注意,当P为空值时,则它不指向任何结点,此时不能通过P来访问结点,否则会引起程序错误。2.算法的时空分析81对于本程序的通讯录单链表,其操作运算主要有建立单链表尾插法CREATELIST,查询按编号和按姓名LISTFIND,插入运算INSERTNODE,删除运算DELNODE等。以上各操作运算的平均时间复杂度为ON,其主要时间是耗费在查找操作上。2分析冒泡排序算法BUBBLESORT的时间和空间效率。冒泡排序的时间复杂度为ON。冒泡排序的过程中也只需要一个辅助空间,故空间复杂度为O1。3.实验体会通过对数据结构这门课的学习,我了解到“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须考虑如何组织数据,以便使查找和存取数据元素更为方便。可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一个核心内容,是从事计算机科学研究及其应用的科技工作者必须掌握的重要内容。在课程设计中我更体会到一个好的程序应该是一个所占空间小、运行时间短、其他性能也好的算法。然而,实际上很难做到十全十美,原因是上述要求有时相互抵触。要节约算法的执行时间往往要以牺牲更多的存储空间为代价;而为了节省存储空间又可能要以更多的时间作为代价。因此,只能根据具体情况有所侧重如果程序的使用次数较少,则应该力求算法简明易懂,而易于转换为上机程序;如果程序反复多次使用,则应该尽可能选用快速的算法;如果待解决的问题数据量极大,机器的存储空间较小,则在编写算法时应该考虑如何节省空间。以后在编写程序时就应该注意到所编写程序的时间复杂度,以及是否运用了良好的算法,而不能只是象以前编写程序时单纯使用C的知识,要充分考虑程序的性能,争取编写出更优良的程序来。六、课设总结1.要多操作,掌握的不够熟练2.数据结构这门课还蛮有意思的,多操作,享受那种过程,一次次的调试,不断的完善,有种开心的感觉七、测试结果使用数据组进行测试INPUT1INPUT1001HARRY男13305516896江淮钢铁厂人事处INPUT1003CHARLIE男05647125493皖西工程学院计算机系INPUT1002MATHILDE女13905698437合肥研究分院办公室INPUT2INPUT1004JACKIE男13869185630安徽高薪科技公司INPUT5PRINTLIST{1001HARRY男13305516896江淮钢铁厂人事处1003CHARLIE男05647125493皖西工程学院计算机系1002MATHILDE女13905698437合肥研究分院办公室1004JACKIE男13869185630安徽高薪科技公司}
编号:201312142131576122    类型:共享资源    大小:210.50KB    格式:DOC    上传时间:2013-12-14
  
3
关 键 词:
财务、会计、考试、等级
  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:通讯录管理子系统 [文档在线提供].doc
链接地址:http://www.renrendoc.com/p-216122.html

当前资源信息

4.0
 
(2人评价)
浏览:26次
baixue100上传于2013-12-14

官方联系方式

客服手机:17625900360   
2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   

精品推荐

相关阅读

人人文库
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

网站客服QQ:2846424093    人人文库上传用户QQ群:460291265   

[email protected] 2016-2018  renrendoc.com 网站版权所有   南天在线技术支持

经营许可证编号:苏ICP备12009002号-5