数据结构课程设计报告
电话号码查询系统
一、需求分析
问题描述:路径规划系统的业务活动包括:电话号码查询系统的业务活动包括:电话信息的添加、查看电话信息、按电话号查询电话信息和删除电话信息等,需对指定内容进行分析设计利用计算机加以实现。
所涉及的信息有:顶点数即地点数、边数即路径数、所有顶点信息、每条路径的两个端点信息和每条路径的权值。
系统能够实现的功能与操作如下:
1.插入信息:根据用户依次输入的内容(姓名,电话号),运用散列函数(这里以电话号为主键)对所需添加的路径进行相应存储。
2.查看信息:根据用户插入的信息显示相应内容。
3.查询电话号:根据用户输入的电话号,再通过散列函数计算下标查询相应信息。
4.删除电话号:根据用户输入的电话号,再通过散列函数计算下标删除相应信息。
5.退出系统:退出当前界面
输出界面:有主菜单、分菜单可对上述所说2的内容进行用户的相应选择和呈现,以达到系统的交互性。
编译环境:win10;eclipse;
所使用的编译语言:Java语言
二、系统功能划分及设计
1.存储结构设计
系统存储结构设计采用散列表存储结构。运用两个一维数组,分别存储键与值。散列函数的构建采用除留取余法将电话号每一位依次相加再模一个指定数P(P小于等于表长的最小素数或不包含小于20的质因数的合数)。处理冲突运用的是开放定址法的线性探测法 。
2.系统的功能架构设计
系统功能架构流程设计如图所示,主函数调用菜单函数进行菜单选择(1-4)。
- 当用户选择1时,调用插入信息,待用户依次输入姓名,电话号,若输入信息类型格式无误则可添加成功。
- 当用户选择2时,调用查看信息,无需其他操作界面会直接显示相应内容。
- 当用户选择3时,调用查询电话号,待用户输入电话号后,在系统中进行查询,若存在号码则可以得到相应信息,若不存在则会得到相应提示。
- 当用户选择4时,调用删除电话号,待用户输入电话号后,会进行相应删除功能。
- 当用户选择5时,退出系统。
3.模块设计
如上图所示为系统所涉及到各类的属性、方法及各类之间的关系图。
3.代码实现
public class HashTable<K, V> {
private final int SIZE = 5;// 散列表大小
private final int P = 3;
private K[] keys;// 散列表的键
private V[] values;// 散列表的值
/**
* 构造函数
*/
public HashTable() {
keys = (K[]) new Object[SIZE];
values = (V[]) new Object[SIZE];
}
/**
* 散列函数
*
* @param key
* @return
*/
public int Hash(K key) {
String str = Long.toString((long) key);
int addr = 0;
for (int i = 0; i < str.toCharArray().length; i++) {
addr += (int) str.charAt(i);
}
return addr % P;
}
/**
* 将信息插入散列表中
*
* @param key
* @param v