数据结构通讯录管理系统的设计与实现
通讯录管理系统的设计与实现
数据结构实验报告实验名称:通讯录管理系统的设计与实现试验时间:2011.1.13班级:姓名学号:指导老师:1.问题描述:通讯录是用来记录,查询联系人通讯信息的工具。
电子通讯录已成为手机,电子词典等电子设备中不可缺少的工具软件。
设计一个能够,满足这种需求的软件。
基本功能模块:输入,显示,查找,插入,删除,保存,读入,排序,修改,移动,退出。
2.设计要求:(1)基本要求1.设计通讯录数据的逻辑结构和物理结构。
2.通讯录至少包含下列数据信息:姓名,电话,地址等。
3.完成图示基本功能。
4.软件易用,操作简单。
5.根据自己使用通讯录的体会,扩充其他功能,如按姓名查找,按学号查找,按序号查找等。
(2)较高要求1.数据输入有效性检验:如姓名不能为空,号码中不能有非法字符等。
2.提供分组管理的相关功能,如:分组显示,加入组,组创建,组查询等。
3.可视化的界面设计。
3.测试案例:请输入您的选择(0--6): 1分别输入编号,姓名,性别,电话,地址(输入0 结束通信录的建立): 编号:01姓名:张三电话:152****1919地址:2-222编号:0请输入您的选择(0--6): 2编号:01姓名:张三电话:152****1919地址:2-222是否继续添加?(Y/N):N请输入您的选择(0--6): 3请选择查询的方式(1 编号,2 姓名):1 请输入编号:01编号:01姓名:张三电话:152****1919地址:2-222请问是否继续查询?(Y/N):N请输入您的选择(0--6): 4输入删除编号:01删除学生信息如下:编号:01姓名:张三电话:152****1919地址:2-222请输入您的选择(0--6): 5通讯录的全部信息如下:*****编号*****姓名*****性别*****电话*****地址*****学生总人数为:1请输入您的选择(0--6):6 记录已保存!请输入您的选择(0--6):0 结束!!!4.数据结构设计:数据域描述通讯录的相关信息,根据每个学生的基本信息含有多个属性,其中包括序号,姓名,性别,电话,地址等,为此可根据学生信息建立结构体,类型定义如下:typedef struct{ char num; //学号char name; //姓名char sex; //性别char phone; //电话char addr; //地址}DataType;根据通讯录的设计要求,可用单向链表实现该通讯录系统的功能。
数据结构 通讯录管理系统
数据结构通讯录管理系统数据结构通讯录管理系统1、引言1.1 目的和范围本文档旨在详细描述一个通讯录管理系统的设计和实现,以便帮助开发人员了解系统的功能和特性。
本系统可以用于存储和管理个人联系信息,实现添加、删除、修改和查询等功能。
1.2 定义、缩略语和缩写词- 通讯录:存储个人联系信息的系统。
- 系统:通讯录管理系统。
2、总体概述2.1 系统背景通讯录管理系统是为了方便用户管理个人联系信息而开发的软件。
它提供了一系列功能,包括添加联系人、删除联系人、修改联系人信息以及搜索联系人等。
该系统旨在提供一个高效、方便和可靠的通讯录管理解决方案。
2.2 产品功能- 添加联系人:用户可以添加新的联系人,并输入其姓名、方式号码、电子邮箱等信息。
- 删除联系人:用户可以删除已经存在的联系人。
- 修改联系人信息:用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。
- 搜索联系人:用户可以根据姓名、方式号码等信息搜索联系人。
- 显示所有联系人:系统可以显示所有已经存在的联系人。
2.3 用户特点通讯录管理系统的主要用户群体为个人用户,他们需要管理自己的联系人信息。
这些用户对于系统的易用性、稳定性和功能性要求较高,因此系统需要提供简单直观的用户界面,并保证操作的正确性和数据的安全性。
3、系统需求3.1 功能需求3.1.1 添加联系人- 用户可以输入联系人的姓名、方式号码、电子邮箱等信息进行添加。
- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。
- 添加联系人后,系统应该将联系人信息保存到数据库中。
3.1.2 删除联系人- 用户可以删除已经存在的联系人。
- 删除联系人后,系统应该将联系人信息从数据库中删除。
3.1.3 修改联系人信息- 用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。
- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。
- 修改联系人信息后,系统应该将修改后的联系人信息保存到数据库中。
软件技术毕业设计(论文)通讯录管理系统的设计与实现
开封大学KAIFENG UNIVERSITY毕业论文通讯录管理系统的设计与实现姓名:xxxx院系:软件技术学院专业:软件技术班级:09级软件四班指导教师:x x x目录论文摘要 (3)前言 (4)一、管理信息系统的开发 (4)(二)MIS系统开发过程 (5)二、可行性研究及需求分析 (6)(一)可行性研究 (6)(二)需求分析 (7)三、通讯录管理系统的概要设计 (7)(一)通讯录管理系统用例图 (8)(二)通讯录管理信息系统概要设计 (8)(三)通讯录管理信息系统的功能模块说明 (9)四、通讯录管理系统的界面设计 (9)(一)概念设计 (9)(二)数据库逻辑结构设计 (11)五、通讯录管理系统的详细设计 (14)(一)开发工具的选择 (14)(二)编码规范 (14)(三)系统模块的详细设计 (15)六、系统测试 (27)七、系统的运行 (28)(一)硬件约束 (28)(二)系统运行环境 (28)结束语 (29)参考文献 (29)论文摘要通讯录管理系统是方便同学间交流、联系而设计的一个系统。
它主要分为两大部分,一个是同学录管理系统,一个是同学之间交流的区域。
该系统由三个要素组成,分别是:管理员、好友和其他成员,他们之间相互联系,形成了一个有机的整体。
为提高用户对该系统的满意,必须正确处理他们之间的关系。
本系统总体上分为三大界面:登陆界面、注册页面和管理页面。
具体是新用户在登陆界面有个注册帐号连接,输入无误后可进入注册页面,注册完后用户可以加入自己的好友,用户还可以自己注册个人信息。
通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多同学、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
【关键词】VS .NET 2008 数据库数据库组件E-R图前言通讯录管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,一方面要求建立起数据一致性和完整性强、数据安全性好的库另一方面则要求应用程序功能完备,易使用等特点。
课程设计-通讯录管理系统设计与实现
唐山学院数据结构课程设计题目通讯录管理系统设计与实现系 (部) 计算机科学与技术系班级 ************姓名 ****学号 ###########指导教师 ######2013 年 1 月 4 日至 1 月 11 日共 2 周2013 年1 月11 日数据结构课程设计任务书一、设计题目、内容及要求1、设计题目:通讯录管理系统设计与实现。
2、设计内容及要求:(1)查询功能:可以通过姓名、电话号码和类别进行查询,显示查询结果。
类别可分为三种:(A) 亲属类(B) 朋友类(C) 工作类。
(2)增加功能:能够录入新数据(包括:姓名、电话号码、类别、电子邮件等信息)例如:张三,1386665555,朋友类,zhangsan@当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过20条信息时,存储空间已满,不能再录入新数据。
(3)修改功能:能够对通讯录中的记录进行修改。
(4)删除功能:能够对通讯录中的记录进行删除。
二、要求的设计成果(课程设计说明书、设计实物、图纸等)1、用C语言进行程序设计,实现系统的功能。
注重算法效率,代码要有适当的注释;2、撰写课程设计说明书一份,不少于2000字。
课程设计说明书应包括封面、任务书、成绩评定表、正文(设计思路、设计步骤等)、参考文献(资料)、附录(程序代码)等内容。
三、进程安排1月4日:进行需求分析,确定系统的主要功能和算法思路;1月5日~1月6日:进行详细设计,确定各模块的算法思路;1月7日~1月8日:进行编码实现;1月9日~1月10日:进行测试调试,完善设计;撰写设计说明书,准备答辩;1月11日:答辩。
四、主要参考资料1.严蔚敏,吴伟民.数据结构.清华大学出版社,2007.2.苏仕华.数据结构课程设计.机械工业出版社,2010.3.滕国文.数据结构课程设计.清华大学出版社,2010.指导教师(签名):教研室主任(签名):课程设计成绩评定表出勤情况出勤天数缺勤天数成绩评定出勤情况及设计过程表现(20分)课设答辩(20分)设计成果(60分)总成绩(100分)提问(答辩)问题情况综合评定指导教师签名:年月日1引言通讯录是用来记载、查询联系人通讯信息的工具。
数据结构通讯录管理系统课程设计实验报告心得
数据结构通讯录管理系统课程设计实验报告背景随着信息化的快速发展,通讯录管理系统成为了每个人生活中必备的工具之一。
传统的纸质通讯录已经无法满足人们对于信息管理的需求,因此开发一个高效、便捷、用户友好的通讯录管理系统显得尤为重要。
本次课程设计实验的目标是设计一个基于数据结构的通讯录管理系统,实现通讯录的创建、查找、修改、删除等功能。
通过本次实验,我们可以学习和掌握数据结构中的链表、哈希表等基础概念和算法,并将其应用到实际项目中。
分析通讯录管理系统主要有以下几个功能:1.创建通讯录:通讯录是一个存储联系人信息的数据结构,可以存储联系人的姓名、电话号码、邮箱地址等信息。
2.添加联系人:可以向通讯录中添加新的联系人,包括姓名、电话号码、邮箱地址等信息。
3.查找联系人:可以根据姓名或电话号码查找通讯录中的联系人,并显示其详细信息。
4.修改联系人:可以根据姓名或电话号码修改通讯录中的联系人信息。
5.删除联系人:可以根据姓名或电话号码删除通讯录中的联系人。
为了实现上述功能,我们可以使用链表来实现通讯录的存储,每个节点表示一个联系人。
每个节点包含姓名、电话号码、邮箱地址等信息,并且有指向下一个节点的指针。
为了提高查找联系人的效率,我们还可以使用哈希表来实现联系人的快速查找。
哈希表采用键值对的方式存储数据,通讯录中的联系人可以以姓名为键,联系人节点为值存储在哈希表中。
结果实验的最终结果是一个完善的通讯录管理系统,能够实现创建通讯录、添加联系人、查找联系人、修改联系人和删除联系人等功能。
在实现过程中,我们遵循了以下步骤:1.首先,我们设计了联系人节点的数据结构,包括姓名、电话号码、邮箱地址等字段,并定义了节点的操作方法。
2.接着,我们设计了通讯录的数据结构,使用链表来存储联系人节点,并实现了通用的链表操作方法,如插入节点、删除节点等。
3.然后,我们设计了哈希表的数据结构,使用哈希函数将联系人节点存储在哈希表中,并实现了查找联系人的快速算法。
大数据结构课设-通讯录系统的设计与实现——哈希表
课程设计(论文)任务书软件学院学院软件工程专业班一、课程设计(论文)题目:通讯录管理系统的设计与实现——哈希表二、课程设计(论文)工作自2016 年 1 月 4 日起至 2016 年 1 月 10 日止三、课程设计(论文) 地点: 软件测试中心(北区测试二室)四、课程设计(论文)容要求:1.本课程设计的目的⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合课程的理论知识,编写程序求解指定问题;⑵初步掌握软件开发过程的问题分析、系统设计、编码、测试等基本方法和技能;⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生的理论知识,提升编程水平。
2.课程设计的任务及要求1)基本要求:⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告;⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;⑶程序设计语言推荐使用C/C++,程序书写规,源程序需加必要的注释;⑷每位同学需提交可独立运行的程序和规的课程设计报告。
2)课程设计论文编写要求⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订;⑵课程设计报告包括中文目录、设计任务、需求分析、概要设计、详细设计、编码实现、调试分析、课设总结、辞、参考文献、附录等;⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。
3)课程设计评分标准:⑴学习态度:10分;⑵系统设计:20分;⑶编程调试:20分;⑷回答问题:20分;⑸论文撰写:30分。
4)参考文献:⑴严蔚敏冬梅吴伟民著.数据结构(C语言版)[M]. 人民邮电. 2015.2⑵春葆. 数据结构教程上机实验指导[M]. 清华大学. 2013.1⑶何钦铭,燕等. 数据结构课程设计[M]. 大学. 2007.85)课程设计进度安排⑴准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料;⑵程序模块设计分析阶段(4学时):程序概要设计、详细设计;⑶代码编写调试阶段(8学时):程序模块代码编写、调试、测试;⑷撰写论文阶段(4学时):总结课程设计任务和设计容,撰写课程设计论文。
数据结构课程设计通讯录管理系统报告
数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
数据结构课程设计通讯录查询系统的设计与实现
数据结构课程设计通讯录查询系统的设计与实现一、需求分析1、问题描述为某个单位建立一个员工通讯录管理系统,能够方便查询每一个员工的电话与地址。
设计散列表存储,设计并实现通讯录查找系统。
2、基本要求a.每个记录有下列数据项:电话号码、用户名、地址;b.从键盘输入各记录,分别以电话号码为关键字建立散列表;c.采用二次探测再散列法解决冲突;d.查找并显示给定电话号码的记录;e.通讯录信息文件保存。
二、概要设计1.数据结构本程序需要用到两个结构体,分别为通讯录 message以及哈希表HxList2.程序模块本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。
系统子程序及功能设计本系统共有三个子程序,分别是:int Hx(long long key,int data)//哈希函数void BulidHx(HxList &L)//建立通讯录int Search(HxList &L)//查找3. 各模块之间的调用关系以及算法设计主函数调用BulidHx以及Search函数。
函数BulidHx调用函数Hx。
三、详细设计1.数据类型定义typedef struct{char *name;char *add;long long phonenumber;}message;typedef struct{message *list;int number;//记录数}HxList;2.系统主要子程序详细设计a. 建立通讯录void BulidHx(HxList &L)//建立通讯录{FILE *f = fopen("E:\\tongxunlu.txt", "w");char buf[20]={0},str[20]={0};long long key;cout<<"输入要建立的记录数:";cin>>L.number;L.number+=1;L.list=new message[L.number];//分配哈希表的存储空间for(int i=0;i<L.number;i++){L.list[i].phonenumber=-1;}L.list[L.number-1].name=NULL;L.list[L.number-1].add=NULL;cout<<"输入记录信息(电话号码用户名地址)"<<endl;for(int i=0;i<L.number-1;i++){cin>>key>>buf>>str;int pose=Hx(key,L.number);//获取理论上的存储位置if(L.list[pose].phonenumber==-1){}else{//用二次探测再散列法解决冲突//1^2 -1^2 2^2 -2^2int di,count=1;xunhuan: if(count%2==0)di=-(count/2)*(count/2);elsedi=((count/2)+1)*((count/2)+1);int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}}L.list[pose].phonenumber=key;fprintf(f,"%lld",key);fprintf(f," ");L.list[pose].name=new char[strlen(buf)+1];strcpy(L.list[pose].name,buf);fprintf(f,"%s",buf);fprintf(f," ");L.list[pose].add=new char[strlen(str)+1];strcpy(L.list[pose].add,str);fprintf(f,"%s",str);fprintf(f,"\n");}}b.查找int Search(HxList &L)//查找{long long key;cout<<"输入要查找记录的关键字(电话号码):";cin>>key;int pose=Hx(key,L.number);//计算理论上的位置if(L.list[pose].phonenumber==key){}else{int count=1,di;//二次探测再散列,查找xunhuan: if(count%2==0){di=-(count/2)*(count/2);}else{di=((count/2)+1)*((count/2)+1);}int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl; return -1;//没有找到}goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}}if(L.list[pose].phonenumber==key){cout<<"电话号码\t"<<"用户名\t"<<"地址"<<endl;cout<<L.list[pose].phonenumber<<"\t"<<L.list[pose].name<< "\t"<<L.list[pose].add<<endl;return pose;}}四、测试与分析1.显示主菜单,运行程序能够显示出如下界面。
数据结构课程设计通讯录管理系统
数据结构课程设计通讯录管理系统
数据结构课程设计中的通讯录管理系统可以涉及到以下几个方面的知识点:
1. 数据结构:通讯录管理系统中需要使用到的数据结构包括数组、链表、哈希表等。
其中,数组用于存储通讯录中的人员信息,链表用于存储联系人信息,哈希表用于实现快速查找功能。
2. 算法:通讯录管理系统中需要使用到的算法包括查找算法、排序算法、动态规划算法等。
其中,查找算法用于实现快速查找联系人功能,排序算法用于实现通讯录的排序功能,动态规划算法用于实现最长公共子序列问题等。
3. 数据库:通讯录管理系统需要使用到数据库来存储通讯录中的数据。
需要掌握关系型数据库的设计和操作,包括数据表的设计、SQL 语句的编写等。
4. 界面设计:通讯录管理系统需要有友好的用户界面,需要进行界面设计和开发,包括前端技术的使用,如HTML、CSS和JavaScript等。
5. 系统测试:通讯录管理系统需要进行系统测试,包括功能测试、性
能测试等,确保系统能够正常运行并满足用户需求。
通过设计和实现通讯录管理系统,可以锻炼学生对数据结构和算法的理解和应用能力,同时还能提高学生的编程能力和团队合作能力。
数据结构课程设计通讯录管理系统
数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。
2、可以对联系人信息进行修改和删除操作。
3、支持按照姓名、电话号码等关键字进行快速查找。
4、能够以列表形式展示所有联系人的信息。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。
考虑到联系人信息的多样性和动态性,链表是一个不错的选择。
链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。
另外,为了提高查找效率,我们可以结合使用哈希表。
通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。
三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。
这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。
同时,将关键信息映射到哈希表中,以便后续快速查找。
2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。
然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。
3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。
4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。
5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。
四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。
主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。
用户通过选择相应的选项,进入对应的操作流程。
五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
通讯录管理系统的设计与实现
通讯录管理系统的设计与实现一、内容和要求(1)完成通信录信息的管理,包括添加、修改、删除、查询功能。
尽量丰富联系人的各项信息。
(2)能够根据联系的信息单独或分类查询。
(3)联系人的生日提醒功能。
(4)数据存储功能可以使用文件的块读写操作完成,也可以使用SQLite数据库(要学习如何用C/C++连接SQLite数据库)二、需求分析(1)添加:在系统中添加新成员,并保存在文件“通讯录.txt”中;(2)修改:读入要修改成员的姓名,按照提示进行修改;(3)删除:读入要删除成员的姓名,将进行删除;(4)保存:将所有成员数据保存在文件“通讯录.txt”中;(5)查找:读入要查找成员的姓名,查找成员将显示在屏幕上;三、实现代码#include<iostream>#include<string>#include<fstream>#include<string.h>int iusing namespace std;static int count=0;class telephone{char name[20]; //姓名char number[17]; //电话号码char birthday[18]; //生日int year,month,day,hour,minute,age;public:telephone(char *na,char *nu,int y,int m,int d,int h,int mi,int a);telephone(){};// ~telephone();char *getname(); //获得姓名char *getnumber(); //获得电话号码int getyear(); //获得年份int getmonth(); //获得月份int getday(); //获得日int gethour(); //获得小时int getminute(); //获得分钟int getage(); //获得年龄void display(); //输出信息void input(); //添加信息void insert(); //插入信息void Delete(); //删除信息void change(); //改变信息static int getcount();};//int telephone::count=0;telephone::telephone(char *na,char *nu,int y,int m,int d,int h,int mi,int a){strcpy(name,na);strcpy(number,nu);year=y;month=m;day=d;hour=h;minute=mi;age=a;// count++;}char *telephone::getname() //获得姓名{}char *telephone::getnumber() //获得电话号码{return number;}int telephone::getyear() //获得年份{return year;}int telephone::getmonth() //获得月份{return month;}int telephone::getday() //获得日{return day;}int telephone::gethour() //获得小时{}int telephone::getminute() //获得分钟{return minute;}int telephone::getage() //获得年龄{return age;}void telephone::display() //输出信息{cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"号码:"<<number<<endl;cout<<"生日:"<<hour<<":"<<minute<<" "<<year<<"-"<<month<<"-"<<day<<endl;}void telephone::input() //输入信息{char na[20];cout<<"输入姓名:";cin>>na;strcpy(name,na);cout<<"输入年龄:";cin>>age;cout<<"输入电话号码:";cin>>number;cout<<"输入生日(按时、分、年、月、日的顺序):";cin>>hour>>minute>>year>>month>>day;count++;}void telephone::insert () //插入信息{if(!age)input();}void telephone::Delete () //删除信息{strcpy(name,(this+1)->name);strcpy(number,(this+1)->number);hour=(this+1)->hour;minute=(this+1)->minute;year=(this+1)->year;month=(this+1)->month;day=(this+1)->day;age=(this+1)->age;count--;}void telephone::change() //改变信息{cout<<"please input again!"<<endl;input();}int telephone::getcount(){return count;}const int N=20;void menu();void createfile(char *a,telephone *array);void outputtel(telephone *array);void inputtel(telephone *array);int searchtel(telephone *array,char *na);bool inserttel(telephone *array);bool Deletetel(telephone *array,char *na);int main(){telephone array[N];int choice; //读入选项do{menu();cout<<"please input your choice:";cin>>choice;if(choice>=0 && choice<=6)switch(choice){case 1:inputtel(array); break;case 2:cout<<"input the name searched"<<endl;char na[20];cin>>na;int i;i=searchtel(array,na);if(i==N)cout<<"无此人!\n";elsearray[i].display();break;case 3:outputtel(array);break;case 4:if(inserttel(array))cout<<"成功插入一条记录!"<<endl;elsecout<<"插入失败!"<<endl;break;case 5:cout<<"input the name deleted:"<<endl;char na1[20];cin>>na1;// system("cls");if(Deletetel(array,na1))cout<<"成功删除一条记录!"<<endl;elsecout<<"删除失败!"<<endl;break;case 6:cout<<"input the name changed:"<<endl;cin>>na;i=searchtel(array,na);if(i==N)cout<<"没有此联系人,改变失败"<<endl;elsecout<<"被改变联系人的信息为:"<<endl;array[i].display ();cout<<"改变后的信息为:"<<endl;array[i].Delete ();array[i].change ();break;default:break;}}while(choice);createfile("通讯录.txt",array);return 0;}void menu() //定义菜单函数{cout<<"*********1.添加联系人*********"<<endl;cout<<"*********2.查询联系人信息*********"<<endl;cout<<"*********3.浏览联系人信息*********"<<endl;cout<<"*********4.插入联系人*********"<<endl;cout<<"*********5.删除联系人*********"<<endl;cout<<"*********6.改变联系人信息*********"<<endl;cout<<"*********0.退出*********"<<endl;}void createfile(char *a,telephone *array){ofstream outf(a);if(!outf){cout<<"can't open the file\n";return;}for(int i=0;i<count;i++){outf<<"姓名:";outf<<" "<<array[i].getname ()<<endl;outf<<"电话:";outf<<" "<<array[i].getnumber ()<<endl;outf<<"年龄:";outf<<" "<<array[i].getage ()<<endl;outf<<"生日:";outf<<" "<<array[i].gethour ()<<array[i].getminute();outf<<array[i].getyear ()<<"-"<<array[i].getmonth ()<<"-"<<array[i].getday ()<<endl;}outf.close ();}void outputtel(telephone *array) //输出对象信息{cout<<"学生总数="<<count<<endl;for(int i=0;i<count;i++)array[i].display();}int searchtel(telephone *array,char *na) //按姓名查找{int i,j=N;for(i=0;i<N;i++)if(strcmp(array[i].getname(),na)==0){j=i;break;}return j;}void inputtel(telephone *array) //输入对象元素{char ch;int i=0;do{if(telephone::getcount()==N)cout<<"人数已满,无法继续录入!"<<endl;if(!array[i].getage())array[i++].input();array[count].input();cout<<"继续输入吗?(Y or N)"<<endl;cin>>ch;}while(ch=='Y');}bool inserttel(telephone *array) //根据年龄插入{if(telephone::getcount()==N)cout<<"人数已满,无法插入!"<<endl;return false;}// else// for(int j=0;j<N;j++)// {// if(array[j].getage())// {// cout<<"无法插入!";// return false;// }// }for(int i=0;array[i].getage() ;i++);array[i].insert();return true;}bool Deletetel(telephone *array,char *na) //按姓名删除{if(telephone::getcount()==0)cout<<"没有记录,无法删除!"<<endl;return false;}int i=searchtel(array,na);if(i==N){cout<<"查无此人,无法删除!"<<endl;return false;}array[i].Delete();return true;}。
课程设计-通讯录管理系统设计与实现
数据结构课程设计任务书课程设计成绩评定表1引言通讯录是用来记载、查询联系人通讯信息的工具。
电子通讯录已成为手机、电子词典等电子设备中不可缺少的工具软件。
通讯录管理系统能有效地管理通讯录相关信息,包括输入、查询、添加、修改、删除等功能,该软件给用户提供了一个简单的人机界面,用户可以根据提示信进行各种操作。
本次设计使用的编程语言是C语言。
通过设计"通讯录管理系统"使其具有数据输入、修改、删除、添加、显示和查询等功能。
我们可以进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
这个设计可以使我们掌握软件设计的基本内容和设计方法;使我们的软件设计的能力得到规范;使我们掌握使用各种计算机资料和有关参考资料,提高我们进行程序设计的基本能力。
2问题分析本题目主要涉及线性表的基本操作。
通讯录中的记录通常按记载顺序先后有序,因此选用线性表;如果考虑到很少删除联系人,并且新增联系人又添加在表尾,则可采用顺序表;但是如果考虑到在任何位置插入或删除操作,因涉及经常性的插入和删除,则应优先考虑采用链表。
通过上述分析,我选择了单链表存储结构,通讯录存储结构如下struct record{char name[20];char phonenum[20];char type[20];char email[20];}student[50];struct slnode{record date;struct slnode *next;struct slnode *prior;};typedef slnode * linklist;linklist l;通讯录中需要有查询功能、增加功能、删除功能和修改功能,所以要建立具有这些功能的子函数,对程序实现模块化。
这其中要用到对链表的删除、插入等知识。
删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的,若相等就删除,不相等则后移指针,直至表尾。
学生通讯录管理系统的设计与实现 数据结构课程设计
LECTURE 11.线性表的存储顺序存储链式存储2.“学生通讯录管理系统的设计与实现”问题描述:纸质的通讯录已经不能满足实际需求,容易丢失、查找困难等问题是纸质通讯录所不能克服的缺点。
“学生通讯录管理系统”是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和应用的一种应用程序。
需求分析:(1)输入数据建立通讯录;(2)查询通讯录中满足要求的信息;(3)插入新的通讯录信息;(4)删除不需要的通讯录信息;(5)查看所有的通讯录信息主界面设计要求:*******************************************************************************1 通讯录的建立2.插入通讯记录3.查询通讯记录4.删除通讯记录5.显示通讯记录0.退出系统*******************************************************************************设计要求:a.建立通讯录时,每个学生的信息包括:学号,姓名,电话;b.查找时,学号,姓名,电话均可以作为查询字段;c.查看所有的通讯录信息时,所有记录需是有序的(按学号排序,按姓名排序(字典序),按电话号码排序);d.存储结构:要求使用顺序存储结构;e.数据使用:使用本班级的具体信息。
源程序:(已经在VC下调试完毕)# include <stdio.h># include <malloc.h> //包含了malloc函数# include <stdlib.h> //包含了exit函数# include <string.h>struct Add{ //建立通讯录每个记录所包含的信息i nt id;c har name[10];l ong tele;};//定义了一个数据类型,该数据类型的名字叫做struct Arr, 该数据类型含有三个成员,分别是pBase, len, cntstruct Arr{s truct Add * pBase; //存储的是数组第一个元素的地址i nt len; //数组所能容纳的最大元素的个数i nt cnt; //当前数组有效元素的个数};void init_arr(struct Arr * pArr, int length); //分号不能省bool append_arr(struct Arr * pArr,int id, char * name,long tele); //追加void show_arr(struct Arr * pArr);bool delete_arr(struct Arr * pArr, int id);bool is_empty(struct Arr * pArr);bool is_full(struct Arr * pArr);bool find_arr_id(struct Arr * pArr,int identity); //三种方式查找bool find_arr_name(struct Arr * pArr,char *name);bool find_arr_tele(struct Arr * pArr,long tele);void sort_arr_id(struct Arr * pArr); //三种方式排序void sort_arr_name(struct Arr pArr);void sort_arr_tele(struct Arr * pArr);void showmenu_1();int main(void){i nt n;i nt i;i nt j;c har temp;c har name[10];l ong tele;i nt tel;i nt identity;c har temp_2 ;i nt id;s howmenu_1();i nt choice_1;s canf("%d",&choice_1);s truct Arr arr;w hile( choice_1 != 0 ){switch(choice_1){case 1 : init_arr(&arr, 100); // 动态分配100个结构体数组 break;case 2 : printf("请输入你需要插入的记录的个数 ");scanf("%d",&n);for(i = 0;i<n;i++){printf("请输入学号: \n");scanf("%d",&j);printf("请输入姓名: \n");temp = getchar();gets(name);printf("请输入电话号码: \n");scanf("%ld",&tele);append_arr(&arr, j, name, tele);}printf("恭喜!全部数据插入完成~");break;case 3 : printf("请输入您想查找的学号");scanf("%d",&identity);find_arr_id(&arr, identity);printf("\n");printf("请输入您想查找的姓名");temp_2 = getchar();char xingming[10];gets(xingming);find_arr_name(&arr, xingming);printf("\n");printf("请输入您想查找的电话号码");scanf("%d",&tel);find_arr_tele(&arr, tel);printf("\n");break;case 4 : printf("请输入你要删除同学的学号: ");scanf("%d",&id);delete_arr(&arr, id);break;case 5 : printf("按学号降序排列: ");sort_arr_id(&arr);printf("\n");printf("按姓名字典序排列\n");sort_arr_name(arr);printf("\n");printf("按电话号码降序排列\n");sort_arr_tele(&arr);printf("\n");}printf("\n");printf("下面是菜单,请问还需要做些什么?");scanf("%d",&choice_1);}printf("退出菜单成功!");return 0;}void init_arr(struct Arr * pArr, int length){p Arr->pBase = (struct Add *)malloc(sizeof(struct Add) * length);i f (NULL == pArr->pBase){printf("动态内存分配失败!\n");exit(-1); //终止整个程序}e lsepArr->len = length;pArr->cnt = 0;}p rintf("初始化通讯录成功!\n"); r eturn;}bool is_empty(struct Arr * pArr) {i f (0 == pArr->cnt)return true;e lsereturn false;}bool is_full(struct Arr * pArr) {i f (pArr->cnt == pArr->len)return true;e lsereturn false;}void show_arr(struct Arr * pArr){i f ( is_empty(pArr) ){printf("结构体数组为空!\n");}e lse{for (int i=0; i<pArr->cnt; ++i){printf("%d ", pArr->pBase[i].id); //int *printf("%s ", pArr->pBase[i].name);printf("%ld ", pArr->pBase[i].tele);}printf("\n");}}bool append_arr(struct Arr * pArr, int id, char * name,long tele) {//满是返回falsei f ( is_full(pArr) )return false;//不满时追加p Arr->pBase[pArr->cnt].id = id;s trcpy(pArr->pBase[pArr->cnt].name,name);p Arr->pBase[pArr->cnt].tele = tele;(pArr->cnt)++;r eturn true;}bool find_arr_id(struct Arr * pArr, int id){i nt i = 0;while( i <= pArr->cnt ){if(pArr->pBase[i].id == id){printf("%d ", pArr->pBase[i].id); //int *printf("%s ", pArr->pBase[i].name);printf("%ld ", pArr->pBase[i].tele);i++;}elsei++;}r eturn true;}bool find_arr_name(struct Arr * pArr,char *name) {i nt i =0;while( i <= pArr->cnt ){if(strcmp(name,pArr->pBase[i].name) == 0) {printf("%d ", pArr->pBase[i].id); //int *printf("%s ", pArr->pBase[i].name);printf("%ld ", pArr->pBase[i].tele);i++;}elsei++;}r eturn true;}bool find_arr_tele(struct Arr * pArr,long tele){i nt i =0;while( i <= pArr->cnt ){if( pArr->pBase[i].tele == tele ){printf("%d ", pArr->pBase[i].id); //int *printf("%s ", pArr->pBase[i].name);printf("%ld ", pArr->pBase[i].tele);i++;}elsei++;}r eturn true;}bool delete_arr(struct Arr * pArr, int id){i nt i = 0,j;w hile( i < pArr->cnt){if( id == pArr->pBase[i].id ){for (j=i; j < pArr->cnt; ++j){pArr->pBase[j] = pArr->pBase[j+1];}pArr->cnt--;printf("删除成功!\n");}elsei++;}r eturn true;}void sort_arr_id(struct Arr * pArr){i nt a[100];i nt i =0;i nt t;f or( i = 0; i < pArr->cnt; i++){a[i] = pArr->pBase[i].id;}f or( i = 1; i < pArr->cnt; i++){for( int j = 0; j < pArr->cnt - i; j++ ) {if( a[j] > a[j+1] ){t = a[j];a[j] = a[j+1];a[j+1] = t;}}}printf("\n");f or( i = 0; i < pArr->cnt; i++)printf("%d\n",a[i]);}void sort_arr_name(struct Arr pArr){int i,j;c har temp_name[10];f or(i = 1;i < t; i++){for(j = 0;j < t -i; j++){if( strcmp( pArr.pBase[j].name , pArr.pBase[j+1].name ) > 0){strcpy(temp_name , pArr.pBase[j].name);strcpy(pArr.pBase[j].name , pArr.pBase[j+1].name);strcpy(pArr.pBase[j+1].name , temp_name);}}}f or(i = 0;i < t; i++)printf("%s\t",pArr.pBase[i].name);}void sort_arr_tele(struct Arr * pArr){int a[100];i nt i =0;i nt t;f or( i = 0; i < pArr->cnt; i++){a[i] = pArr->pBase[i].tele;}f or( i = 1; i < pArr->cnt; i++){for( int j = 0; j < pArr->cnt - i; j++ ) {if( a[j] > a[j+1] ){t = a[j];a[j] = a[j+1];a[j+1] = t;}}}f or( i = 0; i < pArr->cnt; i++)printf("%d\n",a[i]);}void showmenu_1(){p rintf("**********************************\n"); p rintf("请选择你要执行的命令~: \n");p rintf("1:建立通讯录\n");p rintf("2:插入通讯录\n");p rintf("3:查询通讯录\n");p rintf("4:按照学号删除通讯录\n");p rintf("5:显示通讯录\n");p rintf("**********************************\n"); }。
课程设计--通讯录管理系统的设计与实现
课程设计--通讯录管理系统的设计与实现课程设计(论文)任务书一、课程设计(论文)题目通讯录管理设计二、课程设计(论文)工作自 2013 年 9 月 23 日起至 2013 年 10 月 13 日止。
三、课程设计(论文) 地点: 信息科学技术学院四、课程设计(论文)内容要求:1.本课程设计的目的(1)掌握java语言的程序设计方法;(2)理论联系实际,进一步提高学生的软件开发技术;(3)培养学生分析、解决问题的能力;(4)提高学生实践论文撰写能力。
2.课程设计的任务及要求1)课程设计任务:(1)设一个通信录由以下几项数据信息构成:数据项类型姓名字符串地址字符串邮政编码字符串电话号码字符串(2)1.主要功能:(1)能建立、查询、修改和增删学生通讯录(2)能够按多种方式进行查询(3)界面友好,易于操作2)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路--工作原理、功能规划(3)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。
(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。
(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。
(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7)报告按规定排版打印,要求装订平整,否则要求返工;(8)课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。
4)参考文献:(1)《java面向对象程序设计》董晓国清华大学出版社(2)《java程序设计教程》迟丽华清华大学出版社学生签名:陈万洲2013 年12 月24 日通讯录管理系统的设计与实现【中文摘要】这个基于java编写的个人通讯录管理系统含有添加、删除、查找等基本功能,采用的是JDBC-ODBC桥实现数据库的连接,ODBC数据源名称chengwz.mbd。
c语言程序设计通讯录管理系统
c语言程序设计通讯录管理系统通讯录管理系统是一种常见的应用程序,用于管理个人或者组织的联系人信息。
本文将介绍一个基于C语言的通讯录管理系统的设计和实现。
一、需求分析通讯录管理系统需要满足以下功能需求:1. 添加联系人:可以添加新的联系人,包括姓名、电话号码、邮箱等信息。
2. 查找联系人:可以根据姓名或者电话号码查找已存在的联系人。
3. 删除联系人:可以根据姓名或者电话号码删除已存在的联系人。
4. 修改联系人:可以修改已存在联系人的信息,包括姓名、电话号码、邮箱等。
5. 显示所有联系人:可以显示当前通讯录中的所有联系人信息。
二、设计思路1. 数据结构:使用结构体来表示一个联系人的信息,包括姓名、电话号码、邮箱等字段。
使用数组来存储多个联系人的信息。
2. 添加联系人:通过用户输入的方式获取联系人信息,然后将联系人信息添加到联系人数组中。
3. 查找联系人:通过用户输入的姓名或者电话号码,在联系人数组中查找匹配的联系人,并显示其详细信息。
4. 删除联系人:通过用户输入的姓名或者电话号码,在联系人数组中查找匹配的联系人,并将其从数组中删除。
5. 修改联系人:通过用户输入的姓名或者电话号码,在联系人数组中查找匹配的联系人,并允许用户修改其信息。
6. 显示所有联系人:遍历联系人数组,逐个显示联系人的详细信息。
三、代码实现下面是一个简单的通讯录管理系统的C语言代码实现:```c#include <stdio.h>#include <string.h>#define MAX_CONTACTS 100typedef struct {char name[50];char phone[20];char email[50];} Contact;Contact contacts[MAX_CONTACTS];int numContacts = 0;void addContact() {printf("Enter name: ");scanf("%s", contacts[numContacts].name);printf("Enter phone number: ");scanf("%s", contacts[numContacts].phone);printf("Enter email: ");scanf("%s", contacts[numContacts].email);numContacts++;printf("Contact added successfully!\n");}void findContact() {char search[50];printf("Enter name or phone number to search: ");scanf("%s", search);int found = 0;for (int i = 0; i < numContacts; i++) {if (strcmp(contacts[i].name, search) == 0 || strcmp(contacts[i].phone, search) == 0) {printf("Name: %s\n", contacts[i].name);printf("Phone: %s\n", contacts[i].phone);printf("Email: %s\n", contacts[i].email);found = 1;break;}}if (!found) {printf("Contact not found!\n");}}void deleteContact() {char search[50];printf("Enter name or phone number to delete: ");scanf("%s", search);int found = 0;for (int i = 0; i < numContacts; i++) {if (strcmp(contacts[i].name, search) == 0 || strcmp(contacts[i].phone, search) == 0) {for (int j = i; j < numContacts - 1; j++) {strcpy(contacts[j].name, contacts[j + 1].name);strcpy(contacts[j].phone, contacts[j + 1].phone);strcpy(contacts[j].email, contacts[j + 1].email);}numContacts--;printf("Contact deleted successfully!\n");found = 1;break;}}if (!found) {printf("Contact not found!\n");}}void modifyContact() {char search[50];printf("Enter name or phone number to modify: ");scanf("%s", search);int found = 0;for (int i = 0; i < numContacts; i++) {if (strcmp(contacts[i].name, search) == 0 || strcmp(contacts[i].phone, search) == 0) {printf("Enter new name: ");scanf("%s", contacts[i].name);printf("Enter new phone number: ");scanf("%s", contacts[i].phone);printf("Enter new email: ");scanf("%s", contacts[i].email);printf("Contact modified successfully!\n");found = 1;break;}}if (!found) {printf("Contact not found!\n");}}void displayContacts() {printf("Contacts:\n");for (int i = 0; i < numContacts; i++) {printf("Name: %s\n", contacts[i].name); printf("Phone: %s\n", contacts[i].phone); printf("Email: %s\n", contacts[i].email); printf("\n");}}int main() {int choice;do {printf("1. Add contact\n");printf("2. Find contact\n");printf("3. Delete contact\n");printf("4. Modify contact\n");printf("5. Display all contacts\n"); printf("0. Exit\n");printf("Enter your choice: ");scanf("%d", &choice);switch (choice) {case 1:addContact();break;case 2:findContact();break;case 3:deleteContact();break;case 4:modifyContact();break;case 5:displayContacts();break;case 0:printf("Exiting...\n");break;default:printf("Invalid choice!\n");break;}} while (choice != 0);return 0;}```四、总结本文介绍了一个基于C语言的通讯录管理系统的设计和实现。
数据结构-通讯录管理系统的设计与实现汇总
数据结构-通讯录管理系统的设计与实现汇总简介本篇文档介绍了如何使用数据结构实现一个简单的通讯录管理系统。
包括系统的需求分析、数据结构选择、程序设计与实现等方面。
需求分析通讯录管理系统的核心功能是记录联系人信息,包括姓名、电话号码、电子邮件地址等。
该系统需要支持以下操作:1.添加联系人2.删除联系人3.查找联系人4.修改联系人信息5.显示所有联系人除了核心功能以外,通讯录管理系统还需要具有以下扩展功能:1.根据姓名或电话号码排序2.将联系人信息导入/导出文件3.显示某个分组的联系人数据结构选择为了支持以上功能,我们需要选择合适的数据结构来存储联系人信息。
常见的数据结构有数组、链表、栈、队列、哈希表等。
对于通讯录管理系统,我们可以使用链表来存储联系人信息。
每个节点包含一个指向下一节点的指针和联系人信息。
这种方式可以方便地插入、删除联系人信息,同时节省存储空间。
排序可以使用快速排序(QSort)、归并排序等算法实现。
导入/导出文件可以使用文件读写操作实现。
分组显示则可以使用多个链表来分别存储不同分组的联系人信息。
程序设计与实现以下是通讯录管理系统的程序设计与实现的主要流程:1.定义联系人结构体,包含姓名、手机号、邮箱等字段。
2.定义联系人节点结构体,包含指向下一节点的指针和联系人信息结构体。
3.实现通讯录管理系统功能函数,包括添加联系人、删除联系人、查找联系人、修改联系人信息、显示所有联系人等。
4.实现排序算法,如快速排序和归并排序。
5.实现文件读写操作,包括将联系人信息导入/导出文件。
6.实现分组显示功能,使用不同链表存储不同分组的联系人信息。
以上是通讯录管理系统的设计与实现汇总。
在数据结构的选择上,我们选择了链表作为存储通讯录联系人信息的数据结构,使用排序算法进行排序,使用文件读写操作进行导入/导出操作,使用多个链表实现分组显示功能。
在功能实现上,分别实现了添加联系人、删除联系人、查找联系人、修改联系人信息、显示所有联系人等核心功能以及排序、导入/导出、分组显示等扩展功能。
通讯录——数据结构课程设计
通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。
在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。
下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。
一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。
它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。
二、系统功能1. 添加联系人用户可以通过系统界面输入联系人的姓名、电话号码、电子邮件地址等信息,系统将这些信息存储在数据结构中。
每一个联系人的信息应包括惟一的标识符,以便于后续的查找、修改和删除操作。
2. 查找联系人用户可以通过姓名、电话号码或者电子邮件地址等关键字进行联系人的查找。
系统将根据用户提供的关键字,在数据结构中进行搜索,并返回与之匹配的联系人信息。
3. 修改联系人用户可以选择要修改的联系人,并提供新的姓名、电话号码、电子邮件地址等信息。
系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并更新其信息。
4. 删除联系人用户可以选择要删除的联系人,并确认删除操作。
系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并将其从通讯录中删除。
三、系统实现1. 数据结构选择为了高效地存储和管理联系人信息,我们选择使用链表作为数据结构。
每一个节点表示一个联系人,包含姓名、电话号码、电子邮件地址等信息,以及指向下一个节点的指针。
2. 添加联系人用户输入联系人信息后,系统将创建一个新的节点,并将其插入到链表的末尾。
为了保证联系人信息的惟一性,系统将检查新节点的标识符是否与已有节点的标识符重复。
如果重复,则提示用户重新输入。
3. 查找联系人用户输入关键字后,系统将从链表的头节点开始遍历,逐个比较节点中的姓名、电话号码和电子邮件地址与关键字是否匹配。
如果找到匹配的联系人,系统将返回其信息。
如果遍历完整个链表仍未找到匹配的联系人,则提示用户未找到。
数据结构课程设计_通讯录查询系统的设计与实现
Word格式通讯录查询系统的设计与实现完美整理一、需求分析1、问题描述为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。
设计散列表存储,设计并实现通讯录查找系统。
2、基本要求a.每个记录有下列数据项:电话号码、用户名、地址;b.从键盘输入各记录,分别以电话号码为关键字建立散列表;c.采用二次探测再散列法解决冲突;d.查找并显示给定电话号码的记录;e.通讯录信息文件保存。
二、概要设计1.数据结构本程序需要用到两个结构体,分别为通讯录 message以及哈希表HxList2.程序模块本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。
系统子程序及功能设计本系统共有三个子程序,分别是:int Hx(long long key,int data)//哈希函数void BulidHx(HxList &L)//建立通讯录int Search(HxList &L)//查找3.各模块之间的调用关系以及算法设计主函数调用BulidHx以及Search函数。
函数BulidHx调用函数Hx。
三、详细设计1.数据类型定义typedef struct{char *name;char *add;long long phonenumber;}message;typedef struct{message *list;int number;//记录数}HxList;2.系统主要子程序详细设计a. 建立通讯录void BulidHx(HxList &L)//建立通讯录{FILE *f = fopen("E:\\tongxunlu.txt", "w");char buf[20]={0},str[20]={0};long long key;cout<<"输入要建立的记录数:";cin>>L.number;L.number+=1;L.list=new message[L.number];//分配哈希表的存储空间for(int i=0;i<L.number;i++){L.list[i].phonenumber=-1;}L.list[L.number-1].name=NULL;L.list[L.number-1].add=NULL;cout<<"输入记录信息(电话号码用户名地址)"<<endl; for(int i=0;i<L.number-1;i++){cin>>key>>buf>>str;int pose=Hx(key,L.number);//获取理论上的存储位置if(L.list[pose].phonenumber==-1){}else{//用二次探测再散列法解决冲突//1^2 -1^2 2^2 -2^2int di,count=1;xunhuan: if(count%2==0)di=-(count/2)*(count/2);elsedi=((count/2)+1)*((count/2)+1);int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==-1){pose=site;}else{count++;goto xunhuan;}}}L.list[pose].phonenumber=key;fprintf(f,"%lld",key);fprintf(f," ");L.list[pose].name=new char[strlen(buf)+1];strcpy(L.list[pose].name,buf);fprintf(f,"%s",buf);fprintf(f," ");L.list[pose].add=new char[strlen(str)+1];strcpy(L.list[pose].add,str);fprintf(f,"%s",str);fprintf(f,"\n");}}b.查找int Search(HxList &L)//查找{long long key;cout<<"输入要查找记录的关键字(电话号码):";cin>>key;int pose=Hx(key,L.number);//计算理论上的位置if(L.list[pose].phonenumber==key){}else{int count=1,di;//二次探测再散列,查找xunhuan: if(count%2==0){di=-(count/2)*(count/2);}else{di=((count/2)+1)*((count/2)+1);}int site=Hx(key+di,L.number);if(site>=0){if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}else{site=L.number-abs(site);if(L.list[site].phonenumber==key){pose=site;}else{count++;if(L.list[site].phonenumber==-1){cout<<"没有找到"<<endl;return -1;//没有找到}goto xunhuan;}}}if(L.list[pose].phonenumber==key){cout<<"电话号码\t"<<"用户名\t"<<"地址"<<endl;cout<<L.list[pose].phonenumber<<"\t"<<L.list[pose].name<<"\t"<<L.list [pose].add<<endl;return pose;}}四、测试与分析1.显示主菜单,运行程序可以显示出如下界面。
数据结构通讯录管理系统的设计与实现
数据结构通讯录管理系统的设计与实现IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】课程设计报告课程设计名称:数据结构课程设计系:三系学生姓名:班级:学号:成绩:指导教师:开课时间:2011-2012学年一学期宿迁学院课程设计任务书课程名称:数据结构指导教师:专业班级:学生姓名:起止日期:设计题目一:通讯录管理系统的设计与实现1 概述现状分析课程设计是实践教学中的重要环节,它以某一门课程为基础,涉及和课程相关的各方面知识,是一门独立于课程外的特殊课程。
课程设计就是让所有同学对课程更全面的应用。
本次实验项目“通讯录管理”就是针对数据结构的一门应用较为广泛的系统管理方法。
实现意义本次实验应用性能很好,结构清楚,能随时添加、删除、查找、修改、输出联系人;并且可以用姓名、编号两种方式;而且其中增加了排序功能,使得插入之后排序为接下来的操作提供便利,操作更精确,以人性化的方式展现出来,效果十分突出。
2 系统分析编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。
每个记录包含编号、姓名、性别、电话号码、住址个人基本信息。
用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。
本程序相对简单,使用方便,几乎不用特殊的命令,只需按提示输入即可。
对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,尤其在算法方面,链表及结点的联系,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
3 概要设计算法的设计本实验从整体上分为七大模块:(1)通讯录链表的建立;(2)通讯者结点的插入;(3)通讯者结点的查询;(4)通讯者结点的删除;(5)通讯者结点的修改;(6)通讯录链表的输出;(7)退出通讯录管理通讯者结点的删除系统。
通讯录系统图系统功能模块图如图所示:2.得到k的合理值系统功能模块图设计一个函数用来输出提示信息和处理信息输入,这个函数应该返回一个数值k,以便供给switch语句使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程设计名称:数据结构课程设计
系:三系
学生姓名:
班级:
学号:
成绩:
指导教师:
开课时间:2011-2012学年一学期
宿迁学院
课程设计任务书
课程名称:数据结构
指导教师:
专业班级:
学生姓名:
起止日期:
设计题目一:通讯录管理系统的设计与实现
1 概述
现状分析
课程设计是实践教学中的重要环节,它以某一门课程为基础,涉及和课程相关的各方面知识,是一门独立于课程外的特殊课程。
课程设计就是让所有同学对课程更全面的应用。
本次实验项目“通讯录管理”就是针对数据结构的一门应用较为广泛的系统管理方法。
实现意义
本次实验应用性能很好,结构清楚,能随时添加、删除、查找、修改、输出联系人;并且可以用姓名、编号两种方式;而且其中增加了排序功能,使得插入之后排序为接下来的操作提供便利,操作更精确,以人性化的方式展现出来,效果十分突出。
2 系统分析
编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。
每个记录包含编号、姓名、性别、电话号码、住址个人基本信息。
用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。
本程序相对简单,使用方便,几乎不用特殊的命令,只需按提示输入即可。
对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,尤其在算法方面,链表及结点的联系,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
3 概要设计
算法的设计
本实验从整体上分为七大模块:(1)通讯录链表的建立;(2)通讯者结点的插入;(3)通讯者结点的查询;(4)通讯者结点的删除;(5)通讯者结点的修改;(6)通讯录链表的输出;(7)退出通讯录管理通讯者结点的删除系统。
通讯录系统图
系统功能模块图如图所示:
4 详细设计
主菜单模块设计
编写一个主控菜单驱动程序,输入0—6以进入相应选择项。
1. 实现循环和功能选择
假设输入选择用变量k,它作为0-6之间的一个输入变量,由getchar读入,提供给switch 语句。
使用while语句循环实现重复选择,并在主函数void main( )中实现。
2.得到k的合理值
设计一个函数用来输出提示信息和处理信息输入,这个函数应该返回一个数值k,以便供给switch语句使用。
对于k输入值,在switch中case语句对应数字0—6,在swith语句中再调用相应的函数,使得程序得以执行,对于不符合要求的输入,提示输入错误并要求重新输入。
通讯录建立模块设计
1.系统用到的数据有:
char number[5]; 们知道的建立链表有两种方法,一种为头插入法,一种为尾插入法。
头插入法是每次将新插入的结点插在链表的表头,而尾插入法是将新插入的结点插入在链表的尾部。
我们这里用尾插入法描述算法。
(1) 使链表的头尾指针head、rear指向新生成的头结点(也是尾结点);
(2) 置结束标志为0(假);
(3)while(结束标志不为真)
{
P指向新生结点;
读入一个通讯者数据至新结点的数据域;
将新结点链接到尾结点之后;
使为指针指向新结点;
提示:是否结束建表,读入一个结束标志;
}
(4) 尾结点指针域置空值NULL。
具体算法如下:
/-------------------------------------------------------/
/* 用尾插入法建立通讯录链表函数 */
/------------------------------------------------------/
LinkList CreateList(void)
{按编号查询 \n");
printf(" 2. 按姓名查询 \n");
printf("----------------------------\n");
printf(" 请选择1/2: ");
p=head->next; 按编号 \n");
printf(" 2. 按姓名 \n");
printf("----------------\n");
printf("请选择1/2: ");
p=head->next; 讯录链表的建立 \n ");
head=CreateList( );
flag1=1;
break;
}
case 2:
{
if(flag1!=1)
{
printf("请先建立表!");
getchar();
system("cls");
}
else
{
printf("\n 2.通讯者信息的插入 \n");
printf("\n编号姓名性别电话地址 \n");
printf("--------------------------------------\n");
p=(ListNode *)malloc(sizeof(ListNode)); /*申请新结点*/
printf("输入编号:\n");
scanf("%s",p->;
printf("输入姓名:\n");
scanf("%s",p->;
printf("输入性别:\n");
scanf("%s",p->;
printf("输入电话:\n");
scanf("%s",p->;
printf("输入地址:\n");
scanf("%s",p->;
InsertNode(head,p);
printf("排序:\n");
OrderList(l); 讯录信息的查询 \n");
p=ListFind(head);
if (p!=NULL)
{
printf("编号姓名性别联系电话地址 \n");
printf("--------------------------------------------------\n");
printf("编号:%s\n姓名:%s\n性别:%s\n联系电话:%s\n地址:%s\n",
p->,p->,p->,p->,p->;
printf("---------------------------------------------------\n");
}
else printf("没有查到要查询的通讯者!\n");
break;
}
case 4:
{
if(flag1!=1)
{
printf("请先建立表!");
getchar();
system("cls");
}
else
{
printf("\n 4.通讯录信息的删除 \n");
DeleteNode(head); /*删除结点*/
}
break;
}
case 5:
{
if(flag1!=1)
{
printf("请先建立表!");
getchar();
system("cls");
}
else
{
printf("\n 5.通讯录信息的修改 \n");
ModifyNode(head);
}
break;
}
case 6:
{
if(flag1!=1)
{
printf("请先建立表!");
getchar();
system("cls");
}
else
{
printf("\n 6.通讯录链表的输出 \n");
PrintList(head);
}
break;
}
case 0:
printf("是否退出(y/n)?");
k=getchar();
if(k=='y'||k=='Y')
{
j=0;
printf("\n\n\t\t\t谢谢使用!谢谢使用!");
printf("\n按任意键退出");
}
break;
default:
printf("\n 输入有错,请重新输入!\n");
printf("\n按任意键继续...");
getchar();
system("cls"); 据结构教程(第三版).清华大学出版社,2009 [3] 李春葆等主编.数据结构教程上机实验指导(第三版). 清华大学出版社,2009。