数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf

上传人:摩西的****12 文档编号:145907175 上传时间:2020-09-24 格式:PDF 页数:13 大小:310.40KB
返回 下载 相关 举报
数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf_第1页
第1页 / 共13页
数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf_第2页
第2页 / 共13页
数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf_第3页
第3页 / 共13页
数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf_第4页
第4页 / 共13页
数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录查询系统的设计与实现(2020年整理).pdf(13页珍藏版)》请在金锄头文库上搜索。

1、 0 叫我小老虎叫我小老虎 1 一一、需求需求分析分析 1、问题描述 为某个单位建立一个员工通讯录管理系统, 可以方便查询每一个员工 的电话与地址。设计散列表存储,设计并实现通讯录查找系统。 2、基本要求 a.每个记录有下列数据项:电话号码、用户名、地址; b.从键盘输入各记录,分别以电话号码为关键字建立散列表; c.采用二次探测再散列法解决冲突; d.查找并显示给定电话号码的记录; e.通讯录信息文件保存。 二二、概要设计概要设计 1.数据结构 本程序需要用到两个结构体,分别为通讯录 message 以及哈希表 HxList 2.程序模块 本程序包含两个模块,一个是实现功能的函数的模块,另一

2、个是主函 数模块。 系统子程序及功能设计 本系统共有三个子程序,分别是: int Hx(long long key,int data)/哈希函数 void BulidHx(HxList char *add; long long phonenumber; message; typedef struct message *list; int number;/记录数 HxList; 2.系统主要子程序详细设计 a. 建立通讯录 void BulidHx(HxList char buf20=0,str20=0; long long key; coutL.number; L.number+=1; L.l

3、ist=new messageL.number;/分配哈希表的存储空间 for(int i=0;iL.number;i+) L.listi.phonenumber=-1; L.listL.number-1.name=NULL; L.listL.number-1.add=NULL; 3 cout输入记录信息(电话号码 用户名 地址)endl; for(int i=0;ikeybufstr; int pose=Hx(key,L.number);/获取理论上的存储位置 if(L.listpose.phonenumber=-1) else /用二次探测再散列法解决冲突 /12 -12 22 -22 i

4、nt di,count=1; 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.listsite.phonenumber=-1) pose=site; else count+; goto xunhuan; else site=L.number-abs(site); if(L.listsite.phonenumber=-1) pose=site; else 4 count+; goto xu

5、nhuan; L.listpose.phonenumber=key; fprintf(f,%lld,key); fprintf(f, ); L.listpose.name=new charstrlen(buf)+1; strcpy(L.listpose.name,buf); fprintf(f,%s,buf); fprintf(f, ); L.listpose.add=new charstrlen(str)+1; strcpy(L.listpose.add,str); fprintf(f,%s,str); fprintf(f,n); b.查找 int Search(HxList coutkey

6、; int pose=Hx(key,L.number);/计算理论上的位置 if(L.listpose.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); 5 int site=Hx(key+di,L.number); if(site=0) if(L.listsite.phonenumber=key) pose=site; else count+; if(L.listsite.phon

7、enumber=-1) cout没有找到endl; return -1;/没有找到 goto xunhuan; else site=L.number-abs(site); if(L.listsite.phonenumber=key) pose=site; else count+; if(L.listsite.phonenumber=-1) cout没有找到endl; return -1;/没有找到 goto xunhuan; if(L.listpose.phonenumber=key) cout电话号码t用户名t地址endl; 6 coutL.listpose.phonenumbertL.li

8、stpose.nametL.listpose.add endl; return pose; 四四、测试、测试与与分析分析 1.显示主菜单,运行程序可以显示出如下界面。 2.建立通讯录 在主菜单下选 1,建立通讯录,按照规定格式输入电话号码姓名以及 地址, 即可在E 盘根目录下建立tongxunlu.txt文件, 保存通讯录信息。 3.查找 在主菜单下选 2,完成查找功能,输入要查找的电话号码,即可得到 该电话号码对应的姓名以及地址。 4.退出系统 在主菜单下选 3,退出程序。 7 五五、附录附录 1.通讯查询系统.h #include using namespace std; typedef

9、struct char *name; char *add; long long phonenumber; message; typedef struct message *list; int number;/记录数 HxList; int Hx(long long key,int data) return key%(data-1); void BulidHx(HxList char buf20=0,str20=0; long long key; coutL.number; L.number+=1; L.list=new messageL.number;/分配哈希表的存储空间 for(int i

10、=0;iL.number;i+) L.listi.phonenumber=-1; 8 L.listL.number-1.name=NULL; L.listL.number-1.add=NULL; cout输入记录信息(电话号码 用户名 地址)endl; for(int i=0;ikeybufstr; int pose=Hx(key,L.number);/获取理论上的存储位置 if(L.listpose.phonenumber=-1) else /用二次探测再散列法解决冲突 /12 -12 22 -22 int di,count=1; xunhuan: if(count%2=0) di=-(co

11、unt/2)*(count/2); else di=(count/2)+1)*(count/2)+1); int site=Hx(key+di,L.number); if(site=0) if(L.listsite.phonenumber=-1) pose=site; else count+; goto xunhuan; else site=L.number-abs(site); if(L.listsite.phonenumber=-1) pose=site; 9 else count+; goto xunhuan; L.listpose.phonenumber=key; fprintf(f,

12、%lld,key); fprintf(f, ); L.listpose.name=new charstrlen(buf)+1; strcpy(L.listpose.name,buf); fprintf(f,%s,buf); fprintf(f, ); L.listpose.add=new charstrlen(str)+1; strcpy(L.listpose.add,str); fprintf(f,%s,str); fprintf(f,n); int Search(HxList coutkey; int pose=Hx(key,L.number);/计算理论上的位置 if(L.listpos

13、e.phonenumber=key) else int count=1,di;/二次探测再散列,查找 xunhuan: if(count%2=0) di=-(count/2)*(count/2); else 10 di=(count/2)+1)*(count/2)+1); int site=Hx(key+di,L.number); if(site=0) if(L.listsite.phonenumber=key) pose=site; else count+; if(L.listsite.phonenumber=-1) cout没有找到endl; return -1;/没有找到 goto xunhuan; else site=L.number-abs(site); if(L.listsite.phonenumber=key) pose=site; else count+; if(L.listsite.phonenumber=-1) cout没有找到endl; return -1;/没有找到 goto xunhuan; if(L.listpose.phonenumber=key) 11 cout电话号码t

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号