数据结构课程设计通讯录查询系统的设计与实现Word格式文档下载.docx
《数据结构课程设计通讯录查询系统的设计与实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录查询系统的设计与实现Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
本程序需要用到两个结构体,分别为通讯录message以及哈希表HxList
2.程序模块
本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。
系统子程序及功能设计
本系统共有三个子程序,分别是:
intHx(longlongkey,intdata)//哈希函数
voidBulidHx(HxList&
L)//建立通讯录
intSearch(HxList&
L)//查找
3.各模块之间的调用关系以及算法设计
主函数调用BulidHx以及Search函数。
函数BulidHx调用函数Hx。
三、详细设计
1.数据类型定义
typedefstruct
{
char*name;
char*add;
longlongphonenumber;
}message;
message*list;
intnumber;
//记录数
}HxList;
2.系统主要子程序详细设计
a.建立通讯录
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<
i++)
{
L.list[i].phonenumber=-1;
}
L.list[L.number-1].name=NULL;
L.list[L.number-1].add=NULL;
输入记录信息(电话号码用户名地址)"
endl;
L.number-1;
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
site=L.number-abs(site);
L.list[pose].phonenumber=key;
fprintf(f,"
%lld"
key);
"
L.list[pose].name=newchar[strlen(buf)+1];
strcpy(L.list[pose].name,buf);
%s"
buf);
L.list[pose].add=newchar[strlen(str)+1];
strcpy(L.list[pose].add,str);
str);
\n"
}
b.查找
输入要查找记录的关键字(电话号码):
key;
intpose=Hx(key,L.number);
//计算理论上的位置
if(L.list[pose].phonenumber==key)
else
intcount=1,di;
//二次探测再散列,查找
xunhuan:
di=-(count/2)*(count/2);
di=((count/2)+1)*((count/2)+1);
intsite=Hx(key+di,L.number);
if(site>
if(L.list[site].phonenumber==key)
{
cout<
没有找到"
return-1;
//没有找到
if(L.list[site].phonenumber==-1)
if(L.list[pose].phonenumber==key)
cout<
电话号码\t"
用户名\t"
地址"
L.list[pose].phonenumber<
\t"
L.list[pose].name<
L.list[pose].add<
returnpose;
四、测试与分析
1.显示主菜单,运行程序可以显示出如下界面。
2.建立通讯录
在主菜单下选1,建立通讯录,按照规定格式输入电话号码姓名以及地址,即可在E盘根目录下建立tongxunlu.txt文件,保存通讯录信息。
3.查找
在主菜单下选2,完成查找功能,输入要查找的电话号码,即可得到该电话号码对应的姓名以及地址。
4.退出系统
在主菜单下选3,退出程序。
五、附录
1.通讯查询系统.h
#include<
iostream>
usingnamespacestd;
intHx(longlongkey,intdata)
returnkey%(data-1);
e