1、概述 1系统分析 22.1 要求 2设计一个实用的小型通讯录,用双向链表做数据结构,编写一个通讯录管进行查找、删除信息等功能。每条信息包含:姓名、性别、电话、地址。 22.2 各功能模块分析 2概要设计 33.1 功能流程图(调用关系图) 3详细设计 34.1 设计内容 34.2 为了实现通讯录管理的集中操作功能,设计一个含有多个菜单项的主控菜单程序,再为这些菜单配上相应的功能。 44.3 主界面设计 64.4 菜单内容 6运行与测试 75.1 程序编译运行后建表: 75.2 通讯链表的插入: 75.3 通讯者的查询: 85.4 通讯者结点的删除: 85.5 通讯录链表的输出: 95.6 退出
2、系统: 9总结与心得: 97.1.调试分析: 97.2 调试中遇到的问题: 10参考文献: 11附代码: 11概述 1.用数据结构 中的双向链表作数据结构,结合 C 语言基本知识。编写一个通讯录管 理系统。了解并掌握数据结构与算法 的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系 统设计、程序编码、测试等基本方法和技能;2.本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,通讯录系统是在学校常见的计算机信息管理系统。它的主要任务是对学生信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。系统分析2.
3、1 要求设计一个实用的小型通讯录,用双向链表做数据结构,编写一个通讯录管理 系统实现通讯录信息的输入、添加、显示、以姓名做关键字进行查找、删除信息等功能。每条信息包含:姓名、性别、电话、地址。2.2 各功能模块分析(1)主函数:可让用户选择用系统的哪个功能,从而去连接到相应的子函数;(2)建立数据:让用户输入通讯录里的内容,并将内容保存好;(3)插入数据:显示通讯录里已保存的数据;(4)查找数据:通过用户输入需要找的名字来找到相关资料;(5)删除数据:让用户删除想要删除的资料;(6)输出数据:使通讯录里的数据输出来;概要设计3.1 功能流程图(调用关系图)详细设计4.1 设计内容现假设链表结点
4、仅含有一个数据域和一个指针域,数据域是为了描述通讯者的相关信息,定义通讯者的结点类型:Typedef structChar num5;Char name9;Char sex3;Char phone13;Char addr31;DataType;因此,线性表的链式存储结构定义如下:Typedef struct nodeDataType data;Struct node*next;ListNode;Typedef ListNode*LinkList;ListNode*p;LinkList head;4.2 为了实现通讯录管理的集中操作功能,设计一个含有多个菜单项的主控菜单程序,再为这些菜单配上相应
5、的功能。#include#includevoid main()for(;)switch(menu_select()case 1:printf(“通讯录链表的建立n“);break;case 2:printf(“通讯者结点的插入n“);Break;case 3: printf(“通讯者结点的查询n“);break;case 4:printf(“通讯者结点的删除n“);break;case 5:printf(“通讯录链表的输出n“);break;case 0:printf(“再见n“);return;2.设计一个函数 menu_select()来输出提示信息和处理输入。3.设计五个功能函数。*建立
6、通讯录链表的函数 LinkList CreateList(void)*通讯者信息的插入函数 void InsertNode(LinkList ;))中,使完成每一步操作都回到到选择操作的主界面。4.4 菜单内容程序运行后,给出 6 个菜单的输入内容和输入 提示:1 通讯录链表的建立2 通讯者结点的插入3 通讯者结点的查询4 通讯者结点删除5 通讯录链表的输出0 退出管理系统选择 0-5:运行与测试5.1 程序编译运行后输入如下:建表5.2 通讯链表的插入如下:5.3 通讯者的查询如下:5.4 通讯者结点的删除:5.5 通讯录链表的输出如下:5.6 退出系统:总结与心得7.1.调试分析经过反复测
7、试,最终提供了一个较为友好的界面和操作模式,而且容错能力较好,稳定性很强。下面做一些简单的说明:(1)2 级菜单只是作为一种尝试,并非必须!(2)在界面排版上,我学习了互联网上部分程序的界面编排,其中以格式控制方式显示提 高了界面显示的稳定性,较为理想。(3)在文件读取和保存方面,该程序做到了实时保存保存和读取,操作非常简便。(4)在查找方面,我将其设计为一次多记录的显示方式,也更合乎操作习惯,界面较为友 好,对于无符合条件的结果,只是结果集为空,界面保持不变。同时,它是实时读取 的,可以将刚刚输入而未保存的记录也读取到!另外,一次查询结束后返回的是查询 菜单,可以直接进行下一次的查询,也较为
8、合理。(5)删除功能我做了较多的工作,但是还是没有成功。对于输入的姓名,查找出 结果后提示是否删除。若有重名,则会二次显示,提示是否删除,一直到所有记录查询 结束(可以在重名中选中需要的进行删除,并不需要删除每一个纪录) 。结束之后可以 直接再次删除其他纪录,因为它提供循环删除操作功能。7.2 调试中遇到的问题:(1)对于 continue,很多时候要慎重,它似乎容易导致与 go 类似的错误!我曾遇到了 这么个问题:调用了 search 函数之后再调用 enter 函数输入新的记录,输入结束之 后会直接转入search 函数在 continue 之后的部分,执行结果使得界面混乱!后来将 continue 后面的部分移出循环体,这个问题得到了解决!但还是不甚明了其中内 含!(2)对于文本的排版还有些问题。您可以看到,通讯录文件的内容相对较乱,没有以 一行一记录的形式保存。多次尝试后无果,希望老师能给以解答!参考文献1 严蔚敏,吴伟民 编著. 数据结构(C 语言版)北京: 清华大学出版社,2007.2 谭浩强 编著 C 程序设计(第三版)北京:清华大学出版社,20083 刘振安,孙忱,刘燕君 编著 C 程序设计课程设计北京:机械工业出版社,2007