唐山学院课程设计11引言数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力[1]。通讯录系统是数据结构的一个应用实例。它主要实现信息的建立、插入、删除、修改、查询等功能,在人们的生活中有普遍的应用,如手机通讯录的系统。建立通讯录操作系统可以方便用户对所掌握的信息进行管理,并且可以快速的找到所需要的信息,,或对信息进行更新。2问题分析2.1系统分析“通讯录管理系统”主要是实现通讯录的建立、插入、删除、查询及删除等操作功能.由于链表在空间的合理利用上和插入、删除时不需要移动的优点,在很多情况下,它是线性表的首选存储结构[2]。线性表的顺序存储的特点是逻辑关系上的相邻的两个元素在物理位置上也相邻,因此可以随机的存取表中的任一元素[3]。“通讯录管理系统”用单链表作为系统的存储结构,用结点记录单个人的全部信息,主要包括编码、姓名、类型、手机号、电子邮箱等。2.2存储结构定义typedefstructnode{/*定义结点*/intnum;/*定义编码类型*/charname[20];/*定义姓名类型*/chartype[30];/*定义个人所属类型*/chartel[25];/*定义手机号类型*/charmail[25];/定义电子邮箱类型*/structnode*next;/*定义指针域*/}node;3总体设计3.1设计思路“通讯录管理系统”首先定义存储结构,然后,设计主函数,其中包含通讯录的建立、通讯录的输出、插入、删除、查询、修改、退出系统等选项;根据选项,设计各个子函数模块来实现这些功能[2]。个人信息包括编号、姓名、类型、手机号、电子邮箱等内容,通讯录的各项功能均针对以上信息进行操作。通讯录的建立、输出、插入和删除等功能要同时对以上信息进行操作,通讯录的查询和修改功能可以分别针对姓名、类型、手机号、电子邮箱等选项进行操作。唐山学院课程设计23.2各项功能的具体内容如下:通讯录的建立:记录数据包括:编号、姓名、类型、手机号、电子邮箱。通讯录的输出:包括记录的全部信息。通讯录的插入:包括单个人的姓名、类型、手机号、电子邮箱等信息。通讯录的查询:包括:分别按姓名、类型、手机号、电子邮箱查询。通讯录的删除:包括单个人的姓名、类型、手机号、电子邮箱等信息。通讯录的修改:分别修改姓名、类型、手机号、电子邮箱。退出系统:结束程序运行。3.3系统模块结构图根据程序设计的要求,通讯录管理系统有若干模块组合而成,设计在程序,形成的系统模块结构图如下图所示。图1系统模块结构图4详细设计4.1主函数模块该模块主要实现系统各项功能的选择,例如,通讯录的建立、插入、删除、查询、修改、退出等选项。4.1.1设计思路利用while()和switch()实现主界面的显示与各选项的连接;用a判断是否继续,若a等于n,则退出系统,若a等于y,则继续执行,并清屏。4.1.2流程图通讯录管理系统通讯录的删除退出系统通讯录的插入通讯录的修改通讯录的查询通讯录的建立唐山学院课程设计3图2主函数模块流程图4.2录入模块该模块实现通讯录建立的功能,将编号、姓名、类型、手机号、电子邮箱等信息内容录入。4.2.1设计思路选择选项1,创建带头结点的单链表,将个人信息以结点的形式存入线性链表中,用while()实现各项信息的输入,输入0,返回主菜单,继续执行其他操作功能。4.2.2流程图开始输入编号结束判断编号是否在指定的1-20范围内n录入信息输入0判断是否继续yny图3录入模块流程图唐山学院课程设计44.3输出模块该模块实现信息输出的功能,输出的信息包括编号、姓名、类型、手机号、电子邮箱等信息内容4.3.1设计思路选择选项2,将已存的线性链表中的全部信息按顺序输出,输入0,返回主菜单继续执行其他功能的操作。4.3.2流程图开始定义链表中的结点结束判断结点p是否为空n输出链表中的全部信息y判断是否继续yn图4输出模块流程图4.4删除模块该模块实现删除信息的功能,根据编号,删除结点中存入的编号、姓名、类型、手机号、电子邮箱等信息内容。4.4.1设计思路选择选项3,根据编号删除结点中存入的信息,输入0,返回主菜单,执行其他选项的功能操作。4.4.2流程图唐山学院课程设计5开始输入i结束判断i与编号是否相等n删除结点的信息y输入0判断是否继续yn图5删除模块流程图4.5插入模块该模块实现信息插入的功能,输入编号后,按顺序输入编号、姓名、类型、手机号、电子邮箱等信息内容。4.5.1设计思路选择选项4,将新生成的结点s插入到链表中,采用尾插法,后插入的结点的位置在表尾,输入0,返回主菜单,执行其他选项的功能操作。4.5.2流程图唐山学院课程设计6开始生成新的结点结束判断链表的尾结点是否为空n将结点插入到链表中y判断是否继续输入0yn图6信息插入模块流程图4.6查询模块该模块实现信息查询的功能,根据选项分别可以按查询姓名、类型、手机号、电子邮箱等信息内容进行操作。4.6.1设计思路选择选项5,按选项i查询,输入字符串a,若在已存入的信息中有与字符串a相等的信息,则输出查询结果,输入0,返回主菜单,执行其他选项的功能操作。4.6.2流程图唐山学院课程设计7开始按选项查询输入0结束输入i,判断i是否在1-4范围内yn输出查询结果判断是否继续ny图7信息查询模块流程图4.7修改模块该模块实现信息修改的功能,根据选项,可以分别修改姓名、类型、手机号、电子邮箱等信息内容4.7.1设计思路选择选项6进入修改功能,按选项j进行修改结点k的信息,输入字符串b,若b与结点k中的相对应的信息不相等,则执行修改操作,并输出修改后的结果,输入0,返回主菜单,执行其他选项的功能操作。4.7.2流程图唐山学院课程设计8开始按选项修改输入编号,判断所输编号内容是否存在结束输入j,判断j是否在1-4范围内ynny输入0判断是否继续ny图8信息修改流程图5运行测试5.1主函数界面图9通讯录建立的运行图根据程序用例分析,测试输出结果正确。5.2通讯录的建立唐山学院课程设计9图10通讯录建立的运行图根据程序分析,录入信息符合要求,经调试后,程序正确。输入0,返回主菜单界面,继续执行下列操作。.5.3通讯录的输出图11通讯录输出的运行图根据调试用例分析,输出结果符合要求,程序正确无误。5.4通讯录的插入唐山学院课程设计10图12通讯录输入的运行图根据程序用例分析,输出结果符合要求,程序正确。5.5通讯录的查询5.5.1按姓名查询的界面图13按姓名查询的运行图根据调试用例分析,输出结果符合要求,程序正确。5.5.2按电话号码查询的界面图14按电话号码查询的运行图根据调试用例分析,输出结果符合要求,程序正确。5.5.3按类型查询的界面唐山学院课程设计11图15按类型查询的运行图根据调试用例分析,输出结果符合要求,程序正确。5.5.3按电子邮箱查询的界面图16按电子邮箱查询的运行图根据调试用例分析,输出结果符合要求,程序正确。5.5.4输入选项不正确的界面图17输入不正确的运行图根据程序分析,当输入不正确时,显示以上信息,经调试,程序正确。5.6删除编号1的信息后的结果唐山学院课程设计12图18删除编号1的信息后的运行图根据程序分析,当删除编号1的信息后,输出结果如上图,经调试,程序正确。5.7修改界面5.7.1修改姓名图19修改姓名后的运行图根据调试用例分析,修改编号3的姓名,输出上图的结果,经调试,程序正确。5.7.2修改类型图20修改类型后的运行图根据调试用例分析,修改编号3的类型,输出上图的结果,经调试,程序正确。5.7.3修改手机号图21修改手机号后的运行图根据调试用例分析,修改编号3的手机号,输出上图的结果,经调试,程序正确。5.7.4修改电子邮箱唐山学院课程设计13图22修改电子邮箱后的运行图根据调试用例分析,修改编号3的手机号,输出上图的结果,经调试,程序正确。5.7.5输入信息错误的界面图23输入错误的运行图根据程序内容,当输入信息不符合要求时,提示上图信息,经调试,程序正确。6、总结“通讯录管理系统”的操作总结如下:主函数,可让用户选择用系统的哪个功能,从而去连接到相应的子函数;建立链表,让用户输入通讯录里的内容,并将内容保存好;输出信息,显示通讯录里已保存的全部信息;删除信息,让用户删除想要删除的资料;插入信息,让用户插入想要插入的单个人的全部资料;查找信息,用户可以分别按选项来查找到相关信息和资料;修改信息,用户可以分别按选项来修改想要修改的个人资料.该系统的设计存在缺点和不足:(1)不能提前存入一些用户信息,(2)没有用到文件来存储信息,(3)不能对信息进行排序.在本次设计中的收获和体会:(1)通过该课程设计,掌握了用数据结构和C语言的相关知识进行程序设计的基本方法和操作,熟悉了程序设计的流程图,对课本上的知识有了更深的理解。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。(2)通过该课程设计,全面系统的理解了C语言和数据结构程序设计构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的程序设计的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。(3)在设计过程中,需要不断的对程序,进行修改和调整,在这个过程中,对程序设计有了更深刻的认识,程序的设计需要认真的态度和足够的耐心,要尽最大的努力将程序优化。7参考文献[1]严蔚敏,吴伟民.数据结构.北京:清华大学出版社,2008.唐山学院课程设计14[2]苏仕华等,数据结构课程设计,机械工业出版社.[3]何钦铭,颜晖,C语言程序设计,高等教育出版社.8附录#includestdio.h#includestdlib.h#includestring.h#includewindows.h#defineN20typedefstructnode{/*结点类型定义*/intnum;charname[20];chartype[30];chartel[25];charmail[25];structnode*next;/*指针类型定义*/}node;typedefnode*Status;唐山学院课程设计15StatusCreate(node*h);/*创建带头结点单链表*/voidprint(node*h);/*输出单链表h各个结点的信息*/Statusdel(node*h,inti);/*删除表h中编号为i的结点*/StatusInsert(node*h);/*插入*/voidFind(node*h);/*查询并显示*/StatusModify(node*h);/*修改链表h中的信息*/voidmain()/*主函数*/{node*h;intchoice,n;chara;while(n){printf(*******************************************************\n);printf(||\n);printf(|通讯录管理系统|\n);printf(|--刘月尚|\n);printf(|1.通讯录的建立|\n);printf(|2.通讯录的输出|\n);printf(|3.通讯录的插入|\n);printf(|4.通讯录的查询|\n);printf(|5.通讯录的删除|\n);printf(|6.通讯录的修改|\n);printf(|0.退出系统|\n);printf(||\n);printf(******************************************************\n);printf(请选择:);scanf(%d,&choice);switch(choice){case1:h=Create(h);break;case2:print(h);break;case3:Ins