1、软件技术基础课程设计软件技术基础课程设计 1 设计哈希表实现电话号码查询系统设计哈希表实现电话号码查询系统 一一目的目的 通过课程设计,巩固和加深对结构体、文件、哈希表等理论知识的理解;掌握现实复 杂问题的分析建模和解决方法,掌握包括问题描述、系统分析、设计建模、代码实现、结果 分析等的方法;提高利用计算机分析解决综合性实际问题的基本能力;锻炼个人动手能力, 历练自身素质。 哈希表实现电话号码查询系统是利用哈希表实现电话系统的快速查询,程序实现哈希 表建表和查表,并实现对没有查找到的内容进行记录。掌握哈希表的工作原理,熟悉建立哈 希表、对哈希表冲突处理、哈希表查找等功能的实现,回顾文件读取、写
2、入,回顾随机函数 的作用。 二二需求分析需求分析 1.1.输入的形式和输入值的范围输入的形式和输入值的范围 数据输入分两种模式:一种是将原有数据记录在 old.txt 文档中,由程序读入;另一种 是由程序随机生成,并储存在 new.txt 文档中。数据的格式为:姓名、电话号码、家庭住址。 用户使用时显示菜单,用户输入菜单选项完成操作。 2.2.输出的形式输出的形式 查找的结果显示在屏幕上。未被查找到的内容输出到 out.txt 文档中。在用户需要时, 将哈希表显示在屏幕上。 3.3.程序所能达到的功能程序所能达到的功能 根据用户的选择, 从原有文档读入数据或随机生成数据, 分别以姓名和电话号码
3、做为关 键字生成哈希表。 生成哈希表后用户可以根据相应关键字进行数据的查找, 若查找到对应的 数据则将数据输出到屏幕, 若没有查找到对应的数据则将用户输入的查找内容输出到 out.txt 文档。在用户选择显示哈希表时,显示完整的哈希表。 程序使用文字菜单的友好界面。在数据输入时对输入内容进行范围控制。 4.4.初步测试计划初步测试计划 在 old.txt 文档中输入 30 条记录,令程序读入并分别以姓名和电话号码做为关键字生成 哈希表,查找记录中原有的记录,查看输出数据,查找记录中没有的记录查看回馈,查看整 个哈希表的数据。 令程序随机生成记录,查看 new.txt 文档,分别以姓名和电话号码
4、做为关键字生成哈希表, 查看整个哈希表的数据,分别查找原有和没有的记录,查看回馈。 三三概要设计概要设计 软件技术基础课程设计软件技术基础课程设计 2 1.1.数据类型数据类型 定义结构体类型存储每条记录。 struct Data char namesizename; char phonesizephone; char addresssizeaddress; bool used; *hash_data; 2 2 各种函数说明:各种函数说明: int get_hashkey(char* str,int select)/ 获得关键字 void show(int i) / 显示每条信息 void S
5、tore(char *str)/在没有找到时输出未找到的记录, 打开文件 out.txt 并将记录储存在文档 中 void Allshow()/输出哈希表中的记录 void Auto_file()/随机生成数据,并将数据保存在 new.txt void Build_Hash(int HashType)/建立哈希表 void FindName()/根据姓名查找哈希表中的记录 void FindPhone()/根据电话号码查找哈希表中的记录 四四详细设计详细设计 1.1.头文件及定义结构体类型头文件及定义结构体类型 #include #include #include #include struc
6、t Data 软件技术基础课程设计软件技术基础课程设计 3 string name;/ string phone; string address; ; Data *hash_data; 2.2.定义定义长度长度 #define sizehash 100 #define sizename 20 #define sizephone 15 #define sizeaddress 40 3.3.获取关键字函数获取关键字函数 int get_hashkey(char* str,int select) int Key=0, ReKey,m; char tmp10; for (int i=0;istrlen(str);i+) Key+=stri; Key%=sizehash; if (hash_dataKey.used) m=Key; Key=-1; if (select=1) for (i=0;i10;i+) 软件技术基础