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

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上計算機學院信管專業(yè)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計題 目: 運動會分數(shù)統(tǒng)計 班 級: 姓 名: 學 號: 同組人姓名: 起 迄 日 期: 課程設(shè)計地點: 指導教師: 評閱意見:成績評定:評閱人: 日期:完成日期:2013年12月目錄1、需求分析022、概要設(shè)計033、詳細設(shè)計044、調(diào)試分析和測試結(jié)果055、總結(jié)136、參考文獻147、致謝148、附錄141、需求分析(1)任務:參加運動會有n個學校,學校編號為1n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1m,女子m+1m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:

2、5、3、2;哪些取前五名或前三名由學生自己設(shè)定。(m<=20,n<=20)(2)功能要求:a).可以輸入各個項目的前三名或前五名的成績;b).能統(tǒng)計各學??偡?,c).可以按學校編號、學??偡?、男女團體總分排序輸出;d).可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W校。(3)規(guī)定:輸入數(shù)據(jù)形式和范圍:20以內(nèi)的整數(shù)(如果做得更好可以輸入學校的名稱,運動項目的名稱)(4)輸出形式:有中文提示,各學校分數(shù)為整形(5)界面要求:有合理的提示,每個功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。(6)存儲結(jié)構(gòu):學生自己根據(jù)系統(tǒng)功能要求自己設(shè)計,但是要求運動

3、會的相關(guān)數(shù)據(jù)要存儲在數(shù)據(jù)文件中。(7)測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進行程序測試,以保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結(jié)果請在上交的資料中寫明;2、概要設(shè)計(1)文字分析本課設(shè)要求輸入信息,統(tǒng)計分數(shù),執(zhí)行排序與查找功能,在要求中沒有在建立數(shù)據(jù)之后進行插入和刪除操作,而在排序和查找過程中有許多的隨機讀取數(shù)據(jù)操作,因此使用順序結(jié)構(gòu)而不用鏈表。由于各個要求屬性具有一定的聯(lián)系,在定義數(shù)據(jù)時使用結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組來存儲信息數(shù)據(jù)??紤]到程序的要求在設(shè)計函數(shù)時將學校個數(shù)和項目個數(shù)設(shè)計為可變的數(shù)據(jù),為方便使用設(shè)計菜單函數(shù)(menu),而由于要求將信息存儲在文件中故設(shè)計文件

4、的存儲(savetofile)與讀取函數(shù)(readfromfile),信息輸入函數(shù)(input)在輸入基本信息后由系統(tǒng)統(tǒng)計總分的內(nèi)容并全部存入文件file中,在接下來的函數(shù)中開始都需要讀取文件中的信息,信息的輸出(output)輸出輸入函數(shù)中統(tǒng)計后的各項信息,在排序輸出(sortput)中使用冒泡排序法進行不同關(guān)鍵字的排序,查詢函數(shù)(search)采用順序表的查找來完成。開始進入主菜單菜單選項(04)1.信息輸入2.統(tǒng)計輸出3.排序輸出4.信息查詢5.退出結(jié)束3、詳細設(shè)計(1)項目數(shù)據(jù)表:運動會系統(tǒng)先制定本次運動會所需的參賽項目。本數(shù)據(jù)表根據(jù)要求設(shè)計存儲每個項目的編號、要取的名次、各個名次名稱

5、及各名次對應的分數(shù)。用于對以后項目情況的統(tǒng)計已及查詢。其中inum,top,range由輸入信息輸入,而mark有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ù)由輸入信息輸入,而其他三項內(nèi)容score,mscore,wscore將

6、由系統(tǒng)進行自動統(tǒng)計。typedef struct int snum; /*學校編號*/ int score; /*學校總分*/ int mscore; /*男團體總分*/ int wscore; /*女團體總分*/ itemnode tM+W; /*項目數(shù)組*/snode; /*存放學校信息*/snode aN; /* 定義一個學校數(shù)組*/ 這二個數(shù)據(jù)表相關(guān)聯(lián)接,an中包括tn,形成一個整體。(3)模塊劃分1、Void menu(int n,int m,int w) 功能是提供界面窗口2、Void savetofile() 功能是保存輸入的運動會信息到file文件3、Void readfrom

7、file() 功能是從file文件中讀取運動會信息4、Void input(int n,int m,int w) 功能是輸入信息并統(tǒng)計5、Void output(int n,int m,int w) 功能是按學校、項目輸出統(tǒng)計信息6、Void sortput(int n,int m,int w) 功能是按四種方法排序并輸出結(jié)果7、Void search(int n,int m,int w) 功能是按兩種方法查詢并輸出結(jié)果4、調(diào)試分析與測試結(jié)果(1)測試數(shù)據(jù)測試取學校個數(shù)為3,男子項目個數(shù)2.女子項目個數(shù)1項目學校編號1(男)編號2(男)編號3(女)取前3取前5取前5編號1名次31、43、4編號

8、2名次22、51、5編號3名次132(2)測試結(jié)果1、主菜單界面2、信息輸入運行測試a).信息輸入b).輸入完成3、統(tǒng)計輸出運行測試a).統(tǒng)計輸出b).統(tǒng)計輸出完畢4、排序輸出運行測試a).選擇排序輸出形式b).按學校編號輸出c).按學??偡州敵鰀).按男團總分輸出d).按女團總分輸出5、信息查詢運行測試a).選擇信息查詢方式b).按學校編號查詢c).按項目編號查詢6、退出系統(tǒng)運行測試5、總結(jié)通過為期四天的設(shè)計,我對數(shù)據(jù)結(jié)構(gòu)這門有了更深一步的了解,使我對數(shù)據(jù)結(jié)構(gòu)這門課程掌握以及運用更加靈活。雖然是應用C語言來編寫程序,但卻深刻的體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)對編程的重要性。這次課程設(shè)計運用C語言與數(shù)據(jù)結(jié)構(gòu)知識

9、,編寫一個運動會分數(shù)統(tǒng)計系統(tǒng)。其中遇到了不少問題,因為對數(shù)據(jù)結(jié)構(gòu)這一門課程掌握不夠熟練以及平時自己在編寫一些普通常見的程序時只是運用單一的知識而課程設(shè)計卻需要將各個方面的內(nèi)容聯(lián)系結(jié)合,例如文件與程序的結(jié)合,輸入、輸出、統(tǒng)計、查找的綜合應用等,因此真正的程序設(shè)計必須先有一個正確的算法思想,運用正確的數(shù)據(jù)結(jié)構(gòu)和編程語言,靈活的運用并聯(lián)系幾個方面的內(nèi)容。通過課程設(shè)計也使我認識到,要學好編程,僅學習書本上的知識是不夠的,還要有較強的實踐能力。因為我們學習知識就是為了實踐。而只有多實踐,多編寫程序,才能更好的理解與掌握書本上的東西6、參考文獻1 嚴蔚敏,吳偉民;數(shù)據(jù)結(jié)構(gòu)(C語言版),清華大學出版社,20

10、07年2 王裕明;數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計,清華大學出版社,2010年3 譚浩強;C語言程序設(shè)計(第三版),北京航空航天大學出版社,2005年4 李建學;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計案例精編(用C/C+描述),清華大學出版社,2007年5 催俊凱;計算機軟件基礎(chǔ),機械工業(yè)出版社,2007年67、致謝本次試驗能夠如期完成,主要是要感謝席老師課堂上的講解以及指導,才能使我對數(shù)據(jù)結(jié)構(gòu)這門課程有較為深入的理解與掌握,才能在本次課程設(shè)計中得以運用。再加上課程設(shè)計過程中的程序設(shè)計建議,才使得這次課程設(shè)計中所遇到的問題能夠較快的解決其次,我還要感謝和我一組的趙詠荔同學,通過兩個人的共同協(xié)作,才使得本次課程設(shè)計能夠較好的完成。

11、同時,還要感謝平時課堂上以及課堂外給我?guī)椭耐瑢W們,能夠熱心的為我解答我所存在的疑問,并為我的程序提出一些建議。8、附錄源代碼:#include<stdio.h>#include<math.h>#include <process.h>#define N 20 /*學校最大數(shù)目*/ #define M 20 /*男子項目最大數(shù)目*/ #define W 20 /*女子項目最大數(shù)目*/typedef struct int inum; /*項目編號*/ int top; /*取名次的數(shù)目*/ int range5; /*名次*/ int mark5; /*分數(shù)*/

12、itemnode; /*存放項目信息*/typedef struct int snum; /*學校編號*/ int score; /*學校總分*/ int mscore; /*男團體總分*/ int wscore; /*女團體總分*/ itemnode tM+W; /*項目數(shù)組*/snode; /*存放學校信息*/snode aN; /* 定義一個學校數(shù)組*/void menu(int n,int m,int w) /*菜單函數(shù)*/ int c; void input(int n,int m,int w);void output(int n,int m,int w);void sortput(

13、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("

14、=nn");printf("請選擇要實現(xiàn)步驟的編號(0-4):"); 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

15、,w); void savetofile() /*信息存入文件file*/FILE *fp; int i; if(fp=fopen("file.txt","w")=NULL) printf("cannot open the filen");return; for(i=0;i<N;i+) if(ai.snum!='0')if(fwrite(&ai,sizeof(snode),1,fp)!=1)printf("file write errorn");return; fclose(fp);v

16、oid readfromfile() /*信息從文件file中取出*/ int i;FILE *fp; if(fp=fopen("file.txt","rb")=NULL) printf("cannot open the filen");return; for(i=0;i<N;i+)fread(&ai,sizeof(snode),1,fp); fclose(fp);void input(int n,int m,int w) /*1.信息輸入*/int i,j,s,k,q=0; for(i=0;i<n;i+) pri

17、ntf("學校編號:"); scanf("%d",&ai.snum); /*輸入學校信息*/ for(j=0;j<m+w;j+) printf("項目編號:"); scanf("%d",&ai.tj.inum);printf("項目取前3名或前5名(3或者5):"); scanf("%d",&ai.tj.top);if(ai.tj.top=3)printf("獲得名次個數(shù)(1-3):");elseprintf("獲得

18、名次個數(shù)(1-5):"); scanf("%d",&k); /*輸入項目信息*/ for(s=0;s<k;s+) if(ai.tj.top=3)printf("所獲名次(1-3):");elseprintf("所獲名次(1-5):"); scanf("%d",&ai.tj.ranges); /*輸入所獲名次信息*/ printf("n"); for(i=0;i<n;i+) ai.score=0; ai.mscore=0; ai.wscore=0; /*初始化

19、分數(shù)*/for(i=0;i<n;i+)for(j=0;j<m+w;j+)for(s=0;s<5;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.marks=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

20、.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);ai.score=ai.score+ai.tj.marks; /*記學??偡?/if(j<=m-1)ai.mscore=ai.mscore+ai.tj.marks; /*記男子團體總分*/elseai

21、.wscore=ai.wscore+ai.tj.marks; /*記女子團體總分*/printf("輸入完畢!返回? 1是 2否n"); /*返回菜單*/scanf("%d",&q);printf("n");if(q!=1)printf("不能再添加信息!");printf("n");savetofile(); /*將信息存入文件file*/menu(n,m,w);void output(int n,int m,int w) /*2.統(tǒng)計輸出*/ readfromfile();int i

22、,j,s,q=0; for(i=0;i<n;i+) /*顯示結(jié)果*/printf("學校編號:%d 學??偡?%d 男團總分:%d 女團總分:%dn",ai.snum,ai.score,ai.mscore,ai.wscore); for(j=0;j<m+w;j+)printf("項目編號:%d 所取名次數(shù)量:%dn",ai.tj.inum,ai.tj.top);for(s=0;s<5;s+) if(ai.tj.ranges!=0)printf("名次:%d 分數(shù):%dn",ai.tj.ranges,ai.tj.mar

23、ks);printf("n");printf("n");printf("統(tǒng)計完畢!返回? 1是 2否"); /*返回菜單*/scanf("%d",&q);printf("n");if(q!=1)printf("統(tǒng)計已經(jīng)結(jié)束!");printf("n"); menu(n,m,w);void sortput(int n,int m,int w) /*3.排序輸出*/ readfromfile();int c,i,j,k,q=0;int tempN; p

24、rintf("t*排序輸出系統(tǒng)*nn"); printf("tt*1.按學校編號輸出*n"); printf("tt*2.按學??偡州敵?n"); printf("tt*3.按男團總分輸出*n"); printf("tt*4.按女團總分輸出*n"); printf("=nn");do printf("請選擇要實現(xiàn)功能的編號(1-4):"); scanf("%d",&c);switch(c)case 1: for(i=0;i<

25、;n;i+)tempi=i; for(i=0;i<n;i+) for(j=i+1;j<n;j+)if(atempi.snum>aj.snum) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;i<n;i+) printf("學校編號:%d 學校總分:%d 男團總分:%d 女團總分:%dn",atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按學校編號輸出*/ break; case 2: for(i=0;i<n;i+)te

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

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

28、+) for(j=i+1;j<n;j+)if(atempi.wscore<aj.wscore) k=tempi;tempi=tempj;tempj=k; /* 用冒泡排序方法排序*/for(i=0;i<n;i+)printf("學校編號:%d 學??偡?%d 男團總分:%d 女團總分:%dn",atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按女團總分輸出*/break; default: printf("輸入錯誤,請重試!n");printf("請選擇 1 返

29、回主菜單 0繼續(xù)"); /*返回菜單或繼續(xù)排序*/scanf("%d",&q);printf("n");while(q=0);printf("n");if(q!=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.按項目編號

30、查詢*n"); printf("=nn");do k=-1;d=-1;l=-1;printf("請選擇要實現(xiàn)功能的編號(1-2):"); scanf("%d",&c);switch(c)case 1: printf("要查詢的學校編號:"); /*查找學校編號下標*/scanf("%d",&c);for(i=0;i<n;i+)if(ai.snum=c)k=i;if(k=-1)printf("錯誤:這個學校沒有參加此次運動會!n");elseprintf("要查詢的項目編號:"); /*查找項目編號下標*/ scanf("%d",&c);for(j=0;j<m+w;j+)if(ak.tj.inum=c)d=j;if(d=-1)printf("此次運動會沒有這個項目n");else /*顯示結(jié)果*/ printf("這個項目取前 %d名

溫馨提示

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

評論

0/150

提交評論