设计哈希表实现电话号码查询系统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
今天父亲节我们有没有陪伴家人一起吃个饭,还是打个电话问候一下。前一段时间同学将网站账户给我说可以有空更新点信息确保他在没有时间的时候还能保持网站有一定的更新内容。不过,他这个网站之前采用的主题也不知道来源哪里,总之各种不合适,文件中很多都是他多年来手工修改的主题拼接的,并非完全适应WordPress已有的函数,有些函数还不兼容最新的PHP版本,于是每次出现问题都要去排查。于是和他商量后,就抽时间把...
DMIT怎么样?DMIT最近动作频繁,前几天刚刚上架了日本lite版VPS,正在酝酿上线日本高级网络VPS,又差不多在同一时间推出了美国cn2 gia线路不限流量的美国云服务器,不过价格太过昂贵。丐版只有30M带宽,月付179.99美元 !!目前,美国云服务器已经有个4个套餐,分别是,Premium(cn2 gia线路)、Lite(普通直连)、Premium Secure(带高防的cn2 gia线...
819云互联 在本月发布了一个购买香港,日本独立服务器的活动,相对之前的首月活动性价比更高,最多只能享受1个月的活动 续费价格恢复原价 是有些颇高 这次819云互联与机房是合作伙伴 本次拿到机房 活动7天内购买独立服务器后期的长期续费价格 加大力度 确实来说这次的就可以买年付或者更长时间了…本次是5个机房可供选择,独立服务器最低默认是50M带宽,不限制流量,。官网:https://ww...