课程设计:员工通讯录管理系统!重难点分析以其源码示例

课程设计:员工通讯录管理系统!重难点分析以其源码示例问题描述:为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。设计散列表存储,设计并实现通讯录查找系统。1.

欢迎大家来到IT世界,在知识的湖畔探索吧!

问题描述:

为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。设计散列表存储,设计并实现通讯录查找系统。

课程设计:员工通讯录管理系统!重难点分析以其源码示例

1.基本要求

(1)每个记录有下列数据项:电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码为关键字建立散列表;

(3)采用二次探测再散列法解决冲突;

(4)查找并显示给定电话号码的记录;

(5)通讯录信息文件保存。

2.重点、难点

重点:

(1)通过实验深入理解哈希表既是一种存储形式,又是一种查找方法;

(2)哈希表的构造;

(3)哈希冲突方案的设计。

难点:哈希表的构造与哈希冲突方案的设计

3.作业及课外学习要求:

按照题意要求独立进行设计,设计结束后要按要求写出课程设计报告。

本知识点的讲授和学习,可以支撑“毕业要求4研究”中的“指标点4.1能够运用科学的研究方法对复杂软件工程问题进行需求分析研究;指标点4.2熟悉复杂软件系统的开发和应用环境,研究制定合理的软件设计与开发方案。指标点4.3能够对原型验证方法进行研究与分析,合理验证软件系统”的指标达成度进行评估。使学生在解决具体问题的过程中,能够灵活熟练地选择合适的数据结构及设计有效的算法,从而加深对常用数据结构的理解,强化学生的逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。

4.代码:

#include<cstdio>
#include<stdlib.h>
#include<iostream>
#include<cstring>
#include<cmath>
#define MAXSIZE 300
#define L 300

using namespace std;

class individual
{
public:
    char tel[12];
    char name[15];
    char addr[20];
    int key;

};

class population
{
public:
    individual addr_list[MAXSIZE+1];
    individual hash_list[L];
    void info_input();
    void init_hash_list();
    void hash_list_do();
    void search_tel();
    void hash_out();
    int m,n;
    int individuals;
};
population all;

int max_prime(int m)//m>2
{
    int i;
    if(m%2==0)
        m--;
    while(m>=3){
        for(i=3;i<=sqrt(m);i+=2)
            if(m%i==0) break;
            if(i>sqrt(m))
                break;
            m-=2;
    }
    return m;
}

void population::info_input()
{
    printf("输入通讯录最大长度(<%d):\n",MAXSIZE);
    cin>>all.m;
    printf("批量输入人数:");
    cin>>all.individuals;
    printf("批量输入%d个成员的信息(用户名、电话号码(11位)、地址):\n",all.individuals);
    for(int i=1;i<=all.individuals;i++)
    {
        cin>>all.addr_list[i].name;
        cin>>all.addr_list[i].tel;
        cin>>all.addr_list[i].addr;
        if(strlen(all.addr_list[i].tel)!=11)
        {
            printf("重新输入第%d位成员的信息:\n",i);
            cin>>all.addr_list[i].name;
            cin>>all.addr_list[i].tel;
            cin>>all.addr_list[i].addr;
        }
        all.addr_list[i].key=all.addr_list[i].tel[3]+all.addr_list[i].tel[10];
    }
    printf("批量创建成功!!!\n");
}

void population::init_hash_list()
{
    for(int i=0;i<L;i++)
    {
        strcpy(all.hash_list[i].addr,"");
        strcpy(all.hash_list[i].name,"");
        strcpy(all.hash_list[i].tel,"");
        all.hash_list[i].key=0;
    }
}

void population::hash_list_do()
{
    init_hash_list();
    int i,j=1,x,temp;
    init_hash_list();
    all.n=max_prime(all.m);
    printf("\n最大长度为:%d  模n=%d\n",all.m,all.n);
    for(i=1;i<=all.individuals;i++)
    {
        temp=x=all.addr_list[i].key%all.n;
        while(all.hash_list[x].key!=0)//此处需要用二次探测再散列法解决冲突
        {
            x=temp;
            x=(x+j*j)%all.n;
            if(all.hash_list[x].key!=0)
            {
                x=temp;
                x=(x-j*j)%all.n;
            }
            j++;
        }
        all.hash_list[x].key=all.addr_list[i].key;
        strcpy(all.hash_list[x].addr,all.addr_list[i].addr);
        strcpy(all.hash_list[x].name,all.addr_list[i].name);
        strcpy(all.hash_list[x].tel,all.addr_list[i].tel);
    }
    cout<<"哈希表创建成功!!"<<endl;
}

void population::hash_out()
{
    FILE *fp;
    if((fp=fopen("address_list.txt","w"))==NULL)
    {
        printf("open file failed!\n");
        exit(0);
    }
    fprintf(fp,"用户     电话号码       地址   \n");
    printf("\n输出Hash表:\n");
    printf("  用户    电话号码      地址    关键字  \n");
    for(int i=0;i<all.m;i++)
    {
        if(all.hash_list[i].key!=0)
        {
            cout<<all.hash_list[i].name<<"   ";
            cout<<all.hash_list[i].tel<<"    ";
            cout<<all.hash_list[i].addr<<"    ";
            cout<<all.hash_list[i].key<<"    "<<endl;
            fprintf(fp,"%s     %s     %s    \n",all.hash_list[i].name,all.hash_list[i].tel,all.hash_list[i].addr);
        }
    }
    fclose(fp);
}

void population::search_tel()
{
    int i,temp,x,j=1;
    char room[12];
    printf("\n输入电话号码:");
    cin>>room;
    temp=room[3]+room[10];
    x=temp%all.n;
    if(strcmp(all.hash_list[x].tel,room)==0)
       printf("姓名:%-15s  电话号码:%s   地址:%-5s \n\n",
                       all.hash_list[x].name,all.hash_list[x].tel,all.hash_list[x].addr);
    else
    {
        while(strcmp(all.hash_list[x].tel,room))
        {
            x=(temp+j*j)%all.n;
            if(strcmp(all.hash_list[x].tel,room))
            {
                x=temp;
                x=(x-j*j)%all.n;
            }
            j++;
        }
         printf("姓名:%-15s  电话号码:%s   地址:%-5s \n\n",
                       all.hash_list[x].name,all.hash_list[x].tel,all.hash_list[x].addr);
    }
}

void msgbox()
{
    printf("================================\n");
    printf("= 基本操作:                   =\n");
    printf("= 电话查询--S                  =\n");
    printf("= 通信录人员名单--H            =\n");
    printf("= 退出系统--E                  =\n");
    printf("================================\n");
}

int main()
{
    char op;
    cout<<"  警告:当前通信录还未初始化!!!\n\n  ";
    all.info_input();
    all.hash_list_do();
    msgbox();
    cout<<"选择操作\n-";
    while(cin>>op)
    {
        msgbox();
        switch(op)
        {
            case 'S': all.search_tel();break;
            case 'H': all.hash_out();break;
            case 'E': exit(0);break;
            default: continue;
        }
    }
    cout<<"谢谢使用!!!";
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

课程设计:员工通讯录管理系统!重难点分析以其源码示例

编程学习视频分享:

课程设计:员工通讯录管理系统!重难点分析以其源码示例

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/36546.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信