版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计-通讯录查询系统的设计与实现通讯录查询系统的设计与实现数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第1页。
数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第1页。一、需求分析1、问题描述为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。设计散列表存储,设计并实现通讯录查找系统。2、基本要求a.每个记录有下列数据项:电话号码、用户名、地址;b.从键盘输入各记录,分别以电话号码为关键字建立散列表;c.采用二次探测再散列法解决冲突;d.查找并显示给定电话号码的记录;e.通讯录信息文件保存。二、概要设计1.数据结构本程序需要用到两个结构体,分别为通讯录message以及哈希表HxList2.程序模块本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。系统子程序及功能设计本系统共有三个子程序,分别是:intHx(longlongkey,intdata)//哈希函数数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第2页。voidBulidHx(HxList&L)//建立通讯录数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第2页。intSearch(HxList&L)//查找3.各模块之间的调用关系以及算法设计主函数调用BulidHx以及Search函数。函数BulidHx调用函数Hx。三、详细设计1.数据类型定义typedefstruct{ char*name; char*add; longlongphonenumber;}message;typedefstruct{ message*list; intnumber;//记录数}HxList;2.系统主要子程序详细设计a.建立通讯录voidBulidHx(HxList&L)//建立通讯录{ FILE*f=fopen("E:\\tongxunlu.txt","w"); charbuf[20]={0},str[20]={0}; longlongkey; cout<<"输入要建立的记录数:"; cin>>L.number; L.number+=1; L.list=newmessage[L.number];//分配哈希表的存储空间 for(inti=0;i<L.number;i++) {数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第3页。 L.list[i].phonenumber=-1;数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第3页。 } L.list[L.number-1].name=NULL; L.list[L.number-1].add=NULL; cout<<"输入记录信息(电话号码用户名地址)"<<endl; for(inti=0;i<L.number-1;i++) { cin>>key>>buf>>str; intpose=Hx(key,L.number);//获取理论上的存储位置 if(L.list[pose].phonenumber==-1) { } else { //用二次探测再散列法解决冲突 //1^2-1^22^2-2^2 intdi,count=1; xunhuan: if(count%2==0) di=-(count/2)*(count/2); else di=((count/2)+1)*((count/2)+1); intsite=Hx(key+di,L.number); if(site>=0) { if(L.list[site].phonenumber==-1) { pose=site; } else { count++; gotoxunhuan; } } else数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第4页。 {数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第4页。 site=L.number-abs(site); if(L.list[site].phonenumber==-1) { pose=site; } else { count++; gotoxunhuan; } } } L.list[pose].phonenumber=key; fprintf(f,"%lld",key); fprintf(f,""); L.list[pose].name=newchar[strlen(buf)+1]; strcpy(L.list[pose].name,buf); fprintf(f,"%s",buf); fprintf(f,""); L.list[pose].add=newchar[strlen(str)+1]; strcpy(L.list[pose].add,str); fprintf(f,"%s",str); fprintf(f,"\n"); }}b.查找intSearch(HxList&L)//查找{ longlongkey; cout<<"输入要查找记录的关键字(电话号码):"; cin>>key; intpose=Hx(key,L.number);//计算理论上的位置 if(L.list[pose].phonenumber==key) { } else {数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第5页。 数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第5页。 intcount=1,di;//二次探测再散列,查找 xunhuan: if(count%2==0) { di=-(count/2)*(count/2); } else { di=((count/2)+1)*((count/2)+1); } intsite=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;//没有找到 } gotoxunhuan; } } else { site=L.number-abs(site); if(L.list[site].phonenumber==key) { pose=site; } else {数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第6页。 count++;数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第6页。 if(L.list[site].phonenumber==-1) { cout<<"没有找到"<<endl; return-1;//没有找到 } gotoxunhuan; } } } 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; returnpose; }}四、测试与分析1.显示主菜单,运行程序可以显示出如下界面。2.建立通讯录在主菜单下选1,建立通讯录,按照规定格式输入电话号码姓名以及地址,即可在E盘根目录下建立tongxunlu.txt文件,保存通讯录信息。数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第7页。3.查找数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第7页。在主菜单下选2,完成查找功能,输入要查找的电话号码,即可得到该电话号码对应的姓名以及地址。4.退出系统在主菜单下选3,退出程序。五、附录1.通讯查询系统.h#include<iostream>usingnamespacestd;typedefstruct{ char*name; char*add; longlongphonenumber;}message;typedefstruct{ message*list; intnumber;//记录数}HxList;数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第8页。intHx(longlongkey,intdata)数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第8页。{ returnkey%(data-1);}voidBulidHx(HxList&L)//建立通讯录{ FILE*f=fopen("E:\\tongxunlu.txt","w"); charbuf[20]={0},str[20]={0}; longlongkey; cout<<"输入要建立的记录数:"; cin>>L.number; L.number+=1; L.list=newmessage[L.number];//分配哈希表的存储空间 for(inti=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(inti=0;i<L.number-1;i++) { cin>>key>>buf>>str; intpose=Hx(key,L.number);//获取理论上的存储位置 if(L.list[pose].phonenumber==-1) { } else { //用二次探测再散列法解决冲突 //1^2-1^22^2-2^2 intdi,count=1; xunhuan: if(count%2==0) di=-(count/2)*(count/2);数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第9页。 else数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第9页。 di=((count/2)+1)*((count/2)+1); intsite=Hx(key+di,L.number); if(site>=0) { if(L.list[site].phonenumber==-1) { pose=site; } else { count++; gotoxunhuan; } } else { site=L.number-abs(site); if(L.list[site].phonenumber==-1) { pose=site; } else { count++; gotoxunhuan; } } } L.list[pose].phonenumber=key; fprintf(f,"%lld",key); fprintf(f,""); L.list[pose].name=newchar[strlen(buf)+1]; strcpy(L.list[pose].name,buf); fprintf(f,"%s",buf); fprintf(f,""); L.list[pose].add=newchar[strlen(str)+1]; strcpy(L.list[pose].add,str); fprintf(f,"%s",str); fprintf(f,"\n");数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第10页。 }数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第10页。}intSearch(HxList&L)//查找{ longlongkey; cout<<"输入要查找记录的关键字(电话号码):"; cin>>key; intpose=Hx(key,L.number);//计算理论上的位置 if(L.list[pose].phonenumber==key) { } else { intcount=1,di;//二次探测再散列,查找 xunhuan: if(count%2==0) { di=-(count/2)*(count/2); } else { di=((count/2)+1)*((count/2)+1); } intsite=Hx(key+di,L.number); if(site>=0) { if(L.list[site].phonenumber==key) { pose=site; } else { count++; if(L.list[site].phonenumber==-1) {数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第11页。 co数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第11页。 return-1;//没有找到 } gotoxunhuan; } } 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;//没有找到 } gotoxunhuan; } } } 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; returnpose; }}2.通讯录查询系统.cpp(主函数)#include"通讯录查询系统.h"数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第12页。intmain()数据结构课程设计-通讯录查询系统的设计与实现全文共14页,当前为第12页。{ HxListL; intch; while(1) { cout<<"----------------通讯录查询系统------------
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论