数据结构课设说明书

上传人:ta****u 文档编号:201705704 上传时间:2023-04-20 格式:DOCX 页数:26 大小:520.50KB
收藏 版权申诉 举报 下载
数据结构课设说明书_第1页
第1页 / 共26页
数据结构课设说明书_第2页
第2页 / 共26页
数据结构课设说明书_第3页
第3页 / 共26页
资源描述:

《数据结构课设说明书》由会员分享,可在线阅读,更多相关《数据结构课设说明书(26页珍藏版)》请在装配图网上搜索。

1、1 引言通讯录是用来记载、查询联系人通讯信息的工具。电子通讯录已成为手机、电子词 典等电子设备中不可缺少的工具软件。通讯录管理系统能有效地管理通讯录相关信息, 包括输入、查询、添加、修改、删除等功能,该软件给用户提供了一个简单的人机界面 用户可以根据提示信进行各种操作。本设计使用的编程语言是 C 语言。2 问题分析(1) 本题目主要涉及线性表的基本操作。(2) 通讯录中的记录通常按记载顺序先后有序,因此选用线性表;如果考虑到很少删 除联系人,并且新增联系人又添加在表尾,则可采用顺序表;但是如果考虑到在任何位 置插入或删除操作,因涉及经常性的插入和删除,则应优先考虑采用链表。通过上述分析,我选择

2、单链表存储结构,通讯录存储结构如下:typedef struct /通讯录结点类型char num5;/编号char name9; /姓名char phone13; /电话char email30; /邮箱号char kind16; /类别 DataType;typedef struct node /结点类型定义DataType data; /结点数据域struct node *next; /结点指针域 ListNode;3 总体设计该通讯录系统是采用链表结构来实现其新建联系人列表、插入、修改、删除、查询 功能的。首先通过尾插法建立链表,并依次输入联系人的姓名、联系电话、邮箱号类别 等相关信息

3、。再编写插入、查找、修改、删除、输出等函数,分别对链表中的结点实行 以上操作。其系统模块结构图如下图所示:通讯录管理系统输入信息查询信息插入信息删除图 3-1 系统模块结构图 输入:记录的录入。 显示;通讯录显示。 查找:按指定方式,输入关键字,查找指定记录。 插入:实现记录的添加或在指定位置插入新记录。 删除:提供指定记录的删除功能。 修改:提供修改某条记录的功能。 退出:结束程序运行。总体流程图如下:图 3-2 系统模块功能图4 详细设计该通讯录管理系统可以划分为录入模块、查询模块、修改模块、删除模块、输出模 块等。使用链表优化了插入操作,通过比较和指针移动来实现其修改和删除功能,而大 大

4、减少了元素的移动。在录入模块里,需要通过新建链表来录入联系人的相关信息,并 判断录入的有关信息是否合法;插入操作是通过在链表里添加结点来实现的;查询模块 可以实现按编号或姓名来查询链表里已有的联系人并输出其相关信息;修改模块是先调 用查找函数在链表中找到记录并确认修改后,重新输入联系人的信息来达到修改的目的 的;同样,删除模块也是通过调用查找函数查找到相关记录并确认删除后,来执行删除 操作并释放该结点的;输出模块是通过调用函数来输出链表里的记录的。因此,对该通 讯录系统实现的操作函数有:LinkList CreateList(void);void InsertNode(LinkList hea

5、d,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);void ChangeNode(LinkList head);4.1 录入模块录入联系人的信息。4.1.1 设计思路(1) 添加联系人函数 LinkList CreateList(void);(2) 定义指向结构体变量的指针;(3) 移动指针,找到插入结点;(4) 在要插入的结点输入信息。4.1.2 流程图开始新建链表输入类别输入邮箱号输入电话输入编号输入的类别是否合法无该分组录入是

6、否重 复此联系人已存在4.2 查询模块查找联系人的信息。4.21 设计思路为:(1) 定义查找联系人函数 ListNode *ListFind(LinkList head)(2)定义指向结构体变量的指针;(3)移动指针,找到待查找结点;(4)输出待查找联系人的相关信息。4.22流程图图 4-2 查询模块功能图4.3 删除模块删除联系人的信息4.31 设计思路为:(1) 定义删除联系人函数 void DelNode(LinkList head)(2)定义指向结构体变量的指针;(3)移动指针,找到待删除结点;(4)确认删除后,删除该联系人,释放其结点。4.32 流程图1r删除记录r开始yn删除成功

7、4.4 修改模块修改联系人的信息。4.41 设计思路(1) 定义删除联系人函数 void ChangeNode(LinkList head)(2)定义指向结构体变量的指针;(3)移动指针,找到待修改结点;(4)确认修改后,修改该联系人。4.42 流程图N4.5 输出模块模块功能介绍:4.5.1 设计思路(1)定义输出联系人函数 void PrintList(LinkList head)(2)定义指向结构体变量的指针;(3)通过移动指针,依次查询链表中所有节点;(4)输出联系人的所有信息。4.5.2 流程图:图 4-5 输出模块流程图5 运行测试*(1) 开始试运行界面如下:通信录链表通信录链表

8、建立 通信录链表插入 通信录链表查询 通信录链表删臨 通信录链表输由 通信录链表慝改 退出管理系统(2)通讯0joooooooc 图比开开始运行界面jooooooooc斥立界面如下: 0 6:立界当录入重复时(根据序号判断):图 5-2 根据序号判断录入重复界面当输入的类别不符合时:添抑的编号匸12添卽的姓名匸1luxla电话匸1S123496632liuxia(?126. com裘别类:朋友B类:亲人C类:同事卄 无该分组,请重新录入!继续建表?(3)通讯录链表插入界面如下:(4)通讯录图 5-4 通讯录链表查询界面:stillliuxia:-:-:-:-:-:-:-: : :-:-:-:-

9、:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-编号“姓名佃电话1邮箱号瞪盹类别添加的编号:添加的姓名:添加的邮箱号:(5) 按姓名查询界面如下:图 5-5 按姓名查询界面(6) 通讯录链表删除界面如下:请选择菜单号06:3iisi股有查到矗霸!1TW删除后查询界面如下:- 通讯录信息的查询 *图 5-6 删除联系人后的运行界面7)通讯录链表修改界面如下:修改后查询界面如下:通诃录信息的查询:Bllll图 5-7 通讯录链表修改后界面8)通讯录链表输出界面如下:图 5-8 通讯录链表输出界面6 总结本次课程设计的题目是通讯录管理程序设计。此管理程序适合于小型

10、通讯录的管理 要求联系人信息中包含编号、姓名、类别、手机、邮箱等信息,程序具有数据录入、删 除、修改、浏览、查找等功能,用链表实现这些功能。最终的程序基本实现了所要求的 功能,但在一些方面还不够完善。例如联系人信息的输出格式,虽然尝试了多种输出方 式但最终结果仍不够满意。因此,在以后的学习中,我们应积累知识,打开思路,多练 习,才能写出较好的程序。此次课程设计,我体会较大的是应用比理论学习难得多,它 涉及到各种实际问题。但实习时所用到的知识记忆会比较深,理解也较透彻。通过此次课程设计,使我对 C 语言有了更深层次的认识和理解,懂得了灵活运用所 学的知识解决实际问题。同时也增强了我们编写程序的能

11、力,巩固了我们的专业知识。 在计算机技术飞速发展的今天,懂得一门计算机语言是非常重要的。同时我也清醒的认 识到,只要自己肯努力,愿意付出劳动,不怕困难,不怕麻烦,就一定可以得到自己想 要的收获的。数据结构课程设计培养了我们独立分析问题,思考问题,解决问题的能力,让我们 更加适应计算机行业飞速发展的日新月异的形势。虽然编程是一件非常枯燥的事情,但 是只要肯动脑、善思考,就一定会成功的。参考文献1 严蔚敏,吴伟民数据结构2 苏仕华数据结构课程设计3 滕国文数据结构课程设计北京北京北京清华大学出版社 机械工业出版社 清华大学出版社20082010.2010.附录全部程序代码如下:#include#i

12、nclude #include int flag=0;typedef struct /通讯录结点类型char num5; /编号char name9; /姓名char phone13; /电话char email30; /邮箱号char kind16; /类别 DataType;typedef struct node /结点类型定义DataType data;/结点数据域struct node *next; /结点指针域 ListNode;typedef ListNode *LinkList;LinkList head;ListNode *p;/函数说明部分/LinkList CreateLi

13、st(void);void InsertNode(LinkList head,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);void ChangeNode(LinkList head);/*尾插法建立带头结点的通讯录链表算法*/LinkList CreateList(void) char num5;char A,B,C;LinkList head=(ListNode *)malloc(sizeof(ListNode); / 申请头结

14、点 ListNode *p,*rear;int x;char flag=y; /结束标志置 0rear=head; /尾指针始终指向尾结点,初始指向头结点 while (flag=y)p=(ListNode *)malloc(sizeof(ListNode);/申新结点类别(16)n);printf(编号(5)姓名电话(13)邮箱号(30)printf(n);printf(n 添加的编号:n);scanf(%s,p-data.num);printf(n 添加的姓名:n); scanf(%s,p-data.name);printf(n 电话:n);scanf(%s,p-data.phone);p

15、rintf(n添加的邮箱号:n);scanf(%s,p-data.email);printf(n类别(A类:朋友B类:亲人C类:同事):n);scanf(%s,p-data.kind);if(p-data.kind0!=A) if(p-data.kind0!=B) if(p-data.kind0!=C)printf(”无该分组,请重新录入! );rear-next=p;/新结点连接到尾结点之后rear=p;/尾指针指向新结点printf(继续建表?(y/n):);scanf(%c,&flag); scanf(%c,&flag);printfC输入 x);scanf(%d,&x);printf(

16、请输入编号!); scanf(%s,num);if(!strcmp(p-data.num,num)printf(此联系人已存在!请重新添加!);rear-next=NULL;/终端结点指针置空return head;/返回链表头指针/*在通讯录链表 head 中插入结点*/ void InsertNode(LinkList head,ListNode *p)ListNode *p1,*p2;p1=head;p2=p1-next;while(p2!=NULL & strcmp(p2-data.num,p-data.num)next; /p2 指向表的下一个结点p1-next=p;/插入 p 所指

17、向的结点p-next=p2;/连接表中剩余的结点/*有序通讯录链表的查找 */ListNode *ListFind(LinkList head)ListNode *p;char num5;char name9;char pp;printf(=n); printf( a. 按编号查询n);printf( b. 按姓名查询n);printf(=n); printf( 请 选 择: ); p=head-next;scanf(%c,&pp);if (pp=a|pp=A)printf(请输入要查找者的编号:”);scanf(%s,num);/没有查到要查找的while (p&strcmp(p-data.

18、num,num)next; if (p=NULL)|strcmp(p-data.num,num)0) p=NULL; 通讯信息elseif (pp=b|pp=B)printf( 请输入要查找者的姓名: );scanf(%s,name); while(p&strcmp(p-data.name,name)!=0) p=p-next; return p;void DelNode(LinkList head)char cho;ListNode *p,*q;p=ListFind(head);/调用查找函数if (p=NULL)printf(没有查到要删除的通讯者!n);return;else if(p!

19、=NULL)printf(嗔的要删除该结点吗?(y/n);scanf(%c,&cho);scanf(%c,&cho);if (cho=y|cho=Y)q=head;while (q!=NULL)&(q-next!=p) q=q-next;q-next=p-next;/删除结点free(p);/释放被删结点空间printf(“删除成功! n);void ChangeNode(LinkList head)int x;char cho;char num5;ListNode *q;q=ListFind(head); /调用查找函数if (q=NULL)printf(没有查到要修改的通讯者!n);ret

20、urn;else if(q!=NULL)printf(嗔的要修改该结点吗? (y/n);scanf(%c,&cho);scanf(%c,&cho);if (cho=y|cho=Y)printf(”请重新输入该联系人的信息:n);printf(编号姓名类别电话邮箱号n);scanf(%s%s%s%s%sn,q-data.num,q-data.name,q-data.kind,q-data.phone,q-data.emai l);q=q-next;prints修改成功! “);scanf(%d,&x);/*通讯录链表的输出函数 */printf(%s,%s,%s,%s,%sn,p-data.nu

21、m,p-data.name,p-data.phone,p-data.email,p-data.kind);printf(n);p=p-next;/后移一个结点void main()int choice,j;while(j)printf(nnnnn);printf(tttt 通 信 录 链 表 n); printf(nttt*);printf(nttt*1-通信录链表建立 *) void PrintList(LinkList head)ListNode *p;p=head-next;printf( 编号 姓名 联系电话 邮箱号 类别n);printf( n );while (p!=NULL)pr

22、intf(nttt*2-通信录链表插入*);printf(nttt*3-通信录链表查询*);printf(nttt*4-通信录链表删除*);printf(nttt*5-通信录链表输出*);printf(nttt*6-通信录链表修改*);printf(nttt*0-退出管理系统*);printf(nttt 请选择菜单号(0-6):);scanf(%d,&choice);getchar();switch(choice)case 1:. j1111A-g -* - -I-J#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#

23、J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J* 1-,|printf(* 通 讯 录 链 表 的 建 立 *n); j /1111A-g -* - -I-J#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J* 1-,|head=CreateList( );flag=1; system(cls); break;case 2:if(flag!=l) printf(请先建立表!); system(cls);j / 111

24、1 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* 1 - , | printf(* 通 讯 者 信 息 的 添 加 *n);j / 1111 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J

25、* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* 1 -data.num); printf(n 添加的姓名:n);scanf(%s,p-data.name);printf(n 电话:n); scanf(%s,p-data.phone);printf(n添加的邮箱号:n); scanf(%s,p-data.email);printf(n 类别:n);scanf(%s,p-data.kind); InsertNode(head,p); system(cls); break;case 3:if(flag!=lllflag!=2) printf( 请先

26、建立表!);system(cls); else j 11 11 A-g -* - -I- J 1 - , | printf(* 通 讯 录 信 息 的 查 询 *n); j / 1111 A-g -* - -I- J #J* #J* #J* #J* 1 -data.num,p-data.name,p-data.phone,p-data.email,p-d ata.kind);printf(n);else printf(“没有查到要查询的通讯者! n);break;case 4: if(flag!=1) printf(请先建立表!); elseprintf(* 通 讯 录 信 息 的 删 除 *

27、n);. j1111 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* 1 - ,| DelNode(head);/删除结点break;case 5:if(flag!=lllflag!=2) printf( 请先建立表!);else j / 1111 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #

28、J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* 1 - ,| printf(* 通 讯 录 链 表 的 输 出*n); j / 1111 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #

29、J* #J* #J* #J* #J* 1 - ,| PrintList(head);break;case 6:if(flag!=1llflag!=2) printf(请先建立表!);else j / 11 11 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* 1 - ,| printf(* 通 讯 录 信 息 的 修 改*n); j / 11 11 A-g -* - -I- J #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* 1 - ,| ChangeNode(head); /修改结点break;case 0:j=0;system(cls);break;default:printf(ttn 输入有错,请重新输入!n); system(cls);break;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!