校园十大优秀青年评比_第1页
校园十大优秀青年评比_第2页
校园十大优秀青年评比_第3页
校园十大优秀青年评比_第4页
校园十大优秀青年评比_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——校园十大优秀青年评比测验报告测验课名称:数据布局测验测验名称:校园十大优秀青年评比班级:20220613学号:16姓名:施洋时间:2022-5-25

一、问题描述新一届校园十大青年评比开头了!每一位在校学生可通过网上评比系统,为自己认为优秀的学生提名与投票。请开发一个用于该需求的系统,得志以下根本功能:

(1)提名优秀学生与投票。

(2)查看提名学生的根本信息。

(3)显示各提名学生的票数。

(4)显示排行榜。

根本要求:

(1)采用散列存储,存放提名学生的相关信息。

(2)设计哈希函数和冲突解决方法。

(3)提名学生至少包括以下信息:姓名、票数、个人根本信息(如:班级、专业、年级、突出事迹等)。

(4)设计输入提名学生信息的界面。

(5)完成根本功能。

(6)界面友好,操作简朴。

(7)设计足够多的测试用例。

(8)查看指定学生的票数。

二、数据布局设计1)用哈希表存储提名学生相关信息。

每位选手即学生的根本信息含有多个属性,为此可根据学生信息建立布局体,如下:

structstudent{charname[40];//姓名的拼音+学号intnumber;//票数intClass;//班级charMajor[50];//专业charGrade[10];//年级charHonour[100];//突出事迹};

(2)设计哈希函数,并用开放定址线性探测法处理冲突。

(3)设计一个投票系统类:votesystemclassvotesystem{private:

student*stu;

intcount;//当前元素个数

intsizeindex;//哈希表长public:

votesystem(){stu=NULL;count=0;sizeindex=0;}

~votesystem(){delete[]stu;count=0;}

voidInitHashTable(intn);//初始化哈希表

intHash(char*name);//哈希函数

voidcollision(ints){s=s++;}//开放定址线性探测法处理冲突

intsearch(char*name,intk);//查找

voidinsert(char*name);//插入

intvote(char*name);//投票

voiddisplay();//显示哈希表

voidshowvote(intk);//按哈希表下标显示票数

voidshowrank();//显示排行榜};三、算法设计votesystem成员函数细致设计:

(1)哈希函数Hash根据实现要点提示设计哈希函数intvotesystem::Hash(char*name)//哈希函数{

char*p=name;

intkey=0;

while(*p)

{

key+=int(*p);

p++;

}

returnkey%sizeindex;}

(2)查找函数search

Step1:对指定的选手调用哈希函数求值

Step2:用开放定址线性探测法处理冲突,在哈希表中查找k=Hash(name);//哈希函数定位while(stu[k].name[0]!="\0"strcmp(stu[k].name,name))

collision(k);//处理冲突

Step3:若找到返回1;否那么返回0if(!strcmp(stu[k].name,name))return1;//找到

elsereturn0;

(3)插入函数insert

Step1:调用查找函数search,找到插入信息的位置

Step2:按照提名学生信息例如格式输入学生的信息voidvotesystem::insert(char*name){ints;chara[2];search(name,s);cout提名学生信息格式如下:\n

\t班级:2\n

\t专业:软件工程\n

\t年级:二\n

\t突出事迹:全国三好学生\n;strcpy(stu[s].name,name);cout班级:\t;cinstu[s].Class;cout专业:\t;cin.getline(a,2);cin.getline(stu[s].Major,50);cout年级:\t;cin.getline(stu[s].Grade,10);cout突出事迹:\t;cin.getline(stu[s].Honour,100);

Step3:提名即为投一票,同时当前元素个数加1

stu[s].number=1;//提名即为投一票

count++;//当前人数加1}

(4)投票函数voteStep1:

记录已存在时调用search函数intvotesystem::vote(char*name)

{

ints;

intf;

f=search(name,s);//定位

if(f){stu[s].number++;return1;}//投票告成

elsereturn0;//投票失败}Step2:

记录不存在时,转到提名或返回

cout无此记录!\n;

cout

1、提名该学生\n

2、返回\n

请选择操作:;

intt;

cint;

if(t==1)

{

L.insert(name);

cout提名告成\n;

}(5)

显示哈希表函数display

从表头开头,若表中记录已存在,那么输出该学生的根本信息:姓名,票数,专业,年级,班级,突出事迹;否那么转到下一个。

voidvotesystem::display(){

for(inti=0;isizeindex;i++)

if(stu[i].name[0]!="\0")

coutstu[i].name""

stu[i].number票""

stu[i].Major""

stu[i].Grade

stu[i].Class班""

stu[i].Honour"\t"

endl;}

(6)显示排行榜函数showrank

Step1:定义一个数组a[11],存储前十名在哈希表中的下标,并初始化数组

Step2:从哈希表表头开头依次访问,记录存在时即转到Step3

Step3:利用插入法对举行记录举行排序

Step4:将哈希表下标保存到数组a中inta[11];//定义一个数组存放前十名在哈希表中的下标

for(inti=0;i10;i++)a[i]=-1;

for(i=0;isizeindex;i++)//遍历哈希表

{

if(stu[i].name[0]!="\0")

{

for(intk=9;k=0;k--)//利用插入法举行排序

{

if(a[k]-1)

{

if(stu[a[k]].numberstu[i].number)

a[k+1]=a[k];

elsebreak;

}

}

a[k+1]=i;

}

}Step5:根据数组a中排序结果,依次输出前十名选手的姓名,票数for(i=0;i10a[i]-1;i++)//对前十名输出

coutstu[a[i]].name"\t"

stu[a[i]].number

endl;

四、界面设计***************

1、选手信息

2、选手得票数

3、投票

4、排行榜

5、退出系统

***************

五、运行测试与分析(1)对记录不存在的学生举行投票,即提名过程

依此模式对记录不存在的学生举行提名,概括信息如图(3)所示

(2)对记录已存在的选手举行投票

(3)显示选手信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论