




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、洛 陽 理 工 學 院課 程 設 計 報 告 課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設計 設計題目 運動會分數(shù)統(tǒng)計系統(tǒng) 專 業(yè) 計算機科學與技術(shù) 班 級 學 號 姓 名 課 程 設 計 任 務 書設計題目: 運動會分數(shù)統(tǒng)計系統(tǒng)設計內(nèi)容與要求: 參加運動會有n個學校,學校編號為1n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1m,女子m+1m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設定。(m=20,n=20)可以輸入各個項目的前三名或前五名的成績;2)能統(tǒng)計各學??偡?,3)可以按學校編號或名稱、學校總
2、分、男女團體總分排序輸出;4)可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W校。輸出形式:有中文提示,各學校分數(shù)為整形界面要求:有合理的提示,每個功能可以設立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲結(jié)構(gòu):學生自己根據(jù)系統(tǒng)功能要求自己設計,但是要求運動會的相關(guān)數(shù)據(jù)要存儲在數(shù)據(jù)文件中。測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進行程序測試,以保證程序的穩(wěn)定。 指導教師: 張新顏 2016 年 12 月 日課 程 設 計 評 語 成績: 指導教師:_ 年 月 日1. 算法思想:本課設要求輸入信息,統(tǒng)計分數(shù),執(zhí)行排序與查找功能,在要求中沒
3、有在建立數(shù)據(jù)之后進行插入和刪除操作,而在排序和查找過程中有許多的隨機讀取數(shù)據(jù)操作,因此使用順序結(jié)構(gòu)而不用鏈表。由于各個要求屬性具有一定的聯(lián)系,在定義數(shù)據(jù)時使用結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組來存儲信息數(shù)據(jù)。考慮到程序的要求在設計函數(shù)時將學校個數(shù)和項目個數(shù)設計為可變的數(shù)據(jù),為方便使用設計菜單函數(shù)(menu),而由于要求將信息存儲在文件中故設計文件的存儲(savetofile)與讀取函數(shù)(readfromfile),信息輸入函數(shù)(input)在輸入基本信息后由系統(tǒng)統(tǒng)計總分的 內(nèi)容并全部存入文件file中,在接下來的函數(shù)中開始都需要讀取文件中的信息,信息的輸出(output)輸出輸入函數(shù)中統(tǒng)計后的各項信息,在排序
4、輸出(sortput)中使用冒泡排序法進行不同關(guān)鍵字的排序,查詢函數(shù)(search)采用順序表的查找來完成。2.模塊劃分:1、Void menu(int n,int m,int w) 功能是提供界面窗口。2、Void savetofile() 功能是保存輸入的運動會信息到file文件開始輸入項目編號temp是數(shù)字NY0top18NY輸出“”統(tǒng)計結(jié)果Top存在YNNext schoolNTop是5NY取5名取3名編號snum1snum15NY學校、項目號、名次Y繼續(xù)添加YN結(jié)束3、Void readfromfile() 功能是從file文件中讀取運動會信息4、Void input(int n,i
5、nt m,int w) 功能是輸入信息并統(tǒng)計5、Void output(int n,int m,int w) 功能是按學校、項目輸出統(tǒng)計信息開始輸入1或者0 輸入項目號輸入學校編號輸出學校信息輸出該項目信息結(jié)束6、Void sortput(int n,int m,int w) 功能是按四種方法排序并輸出結(jié)果開始輸入c按學校編號排序按學校總分排序按男生項目排序按女生項目排序結(jié)束7、Void search(int n,int m,int w) 功能是按兩種方法查詢并輸出結(jié)果8、void main() 主函數(shù)2. 數(shù)據(jù)結(jié)構(gòu):(1)項目數(shù)據(jù)表:運動會系統(tǒng)先制定本次運動會所需的參賽項目。本數(shù)據(jù)表根據(jù)要求
6、設計存儲每個項目的編號、要取的名次、各個名次名稱及各名次對應的分數(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ù)要求儲存了各個參賽學校的總體情況,包括學校的編號、學校總分、男子團體總分、女子團體總分,并且包括項目數(shù)據(jù)數(shù)組tn。其中snum和tn中部分數(shù)據(jù)由輸入信息輸入,而其他
7、三項內(nèi)容score,mscore,wscore將由系統(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. 測試:測試取學校個數(shù)為3,男子項目個數(shù)2.女子項目個數(shù)1。項目學校編號1(男)編號2(男)編號3(女)取前3取前5取前5編號1名次31、43、4編號2
8、名次22、51、5編號3名次132 將上述所有學校的信息輸入,然后計算出所有學校的總分,男子項目的總分,女子項目的總分,然后再將自己計算出的數(shù)值與所做成的系統(tǒng)比較,觀看是否存在誤差和錯誤。 1. 主菜單界面2.信息輸入測試:預計輸入三個學校的信息。3. 統(tǒng)計輸出測試:預計輸出三個學校信息。4. 排序輸出測試。實現(xiàn)學校總分,男團總分,女團總分均可排序輸出。5. 信息查詢測試:預計可以用學校編號和項目編號查詢。6. 結(jié)束程序測試:預計直接退出系統(tǒng)。 經(jīng)過運算與測試結(jié)果比較,發(fā)現(xiàn)預期結(jié)果與運行結(jié)果一致。所以運動會分數(shù)統(tǒng)計系統(tǒng)正確無誤。5. 源程序:#include#include#include #
9、define N 20 /*學校最大數(shù)目*/ #define M 20 /*男子項目最大數(shù)目*/ #define W 20 /*女子項目最大數(shù)目*/typedef struct int inum; /*項目編號*/ int top; /*取名次的數(shù)目*/ int range5; /*名次*/ int mark5; /*分數(shù)*/itemnode; /*存放項目信息*/typedef struct int snum; /*學校編號*/ int score; /*學校總分*/ int mscore; /*男團體總分*/ int wscore; /*女團體總分*/ itemnode tM+W; /*項
10、目數(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(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(t* 1.信息輸入 *tn); printf(t* 2.統(tǒng)計輸出
11、 *tn); printf(t* 3.排序輸出 *tn); printf(t* 4.信息查詢 *tn); printf(t* 0.退出系統(tǒng) *tnn);printf(t* 老師你最好看 *tn); printf(t=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(謝謝使用,再見
12、!n); exit(0); default: printf(輸入錯誤,請重試!n); menu(n,m,w); void savetofile() /*信息存入文件file*/FILE *fp; int i; if(fp=fopen(file.txt,wb)=NULL) printf(cannot open the filen);return; for(i=0;iN;i+) if(ai.snum!=0)if(fwrite(&ai,sizeof(snode),1,fp)!=1)printf(file write errorn);return; fclose(fp);void readfromfi
13、le() /*信息從文件file中取出*/ int i;FILE *fp; if(fp=fopen(file.txt,rb)=NULL) printf(cannot open the filen);return; for(i=0;iN;i+)fread(&ai,sizeof(snode),1,fp); fclose(fp);void input(int n,int m,int w) /輸入函數(shù) int i,j,s,k,q=0; for(i=0;in;i+) printf(學校編號:); scanf(%d,&ai.snum); /*輸入學校信息*/ for(j=0;jm+w;j+) printf
14、(項目編號:); 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(獲得名次個數(shù)(1-5):); scanf(%d,&k); /*輸入項目信息*/ for(s=0;sk;s+) if(ai.tj.top=3)printf(所獲名次(1-3):);elseprintf(所獲名次(1-5):); scanf(%d,&ai.tj.ranges); /*輸入所獲名次信息*/ printf(n); for(i=0;in;i
15、+) 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.marks=3; break; case 3: ai.tj.marks=2; break;else if(ai.tj.top=5)switch(ai.tj.ranges) case 0: a
16、i.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);ai.score=ai.score+ai.tj.marks; /*記學??偡?/if(j=m-1)ai.mscore=ai.mscore+ai.tj.marks; /*記男子團體總分*/
17、elseai.wscore=ai.wscore+ai.tj.marks; /*記女子團體總分*/printf(輸入完畢!返回? 1是 0否n); /*返回菜單*/scanf(%d,&q);printf(n);if(q!=1)printf(不能再添加信息!);printf(n);savetofile(); /*將信息存入文件file*/getchar();system(cls);menu(n,m,w);void output(int n,int m,int w) /輸出函數(shù) readfromfile();int i,j,s,q=0; for(i=0;in;i+) /*顯示結(jié)果*/printf(學
18、校編號:%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);printf(統(tǒng)計成功!返回? 1是 0否); /*返回菜單*/scanf(%d,&q);printf(n);if(q!=1) p
19、rintf(統(tǒng)計已經(jīng)結(jié)束!);printf(n);system(cls); menu(n,m,w);void sortput(int n,int m,int w) /順序輸出readfromfile();int c,i,j,k,q=0;int tempN; printf(t*排序輸出系統(tǒng)*nn); printf(t*1.按學校編號輸出*tn); printf(t*2.按學校總分輸出*tn); printf(t*3.按男團總分輸出*tn); printf(t*4.按女團總分輸出*tn); printf(t=nn);do printf(請選擇要實現(xiàn)功能的編號(1-4):); scanf(%d,&c
20、);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: for(i=0;in;i+)tempi=i; for(i=0;in;i+) fo
21、r(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+) for(j=i+1;jn;j+)if(atempi.mscoreaj.mscore) k=te
22、mpi;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.wscore) k=tempi;tempi=tempj;tempj=k; /* 用冒泡排序方法排序*/for
23、(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); system(cls);printf(n);while(q=0);printf(n);if(q!=0)menu(n,m,w);void search(int n,int m,int w) /查
24、詢函數(shù)readfromfile();int c,i,j,k,d,l,q=0; printf(t*查詢系統(tǒng)*nn); printf(t* 1.按學校編號查詢 *tn); printf(t* 2.按項目編號查詢 *tn); printf(t=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;in;i+)if(ai.snum=c)k=i;if(k=-1)printf(錯誤:這個學校沒有參加此
25、次運動會!n);elseprintf(要查詢的項目編號:); /*查找項目編號下標*/ scanf(%d,&c);for(j=0;jm+w;j+)if(ak.tj.inum=c)d=j;if(d=-1)printf(此次運動會沒有這個項目n);else /*顯示結(jié)果*/ printf(這個項目取前 %d名,該學校的成績?nèi)缦?n, ak.td.top);for(i=0;i5;i+)if(ak.td.rangei!=0)printf(名次:%dn,ak.td.rangei); break; case 2:printf(要查詢的項目編號:); /*查找項目編號下標*/scanf(%d,&c);for
26、(i=0;in;i+)for(j=0;jm+w;j+)if(ai.tj.inum=c)l=j;if(l=-1)printf(此次運動會沒有這個項目n);else /*顯示結(jié)果*/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);printf(n);while(q=0);printf(n); if(q!=0)menu(n,m,w);int ma
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥店開藥歸誰管理制度
- 莆田小型倉庫管理制度
- 薪酬管理體系管理制度
- 設備借用流程管理制度
- 設備實行集中管理制度
- 設備整機采購管理制度
- 設備點檢維護管理制度
- 設備維護保養(yǎng)管理制度
- 設備防火安全管理制度
- 設計公司科室管理制度
- 2022-2023學年廣東省廣州市花都區(qū)四年級數(shù)學第二學期期末考試模擬試題含解析
- 星海音樂學院樂理試題A卷
- 2019年4月27日山東省紀委監(jiān)委遴選公務員考試真題及答案
- ktv包房服務員崗位職責8篇
- 西安某大跨度鋼桁架人行天橋結(jié)構(gòu)設計分析
- 新疆全部及全國部分加氣站分布情況6
- 初中學段勞動任務清單(七到九年級)
- 2023年中國各地磁偏角
- 六維領(lǐng)導力專題知識
- 【護士資格考試】云南省精神病醫(yī)院模擬檢測練習題
- 高溫高壓設備警示牌
評論
0/150
提交評論