1、 课程设计 (论文 )任务书 软 件 学 院 学 院 软 件 + 机电 专 业 2015 1 班 一、课程设计 (论文 )题目 哈希表的设计与实现 链地址法 二、课程设计 (论文 )工作自 2015 年 12 月 26 日起至 2016 年 12 月 31 日止 三、课程设计 (论文 ) 地点 : 创 新 大 楼 机 房 四、课程设计 (论文 )内容要求: 1本课程设计的目的 训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识, 编写程序求解指定问题; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解
2、决问题的能力 ,巩固、深化学生 的理论知识,提升编程水平。 2课程设计的任务及要求 1)基本要求: 要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象 数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告; 在程序设计阶段 应尽量利用已有的标准函数,加大代码的重用率; 程序设计语言推荐使用 C/C+,程序书写规范,源程序需加必要的注释; 每位同学需提交可独立运行的程序和规范的课程设计报告。 2)课程设计论文编写要求 理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进 行书写和装订; 课程设计报告(论文)包括中文目录、设计任务、需求分
3、析、概要设计、详细设计、 编码实现、调试分析、课设总结、谢辞、参考文献、附录等 ; 设计部分应包含系统功能模块图,调试分析应包括运行截图等。 3)课程设计评分标准: 学习态度: 10 分; 系统设计: 20 分; 编程调试: 20 分; 回答问题: 20 分; 论文撰写: 30 分。 4)参考文献: 严蔚敏 ,吴伟民 . 数据结构 (C 语言版 )M. 清华大学出版社 . 2010.3 严蔚敏 ,吴伟民 . 数据结构题集 (C 语言版 )M. 清华大学出版社 . 1999.2 何钦铭 ,冯燕等 . 数据结构课程设计 M. 浙江大学出版社 . 2007.8 5)课程设计进度安排 准备阶段( 4
4、学时):选择设计题目、了解设计目的要求、查阅相关资料; 程序模块设计分析阶段( 4 学时):程序概要设计 、详细设计; 代码编写调试阶段( 8 学时):程序模块代码编写、调试、测试; 撰写论文阶段( 4 学时):总结课程设计任务和设计内容,撰写课程设计论文。 学生签名: 2016 年 1 月 1 日 6) 课程设计题目具体要求: (1)设每个记录有下列数据项:电话号码、用户名、地址 (2)从键盘输入各记录,分别以电话号码和用户名为关键字建立 不同的哈希 表 (3)采用 链地址 法解决冲突 (4)查找并显示给定电话号码的记录 (5)查找并显示给定用户名的记录 课程设计 (论文 )评 审意见 (
5、1)学习态度( 10 分):优( )、良( )、中( )、一般( )、差( ); ( 2)系统设计( 20 分):优( )、良( )、中( )、一般( )、差( ); ( 3)编程调试( 20 分):优( )、良( )、中( )、一般( )、差( ); ( 4)回答问题( 20 分):优( )、良( )、中( )、一般( )、差( ); ( 5)论文撰写( 30 分):优( )、良( )、中( )、一般( )、差( ); ( 6)格式规范性及考勤是否降等级:是( )、否( ) 评阅人: 周娟 职称: 讲 师 2017 年 1 月 2 日 系统流程图 电话管理系统的整个系统主要分为两大模块:录入
6、模块和查询模块,如功能模块图 21 。 录入模块可根据系统提示的信息填写,填完相应的信息,可按回车储存。以姓名和电话号码为关键字,分别用 Hash 函数运算出一个相对应的值,把这个值作为结点的存储地址,分别存入姓名散列表和电话号码散列表的对应位置。 查询模块分为两部分,姓名查询和号码查询,姓名查询可有一个姓名查到多个记录;号码查询是一一映 射。查找时,通过所要寻找的关键字用同样电话号码管理 录入子系统 查询子系统 姓名 地址 号码 姓名查找 号码查询 21 功能模块图 的 Hash 函数计算地址,判断存的内容是否跟关键字是否一样,若一样则记录找到则可找到你要查找的内容。否则无此记录。 哈希表散
7、列方法:电话散列计算 key 值是从第三个数字开始相加得到一个总和,用总和除以 20 取余数得到其散列地址。同样对于姓名的存储利用姓名的 ASSIC 值对应相加。 开始 进入录入系统 获得关键字 key 用 Hash(key)计算地址赋予指针 p 比较 num 的值是否和关键字相等 是 否 q=q-next 继续与num比较是否相等 比较 num 的值是否和关键字相等 否 是 输出记录 未找到记录 结束 系统流程图 源代码 #include #include #include #include #include #define NULL 0 unsigned int key; unsigned
8、 int key1; unsigned int key2; int *p; struct node char name8,address20; char num11; node *next; ; typedef node *pnode; typedef node *mingzi; node *phone; node *nam; node *a; using namespace std; hash(char num11) int i=3,j; key1=(int)num2; while(numi!=NULL) key1+=(int)numi; i+; key1=key1%20; hash2(ch
9、ar name8) int i=1,j; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; node *input() node *temp; temp = new node; temp-next=NULL; couttemp-name; couttemp-address; couttemp-num; return temp; int apend() node *newphone; node *newname; newphone=input(); newname=newphone; newphone-
10、next=NULL; newname-next=NULL; newphone-next = phonehash(newphone-num)-next; phonehash(newphone-num)-next=newphone; newname-next = namhash2(newname-name)-next; namhash2(newname-name)-next=newname; return 0; void create() int i; phone=new pnode20; for(i=0;inext=NULL; void create2() int i; nam=new ming
11、zi20; for(i=0;inext=NULL; void list() int i; node *p; for(i=0;inext; while(p) coutnameaddressnumnext; void list2() int i; node *p; for(i=0;inext; while(p) coutnameaddressnumnext; void find(char num11) int i,j=0; node *p; for(i=0;inext; while(p) if(strcmp(num,p-num)=0) coutnameaddressnumnext; if(j=0) coutnext; while(p) if(strcmp(name,p-name)=0)