设计哈希表实现电话号码查询系统C语言版(课程设计报告)
设计哈希表实现电话号码查询系统
一 目的
通过课程设计,巩固和加深对结构体、文件、哈希表等理论知识的理解掌握现实复杂问题的分析建模和解决方法,掌握包括问题描述、系统分析、设计建模、代码实现、结果分析等的方法;提高利用计算机分析解决综合性实际问题的基本能力锻炼个人动手能力历练自身素质。
哈希表实现电话号码查询系统是利用哈希表实现电话系统的快速查询程序实现哈希表建表和查表并实现对没有查找到的内容进行记录。掌握哈希表的工作原理熟悉建立哈希表、对哈希表冲突处理、哈希表查找等功能的实现回顾文件读取、写入,回顾随机函数的作用。
二需求分析
1.输入的形式和输入值的范围
数据输入分两种模式一种是将原有数据记录在old。 t文档中 由程序读入另一种是由程序随机生成,并储存在nw。 txt文档中。数据的格式为:姓名、 电话号码、家庭住址.
用户使用时显示菜单,用户输入菜单选项完成操作。
2.输出的形式
查找的结果显示在屏幕上。未被查找到的内容输出到u 。 tx文档中。在用户需要时,将哈希表显示在屏幕上。
3.程序所能达到的功能
根据用户的选择从原有文档读入数据或随机生成数据,分别以姓名和电话号码做为关键字生成哈希表。生成哈希表后用户可以根据相应关键字进行数据的查找,若查找到对应的数据则将数据输出到屏幕,若没有查找到对应的数据则将用户输入的查找内容输出到ou 。 txt文档.在用户选择显示哈希表时,显示完整的哈希表。
程序使用文字菜单的友好界面在数据输入时对输入内容进行范围控制。
4。初步测试计划
在 d.tt文档中输入 条记录令程序读入并分别以姓名和电话号码做为关键字生成哈希表查找记录中原有的记录查看输出数据,查找记录中没有的记录查看回馈,查看整个哈希表的数据.
令程序随机生成记录,查看n.tx文档分别以姓名和电话号码做为关键字生
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
成哈希表查看整个哈希表的数据,分别查找原有和没有的记录查看回馈。
三概要设计
。数据类型
定义结构体类型存储每条记录struc D a
{
char me s ize na me ;
ar phon size on
chr address i eaddres s]
ol used;
}hahd ata;
2各种函数说明int _a ke(char* s r,it s lct 获得关键字vod so(int i //显示每条信息vod Stoec har str/在没有找到时输出未找到的记录打开文件u xt并将记录储存在文档中v d Allsow( /输出哈希表中的记录void Auof l( 随机生成数据并将数据保存在 。 txvo id uild_H s(int Ha sTp //建立哈希表vid Findame( /根据姓名查找哈希表中的记录vi F indhone //根据电话号码查找哈希表中的记录
四详细设计
。头文件及定义结构体类型
in lu d e< im 。 h〉
inc ude 〈stdi 。 h>
clud tr ng 〉
#in lde<s dli 。 h〉
设计哈希表实现电话号码查询系统C语言版(课程设计报告)struc t ata
tring name;//st ng phn
i ddre s ;
; Dat hah_aa
2。定义长度
define sizehash1 0
define s ename 20
d e sizephone15
#d e sizeadde s 4
.获取关键字函数int ge _hahke char s ,int selec
in Key0,ReKe,m
ar tmp[10]
for nt =0; 〈str en t ;i++
{
Key+str i ;
y%=sizehash
f ha s_dta e u e d
m=Key;
Key—
if s ect==1
{
设计哈希表实现电话号码查询系统C语言版(课程设计报告) o =0 i0 i+)
{
eKe(+Ai]%siea ;
if !ah_aa Reey].sed
KeyReKy
b re ak
}
se f( e e ==2)
{
Ke=m
r(i= ;i<100; ++
ReKe=eKy+1;
ReKy=ReKy iz ah;
hash_ata eKey u ed)
{
KeReey
b re ak;
}
}
etu K
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
4。产生ha 表
oid Bu d_H h H sTye) {
fo int i0 〈siehas; s_ ta i .u ed=fa eFLE* re rfoe(DataF ile ” ");
i re ade ==NULL
{
rint ( 读取失败\n”,D ataF il);
fc ose(r dr)
x t(1 ;
ch 1 0
a sps
r *nae ar p ho ne car*adre s;
n ashKey;whi ! o f(read
{
gets s 1 0 ae r
if s len s)>0
nstrtk(s sep s);
hon=strtok L, p s
add s trt (NL, );
f hy ==1
{
Hashyg askey ae Hasp); }e e Hashype=2
设计哈希表实现电话号码查询系统C语言版(课程设计报告)
{
ashKe=et_ashkey(phone HshTy }
f ahey=-
print f( ”哈希表过小或哈希碰撞过多" ;
fc lo red
ex 1);
se
strcy hs h_dta[H hK e y]。 n,na mes rcp y hahata as hKe]。 p e p hoe ;
s c h _d a[H s hKy。 ad s s, dre s s a _dat Hase use= rue;
}
l e d ;
}
在没有找到时输出未找到的记录打开文件ou xt并将记录储存在文档中vod St e har *str)/将查找失败记录添加到ou 。 tx文件末尾
LE =fop en(”ot txt” ”wa ) 以追加的方式写入 (p==NLL)/判断文件是否打开成功
p nf "创建ut。 tx失败n )
f los p)
ex t(1 ;
设计哈希表实现电话号码查询系统C语言版(课程设计报告)}
fsaf p,”s , ;
fc os pf)
6。输出哈希表中的记录
oidAl sho
{
r(int i= ; izeash +
f( shda i].used)
{
sho i
}
p ntf(”nn");
7。随机生成数据并将数据保存在ew ttvo id Auo_f le )
FLE p=o en("ew t " ”w”)
writer。 open("ne.t ”)
iffp=NULL)
pritf ”创ä¡ä建¡§n tx失º¡ì败㨹 \n ) lo e(f);
设计哈希表实现电话号码查询系统C语言版(课程设计报告) ex t 1 ;
chr s 100]={ };
k= ;
sran t ime 0) ;
fr it ; < i++)
meset s,0, 0 );
=0;
//随?机¨²产¨²生¦¨²用®?户¡ì名
or(int j=0;j8 j++ k++
s k ='a’rnd
//随机¨²产¨²生¦¨²电Ì话¡ã号码?
s k+ \t ;
f (j=0;j<12 ++,+)
{
s[k]=’ ran(%10
}
//随?机¨²产¨²生¦¨²地Ì址¡¤
s[k++ ='\t’
设计哈希表实现电话号码查询系统C语言版(课程设计报告)fr(j=0;j<20 j+ k+
s = ’+rnd( 2
}
fpr ntff "s", )
if(i =49
nt (p, \n
}fcls(fp ;
}
.根据姓名查找哈希表中的记录in Fnd_y_nme s r ng nam
{
i =0;
in 1
intky;chr* ;for(ey ,p=nam 0];p +)
ey=key+
keyky%
whi (
{
if( ig k == 0’&ey 〈=
ky+;j++ if as h_ata[e].nme==nme
reu k e y
e e
在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...
易探云怎么样?易探云是国内一家云计算服务商家,致力香港服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。易探云服务器均选择当下热门线路,比如CN2 GIA、BGP线路、CN2线路等,所有云主机支持月付,并且首月优惠,年付优惠,优惠后香港沙田云服务器/独立ip/香港CN2线路,每月仅18元,188元/年。点击进入:易探云官方网站地址1、香港...
npidc全称No Problem Network Co.,Limited(冇問題(香港)科技有限公司,今年4月注册的)正在搞云服务器和独立服务器促销,数据中心有香港、美国、韩国,走CN2+BGP线路无视高峰堵塞,而且不限制流量,支持自定义内存、CPU、硬盘、带宽等,采用金盾+天机+傲盾防御系统拦截CC攻击,非常适合建站等用途。活动链接:https://www.npidc.com/act.html...