ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:236.22KB ,
资源ID:23202232      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23202232.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用C++编写通讯录.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用C++编写通讯录.docx

1、用C+编写通讯录课程设计报告课程名称:数据结构与算法设计题目:用散列表建立通讯录系 别:专 业:组 别:起止日期:指导教师:计算机科学与技术系二一 一年制课程设计任务书课程设计题目建立通讯录组长学号班级系别专业组员指导教师课程设计目的(1)熟练掌握C语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。课程设计所需环境Microsoft Visual C+ 6.0课程设计任务要求(1) 设每个记录有下列数据项:、用户名、地址;(2) 从键盘输入各记录,分别以为关键字建立散列表;(3)采用二次探测再散列法解决冲突;(4)

2、查找并显示给定的记录;(5) 通讯录信息文件保存;(6) 要求人机界面友好,使用图形化界面;课程设计工作进度计划序号起止日期工 作 内 容分工情况12调试与操作说明3需求分析4详细代码5引言6总结与体会教研室审核意见:教研室主任签字: 年 月 日一、引言二、需求分析(1)课程设计题目这一组的课程设计题目是用哈希表建立通讯录,并实现语言选单、创建、修改、查询、删除、文件的操作等。(2) 课程设计的目的掌握数据结构的基础技术,学会分析研究计算机加工的数据结构的特性,以便应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,应用相关知设计设散列表实现查找系统。(3) 课程设计的要求【基本要求】设

3、每个记录有下列数据项:、用户名、地址;从键盘输入各记录,分别以为关键字建立散列表;采用二次探测再散列法解决冲突;查找并显示给定的记录; 通讯录信息文件保存; 要求人机界面友好,使用图形化界面;【选做内容】系统功能的完善;设计不同的散列函数,比较冲突率;在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。 使用汉字显示。(4)课程设计的主要思想课程设计中,通过不同的选择输入,实现不同的功能。有语言提示,它是通过不同的输入选择不同的语言。在通信录的创建中,把输入的信息保存在一个数组里,通过输入的,将其转化为数据,通过取余,找到它在哈希表的位置,如果位置冲突,就用二次探测

4、处理。在查找中,通过输入的,调用哈希表寻找它在哈希表的位置,并把它输出。同样,修改于删除都是通过同样的的道理找到它在哈希表中的位置。在修改的时候,通过不同的修改选单实现不同的修改,在删除的时候,找到它的位置,在输出的的时候不输出,其实它并没有真正意义的被删除。三、概要设计(1)流程图概括图图 1 概括图创建图 2 创建的流程图查找图 3 查找的流程图修改图4 修改的流程图删除图 5 删除的流程图(2)设计方法及原理主函数里,对不同的子函数,通过的到的不同字符对其进行调用。在建立通讯录中,用了哈希表的建立,在哈希表中,是将字符型数字转化为整形数据,并对哈希表的原有长度取余得到存储的位置,而得到的

5、位置可能已被使用,故有调用了二次哈希,并以最后处理的下标是否为非负,来决定是存储还是不存储。,而在下面的查询、删除、修改中,都是调用哈希表,找到它在哈希表中的位置来进行不同的操作。其中,在删除时,用了一个全局变量来存储要删除的位置的下标,在输出的时候不将其输出,而真正意义上,它并没有从保存的位置删除。在修改中,通过选择不同。来修改不同的信息。这个设计,主要就是对哈希表的调用与冲突的处理。四、详细内容程序代码#include#include#include#include /为了使用getch()方法#include#define MAXSIZE 200 /薄记录数量 #define MAX_S

6、IZE 20 /人名的最大长度#define HASHSIZE 67 /定义表长 #define LEN sizeof(HashTable)typedef int Status;typedef char FRIMAX_SIZE;int ss = 201; /用于帮助删除typedef struct /记录 FRI name; FRI tel; FRI add;Record;typedef struct /哈希表 Record *elemHASHSIZE; /数据元素存储基址 int count; /当前数据元素个数 int size; /最大容量HashTable;void SystemTim

7、e() /显示系统时间 SYSTEMTIME sys; GetLocalTime( &sys );printf(%4d/%02d/%02dn%02d:%02d:%02d.%03d,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds); void PR1() printf(tt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(ttt通讯录操作的目录nn); printf(tt* * * *

8、* * * * * * * * * * * * * * * * * * * *nn);void PR11() printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn); printf(tttDirectories operation directorynn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void PR2() printf(t按a键,显示语言提示选单tt); printf(按b键,创建新的通讯录nn); printf(t按c键,在通信录的末尾

9、写入新的信息tt); printf(按d键,查询某人的信息nn); printf(t按e键,修改某人的信息tt); printf(按f键,删除某人的信息nn); printf(t按g键,显示通讯录中的所有记录tt); printf(按h键,退出选单nn); printf(t按i键,保存通讯录中的所有记录到指定文件中nn); printf(t按j键,从指定文件中读取通讯录中的记录n); printf(n友情提示:nt先建立方可进行查找、修改、删除、显示,在从文件读取前,应先存入文件nn); printf(t);void PR22() printf(tPressing a key, Languag

10、e menunn); printf(tPressing b key,Create a new address booknn); printf(tPressing c key,The end of the munication record to write a new ntinformationnn); printf(tPressing d key,Inquires the information. Someonenn); printf(tPressing e key,Modify someones informationnn); printf(tPressing f key,Remove s

11、omeones informationnn); printf(tPressing g key,All the records show directoriesnn); printf(tPressing h key,Exit menunn); printf(tPressing i key,Save all the records to the specified directory filenn); printf(tPressing j key,Read directories from a specified file record innn); printf(nHelpful hints:n

12、tTo create can search, modify, delete, display,in read from the file,); printf(ntshould first before deposit filesnn); printf(t);void PR3() printf(ntt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(ttt创建通讯录nn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void

13、PR4(int i) printf(ntt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(ttt查询某人的信息nn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void PR5() printf(ntt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(ttt修改某人的信息nn); printf(tt* * * * * * * *

14、 * * * * * * * * * * * * * * * *nn);void PR6() printf(ntt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(tttt删除某人的信息nn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void PR7() printf(ntt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(tt

15、t 在通信录的末尾写入新的信息nn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void PR8() printf(ntt* * * * * * * * * * * * * * * * * * * * * * * *n); SystemTime(); printf(ttt通讯录中已存信息nn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void PR9() printf(ntt* * * * * * * * * * * * * * *

16、* * * * * * * * *n); SystemTime(); printf(ttt从文件中读取结果nn); printf(tt* * * * * * * * * * * * * * * * * * * * * * * *nn);void Menu() system(cls); int n; printf(nnnnnnnnnttt输入 1(汉语)、 2(英语) 选择语言: ); scanf(%d,&n); system(cls); if(n = 1) PR1(); PR2(); if(n = 2) PR11(); PR22(); int NUM_BER = 0;int collision

17、(int p,int &c) int a,pp; a = c/2+1; while(a0) return pp; else a = c/2+1; else pp = (p -2*a)%HASHSIZE; c+; if(pp0) return pp; else a = c/2+1; return -1;int HASH(FRI te) /哈希函数 int m; long n; n = atoi(te); m = n%HASHSIZE; return m;void Append() /写入后继内容 system(cls); FILE *fp; FRI pa; PR7(); if(fp = fope

18、n(D:wo.txt,ab+) =NULL) printf(tFile open erroe!); printf(nt输入追加的内容: ); gets(pa); fwrite(pa,sizeof(FRI),1,fp); fclose(fp); printf(nnntt按 Esc 键,返回主菜单);void CreateHash(HashTable *H,Record *a) /以为关键字/ SystemTime(); int i,c,p = -1,pp; for(i=0;ielempp!=NULL) pp = collision(p,c); if(ppelempp = &(ai); H-cou

19、nt+; printf(nttt建表完成!nntt散列表的容量为 %d ,当前容量为 %d ,HASHSIZE,H-count);void getin(Record *a,HashTable *H) /键盘输入个人的信息 system(cls); PR3(); printf(t输入要添加的个数: ); scanf(%d,&NUM_BER); int i; for(i=0;ielempp!=NULL & bj(tel,H-elempp-tel) = 0) pp = collision(p,c); if(H-elempp!=NULL & bj(tel,H-elempp-tel) = 1) prin

20、tf(nttt查找成功nn); printf(tXX: %snnt: %snnt联系地址: %sn,H-elempp-name,H-elempp-tel,H-elempp-add); else printf(nt此人不存在,失败!n); printf(nt按 Esc 键,返回主菜单);void Alter(HashTable* H,int &c) /修改 system(cls); PR5(); fflush(stdin); FRI tel; FRI gai; int p,pp,i; printf(nt输入要修改信息的: ); gets(tel); p = HASH(tel); pp = p;

21、while(H-elempp!=NULL & bj(tel,H-elempp-tel) = 0) pp = collision(p,c); if(H-elempp!=NULL & bj(tel,H-elempp-tel) = 1) printf(nt输入1 , 2来选择修改项【1:修改XX,2:修改地址】: ); scanf(%d,&i); switch(i) case 1 : fflush(stdin); printf(nt输入要修改后的XX: ); gets(gai); strcpy(H-elempp-name,gai); break; case 2: fflush(stdin); pri

22、ntf(nt输入要修改后的地址: ); gets(gai); strcpy(H-elempp-add,gai); break; default: printf(nt输入错误!); else printf(nt此人不存在,失败!n); printf(nnnt按 Esc 键,返回主菜单);void Delete(HashTable *&H,int c,Record *a) /删除 system(cls); PR6(); fflush(stdin); FRI tel; printf(nnt输入要删除的: ); gets(tel); int i = 0; while(strcmp(ai.tel,tel

23、)!=0) i+; ss = i; int p,pp; p = HASH(tel); pp = p; while(H-elempp!=NULL & bj(tel,H-elempp-tel) = 0) pp = collision(p,c); if(H-elempp!=NULL & bj(tel,H-elempp-tel) = 1) H-elempp = NULL; H-count -; printf(nt按 Esc 键,返回主菜单);void List(Record *a,HashTable *H) /输出 system(cls); PR8(); int i; printf(ttXXttt联系

24、地址nn); for(i=0;iNUM_BER;i+) if(i!=ss) printf(tt%st%stt%snn,ai.name,ai.tel,ai.add); printf(nnttt按 Esc 键,返回主菜单);void Save(Record *a) /写入文件 FILE *fp; Record *pp; if(fp=fopen(D:wo.txt, wb)=NULL) printf(nFile open error); pp = a; fwrite(pp,sizeof(Record),NUM_BER,fp); fclose(fp); printf(nt按 Esc 键,返回主菜单); void Load(Record *a) /从文件读取 system(cls); FILE *fp; Record *pp; pp = a; PR9(); if(fp=fopen(D:wo.txt, rb)=NULL) printf(nFile open error); printf(tXXttt联系地址nn); fread(pp,sizeof(Record),NUM_BER,f

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1