数据结构 通讯录

合集下载

数据结构 通讯录管理系统

数据结构 通讯录管理系统

数据结构通讯录管理系统数据结构通讯录管理系统1、引言1.1 目的和范围本文档旨在详细描述一个通讯录管理系统的设计和实现,以便帮助开发人员了解系统的功能和特性。

本系统可以用于存储和管理个人联系信息,实现添加、删除、修改和查询等功能。

1.2 定义、缩略语和缩写词- 通讯录:存储个人联系信息的系统。

- 系统:通讯录管理系统。

2、总体概述2.1 系统背景通讯录管理系统是为了方便用户管理个人联系信息而开发的软件。

它提供了一系列功能,包括添加联系人、删除联系人、修改联系人信息以及搜索联系人等。

该系统旨在提供一个高效、方便和可靠的通讯录管理解决方案。

2.2 产品功能- 添加联系人:用户可以添加新的联系人,并输入其姓名、方式号码、电子邮箱等信息。

- 删除联系人:用户可以删除已经存在的联系人。

- 修改联系人信息:用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。

- 搜索联系人:用户可以根据姓名、方式号码等信息搜索联系人。

- 显示所有联系人:系统可以显示所有已经存在的联系人。

2.3 用户特点通讯录管理系统的主要用户群体为个人用户,他们需要管理自己的联系人信息。

这些用户对于系统的易用性、稳定性和功能性要求较高,因此系统需要提供简单直观的用户界面,并保证操作的正确性和数据的安全性。

3、系统需求3.1 功能需求3.1.1 添加联系人- 用户可以输入联系人的姓名、方式号码、电子邮箱等信息进行添加。

- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。

- 添加联系人后,系统应该将联系人信息保存到数据库中。

3.1.2 删除联系人- 用户可以删除已经存在的联系人。

- 删除联系人后,系统应该将联系人信息从数据库中删除。

3.1.3 修改联系人信息- 用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。

- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。

- 修改联系人信息后,系统应该将修改后的联系人信息保存到数据库中。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统

一、设计题目(问题)描述和要求某一中学,现在需要建立学生通讯录管理系统,以管理学生信息。

要求:(1)可以录入新的通讯信息(包括姓名,通讯地址,邮编,联系电话等)(2)可以按照姓名进行查询相关信息(3)可以修改相关信息二、系统分析和概要设计根据问题描述和要求,系统要求能够按姓名查找、增加、删除和保存各学生的信息。

确定程序应该具备如下功能:“查询学生信息”、“增加学生信息”、“修改学生信息”“删除学生信息”、“数据存盘”基本模块。

系统可以将学生信息数据保存到磁盘文件student.txt,从而可以通过磁盘文件读出学生数据信息,为了便于统计在生成学生信息时同时生成学生编号,这样每输入一个学生信息编号顺序加1,这样也方便了管理员查询学生信息。

三、详细设计和编码1.数据类型定义根据系统要求,可以将姓名和邮编和联系电话通讯地址定义为字符型。

2.各模块算法描述查询学生信息: Que_name()输入要查询的学生姓名,比较名字和保存的信息是否相同,若相同则查找到,否则,没查找到。

增加学生信息: Add()输入要添加的学生信息并保存。

删除学生信息: Del()输入要删除的学生姓名,若和数据相同则删除,否则输出查找不到该信息。

修改学生信息: Mod()输入要修改的学生姓名,输入要修改的信息,并确认。

数据存盘: Sav()创建文件,将信息写入文件。

3.程序关键算法流程图(1)主函数流程开始创建学生对象显示菜单接受输入根据输入执行学生操作N退出Y结束(2) 某操作算法流程Student:: Add()开始学号增加1输入学生通讯地址 联系电话 邮编号创建学生结点学生结点加入链表结束(3) Student:: Del()查找要删除的结点输入学生学号解除学生结点开始结束结点存在提示未找到4) Student:: Mod()查找学生结点输入学生学号修改结点开始结束结点存在提示未找到(5) Student:: Que_name()浏览学生信息 查找结点输入学生姓名浏览学生信息开始结束结点存在提示未找到(6) Student:: Sav()开始打开学生信息保存文件遍历链表保存学生信息关闭文件打开基础数据库文件保存基础数据库信息数据关闭文件结束(7) Student:: Load()开始打开学生数据信息文件读取基础信息数据关闭文件打开学生信息数据文件读取一条学生信息 记录Y文件未结束N根据学生数据类型创建结点链表加入结点读取下一条信息关闭文件结束四、调试分析(内容包括:调试过程中遇到的问题并且是如何解决的以及对设计实现的回顾讨论和分析;算法的时空分析和改进设想;经验和体会等)五、测试结果六、小结通过本次设计,加强了对于编写管理系统程序的运用,能够更好的运用循环。

数据结构课程设计 通讯录 管理系统

数据结构课程设计 通讯录 管理系统

《数据结构》课程设计题目:学生通讯录管理系统设计与实现院、系:计算机信息与技术系学科专业:计算机科学与技术学号: ********* 学生姓名:**指导教师:目录第一章设计要求 (3)1.1 问题描述 (3)1.2 需求分析 (3)第二章概要设计 (4)2.1 主界面设计 (4)2.2 存储结构设计 (4)2.3 系统功能设计 (4)第三章模块设计 (6)3.1 系统子程序及功能设计 (6)3.2 系统功能图 (7)第四章详细设计 (8)4.1 数据类型定义 (8)4.2 系统主要子程序详细设计 (8)第五章测试分析 (13)第六章源程序清单 (17)第七章工作总结 (18)第八章参考文献 (19)第九章附录—源代码 (20)第一章设计要求1.1 问题描述纸质通讯录已经不能满足大家的要求,容易丢失、查找困难等问题是纸质通讯录所有能克服的缺点。

“学生通讯录管理系统”是为了帮助老师、同学等管理和分析的一种应用程序。

1.2 需求分析1.建立一个新的通讯录2.查询通讯录中满足要求的信息3.插入新的通讯录信息4.删除不需要的通讯录信息5.查看所有通讯录信息6.能将所有的通讯录数据(*.x后缀)保存到磁盘上7.能将磁盘上的通讯录文件(*.x后缀)读到内存中进行操作8.能删除磁盘上已有的通讯录文件9.能释放一个现有通讯录所占的所有内存10.显示当前目录下的所有通讯录文件第二章概要设计2.1 主界面设计主界面的设计关乎到用户的使用体验以及使用效率。

所以一个好的主界面是征服用户的关键因素。

主界面的命令输入方式采用了类似DOS的命令行界面。

下图是输入了help后的界面:2.2 存储结构设计在内存中,通讯录中所有的节点均用单链表将其组织起来。

并在插入的时候按学号有序的排列,便于查找以及其它的操作。

2.3 系统功能设计1.初始化一个新的通讯簿。

2.向通讯簿中增加一条新的记录。

3.输出某个节点的信息。

4.显示通讯簿的所有信息。

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计

通讯录的制作数据结构课程设计一、引言随着互联网和移动设备的普及,通讯录的重要性日益凸显。

通讯录不仅是一个人与人之间联系的桥梁,也是个人和组织之间沟通的纽带。

在数据结构课程设计中,我们将探讨如何制作一个高效、易用且具备良好扩展性的通讯录。

二、通讯录的需求分析在设计通讯录时,我们需要考虑以下需求: 1. 支持添加、删除、修改联系人信息的功能; 2. 支持按姓名、电话号码等属性进行搜索的功能; 3. 支持导入、导出通讯录的功能; 4. 支持多用户共享的功能; 5. 支持通讯录的快速访问和响应;6. 支持对联系人信息进行分类和标记的功能。

三、通讯录的数据结构设计为了满足上述需求,我们需要设计一个合适的数据结构来存储通讯录信息。

一种常见的数据结构是哈希表(Hash Table)。

哈希表可以通过将联系人的属性(如姓名、电话号码)进行哈希运算,将其转换为一个唯一的索引,从而实现快速的插入、搜索和删除操作。

3.1 哈希函数的选择在设计哈希表时,选择合适的哈希函数十分关键。

一个好的哈希函数应具备以下特点: - 均匀性:能够将联系人的属性均匀地映射到哈希表的槽位上,避免出现冲突; - 快速性:计算哈希值的过程应尽量简单、高效; - 低冲突率:尽可能避免多个联系人映射到同一个槽位的情况。

3.2 哈希表的实现我们可以使用数组来表示哈希表的槽位,每个槽位存储一个链表。

链表的节点包含联系人的信息。

当发生冲突时,我们可以使用链表来解决。

3.3 哈希表的性能分析哈希表在理想情况下可以达到常数级的时间复杂度,但在最坏情况下可能会退化为线性时间复杂度。

为了降低冲突率,我们可以使用一些解决冲突的技术,如链地址法、开放地址法等。

四、通讯录的功能实现在通讯录中,我们需要实现添加、删除、修改联系人信息的功能,以及按属性进行搜索等功能。

4.1 添加联系人当用户需要添加一个联系人时,我们首先需要计算联系人的哈希值,并找到对应的槽位。

然后将联系人的信息插入到链表的头部。

数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。

本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。

功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。

链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。

在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。

算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。

查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。

删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。

更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。

系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。

总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。

在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。

通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。

[数据结构课程设计通讯录查询系统实验报告范文及源代码]数据结构通讯录

[数据结构课程设计通讯录查询系统实验报告范文及源代码]数据结构通讯录

[数据结构课程设计通讯录查询系统实验报告范文及源代码]数据结构通讯录工程名称:停车管理系统姓名:学号:专业:软件工程1.需求分析为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的与地址。

设计散列表存储,设计并实现通讯录查找系统。

1.根本要求〔1〕每个记录有以下数据项:号码、用户名、地址;〔2〕从键盘输入各记录,分别以号码为关键字建立散列表;〔3〕采用二次探测再散列法解决冲突;〔4〕查找并显示给定号码的记录;〔5〕通讯录信息文件保存。

2.重点、难点重点:〔1〕通过实验深入理解哈希表既是一种存储形式,又是一种查找方法;〔2〕哈希表的构造;〔3〕哈希冲突方案的设计。

难点:哈希表的构造与哈希冲突方案的设计输入的形式和输入值的范围;输入三个字符串:分别是号码,姓名,地址,每行一个数据字符串长度适当如:号码〔纯数字〕姓名地址输出的形式;如:姓名号码地址程序所能到达的功能。

1:并且通过号码为关键字,用二次再散列法寻找地址储存在哈希表中。

2:3:4:5:显示通讯录6:把通讯录写入文件储存。

2.概要设计(1)数据结构tructlit{chara[12];charname[15];charadd[15];intf=0;};用连续的内存空间构建哈希表tructqtack{tructlit某bae;inti;};(2)程序模块1:构建二次再散列:inti;for(i=1;i<25;i++)d[2某i]=-1某i某i;for(i=1;i<25;i++)/某构造二次再散列某/d[i+i-1]=i某i;2:主菜单:voidinterface(){inti;printf("某某某某某某某某某某某某某某某某某某某某\n");printf("某某某某某某某某某某某某某某某某某某某某\n");canf("%d",&i);witch(i){cae0:return;break;cae1:huru();break;cae2:print();break;cae3:each();break;cae4:del();break;cae5:change();break;cae6:write();break;};}3:输入voidhuru()4:存入哈希表,采用二次探测再散列法解决冲突;voidtore(char某a,char某name,char某add)voideach();voidchange()Voiddel〔〕;voidwrite()(3)各模块之间的调用关系以及算法设计3.详细设计4.测试与分析主界面:构建哈希表,允许号码重复可以支持姓名,,地址三个关键字的查找可以按照姓名地址删除写文件:创立文件通讯录.t某t 如图:5.附录3.cpp#include<tdio.h>#include<tdlib.h>#include<tring.h>#include<iotream>#include<tring.h>uingnamepacetd;intd[50];/某再散列某/tructlit{chara[12];charname[15];charadd[15];intf=0;};tructqtack{tructlit某bae;inti;};tructqtackS;voidtore(char某a,char某name,char某add){intkey;key=int(a[0])+int(a[3])+int(a[7]);/某以号码的第1,4,8位作为关键字构造哈希函数某/S.i=key%20;intj=1;while(true){if((S.bae+S.i)->f==0){trcpy((S.bae+S.i)->a,a);trcpy((S.bae+S.i)->name,name);trcpy((S.bae+S.i)->add,add);(S.bae+S.i)->f=1;break;}S.i=(key%20+d[j])%20;j++;}}voidhuru(){voidinterface();cout<<"请输入:\n例如:\n小王\n安徽省合肥市\n输入0结束\n"; chara[12];charname[15];charadd[15];while(true){canf("%",a);if(a[0]=='0')break;canf("%",name);canf("%",add);printf("%已保存\n",name);tore(a,name,add);/某将输入保存到哈希表某/}interface();}voidprint(){voidinterface();inti;printf("姓名号码地址\n");for(i=0;i<20;i++){if((S.bae+i)->f==1){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);}}interface();}voideach(){voidinterface();inti;intff=0;intb;chara[15];printf("输入1按号码查找,输入2按姓名查找,输入3按地址查找\n");canf("%d",&b);witch(b){cae1:printf("请输入号码\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->a)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;cae2:printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;cae3:printf("请输入地址\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->add)==0){printf("%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add); ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();}voiddel(){voidinterface();inti;intff=0;chara[15];printf("输入1按号码删除,输入2按姓名删除,输入3按地址删除\n");canf("%d",&b);witch(b){cae1:printf("请输入号码\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->a)==0){(S.bae+i)->f=0;Print(“已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");cae2:printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){(S.bae+i)->f=0;printf("已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;cae3:printf("请输入地址\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->add)==0){(S.bae+i)->f=0;printf("已删除:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");break;}interface();}voidchange(){voidinterface();inti;intff=0;intb;chara[15];printf("请输入姓名\n");canf("%",a);for(i=0;i<20;i++)if(trcmp(a,(S.bae+i)->name)==0){printf("您要修改的是:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);printf("请输入新信息\n");canf("%",(S.bae+i)->a);canf("%",(S.bae+i)->name);canf("%",(S.bae+i)->add);printf("已修改成:%%%\n",(S.bae+i)->name,(S.bae+i)->a,(S.bae+i)->add);ff=1;}if(ff==0)printf("找不到该用户\n");interface();}voidwrite()voidinterface();inti=0;FILE某fp;if((fp=fopen("通讯录.t某t","wb"))==NULL){printf("openfileerror\n");e某it(1);}for(i=0;i<=20;i++){intch=32;if((S.bae+i)->f==1){fprintf(fp,"%",(S.bae+i)->name);fputc(ch,fp); fprintf(fp,"%",(S.bae+i)->a);fputc(ch,fp);ch=10;fprintf(fp,"%",(S.bae+i)->add);fputc(ch,fp); }fcloe(fp);interface();}voidinterface(){inti;printf("某某某某某某某某某某某某某某某某某某某某\n"); printf("某某某某某某某某某某某某某某某某某某某某\n"); canf("%d",&i);witch(i){cae0:return;break;cae1:huru();break;cae2:print();break;cae3:each();break;cae4:del();break;cae5:change();break;cae6:write();break;}intmain(){ytem("color70");//可以写成red调出颜色组S.bae=(tructlit某)malloc(20某izeof(tructlit)); ytem("date/T");ytem("TIME/T");inti;for(i=1;i<25;i++)d[2某i]=-1某i某i;for(i=1;i<25;i++)/某构造二次再散列某/d[i+i-1]=i某i;interface();}6.用户使用手册根据主菜单提示选择所想要的操作0:结束程序小华安徽合肥可以根据姓名,,地址分别作为关键字进行查询谢谢使用!。

数据结构单链表通讯录

数据结构单链表通讯录

实验报告实验名称单链表通讯录一、实验目的1.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。

二、实验内容1.用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。

三、实验要求设计要求:为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。

主控菜单设计要求:菜单内容程序运行后,给出9个菜单项的内容和输入提示:1.创建通讯录链表;2.将姓名为Name的好友的手机号改为MTel;3.输出通讯录;4.插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>Name的结点放到该结点后面5.将通讯录按照好友姓名进行非递减排序;6.将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个;7.统计籍贯是“大连”的好友人数;8.将通讯录中倒数第k个结点之后的所有结点移到头结点后面(保持结点间的先后顺序);9.将通讯录的正中间位置结点之后的全部结点倒置;0.退出管理系统请选择0—9:菜单设计要求:使用数字0—9来选择菜单项,其它输入则不起作用。

四、实验概要设计1)功能框图五. 使用说明1.运行环境:VC6.02.首先选择主控菜单中的操作1,即建表,然后进行其它操作.六.实验截图(见下页)七实验体会附源程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define Newsp (TxlList *)malloc(sizeof(struct TxlList))typedef struct TxlList{char Name[16]; //姓名char MTel[11]; //手机号char Tel[9]; //固定电话char EMail[16]; //邮箱地址char BornAddr[20]; //籍贯(值域:"北京"、"上海"、"大连"等等,只写城市名称)char BroadN[50]; //博客名struct TxlList *next; //指针域}TxlList, *TxlLink;void Lbuild1(TxlLink &T){//创建文件FILE *fp;TxlLink q;q=Newsp;q=T;int NUM;char filename[20];printf("\n*请输入要创建的通讯录名:\n");gets(filename);if ((fp=fopen(filename, "wb"))==NULL) { /*以写方式在当前目录打开(新建)文件*/printf("can't open file!!!\n");exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统
数据结构课程设计中的通讯录管理系统可以涉及到以下几个方面的知识点:
1. 数据结构:通讯录管理系统中需要使用到的数据结构包括数组、链表、哈希表等。

其中,数组用于存储通讯录中的人员信息,链表用于存储联系人信息,哈希表用于实现快速查找功能。

2. 算法:通讯录管理系统中需要使用到的算法包括查找算法、排序算法、动态规划算法等。

其中,查找算法用于实现快速查找联系人功能,排序算法用于实现通讯录的排序功能,动态规划算法用于实现最长公共子序列问题等。

3. 数据库:通讯录管理系统需要使用到数据库来存储通讯录中的数据。

需要掌握关系型数据库的设计和操作,包括数据表的设计、SQL 语句的编写等。

4. 界面设计:通讯录管理系统需要有友好的用户界面,需要进行界面设计和开发,包括前端技术的使用,如HTML、CSS和JavaScript等。

5. 系统测试:通讯录管理系统需要进行系统测试,包括功能测试、性
能测试等,确保系统能够正常运行并满足用户需求。

通过设计和实现通讯录管理系统,可以锻炼学生对数据结构和算法的理解和应用能力,同时还能提高学生的编程能力和团队合作能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告2010年01月03日目录1、需求分析 (3)问题描述 (3)基本要求 (3)2、概要设计 (3)数据结构 (3)程序模块 (3)3、详细设计 (4)4、测试与分析 (8)5、总结 (8)6、附录(原程序清单) (10)1.需求分析数据结构课程主要是研究非数值计算的程序设计中所出现的计算机操作对象以及它们之间的关系和操作的学科。

学习数据结构是为了将实际问题中所涉及的对象在计算机表示出来并对它们进行处理。

通过课程设计可以提高思维能力、促进综合应用能力和专业素质的提高。

1.1问题描述现代人社会交往越来越多,人们随身携带有通讯录,对通讯录进行必要的管理,对人们实现快速查询记录提供了极大的方便。

考虑到要对通讯录进行快速检索,所以采用C语言来实现通讯录查找系统。

要求的模块包括:插入、查找、删除、修改、保存。

人机界面友好,使用图形化界面,菜单的选择用动画显示。

1.2基本要求(1)输入的形式与输入值的范围name 字符phone 字符ad 字符(2)输出的形式姓名、电话号码及住址以字符输出(3)程序所能达到的功能1)记录姓名、地址、电话项2)查找并显示给定电话号码的记录2.概要设计1)数据结构依据给定的通讯录信息和数据格式,链表结点必须用结构实现。

结构类型的层次结构:typedef struct node{char name[20];char ad[50];char phone[20];struct node *next;}slink;2)程序模块主函数Main()建立通讯录slink * creslink(int n)通讯者的插入int insert(slink *head,char n[],slink *x)通讯者的删除int delete(slink *head,char n[])通讯者的查询int search(slink *head,char n[])通讯录表的输出int output(slink *head)3.详细设计通讯录的建立slink * creslink(int n){slink *head,*p,*s;int i;if(n<1) return NULL;p=head=(slink *)malloc(sizeof(slink));printf("请依次输入联系人的姓名、地址和电话:\n"); for(i=1;i<=n;i++){s=(slink *)malloc(sizeof(slink));fflush(stdin);scanf("%s%s%s",&s->name,&s->ad,&s->phone);p->next=s;p=s;}p->next=NULL;printf("通讯录已保存\n");printf("按任意键继续...\n");getch();return head;}通讯者的插入int insert(slink *head,char n[],slink *x) {slink *p,*q;p=head;while(p->next!=NULL){p=p->next;if(strcmp(p->name,n)==0){q=(slink *)malloc(sizeof(slink)); strcpy(q->name,x->name);strcpy(q->ad,x->ad);strcpy(q->phone,x->phone);q->next=p->next;p->next=q;printf("插入成功\n");printf("按任意键继续...\n");getch();return 1;}}printf("所要插入的位置不存在\n"); printf("按任意键继续...\n");getch();return 0;}通讯者的删除int delete(slink *head,char n[]) {slink *p,*q;p=head;while(p->next!=NULL){q=p;p=p->next;if(strcmp(p->name,n)==0){q->next=q->next->next;printf("删除成功!\n");printf("按任意键继续...\n");getch();return 1;}}return 0;}通讯者的查询int search(slink *head,char n[]){slink *p;p=head;while(p->next!=NULL){p=p->next;if(strcmp(p->name,n)==0){printf("姓名地址电话\n");printf("%-20s%-30s%-20s \n",p->name,p->ad,p->phone); printf("查询成功\n");printf("按任意键继续...\n");getch();return 1;}}printf("通讯录中没有此联系人!\n");printf("按任意键继续...\n");getch();return 0;}通讯录表的输出int output(slink *head){slink *p;if(head->next==NULL){printf("通讯录空!\n");printf("按任意键继续...\n");getch();return 0;}p=head->next;printf("姓名地址电话\n");while(p!=NULL){printf("%-20s%-30s%-20s\n",p->name,p->ad,p->phone); p=p->next;}printf("输出成功\n");printf("按任意键继续...\n");getch();return 1;}主函数int main(){int c,n;char s[50];slink *head,p;loop:{printf("-----****************-----\n");printf("-----****************-----\n");printf("1 通讯录的建立\n2 通讯者的插入\n3 通讯者的删除\n4 通讯者的查询\n5 通讯录表的输出\n6 退出\n");printf("请选择操作(1~6):\n");fflush(stdin);c=7;scanf("%d",&c);switch(c){case 1:printf("请输入联系人的个数:\n");fflush(stdin);scanf("%d",&n);head=creslink(n);goto loop;case 2:printf("请输入原位置处联系人的姓名:\n");fflush(stdin);scanf("%s",s);printf("请依次输入要插入联系人的姓名、地址和电话:\n");fflush(stdin);scanf("%s%s%s",,p.ad,p.phone);insert(head,s,&p);goto loop;case 3:printf("请依次输入要删除联系人的姓名:\n");fflush(stdin);scanf("%s",s);delete(head,s);goto loop;case 4:printf("请依次输入要查询联系人的姓名:\n");fflush(stdin);scanf("%s",s);search(head,s);goto loop;case 5:output(head);goto loop;case 6:return 1;default:printf("输入有误!\n");printf("按任意键继续...\n");getch();goto loop;}}return 0;}用户界面loop:{printf("-----****************-----\n");printf("-----****************-----\n");printf("1 通讯录的建立\n2 通讯者的插入\n3 通讯者的删除\n4 通讯者的查询\n5 通讯录表的输出\n6 退出\n");printf("请选择操作(1~6):\n");4.测试与分析输入1 进入通讯录建立,输入联系人个数,输入3,依次输入联系人的姓名、地址、电话,显示通讯录已保存,按任意键继续,按任意键返回主界面,输入2输入联系人姓名,修改资料,返回主界面。

输入3,输入联系人姓名,显示联系人资料已删除,返回主界面。

输入4,输入联系人姓名,显示出联系人列表,返回主界面。

输入5,显示所有联系人列表资料,返回主界面。

输入6,正常退出。

测试完成,无错误信息。

5.总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。

回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

相关文档
最新文档