课程设计(论文)任务书
软 件 学 院 学 院 软 件工程 专 业 班
一、课程设计(论文)题目: 通讯录管理系统的设计与实现——哈希表 二、课程设计(论文)工作自 2016 年 1 月 4 日起至 2016 年 1 月 10 日止
三、课程设计(论文) 地点: 软件测试中心(北区测试二室) 四、课程设计(论文)内容要求: 1.本课程设计的目的
⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合课程的理论知识, 编写程序求解指定问题;
⑵初步掌握软件开发过程的问题分析、系统设计、编码、测试等基本方法和技能; ⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学 生的理论知识,提升编程水平。 2.课程设计的任务及要求 1)基本要求:
⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽 象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告; ⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率; ⑶程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释; ⑷每位同学需提交可独立运行的程序和规范的课程设计报告。 2)课程设计论文编写要求
⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式 进行书写和装订;
⑵课程设计报告包括中文目录、设计任务、需求分析、概要设计、详细设计、编码 实现、调试分析、课设总结、谢辞、参考文献、附录等;
⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。 3)课程设计评分标准: ⑴学习态度:10分; ⑵系统设计:20分; ⑶编程调试:20分; ⑷回答问题:20分; ⑸论文撰写:30分。 4)参考文献:
⑴严蔚敏 李冬梅 吴伟民著.数据结构(C语言版)[M]. 人民邮电出版社. 2015.2 ⑵李春葆. 数据结构教程上机实验指导[M]. 清华大学出版社. 2013.1 ⑶何钦铭,冯燕等. 数据结构课程设计[M]. 浙江大学出版社. 2007.8 5)课程设计进度安排
⑴准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料; ⑵程序模块设计分析阶段(4学时):程序概要设计、详细设计; ⑶代码编写调试阶段(8学时):程序模块代码编写、调试、测试;
⑷撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文。
学生签名:
2016 年 1 月 4 日
6)课程设计题目具体要求:
任务:利用哈希表完成通讯录的一般性管理工作: (1) 添加信息;
(2) 显示信息:可以按照手机或联系人的姓名拼音排序显示; (3) 查找:用名字和手机号分别作为查找的依据,进行查找; (4) 编辑信息; (5) 删除信息;
(6) 保存到文件;
要求:(1)每条记录至少包括姓名、手机、QQ、电子邮箱、城市、邮编等信息。 (2)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。
课程设计(论文)评审意见
(1)学习态度(10分):优( )、良( )、中( )、一般( )、差( ); (2)系统设计(20分):优( )、良( )、中( )、一般( )、差( ); (3)编程调试(20分):优( )、良( )、中( )、一般( )、差( ); (4)回答问题(20分):优( )、良( )、中( )、一般( )、差( ); (5)论文撰写(30分):优( )、良( )、中( )、一般( )、差( ); (6)格式规范性及考勤是否降等级:是( )、否( )
评阅人: 职称: 讲师
2016 年 1 月 12 日
目录
一.设计任务------------------------------------------------------------------------------- 1 二.需求分析------------------------------------------------------------------------------- 1 三.系统设计------------------------------------------------------------------------------- 2 四.编码实现------------------------------------------------------------------------------- 6 五.调试分析------------------------------------------------------------------------------- 10 六.课设总结------------------------------------------------------------------------------- 15 七.谢辞------------------------------------------------------------------------------------- 15 八.参考文献-------------------------------------------------------------------------------- 15
一、设计任务
通讯录管理系统的设计与实现——哈希表
任务:利用哈希表完成通讯录的一般性管理工作: (1) 添加信息;
(2) 显示信息:可以按照手机或联系人的姓名拼音排序显示; (3) 查找:用名字和手机号分别作为查找的依据,进行查找; (4) 编辑信息; (5) 删除信息; (6) 保存到文件; 要求:
(1)每条记录至少包括姓名、手机、QQ、电子邮箱、城市、邮编等信息。 (2)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。
二、需求分析
本问题的关键和难点在于如何解决散列的问题。由于结点的个数无法的知,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失”的问题。所以采用链地址法散列算法。采用拉链法,当出现同义词冲突时,使用链表结构把同义词链接在一起,即同义词的存储地址不是散列表中其他的空地址。
首先,解决的是定义链表结点,在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成.name[16] 、num[11]和address[20]都是char浮点型,输入输出都只能是浮点型的。
采用拉链法,其中的所有同义词构成一个单链表,再由一个表头结点指向这个单链表的第一个结点。这些表头结点组成一个一维数组,即哈希表。数组元素的下标对应由散列函数求出的散列地址。
其次,设计散列函数,本程序需要设计两个散列函数才能解决问题,程序需要分别为以电话号码和用户名为关键字建立哈希表。所以要分别以用户名、号码为关键字建立两个散列函数,
对于以号码为关键字的散列函数,是将十一个数字全部相加,然后对20求余。得到的数作为地址。对于以用户名为关键字的散列函数,是将所有字母的ASCLL码值相加,然后对20求余。
再次,需要实现添加结点的功能,则其中必须包括一个输入结点信息、添加结点的函数;
需要实现查找函数,则必须包括一个查找结点的函数;需要对文件进行保存,则必需要包括
1
保存文件函数。还需要包括一个主菜单和一个主函数。
三、系统设计
在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成,链地址法结点结构如图:name[16] num[11] address[20] next
其中name[16]和num[11]是分别为以电话号码和用户名为关键字域,存放关键字;address[20] 为结点的数据域,用来存储用户的地址。Next指针是用来指向下一个结点的地址。 主要算法的流程图如下:
初始化散列链表(1)并为其动态分配内存空间 初始化散列链表(2)并为其动态分配内存空间
开始 i=0 i<20 i++ p-phone[i]→next 开始 p!=null 建立新结点temp 输入结点信息 把temp→next赋为空 p=p→next 输入信息 结束 结束
2
数据结构课设 通讯录系统的设计与实现 哈希表



