數(shù)據(jù)結構課程設計報告運動會分數(shù)統(tǒng)計_第1頁
數(shù)據(jù)結構課程設計報告運動會分數(shù)統(tǒng)計_第2頁
數(shù)據(jù)結構課程設計報告運動會分數(shù)統(tǒng)計_第3頁
數(shù)據(jù)結構課程設計報告運動會分數(shù)統(tǒng)計_第4頁
數(shù)據(jù)結構課程設計報告運動會分數(shù)統(tǒng)計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結構課程設計報告設計題目:運動會分數(shù)統(tǒng)計 題目:運動會分數(shù)統(tǒng)計一、 問題描述參加運動會有n個學校,學校編號為1n.比賽分成m個男子項目和w個女子項目。項目編號為男子1.m,女子m+1.m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設定。(m=20,n=20)二、 基本要求1). 可以輸入各個項目的前三名或前五名的成績;2). 能統(tǒng)計各學校總分;3). 可以按學校編號、學??偡帧⒛信畧F體總分排序輸出;4). 可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢取得前三或前五名的學校。5).

2、界面要求:有合理的提示,每個功能可以設立菜單,根據(jù)提示,可以完成相關的功能要求。6). 存儲結構:學生自己根據(jù)系統(tǒng)功能要求自己設計,但是要求運動會的相關數(shù)據(jù)要存儲在數(shù)據(jù)文件中。三、算法思想 本課設要求輸入信息,統(tǒng)計分數(shù),執(zhí)行排序與查找功能,在要求中沒有在建立數(shù)據(jù)之后進行插入和刪除操作,而在排序和查找過程中有許多的隨機讀取數(shù)據(jù)操作,因此使用順序結構而不用鏈表。由于各個要求屬性具有一定的聯(lián)系,在定義數(shù)據(jù)時使用結構體和結構體數(shù)組來存儲信息數(shù)據(jù)??紤]到程序的要求在設計函數(shù)時將學校個數(shù)和項目個數(shù)設計為可變的數(shù)據(jù),為方便使用設計菜單函數(shù)(menu),而由于要求將信息存儲在文件中故設計文件的存儲(savet

3、ofile)與讀取函數(shù)(readfromfile),信息輸入函數(shù)(input)在輸入基本信息后由系統(tǒng)統(tǒng)計總分的內容并全部存入文件file中,在接下來的函數(shù)中開始都需要讀取文件中的信息,信息的輸出(output)輸出輸入函數(shù)中統(tǒng)計后的各項信息,在排序輸出(sortput)中使用冒泡排序法進行不同關鍵字的排序,查詢函數(shù)(search)采用順序表的查找來完成。四、數(shù)據(jù)結構(1) 項目數(shù)據(jù)表:運動會系統(tǒng)先制定本次運動會所需的參賽項目。本數(shù)據(jù)表根據(jù)要求設計存儲每個項目的編號、要取的名次、各個名次名稱及各名次對應的分數(shù)。用于對以后項目情況的統(tǒng)計已及查詢。其中inum,top,range由輸入信息輸入,而m

4、ark有range和top決定。typedef struct int inum; /*項目編號*/ int top; /*取名次的數(shù)目*/ int range5; /*名次*/ int mark5; /*分數(shù)*/itemnode; /*存放項目信息*/(2) 學校數(shù)據(jù)表:本數(shù)據(jù)表根據(jù)要求儲存了各個參賽學校的總體情況,包括學校的編號、學??偡帧⒛凶訄F體總分、女子團體總分,并且包括項目數(shù)據(jù)數(shù)組tn。其中snum和tn中部分數(shù)據(jù)由輸入信息輸入,而其他三項內容score,mscore,wscore將由系統(tǒng)進行自動統(tǒng)計。typedef struct int snum; /*學校編號*/ int scor

5、e; /*學校總分*/ int mscore; /*男團體總分*/ int wscore; /*女團體總分*/ itemnode tm0+w0; /*項目數(shù)組*/snode; /*存放學校信息*/snode an0; /* 定義一個學校數(shù)組*/ 這二個數(shù)據(jù)表相關聯(lián)接,an中包括tn,形成一個整體。五、模塊劃分1、void menu(int n,int m,int w) 功能是提供界面窗口2、void savetofile() 功能是保存輸入的運動會信息到file文件3、void readfromfile() 功能是從file文件中讀取運動會信息4、void input(int n,int m,

6、int w) 功能是輸入信息并統(tǒng)計5、void output(int n,int m,int w) 功能是按學校、項目輸出統(tǒng)計信息6、void sortput(int n,int m,int w) 功能是按四種方法排序并輸出結果7、void search(int n,int m,int w) 功能是按兩種方法查詢并輸出結果六、源程序#include#include#include #define n0 20 /*學校最大數(shù)目*/ #define m0 20 /*男子項目最大數(shù)目*/ #define w0 20 /*女子項目最大數(shù)目*/typedef struct int inum; /*項目編

7、號*/ int top; /*取名次的數(shù)目*/ int range5; /*名次*/ int mark5; /*分數(shù)*/itemnode; /*存放項目信息*/typedef struct int snum; /*學校編號*/ int score; /*學??偡?/ int mscore; /*男團體總分*/ int wscore; /*女團體總分*/ itemnode tm0+w0; /*項目數(shù)組*/snode; /*存放學校信息*/snode an0; /* 定義一個學校數(shù)組*/void menu(int n,int m,int w) /*菜單函數(shù)*/ int c; void input(

8、int n,int m,int w);void output(int n,int m,int w);void sortput(int n,int m,int w);void search(int n,int m,int w);printf(ttt歡迎使用ttttnn); printf(t*運動會分數(shù)統(tǒng)計系統(tǒng)*nn); printf(tt*1.信息輸入*n); printf(tt*2.統(tǒng)計輸出*n); printf(tt*3.排序輸出*n); printf(tt*4.信息查詢*n); printf(tt*0.退出系統(tǒng)*nn); printf(=nn);printf(請選擇要實現(xiàn)步驟的編號(04)

9、:); scanf(%d,&c);switch(c) case 1: input(n,m,w);break; case 2: output(n,m,w);break; case 3: sortput(n,m,w);break; case 4: search(n,m,w);break; case 0:printf(謝謝使用,再見!n); exit(0); default: printf(輸入錯誤,請重試!n);menu(n,m,w); void savetofile() /*信息存入文件file*/file *fp; int i; if(fp=fopen(file.txt,w)=null) pr

10、intf(cannot open the filen); return; for(i=0;in0;i+) if(ai.snum!=0) if(fwrite(&ai,sizeof(snode),1,fp)!=1) printf(file write errorn); return; fclose(fp);void readfromfile() /*信息從文件file中取出*/ int i;file *fp; if(fp=fopen(file.txt,rb)=null) printf(cannot open the filen); return; for(i=0;in0;i+) fread(&ai

11、,sizeof(snode),1,fp); fclose(fp);void input(int n,int m,int w) /*信息輸入*/int i,j,s,k,q=0; for(i=0;in;i+) printf(學校編號:); scanf(%d,&ai.snum); /*輸入學校信息*/ for(j=0;jm+w;j+) printf(項目編號:); scanf(%d,&ai.tj.inum); printf(取名次個數(shù)(3或者5):); scanf(%d,&ai.tj.top); printf(獲得名次個數(shù)(15):); scanf(%d,&k); /*輸入項目信息*/ for(s=

12、0;sk;s+) printf(所獲名次(15):); scanf(%d,&ai.tj.ranges); /*輸入所獲名次信息*/ printf(n); for(i=0;in;i+) ai.score=0; ai.mscore=0; ai.wscore=0; /*初始化分數(shù)*/for(i=0;in;i+) for(j=0;jm+w;j+) for(s=0;s5;s+) if(ai.tj.top=3) switch(ai.tj.ranges) case 0: ai.tj.marks=0; break; case 1: ai.tj.marks=5; break; case 2: ai.tj.mar

13、ks=3; break; case 3: ai.tj.marks=2; break; else if(ai.tj.top=5) switch(ai.tj.ranges) case 0: ai.tj.marks=0; break; case 1: ai.tj.marks=7; break; case 2: ai.tj.marks=5; break; case 3: ai.tj.marks=3; break; case 4: ai.tj.marks=2; break; case 5: ai.tj.marks=1; break; else printf(信息有誤!);printf(n);exit(0

14、); ai.score=ai.score+ai.tj.marks; /*記學??偡?/ if(j=m-1) ai.mscore=ai.mscore+ai.tj.marks; /*記男子團體總分*/ else ai.wscore=ai.wscore+ai.tj.marks; /*記女子團體總分*/while(q!=1)printf(輸入完畢!返回? 1是 2否); /*返回菜單*/ scanf(%d,&q); printf(n);printf(n);savetofile(); menu(n,m,w);void output(int n,int m,int w) /*統(tǒng)計輸出*/ readfrom

15、file();int i,j,s,q=0; for(i=0;in;i+) /*顯示結果*/printf(學校編號:%d 學??偡?%d 男團總分:%d 女團總分:%dn,ai.snum,ai.score,ai.mscore,ai.wscore); for(j=0;jm+w;j+) printf(項目編號:%d 所取名次數(shù)量:%dn,ai.tj.inum,ai.tj.top); for(s=0;s5;s+) if(ai.tj.ranges!=0) printf(名次:%d 分數(shù):%dn,ai.tj.ranges,ai.tj.marks);printf(n);printf(n);while(q!=

16、1)printf(統(tǒng)計完畢!返回? 1是 2否); /*返回菜單*/ scanf(%d,&q); printf(n);printf(n); menu(n,m,w);void sortput(int n,int m,int w) /*排序輸出函數(shù)*/ readfromfile();int c,i,j,k,q=0;int tempn0; printf(t*排序輸出系統(tǒng)*nn); printf(tt*1.按學校編號輸出*n); printf(tt*2.按學??偡州敵?n); printf(tt*3.按男團總分輸出*n); printf(tt*4.按女團總分輸出*n); printf(=nn);do

17、printf(請選擇要實現(xiàn)功能的編號(14):); scanf(%d,&c);switch(c) case 1: for(i=0;in;i+) tempi=i; for(i=0;in;i+) for(j=i+1;jaj.snum) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按學校編號輸出*/ break; case 2: f

18、or(i=0;in;i+)tempi=i; for(i=0;in;i+) for(j=i+1;jn;j+)if(atempi.scoreaj.score) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(學校編號:%d 學??偡?%d 男團總分:%d 女團總分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按學??偡州敵?/ break; case 3: for(i=0;in;i+)tempi=i; for(i=0;in;i+) f

19、or(j=i+1;jn;j+) if(atempi.mscoreaj.mscore) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(學校編號:%d 學??偡?%d 男團總分:%d 女團總分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按男團總分輸出*/ break; case 4: for(i=0;in;i+) tempi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(atempi.wscoreaj

20、.wscore) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(學校編號:%d 學??偡?%d 男團總分:%d 女團總分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按女圖總分輸出*/ break; default: printf(輸入錯誤,請重試!n);printf(請選擇 1 返回主菜單 0繼續(xù)); /*返回菜單或繼續(xù)排序*/scanf(%d,&q);printf(n);while(q=0);printf(n);if(q!=

21、0)menu(n,m,w);void search(int n,int m,int w) /*查詢函數(shù)*/ readfromfile();int c,i,j,k,d,l,q=0; printf(t*查詢系統(tǒng)*nn); printf(tt*1.按學校編號查詢*n); printf(tt*2.按項目編號查詢*n); printf(=nn);do k=-1;d=-1;l=-1;printf(請選擇要實現(xiàn)功能的編號(12):); scanf(%d,&c); switch(c) case 1: printf(要查詢的學校編號:); /*查找學校編號下標*/scanf(%d,&c);for(i=0;in;

22、i+)if(ai.snum=c) k=i;if(k=-1)printf(錯誤:這個學校沒有參加此次運動會!n); elseprintf(要查詢的項目編號:); /*查找項目編號下標*/ scanf(%d,&c);for(j=0;jm+w;j+)if(ak.tj.inum=c) d=j;if(d=-1) printf(此次運動會沒有這個項目n); else /*顯示結果*/ printf(這個項目取前 %d名,該學校的成績如下:n, ak.td.top); for(i=0;i5;i+) if(ak.td.rangei!=0) printf(名次:%dn,ak.td.rangei); break;

23、 case 2: printf(要查詢的項目編號:); /*查找項目編號下標*/ scanf(%d,&c); for(i=0;in;i+)for(j=0;jm+w;j+) if(ai.tj.inum=c)l=j; if(l=-1) printf(此次運動會沒有這個項目n); else /*顯示結果*/ printf(該項目取前 %d名,取得名次的學校n,a0.tl.top);for(i=0; in;i+) for(j=0;j5;j+) if(ai.tl.rangej!=0) printf(學校編號:%d,名次:%dn,ai.snum,ai.tl.rangej); break; default: printf(輸入錯誤,請重試!n);printf(請選擇 1 返回主菜單 0繼續(xù)); /*返回菜單或繼續(xù)查詢*/ scanf(%d,&q)

溫馨提示

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

評論

0/150

提交評論