设计散列表实现电话号码查找系统数据结构课程设计


    
    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<< 欢迎电话号码查找系统 < cout<<****************************< char num[11]
    char name[8]
    create()
    create2()

    int sel
    while(1)
    {
    menu()
    cin>>sel输入选择项目操作
    if(sel0)
    { cout<<请输入添加容< apend()
    }
    else if(sel1)
    { cout<<9号码查询8姓名查询< int b
    cin>>b
    if(b9)
    { cout<<请输入电话号码< cin >>num
    cout<<输出查找信息< find(num)
    }
    else if(b8)
    { cout<<请输入姓名< cin >>name
    cout<<输出查找信息< find2(name)
    }
    else printf(合法操作\n)
    }
    else if(sel2)
    { cout<<姓名散列结果< list2()
    }
    else if(sel3)
    { cout<<号码散列结果< list()
    }
    else if(sel4)
    { cout<<列表已清空< create()
    create2()
    }
    else if(sel5)
    { cout<<通信录已保存< save()
    }

    else if(sel6)
    {int c
    cout<<删信息< cout<<9号码删 8姓名删< cin >>c
    if(c9)
    {
    cout<<请输入号码:< cin >>num
    Delete(num)
    }
    else if(c8)
    {
    cout<<请输入姓名:< cin >>name
    Delete1(name)
    }
    else cout<<合法操作< cout<<信息已删\n< }
    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<<输入姓名:< cin>>temp>name
    cout<<输入址:< cin>>temp>address
    cout<<输入电话:< cin>>temp>num
    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< pp>next
    }
    }
    }
    void list2() 显示列表(姓名散列)
    {
    int i
    node *p
    for(i0i<20i++)
    {
    pnam[i]>next
    while(p)
    {
    cout<

    name<<'_'<

    address<<'_'<

    num< pp>next
    }
    }
    }
    void find(char num[11]) 查找户信息(号码查找)
    {
    int ij0
    node *p
    for(i0i<20i++)
    {
    pphone[i]>next
    while(p)
    {
    if(strcmp(nump>num)0)
    {
    cout<

    name<<'_'<

    address<<'_'<

    num< j++
    }
    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<

    name<<'_'<

    address<<'_'<

    num< j++
    }
    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<

    name<<_<

    address<<_<

    num< pp>next
    }
    }
    }
    void menu() 菜单
    {
    cout<<〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓< cout<<| 0添加记录 |< cout<<| 1查找记录 |< cout<<| 2姓名散列 |< cout<<| 3号码散列 |< cout<<| 4清空记录 |< cout<<| 5保存记录 |< cout<<| 6删信息 |< cout<<| 7退出系统 |< cout<<〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓<
    }
    int main()
    {
    cout<< 欢迎电话号码查找系统 < cout<<****************************< char num[11]
    char name[8]
    create()
    create2()

    int sel
    while(1)
    {
    menu()
    cout<<请输入选择操作:< cin>>sel输入选择项目操作
    if(sel0)
    { cout<<请输入添加容< apend()
    }
    else if(sel1)
    { cout<<9号码查询8姓名查询< int b
    cin>>b
    if(b9)
    { cout<<请输入电话号码< cin >>num
    cout<<输出查找信息< find(num)
    }
    else if(b8)
    { cout<<请输入姓名< cin >>name
    cout<<输出查找信息< find2(name)
    }
    else printf(合法操作\n)
    }
    else if(sel2)
    { cout<<姓名散列结果< list2()
    }
    else if(sel3)
    { cout<<号码散列结果< list()
    }
    else if(sel4)
    { cout<<列表已清空< create()
    create2()
    }
    else if(sel5)
    { cout<<通信录已保存< save()
    }

    else if(sel6)
    {int c
    cout<<删信息< cout<<9号码删 8姓名删< cin >>c
    if(c9)
    {
    cout<<请输入号码:< cin >>num
    Delete(num)
    }
    else if(c8)
    {
    cout<<请输入姓名:< cin >>name
    Delete1(name)
    }
    else cout<<合法操作< cout<<信息已删\n< }
    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)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 8 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    高校教材管理系统数据结构课程设计

    数据结构课程设计题 目: 高校教材管理系统 课 程 设 计 任 务 书一、课程设计题目: 高校教材管理系统...

    3年前   
    787    0

    数据结构课程设计报告——图书管理系统

    课程设计报告 课设课题: 课程设计——图书管理系统 学 院: 电 子 信 息 学 院 专 业: 网 络 工 程 ...

    3年前   
    682    0

    车牌号管理系统数据结构课程设计报告

    XX 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 车牌号管理系统 ...

    3年前   
    432    0

    数据结构和算法课程设计题目

    XX大学课程设计课程名称: 数 据 结 构 与 算 法院(部)名 称: 信息与计算科学学院组长姓名学号 同组人员姓名指导教师姓名: 设 计 时 间: 2010.6.7-...

    1年前   
    383    0

    学籍管理系统的设计与实现说明书软件项目开发课程设计

     ******************* 实践教学 ******************* XX学 计算机与通信学院 20XX年秋季学期 软件开发综合训练 课程设计 题...

    5年前   
    1528    0

    基于WEB的图书管理系统的设计与实现课程设计

    软件工程课程设计报告基于WEB的图书信息管理系统的设计与实现所 在 学 院 信息科学技术学院 专 业 名 称 计算机科学与技术 ...

    3年前   
    907    0

    Ping程序的设计与实现课程设计

     计算机网络课程设计报告设计名称 Ping程序的设计与实现 专业班级 同组人姓名 ...

    3年前   
    629    0

    进程调度算法的实现计算机操作系统课程设计

    题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,...

    3年前   
    587    0

    通信原理课程设计PAM调制与解调系统的MATLAB实现及性能分析

    PAM的调制与解调目录摘要 引言 1.1 课程设计目的 1.2 课程设计内容 2.1 PAM调制信号的频谱 2.2 PAM调制过程的波形和频谱图 3.1正弦波矩形抽样 3.2矩形波调制 ...

    1年前   
    388    0

    操作系统课程设计银行家算法的模拟实现

    操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期信息工程学院题目: 银行家算法的模拟实现 一、设计目的本课程设计是学习完“操作系统原理”课程后进...

    3年前   
    688    0

    数据结构 第九章 查找

    .折半查找是否适合链表结构的序列,为什么?用二分查找的查找速度必然比线性查找的速度快,这种说法对吗?

    5年前   
    1706    0

    毕业设计管理系统的设计与实现

    毕业设计管理系统的设计与实现 摘 要 随着Internet的飞速发展及互联网的普及,计算机已广泛用于政府、军事、科研、商业等部门,连接到千家万户,利用计算机实现毕业设计管...

    5年前   
    2646    0

    基于MATLAB的ASK调制解调实现课程设计

    大学《通信原理》课程设计报告学 院 专 业 班 级 学 号 ...

    3年前   
    731    0

    查找算法的程序实现「学生版」

    查找算法的程序实现【学生版】【例1】 在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。for i=1 to 8if ①        ...

    2年前   
    517    0

    EDA与数字系统课程设计

     课 程 设 计 任 务 书(2011 ~2012 第三学期)设 计 题 目: EDA与数字系统课程设计 学 院 名 称: 电气与自动化工程学院 专 业(班 级...

    3年前   
    568    0

    物流信息系统课程设计

    交通与汽车工程学院课程设计说明书课 程 名 称: 物流信息系统设计 课 程 代 码: 1203999 题 ...

    2年前   
    651    0

    数据结构课程设计报告最小生成树Kruskal算法

    计算机科学与技术系课程设计报告 2014-2015学年第二学期课程数据结构课程设计名称Kruskal算法求最小生成树学生姓名 学号 专业班级 软件工程指导教师 2014年X月题目:设计...

    1年前   
    212    0

    哈夫曼树应用数据结构课程设计报告

    数据结构课程设计报告设计题目:哈夫曼树应用 专 业 : 软件工程 班 级 : 软件 学 生 : ...

    2年前   
    473    0

    数据结构文本编辑器课程设计

    数据结构课程设计报告一. 需求分析1.题目及要求名称:简单的文本编辑器内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。要求:(1)...

    1年前   
    312    0

    关于数据结构课程设计心得体会范文

    关于数据结构课程设计心得体会范文   关于数据结构课程设计心得体会(1)   这学期开始两周时间是我们自己选题上机的时间, 这学期开始两周时间是我们自己选题上机的时间,虽然 上机时间只...

    5年前   
    1420    0

    文档贡献者

    文***品

    贡献于2022-05-08

    下载需要 8 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档