其他新闻

其他新闻

关键词快速排名系统源码(关键词快速排名软件)

时间:2023-11-29 信途科技其他新闻

问题描述:

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

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 300using 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<<"谢谢使用!!!";}

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

编程学习书籍分享:

编程学习视频分享:

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

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

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

扫描二维码推送至手机访问。

版权声明:本文由信途科技转载于网络,如有侵权联系站长删除。

转载请注明出处https://www.xintukeji.cn/xintu/65392.html

相关文章

「莒州网」莒州网莒县论坛我们心灵的家园

本篇文章信途科技给大家谈谈莒州网,以及莒州网莒县论坛我们心灵的家园对应的知识点,希望对各位有所帮助,不要忘了收藏本站。 本文导读目录: 1、莒县房产信息,准备买房子。。求解。。 2、山东日照的莒县...

模板建站报价(自己购买模板建站)

现在网站对于我们来说并不不陌生,但我可以告诉你,建立网站依然是大多数人做不到的事情,虽然说只要按照网络中的免费教程就可以建站,但这还是一个比较高的门槛,为此请人做网站还是建站的主流,那么,请人做一个网...

泉州论坛建站模板(泉州智能模板建站)

来源:台海网城市名片:新中国成立以来,泉州历史上有过三座见证旅客运输变迁的车站。台海网8月26日讯 据泉州网报道 最早的泉州旧车站,始建于1953年,服役时间长达半个多世纪。泉州新车站1990年正式运...

阳江网站建设公司,音浪传媒靠谱吗

音浪传媒靠谱吗广东音浪传媒有限公司成立于2020年10月29日,注册地位于阳江市江城区金山路333号万山·香悦四季7幢7层712房(住所申报),法定代表人为许玉永。经营范围包括广告设计、制作、代理及发...

美食在网络怎么推广(美食推广的视频怎么做)

中秋将至,餐饮行业要怎样推广呢?餐饮行业的宣传很难像其他行业一样在线举办展览或发布视频模拟效果。餐饮业常见的宣传手段是软文。可见软文对于餐饮行业来说是非常重要的,那么如何为餐饮写软文呢?今天我就给大家...

林州:肖街在山中走出俏模样

花汛起太行,乡村弄春潮。半是天上客,半是画中居。在“北方山水画派之祖”荆浩隐居的林州洪谷山下,肖街村走出了俏模样。肖街村是林州市合涧镇的一个行政村,10个自然村850多口人隐没在洪谷山里,红旗渠一干渠...

现在,非常期待与您的又一次邂逅

我们努力让每一次邂逅总能超越期待

  • 效果付费
    效果付费

    先出效果再付费

  • 极速交付
    极速交付

    响应速度快,有效节省客户时间

  • 1对1服务
    1对1服务

    专属客服对接咨询

  • 持续更新
    持续更新

    不断升级维护,更好服务用户