校園十大優(yōu)秀青年評比_第1頁
校園十大優(yōu)秀青年評比_第2頁
校園十大優(yōu)秀青年評比_第3頁
校園十大優(yōu)秀青年評比_第4頁
校園十大優(yōu)秀青年評比_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——校園十大優(yōu)秀青年評比測驗(yàn)報(bào)告測驗(yàn)課名稱:數(shù)據(jù)布局測驗(yàn)測驗(yàn)名稱:校園十大優(yōu)秀青年評比班級:20220613學(xué)號:16姓名:施洋時(shí)間:2022-5-25

一、問題描述新一屆校園十大青年評比開頭了!每一位在校學(xué)生可通過網(wǎng)上評比系統(tǒng),為自己認(rèn)為優(yōu)秀的學(xué)生提名與投票。請開發(fā)一個(gè)用于該需求的系統(tǒng),得志以下根本功能:

(1)提名優(yōu)秀學(xué)生與投票。

(2)查看提名學(xué)生的根本信息。

(3)顯示各提名學(xué)生的票數(shù)。

(4)顯示排行榜。

根本要求:

(1)采用散列存儲,存放提名學(xué)生的相關(guān)信息。

(2)設(shè)計(jì)哈希函數(shù)和沖突解決方法。

(3)提名學(xué)生至少包括以下信息:姓名、票數(shù)、個(gè)人根本信息(如:班級、專業(yè)、年級、突出事跡等)。

(4)設(shè)計(jì)輸入提名學(xué)生信息的界面。

(5)完成根本功能。

(6)界面友好,操作簡樸。

(7)設(shè)計(jì)足夠多的測試用例。

(8)查看指定學(xué)生的票數(shù)。

二、數(shù)據(jù)布局設(shè)計(jì)1)用哈希表存儲提名學(xué)生相關(guān)信息。

每位選手即學(xué)生的根本信息含有多個(gè)屬性,為此可根據(jù)學(xué)生信息建立布局體,如下:

structstudent{charname[40];//姓名的拼音+學(xué)號intnumber;//票數(shù)intClass;//班級charMajor[50];//專業(yè)charGrade[10];//年級charHonour[100];//突出事跡};

(2)設(shè)計(jì)哈希函數(shù),并用開放定址線性探測法處理沖突。

(3)設(shè)計(jì)一個(gè)投票系統(tǒng)類:votesystemclassvotesystem{private:

student*stu;

intcount;//當(dāng)前元素個(gè)數(shù)

intsizeindex;//哈希表長public:

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

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

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

intHash(char*name);//哈希函數(shù)

voidcollision(ints){s=s++;}//開放定址線性探測法處理沖突

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

voidinsert(char*name);//插入

intvote(char*name);//投票

voiddisplay();//顯示哈希表

voidshowvote(intk);//按哈希表下標(biāo)顯示票數(shù)

voidshowrank();//顯示排行榜};三、算法設(shè)計(jì)votesystem成員函數(shù)細(xì)致設(shè)計(jì):

(1)哈希函數(shù)Hash根據(jù)實(shí)現(xiàn)要點(diǎn)提示設(shè)計(jì)哈希函數(shù)intvotesystem::Hash(char*name)//哈希函數(shù){

char*p=name;

intkey=0;

while(*p)

{

key+=int(*p);

p++;

}

returnkey%sizeindex;}

(2)查找函數(shù)search

Step1:對指定的選手調(diào)用哈希函數(shù)求值

Step2:用開放定址線性探測法處理沖突,在哈希表中查找k=Hash(name);//哈希函數(shù)定位while(stu[k].name[0]!="\0"strcmp(stu[k].name,name))

collision(k);//處理沖突

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

elsereturn0;

(3)插入函數(shù)insert

Step1:調(diào)用查找函數(shù)search,找到插入信息的位置

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

\t班級:2\n

\t專業(yè):軟件工程\n

\t年級:二\n

\t突出事跡:全國三好學(xué)生\n;strcpy(stu[s].name,name);cout班級:\t;cinstu[s].Class;cout專業(yè):\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:提名即為投一票,同時(shí)當(dāng)前元素個(gè)數(shù)加1

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

count++;//當(dāng)前人數(shù)加1}

(4)投票函數(shù)voteStep1:

記錄已存在時(shí)調(diào)用search函數(shù)intvotesystem::vote(char*name)

{

ints;

intf;

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

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

elsereturn0;//投票失敗}Step2:

記錄不存在時(shí),轉(zhuǎn)到提名或返回

cout無此記錄!\n;

cout

1、提名該學(xué)生\n

2、返回\n

請選擇操作:;

intt;

cint;

if(t==1)

{

L.insert(name);

cout提名告成\n;

}(5)

顯示哈希表函數(shù)display

從表頭開頭,若表中記錄已存在,那么輸出該學(xué)生的根本信息:姓名,票數(shù),專業(yè),年級,班級,突出事跡;否那么轉(zhuǎn)到下一個(gè)。

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)顯示排行榜函數(shù)showrank

Step1:定義一個(gè)數(shù)組a[11],存儲前十名在哈希表中的下標(biāo),并初始化數(shù)組

Step2:從哈希表表頭開頭依次訪問,記錄存在時(shí)即轉(zhuǎn)到Step3

Step3:利用插入法對舉行記錄舉行排序

Step4:將哈希表下標(biāo)保存到數(shù)組a中inta[11];//定義一個(gè)數(shù)組存放前十名在哈希表中的下標(biāo)

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:根據(jù)數(shù)組a中排序結(jié)果,依次輸出前十名選手的姓名,票數(shù)for(i=0;i10a[i]-1;i++)//對前十名輸出

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

stu[a[i]].number

endl;

四、界面設(shè)計(jì)***************

1、選手信息

2、選手得票數(shù)

3、投票

4、排行榜

5、退出系統(tǒng)

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

五、運(yùn)行測試與分析(1)對記錄不存在的學(xué)生舉行投票,即提名過程

依此模式對記錄不存在的學(xué)生舉行提名,概括信息如圖(3)所示

(2)對記錄已存在的選手舉行投票

(3)顯示選手信

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論