利用哈希表实现电话号码查询系统

Collapser

发布日期: 2018-11-05 12:19:45 浏览量: 6205
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

第一章 需求分析

1.1 问题描述

设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务。

1.2 基本要求

  • 设计每个记录有下列数据项:电话号码、用户名、地址

  • 从键盘输入个记录,分别以电话号码和用户名为关键字建立不同散列表存储

  • 采用一定的方法解决冲突

  • 查找并显示给定电话号码的记录

  • 查找并显示给定用户名的记录

1.3 实现提示

  • 设计不同的散列函数,尝试不同类型冲突解决方案,考察平均查找长度的变化

  • 记录与散列表分开,达到不同关键字散列表可共享记录

1.4 补充内容

  • 自动读入硬盘中的记录,并可以选择存储更新后的记录

  • 提供信息检测机制,以学号作为唯一关键字,对重复学号的记录不允许插入

  • 提供删除功能

  • 提供空⽩检测机制,输入信息任意一项为空则不允许插入

  • 提供格式检测机制,输入信息的格式不正确则不允许插入(如年龄不允许输入字符或字符串)

  • 采用不同的hash函数构建方法和不同的冲突处理方式

  • 实现用户界面

第二章 系统描述

2.1 开发语言及主要功能实现方法

本程序基于java语言写成,配置java所需环境变量。 本程序中链表和hash函数均未使用java库中已有函数,链表和hash函数都 是使用java语言自⼰编写实现。 Java 语言实现链表和 C 语言类似,但由于 java 没有指针功能,因此可以将 节点作为单独的类,用引用的方法实现链式链接。 Hash函数分别采用除留取余法和伪随机数法,其中伪随机数用于字符串构造 hash函数,可根据不同的字符串生成不同的随机数。 冲突处理分别采用线性探测法、再哈希法和链地址法。

2.2 单条记录所含内容

结合学生电子号码本的需求情况,选出本部周围的8项内容,作为一条记录:

学号 姓名 性别 年龄 电话号码 住址 学院 专业
123456789 张三 19 1357924680 学3-236 计算机学院 计算机科学与技术

(其余记录与此格式相同,不做重复)

2.3 Hash 函数及处理冲突方法

本系统分别对学号、姓名、电话号码三项构建 hash 函数,并采用不同的冲突处理方法,具体如下:

  • 学号散列表:采用除留取余法构建hash函数,采用线性探测法处理冲突

  • 姓名散列表:采用伪随机数法构建hash函数,采用链地址法处理冲突

  • 电话号码散列表:采用除留取余法构建hash函数,采用再哈希法处理冲突

除留余数法

m是散列表表长。

  1. f(key) = key mod p (p<=m)

随机数法

注意random的随机种子需要是固定的,以便查询的时候能够根据key重新找到,适用于关键字长度不等的情况。

  1. f(key) = random(key)

再哈希法

遇到冲突就重新采用一个散列函数计算新的存储位置,可以使关键字不产生聚集。

  1. f i (key)=RH i (key) (i=1,2,...k)

链地址法(拉链)

将所有关键字的同义词记录在一个单链表中,在散列表中只存储所有同义词表的头指针。

第三章 功能模块结构

3.1 信息插入模块

  • 功能:插入单条记录,依次输入单条记录中的信息

  • 输入要求:学号不允许重复、每项信息不能有空值、性别只允许男/女,年龄只允许输入数字等等

  • 输出结果:将该记录保存在链表中备份,依次采用三种不同的 hash 函数构建散列表索引项,并处理冲突,实现记录与散列表分开,达到不同关键字散列表可共享记录

3.2 信息修改模块

  • 功能:按照输入学号修改相应记录,在屏幕上显示对应记录的所有信息并允许修改

  • 输入要求:学号不允许重复、每项信息不能有空值、性别只允许男/女,年龄只允许输入数字等等

  • 输出结果:将原记录在链表中的内容更新备份,同时更新三种不同的 hash 函数构建的散列表索引项

3.3 信息删除模块

  • 功能:删除单条记录,同时删除链表中的记录和各散列表中的索引

  • 输入要求:相应记录的学号必须存在

  • 输出结果:同时删除链表中的记录和各散列表中的索引

3.4 信息查询模块——按照学号查找

  • 功能:根据学号的散列值查找单条记录,实际上为查找学号散列表中的索引并获取对应的完整记录

  • 输入要求:相应记录的学号必须存在

  • 输出结果:在屏幕上显示相关记录

3.5 信息查询模块——按照电话查找

  • 功能:根据电话号码的散列值查找单条记录,实际上为查找电话号码散列表中的索引并获取对应的完整记录

  • 输入要求:相应记录的电话号码必须存在

  • 输出结果:在屏幕上显示相关记录

3.6 信息查询模块——按照姓名查找

  • 功能:根据姓名的散列值查找单条记录,实际上为查找姓名散列表中的索引并获取对应的完整记录

  • 输入要求:相应记录的姓名必须存在

  • 输出结果:在屏幕上显示相关记录(由于姓名可能重复,所以可能会显示多条记录)

3.7 信息保存

  • 功能:将已有记录保存在本地

  • 输入要求:无

  • 输出结果:在本地保存所有信息

第四章 主要模块算法说明

4.1 学号散列表设计

  • hash函数构建方法:通过除留取余法构建散列表

  • 处理冲突方法:采用线性探测法,一次一步

4.2 电话号码散列表设计

  • hash函数构建方法:通过伪随机数法构建散列表
  • 处理冲突方法:采用再哈希法

4.3 姓名散列表设计

  • hash函数构建方法:通过伪随机数法构建散列表

  • 处理冲突方法:采用链地址法(插入、删除、更新、查询全部包含在内)

4.4 记录插入模块设计

从界面上⽂本框中读取字符串,并进⾏判断:

  • 首先各项都必须按 照要求,⽐如年龄不能为字符,学号不能为字符等等

  • 然后判断是否有某项为空,有空则不允许插入

  • 最后检测学号是否重复, 重复则不允许插入。 然后在链表中添加完整记录,同时建⽴学号、电话号码、姓名的索引

4.5 记录修改模块设计

首先根据给定的学号选择相应记录,显示在屏幕上,允许用户自⾏修改。从界面上⽂本框中读取字符串,并进⾏判断:

  • 首先各项都必须按 照要求,⽐如年龄不能为字符,学号不能为字符等等

  • 然后判断是否有某项为空,有空则不允许插入

  • 最后检测学号是否重复, 重复则不允许插入。 然后在链表中更新完整记录,同时更新学号、电话号码、姓名的索引

4.6 记录删除模块设计

删除输入学号对应的记录,同时删除链表中的节点和各索引表中的索引。

第五章 运行结果

主界面

添加纪录

通过学号查找记录并修改

查询界面

查询信息如下所示:

保存信息到本地

第六章 课程设计总结

  • ⼈机交互的问题,用户界面如何设计得美观且易于使用,在此使用java UI设计,设计友好美观的界面,方便用户使用

  • 怎样能利用合理的哈希函数构建算法和冲突处理算法

  • 如何实现记录与散列表分开,达到不同关键字散列表可共享记录

上传的附件 cloud_download 利用哈希表实现电话号码查询系统.7z ( 4.22mb, 590次下载 )
error_outline 下载需要12点积分

keyboard_arrow_left上一篇 : 基于C++的小型公司工资管理系统 基于Jsp和MySQL实现的航空订票管理系统 : 下一篇keyboard_arrow_right



Collapser
2018-11-05 12:20:17
用哈希表实现电话号码查询系统
哆啦A梦
2020-12-01 08:29:16
用哈希表实现电话号码查询系统
哆啦A梦
2020-12-01 08:29:28
用哈希表实现电话号码查询系统
哆啦A梦
2020-12-01 08:29:52
用哈希表实现电话号码查询系统 怎样才有积分呀
Gaoyang
2020-12-02 22:07:41
想要积分
iY
2020-12-20 16:15:12
用嘻哈表实现电话号码查询系统
高中
2020-12-24 19:54:17
大佬,main在哪
zym
2020-12-24 22:18:05
写的号啊
zym
2020-12-24 22:18:12
写的号啊 我想要积分啊
zym
2020-12-24 22:18:22
写的号啊 我想要积分啊所以多评论有用么
zym
2020-12-26 09:07:59
下载完一堆乱码 ;玩你妹啊 ,骗子
zym
2020-12-26 09:10:01
真是坏良心
Hero
2021-01-07 09:39:22
卧槽,假的,恶心啊,压根就没代码,全是乱码,文件弄的倒是挺像样
Hero
2021-01-07 09:39:34
傻逼
Hero
2021-01-07 09:39:49
不要再被骗了
yammmmmy
2021-04-21 13:49:06
利用哈希表实现电话号码查询系统
nangua
2021-05-29 13:40:19
利用哈希表实现电话号码查询系统
马超
2021-06-21 15:34:22
用哈希表实现电用哈希表实现电话号码查询系统话号码查询系统
马超
2021-06-21 15:35:44
123

发送私信

三观不同不适合做朋友

12
文章数
13
评论数
最近文章
eject