会员注册 | 登录 | 微信快捷登录 QQ登录 微博登录 | 帮助中心 人人文库renrendoc.com美如初恋!
站内搜索 百度文库

热门搜索: 直缝焊接机 矿井提升机 循环球式转向器图纸 机器人手爪发展史 管道机器人dwg 动平衡试验台设计

   首页 人人文库网 > 资源分类 > DOC文档下载

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

  • 资源星级:
  • 资源大小:210.50KB   全文页数:10页
  • 资源格式: DOC        下载权限:注册会员/VIP会员
您还没有登陆,请先登录。登陆后即可下载此文档。
  合作网站登录: 微信快捷登录 支付宝快捷登录   QQ登录   微博登录
友情提示
2:本站资源不支持迅雷下载,请使用浏览器直接下载(不支持QQ浏览器)
3:本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

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

题目通讯录管理子系统一、问题描述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{|i1,2,,n1}。操作集合1LinkListCreateListvoid建立一个带头结点的通讯录单链表2voidInserNodeLinkListhead,ListNodep在带头结点的通讯录链表中插入结点3ListNodeListFindLinkListhead在带头结点的通讯录链表中查找结点4voidDelNodeLinkListhead在带头结点的通讯录链表中删除结点5voidPrintListLinkListhead输出带头结点的通讯录链表中各个结点的值6voidBubblesortLinkListhead将带头结点的通讯录链表中各个结点按通讯者编号排序。}ADThlink_list12.见图3.见图四、详细设计1.元素类型,结点类型,指针类型typedefstruct{//通讯录结点类型intnum//编号charname9//姓名charsex3//性别charphone13//电话charaddr31//地址}DataType2typedefstructnode{//结点类型定义DataTypedata//结点数据域structnodenext//结点指针域}ListNodetypedefListNodeLinkListLinkListhead//定义指向单链表的头指针ListNodep//定义一个指向结点的指针变量intn0intperson102.部分基本操作的伪码算法如下intmenu_select//{//菜单选择函数程序intsnprintf通讯录管理系统\nprintf\nprintf1通讯录链表的建立\nprintf2通讯录结点的插入\nprintf3通讯录结点的查询\nprintf4通讯录结点的删除\nprintf5通讯录链表的输出\nprintf6通讯录链表的人数\nprintf7按通讯者编号排序\nprintf0退出管理系统\nprintf\nprintf请选择07for{scanfd,snifsn7printf\n\t输入错误,重选07elsebreak}returnsn}LinkListCreateListvoid//{//尾插法建立带头结点的通讯录链表算法LinkListheadnewListNode//申请头结点ListNodep,rearintflag0//结束标志置0rearhead//尾指针初始指向头结点3whileflag0{pListNodemallocsizeofListNode//申请新结点printf编号姓名8性别2电话11地址31\nprintf\nscanfdssss,pdata.num,pdata.name,pdata.sex,pdata.phone,pdata.addrnrearnextp//新结点连接到尾结点之后rearp//尾指针指向新结点printf结束建表吗1/0scanfd,flag//读入一个标志数据}rearnextNULL//终端结点指针域置空returnhead//返回链表头指针}voidInsertNodeLinkListhead,ListNodep//{//在通讯录链表head中插入结点ListNodep1,p2p1headp2p1nextwhilep2NULLp2data.numdata.num{p1p2//p1指向刚访问过的结点p2p2next//p2指向表的下一个结点}p1nextp//插入p所指向的结点npnextp2//连接表中剩余部分}ListNodeListFindLinkListhead//{//有序通讯链表的查找ListNodepintnumcharname9intxzprintf\nprintf1.按编号查询\nprintf2.按姓名查询\nprintf\nprintf请选择pheadnext//假定通讯录表带头结点4scanfd,xzifxz1{printf请输入要查找者的编号scanfd,numwhileppdata.numnextifpNULL||pdata.numnumpNULL//没有查到要查找的通讯者}elseifxz2{printf请输入要查找者的姓名scanfs,namewhilepstrcmppdata.name,name0ppnext}returnp}voidDelNodeLinkListhead//{//通讯录链表上结点的删除charjxListNodep,qpListFindhead//调用查找函数ifpNULL{printf没有查到要删除的通讯者\nreturn}printf真的要删除该节点吗1/0scanfd,jxifjx1{qheadwhileqNULLqnextpqqnextqnextpnext//删除结点freep//释放被删除的结点空间nprintf该通讯者已被删除\n}}voidPrintListLinkListhead//{//通讯录链表的输出函数5ListNodeppheadnext//因为链表带头结点,使p指向链表开始结点printf编号姓名性别联系电话地址\nprintf\nwhilepNULL{printfd,s,s,s,s\n,pdata.num,pdata.name,pdata.sex,pdata.phone,pdata.addrprintf\nppnext//后移一个结点}}voidBubblesortLinkListhead//{//将带头结点的通讯录链表中各个结点按通讯者编号排序inti,j,kListNodeppheadnextfori1idata.numppnext}fori1ii1jifpersonjnextwhilepdata.numpersonkppnext{printfs,s,s,s\n,pdata.name,pdata.sex,pdata.phone,pdata.addr}printf\n}}63.主函数的伪码算法voidmain//{for{switchmenu_select{case1printf\nprintf通讯录链表的建立\nprintf\nheadCreateListbreakcase2printf\nprintf通讯者信息的添加\nprintf\nprintf编号姓名8性别电话11地址31\nprintf\npListNodemallocsizeofListNodescanfdssss,pdata.num,pdata.name,pdata.sex,pdata.phone,pdata.addrInsertNodehead,pbreakcase3printf\nprintf通讯录信息的查询\nprintf\npListFindheadifpNULL{printf编号姓名性别联系电话地址\nprintf\nprintfd,s,s,s,s\n,pdata.num,pdata.name,pdata.sex,pdata.phone,pdata.addrprintf\n}elseprintf没查到要查询的通讯者\nbreakcase4printf\nprintf通讯录信息的删除\nprintf\nDelNodeheadbreakcase57printf\nprintf通讯录链表的输出\nprintf\nPrintListheadbreakcase6printf\nprintf求通讯者人数\nprintf\nprintf\n\t通讯者人数为d\n\n,nbreakcase7printf\nprintf按通讯者编号排序\nprintf\nBubblesortheadbreakcase0printf\t再见\nreturn}}}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安徽高薪科技公司}

注意事项

本文(通讯录管理子系统 [文档在线提供].doc)为本站会员(baixue100)主动上传,人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知人人文库网([email protected]),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

copyright@ 2015-2017 人人文库网网站版权所有
苏ICP备12009002号-5