XX学院
课程设计报告书
专 业:计算机科学技术
课程设计名称:数结构课程设计
题 目:设计散列表实现电话号码查找系统
班 级:
学 号:
姓 名:
组 员:
指 导 老 师:
完 成 时 间:
摘
电话号码查找系统软件现实工具着时代发展信息化发展手机必备工具基目前现况必开发出款具含量电话号码理系统满足需求需包含添加删查找显示存储修改等操作具备存储文件功
该篇基C++语言VC60台散列表设计实现电话号码查找系统根数结构设计算法实现算法程序次运函数调定义操作函数包括添加操作查找操作查询操作显示操作清操作保存操作函数调次操作均函数次调基实现姓名电话址存储应
关键词:电话号码查找系统 C++ VC60 数结构
目录
目录
第章 开发环境开发工具 1
11 C++语言简介 1
12 开发背景 1
13 开发环境 1
第二章 算法思想 2
21 系统需求分析 2
22 系统总体设计 2
221 系统设计目标 2
222 开发设计思想 3
223 系统功模块设计 3
23 算法思想描述 6
第三章 算法实现 7
31 数结构 7
32 程序模块 7
33 模块间调关系 10
34 源程序代码 11
第四章 测试分析 18
41 测试数选择 18
42 测试结果分析 18
总 结 20
心体会 20
参考文献 22
第章 开发环境开发工具
11 C ++语言简介
C基础九八三年贝尔实验室Bjarne Stroustrup推出C++ C++进步扩充完善C语言成种面 象程序设计语言C++目前流行新版Borland C++45Symantec C++61Microsoft VisualC++ 20C++提出更深入概念支持面象概念容易问题空间直接映射程序空间程序员提供种传统结构程序设计思维方式编程方法增加整语言复杂性掌握起定难度
12 开发背景
着科学技术断发展计算机科学日渐成熟电话号码广泛性简洁性日易接受采电话号码理系统已必少系统软件工具满足电话种操作包括添加删修改查询保存电话号系统更加简洁方便基种市况需求必开发款满足种操作需求理系统
13 开发环境
文采开发环境基C++环境信息技术极扩展全类教育时空界限空前提高学兴趣效率动性已成开发类力创造性工具计算机科学中数结构仅般应程序设计基础操作系统数库系统网络系统设计型计算机应工程重实施基础编程实现操作系统基VC60 实现C++语言设计基容
第二章 算法思想
21系统需求分析
设计散列表实现电话号码查找系统
基求:
(1)设记录列数项:电话号码户名址
(2)键盘输入记录分电话号码户名关键字建立散列表
(3)采定方法解决突
(4)查找显示定电话号码记录
(5)查找显示定户名记录
该电话号码查找系统包括户输入查找保存删操作
22系统总体设计
系统数类型:
1基数类型:整型字符型
2构造数类型:数组结构
系统main函数标准库函数九定义函数组成
函数apendhash create list find save menu函数main调
首先进入程序需户输入通讯信息输入包括姓名电话址保存新建通讯录中户输入05分调函数满足需求完成0退出程序
23系统设计目标
数结构课程研究非数值计算程序设计问题中出现计算机操作象间关系操作学科数结构介数学计算机软件计算机硬件间门计算机专业核心课程计算机程序设计数库操作系统编译原理工智等重基础广泛应信息学系统工程等种领域
学数结构实际问题中涉象计算机中表示出进行处理通课程设计提高学生思维力促进学生综合应力专业素质提高通次课程设计达目:
解掌握数结构算法设计方法具备初步独立分析设计力
初步掌握软件开发程问题分析系统设计程序编码测试等基方法技
提高综合运学理知识方法独立分析解决问题力
训练系统观点软件开发般规范进行软件开发培养软件工作者应具备科学工作方法作风
222 开发设计思想
基系统设计目标文设计散列表实现电话号码查找系统遵循开发设计思想
●采现软硬件环境先进理系统开发方案达充分利现资源提高系统开发水应效果目
●量达操作程中直观方便实安全等求
●系统采模块化程序设计方法便系统功种组合修改便未参开发技术维护员补充维护
223 系统功模块设计
录入子系统
查询子系统
姓名
址
号码
姓名查找
号码查询
电话号码理系统
系统整体功模块图21
程序结点设计图22
电话理系统整系统分两模块功模块图21清楚
录入模块查询模块
录入模块根系统提示信息填写信填完相应信息回车储存姓
名电话号码关键字分Hash函数运算出相应值值作结点
存储址分存入姓名散列表电话号码散列表应位置
查询模块分两部分姓名查询号码查询姓名查询姓名查记录
号码查询映射查找时通寻找关键字样Hash函数计算址判
断存容否关键字否样样记录找找查找容否记录
哈希表散列方法:电话散列计算key值第三数字开始相加总总20取余数散列址样姓名存储利姓名ASSIC值应相加
开始
进入录入系统
获关键字key
Hash(key)计算址赋予指针q
较num值否关键字相等
输出记录
qq>next继续num较否相等
结束
较num值否关键字相等
未找记录
查找系统流程图 23
23 算法思想描述
1建立节点名字址电话放入数组中定义输入姓名电话址输入类型字符型
struct node
{
char name[8]address[20]
char num[11]
node * next
}
unsigned int key
unsigned int key2
2定义哈希表定义关键字key取定方法电话散列关键字key1+(int)num[i]key1key120 获取电话关键字堆入散列表
理姓名关键选取采姓名英文字母ASSIC 码key2+(int)numkey2key220
获取名字关键字
电话关键字名字关键字避免突产生程序突处理采线性探测解决算法:
for(j0j<20j++) {
key(key+j)20
if(phone[key]>name)
break
}
return(key)
次突通j增增加1次寻找散列表中未占位置直找位置
3定义函数中定义函数包括
输入apend函数
新建create函数包括姓名输入电话输入
显示查询信息list函数
查找find 函数
删信息delete函数
保存信息save 函数
定义菜单函数menu
函数然函数void main( )根户输入求调函数菜单函数次均调
第三章 算法实现
31 数结构
struct node 建节点
{
char name[8]address[20]
char num[11]
node *next
}
typedef node *pnode
typedef node *mingzi
定义姓名址电话均字符型类型
32 程序模块
头文件散列定义关键字
#include
#include
#include
#include
#include
#define NULL 0
unsigned int key
unsigned int key1
unsigned int key2
散列表建立突处理函数
hash(char num[11]) 建表电话号码关键字建立相应散列表哈希址发生突进行突处理
{
int i 3j
key1(int)num[2]
while(num[i]NULL)
{
key1+(int)num[i]
i++
}
key1key120
for(j0j<20j++) 线性探测法解决突
{
key(key1+j)20
if(phone[key]>num)
break
}
return(key)
}
hash2(char name[8]) 建表姓名关键字建立相应散列表
哈希址发生突进行突处理
{
int i 1j
key2(int)name[0]
while(name[i]NULL)
{
key2+(int)name[i]
i++
}
key2key220
for(j0j<20j++) 线性探测法解决突
{
key(key2+j)20
if(phone[key]>name)
break
}
return(key)
}
函数
int main()
{
cout<< 欢迎电话号码查找系统 <
char name[8]
create()
create2()
int sel
while(1)
{
menu()
cin>>sel输入选择项目操作
if(sel0)
{ cout<<请输入添加容<
}
else if(sel1)
{ cout<<9号码查询8姓名查询<
cin>>b
if(b9)
{ cout<<请输入电话号码<
cout<<输出查找信息<
}
else if(b8)
{ cout<<请输入姓名<
cout<<输出查找信息<
}
else printf(合法操作\n)
}
else if(sel2)
{ cout<<姓名散列结果<
}
else if(sel3)
{ cout<<号码散列结果<
}
else if(sel4)
{ cout<<列表已清空<
create2()
}
else if(sel5)
{ cout<<通信录已保存<
}
else if(sel6)
{int c
cout<<删信息<
if(c9)
{
cout<<请输入号码:<
Delete(num)
}
else if(c8)
{
cout<<请输入姓名:<
Delete1(name)
}
else cout<<合法操作<
else if(sel7) return 0
else cout<<合法操作<
return 0
}
33 模块间调关系
模块部具体算法包括输入处理输出相C++语言程函数设计
整体算法描述:建立结构存放学生信息该结构存入文件中求通调函数文件数进行操作处理
分函数算法描述:函数调apend函数建立新文件存储通讯录
函数void main调 void list输出信息
函数void main调 void find查找学生记录
函数void main调 void apend添加记录
函数void main调 void creat进行新建节点操作清空记录
调函数通if语句实现文件里数输入数果相等进行相关操作果相等回菜单
34 源程序代码
#include
#include
#include
#include
#include
#define NULL 0
unsigned int key
unsigned int key1
unsigned int key2
int *p
struct node 建节点
{
char name[8]address[20]
char num[11]
node *next
}
typedef node *pnode
typedef node *mingzi
node **phone
node **nam
node *a
using namespace std 名称空间
hash(char num[11]) 建表电话号码关键字建立相应散列表哈希址发生突进行突处理
{
int i 3j
key1(int)num[2]
while(num[i]NULL)
{
key1+(int)num[i]
i++
}
key1key120
for(j0j<20j++) 线性探测法解决突
{
key(key1+j)20
if(phone[key]>num)
break
}
return(key)
}
hash2(char name[8]) 建表姓名关键字建立相应散列表
哈希址发生突进行突处理
{
int i 1j
key2(int)name[0]
while(name[i]NULL)
{
key2+(int)name[i]
i++
}
key2key220
for(j0j<20j++) 线性探测法解决突
{
key(key2+j)20
if(phone[key]>name)
break
}
return(key)
}
node *input() 输入节点
{
node *temp
temp new node
temp>nextNULL
cout<<输入姓名:<
cout<<输入址:<
cout<<输入电话:<
return temp
}
int apend() 添加节点
{
node *newphone
node *newname
newphoneinput()
newnamenewphone
newphone>nextNULL
newname>nextNULL
newphone>next phone[hash(newphone>num)]>next
phone[hash(newphone>num)]>nextnewphone
newname>next nam[hash2(newname>name)]>next
nam[hash2(newname>name)]>nextnewname
return 0
}
void create() 新建电话号码数组
{
int i
phonenew pnode[20]
for(i0i<20i++)
{
phone[i]new node
phone[i]>nextNULL
}
}
void create2() 新建姓名数组
{
int i
namnew mingzi[20]
for(i0i<20i++)
{
nam[i]new node
nam[i]>nextNULL
}
}
void list() 显示列表(号码散列)
{
int i
node *p
for(i0i<20i++)
{
pphone[i]>next
while(p)
{
cout<
name<<'_'<
address<<'_'<
num< name<<'_'< address<<'_'< num< name<<'_'< address<<'_'< num< name<<'_'< address<<'_'< num< name<<_< address<<_< num<
}
}
}
void list2() 显示列表(姓名散列)
{
int i
node *p
for(i0i<20i++)
{
pnam[i]>next
while(p)
{
cout<
}
}
}
void find(char num[11]) 查找户信息(号码查找)
{
int ij0
node *p
for(i0i<20i++)
{
pphone[i]>next
while(p)
{
if(strcmp(nump>num)0)
{
cout<
}
pp>next
}
}
if(j0) cout<<记录<
void find2(char name[8]) 查找户信息(姓名查找)
{
int ij0
node *p
for(i0i<20i++)
{
pnam[i]>next
while(p)
{
if(strcmp(namep>name)0)
{
cout<
}
pp>next
}
}
if(j0) cout<<记录<
void Delete(char num[11])
{
node *p
hash(num)
pphone[key]>next
phone[key]>nextp>next
}
void Delete1(char name[8])
{
node *p
hash2(name)
pnam[key]>next
nam[key]>nextp>next
}
void save() 保存户信息
{
int i
node *p
fstream iiout(outtxt iosout)
for(i0i<20i++)
{
pphone[i]>next
while(p)
{
iiout<
}
}
}
void menu() 菜单
{
cout<<〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓<
}
int main()
{
cout<< 欢迎电话号码查找系统 <
char name[8]
create()
create2()
int sel
while(1)
{
menu()
cout<<请输入选择操作:<
if(sel0)
{ cout<<请输入添加容<
}
else if(sel1)
{ cout<<9号码查询8姓名查询<
cin>>b
if(b9)
{ cout<<请输入电话号码<
cout<<输出查找信息<
}
else if(b8)
{ cout<<请输入姓名<
cout<<输出查找信息<
}
else printf(合法操作\n)
}
else if(sel2)
{ cout<<姓名散列结果<
}
else if(sel3)
{ cout<<号码散列结果<
}
else if(sel4)
{ cout<<列表已清空<
create2()
}
else if(sel5)
{ cout<<通信录已保存<
}
else if(sel6)
{int c
cout<<删信息<
if(c9)
{
cout<<请输入号码:<
Delete(num)
}
else if(c8)
{
cout<<请输入姓名:<
Delete1(name)
}
else cout<<合法操作<
else if(sel7) return 0
else cout<<合法操作<
return 0
}
第四章 测试分析
41 测试数选择
姓名
址
电话
孙阳
国庆路
18749677777
李四
幸福街
18749678888
马天
安康道
18749679999
42 测试结果分析
输入测试信息操作项运行
0实现添加
2显示姓名散列结果
开始输入0开始
3号码散列结果
1选9号码查询
5保存 7 退出程序
1查询8姓名查询
时间复杂度:中户需添加操作查找操作散列显示保存操作时间复杂度均 :
O(n) O(n)
查找操作需时间复杂度O(n) O(n2)
清空操作时间复杂度O(n) 1
图示项操作正常运行程序整体简单方没考虑容易出现死循环程序整体C++语言命令书写成寻较简洁容易发现错误
总结
工作学中认真总结验教训努力成名技术硬工作严谨思维活跃工程员提高生活质量做出更贡献
程序采c++语言编写继承c++贯简洁程序通俗易懂注释明利日修改定义函数层次清晰明函数调关系简易懂操作时步骤简单快捷易操作
变成C++相C语言说效率较低没C语言运行效率高时间复杂度较高程序健壮性容易出现死循环知识够短时间解决程序身言包括输入添加操作查找操作查号码姓名散列结果删操作清空操作保存操作程序身没修改操作满足户修改操作程序选择操作具健壮性旦户输入错误会长生死循环
通周课程设计认识程序知需进步学包括定义函数哈希表哈希表突处理方法指针运灵活提高
心体会
课程设计培养学生综合运学知识发现提出分析解决实际问题锻炼实践力重环节学生实际工作力具体训练考察程着科学技术发展日新日异计算机应生活中说处作二十世纪学说掌握计算机开发技术十分重
回顾起次课程设计感慨颇确题目完成整编程理实践整整星期日子里学东西时仅巩固前学知识学书没学知识通次课程设计懂理实际相结合重理知识远远够学理知识实践相结合起理中出结真正社会服务提高实际动手力独立思考力设计程中遇问题毕竟独立做难免会遇种样问题时设计程中发现足处前学知识理解够深刻掌握够牢固
时帮助学位指导老师次表示忠心感谢通次课程设计懂理实际相结合重理知识远远够学理知识实践相结合起理中出结真正社会服务提高实际动手力独立思考力编写程发现错误程毕竟专业知识掌握够设计中走弯路刚开始根手知道干嘛果时课余时间加强专业知识学次课程设计中会少走弯路
然程序完成感觉里面完善方通次动手设计吧希办事时候认真仔细考虑周全段时间里学更C++ 程序类知识时提醒办事时候认真仔细考虑周全 团队精神互帮互助重性点会受益匪浅
参考文献
[1]严蔚敏 吴伟民数结构(C语言版) 北京:清华学计算机系列教材 2007
[2]皮德常 C++程序设计教程 北京:机械工业出版社 200903
[3]崔淼陈明非Visual C# 2005 程序设计教程北京:机械工业出版社 20071
[4]谭浩强 C程序设计(第三版) 北京:清华学出版社 2005
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档