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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

(3)顯示各提名學生的票數。

(4)顯示排行榜。

根本要求:

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

(2)設計哈希函數和沖突解決方法。

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

(4)設計輸入提名學生信息的界面。

(5)完成根本功能。

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

(7)設計足夠多的測試用例。

(8)查看指定學生的票數。

二、數據布局設計1)用哈希表存儲提名學生相關信息。

每位選手即學生的根本信息含有多個屬性,為此可根據學生信息建立布局體,如下:

structstudent{charname[40];//姓名的拼音+學號intnumber;//票數intClass;//班級charMajor[50];//專業(yè)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專業(yè):軟件工程\n

\t年級:二\n

\t突出事跡:全國三好學生\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:提名即為投一票,同時當前元素個數加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

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

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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論