




已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
.目錄1 實習目的12 問題描述13 需求分析14 概要設(shè)計25 詳細設(shè)計55.1數(shù)據(jù)結(jié)構(gòu)定義55.2各個函數(shù)分析56 調(diào)試與測試196.1調(diào)試196.2 測試197 使用說明228 總結(jié)239 參考文獻2310 附錄23精選文檔運動會分數(shù)統(tǒng)計系統(tǒng)的設(shè)計與實現(xiàn)1 實習目的通過學(xué)習,了解并初步掌握設(shè)計、實現(xiàn)較大系統(tǒng)的完整過程,包括系統(tǒng)分析、編碼設(shè)計、系統(tǒng)集成以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計、實現(xiàn)以及操作方法,為進一步的應(yīng)用開發(fā)打好基礎(chǔ)。2 問題描述 參加運動會有n個學(xué)校,學(xué)校編號為1n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1m,女子m+1m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。(m=20,n=20)實現(xiàn)如下功能:(1)可以輸入各個項目的前三名或前五名的成績;(2)能統(tǒng)計各學(xué)??偡郑唬?)可以按學(xué)校編號或名稱、學(xué)校總分、男女團體總分排序輸出;(4)可以按學(xué)校編號查詢學(xué)校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W(xué)校;(5)數(shù)據(jù)存入文件并能隨時查詢。3 需求分析3.1功能需求本系統(tǒng)主要是運動會分數(shù)統(tǒng)計方案設(shè)計。運動會分數(shù)統(tǒng)計方案適合采用結(jié)構(gòu)體數(shù)組,為了實現(xiàn)系統(tǒng)功能,主要應(yīng)實現(xiàn)以下幾部分:比賽成績輸入、比賽成績輸出、查詢比賽成績和調(diào)用統(tǒng)計結(jié)果。3.2 數(shù)據(jù)需求需要輸入學(xué)校編號,項目編號,取得的名次,以及哪些名次。3.3 性能需求本程序在運行期間,為了避免在運行大量數(shù)據(jù)時不會出錯,并且能夠在很短的時間內(nèi)將運行結(jié)果穩(wěn)定輸出,就需要系統(tǒng)達到安全性能好,可靠性高,穩(wěn)定性強,處理數(shù)據(jù)迅速等特點。4 概要設(shè)計4.1系統(tǒng)設(shè)計方案本方案要求準備結(jié)構(gòu)體數(shù)組、讀寫文件。還能把信息直接輸入存儲到文件中,讀取文件中信息,從而得到結(jié)果。(1) 菜單設(shè)計分為主函數(shù)菜單、比賽成績輸出菜單、查詢分數(shù)統(tǒng)計結(jié)果菜單、查詢方式子菜單。(2) 數(shù)據(jù)保存方式建立文件,數(shù)據(jù)保存在文件中。運動運分數(shù)統(tǒng)計程序(3) 數(shù)據(jù)類型采用結(jié)構(gòu)體類型。(4) 存儲結(jié)構(gòu)采用結(jié)構(gòu)體類型數(shù)組存儲結(jié)構(gòu)存儲。(5) 算法設(shè)計輸入比賽結(jié)果模塊中運用了冒泡算法將輸入的數(shù)據(jù)排序。4.2 數(shù)據(jù)庫設(shè)計系統(tǒng)用到的抽象數(shù)據(jù)類型定義:typedef struct int itemnum; /項目編號 int top; /取名次的數(shù)目 int range5; /名次 int mark5; /分數(shù)itemnode; /定義項目結(jié)點的類型typedef structint schoolnum; /學(xué)校編號 int score; /學(xué)校總分 int mscore; /男團體總分 int wscore; /女團體總分 itemnode cm+w; /項目數(shù)組headnode;/定義頭結(jié)點類型基本操作:(1)主函數(shù):void main();(2)比賽成績輸入:void inputinformation();(3)比賽成績輸出:void output();(4)查詢比賽成績:void inquiry() ;(5)將數(shù)據(jù)存儲在文件中:void writedata();(6)調(diào)用統(tǒng)計結(jié)果void readdata();4.3功能模塊設(shè)計根據(jù)分析整個系統(tǒng)主要劃分為4個功能模塊,分別執(zhí)行要求中的功能。該系統(tǒng)分為比賽成績輸入、比賽成績輸出、查詢比賽成績和調(diào)用統(tǒng)計結(jié)果。比賽成績輸出模塊有四個子模塊,分別是:按學(xué)校編號輸出模塊、按學(xué)??偡州敵瞿K、安南員總分輸出模塊和按女團總分輸出模塊;查詢比賽成績模塊分為按學(xué)校編號查詢模塊河岸項目編號查詢兩個子模塊。功能模塊圖如圖1所示。 圖1功能模塊圖(1) 比賽成績輸入模塊比賽成績輸入模塊分為:創(chuàng)建信息部分,該部分需輸入學(xué)校編號,項目編號,取得的名次,以及哪些名次;算法部分,得到排序結(jié)果。 (2) 比賽成績輸出模塊將以輸入的數(shù)據(jù)按照輸出比賽菜單的選擇輸出相應(yīng)的數(shù)據(jù)。(3) 查詢比賽成績模塊按照查詢比賽結(jié)果菜單和其查詢方式子菜單查詢需要的數(shù)據(jù)。(4) 調(diào)用統(tǒng)計結(jié)果將輸入的各學(xué)校運動會成績排序輸出。5 詳細設(shè)計根據(jù)題目要求及本次課程設(shè)計的目的,采用結(jié)構(gòu)體來存儲每組數(shù)據(jù),定義運動會類和調(diào)用庫函數(shù)進行相應(yīng)的操作。現(xiàn)把相應(yīng)的設(shè)計思路及各個函數(shù)解析如下。5.1數(shù)據(jù)結(jié)構(gòu)定義建立結(jié)構(gòu)體如下:typedef struct int itemnum; /項目編號 int top; /取名次的數(shù)目 int range5; /名次 int mark5; /分數(shù)itemnode; /定義項目結(jié)點的類型typedef structint schoolnum; /學(xué)校編號 int score; /學(xué)校總分 int mscore; /男團體總分 int wscore; /女團體總分 itemnode cm+w; /項目數(shù)組headnode;/定義頭結(jié)點類型5.2 各個函數(shù)分析5.2.1 主函數(shù)函數(shù)原型:void main()main()函數(shù)主要是整個系統(tǒng)的控制端,主要功能是控制整個程序的運行。從主函數(shù)開始調(diào)用各相關(guān)函數(shù)來達到相應(yīng)的功能。void main() int choice;printf(=歡迎使用=n); printf(nn*運動會分數(shù)統(tǒng)計系統(tǒng)*n); printf(nn*1.輸入信息*n);printf(*2.輸出信息*n);printf(*3.查詢信息*n); printf(*4.調(diào)用信息*n); printf(*5.退出系統(tǒng)*nnn);printf(=nn);printf(*請選擇要實現(xiàn)步驟的編號:nn);scanf(%d,&choice);switch(choice) case 1: inputinformation();writedata();readdata();main(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); case 5: exit(0); default: exit(0); 5.2.2 比賽成績輸入模塊比賽成績輸入模塊需要輸入學(xué)校編號,項目編號,取得的名次,以及哪些名次 。void inputinformation() /輸入信息,建立系統(tǒng)int i,j,k,s; for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; /初始化頭結(jié)點 for(i=0;in;i+) printf(*學(xué)校編號:); scanf(%d,&hi.schoolnum); /輸入頭結(jié)點信息 for(j=0;jm+w;j+) printf(*項目編號:); scanf(%d,&hi.cj.itemnum); printf(*取前3名or前5名:); scanf(%d,&hi.cj.top); printf(*獲得幾個名次:); scanf(%d,&k); /輸入項目信息 for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分數(shù) for(s=0;sk;s+) printf(*名次:); scanf(%d,&hi.cj.ranges); /輸入所獲名次信息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks;/按取前三名還是取前五名分別記分 if(j=m-1)hi.mscore=hi.mscore+hi.cj.marks;/是男子項目則記到男子分數(shù)里面去 else hi.wscore=hi.wscore+hi.cj.marks;/是女子項目則記到女子項目里面去 printf(n); 此模塊定義變量i,j,k,s;先初始化儲存分數(shù)的數(shù)組各元素,for循環(huán)實現(xiàn)各學(xué)校信息的輸入,包括學(xué)校編號、項目編號、取前3名or前5名、獲得幾個名次,使用switch語句實現(xiàn)對輸入的各個名次賦予對應(yīng)的分數(shù)。5.2.3 比賽成績輸出比賽成績輸出模塊實現(xiàn)按要求輸出相應(yīng)的數(shù)據(jù)。有以下輸出選項:按學(xué)校編號輸出、按學(xué)??偡州敵觥茨袌F總分輸出、按女團總分輸出。void output() /輸出函數(shù) int choice,i,j,k;int remembern;int sign; do printf(*1.按學(xué)校編號輸出.*n); printf(*2.按學(xué)??偡州敵?*n); printf(*3.按男團總分輸出.*n); printf(*4.按女團總分輸出.*n); printf(nn* 請選擇編號*nn:); scanf(%d,&choice); switch(choice) case 1:for(i=0;in;i+) printf(nn*學(xué)校編號:%dn,hi.schoolnum); printf(*學(xué)校總分:%dn ,hi.score); printf(*男團總分:%dn,hi.mscore); printf(*女團總分: %dnnn,hi.wscore); /按編號順序輸出 break;case 2: for(i=0;in;i+)rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+)if(hrememberi.scorehj.score) k=rememberi;rememberi=rememberj;rememberj=k; / 用冒泡排序方法,用輔助數(shù)組記住頭結(jié)點下標 for(i=0;in;i+) printf(“nn*學(xué)校編號:%dn”,hrememberi.schoolnum); printf(*學(xué)校總分:%dn ,hrememberi.score); printf(*男團總分:%dn,hrememberi.mscore); printf(*女團總分: %dnnn,hrememberi.wscore);/按所記下標順序輸出 /按學(xué)校總分輸出 break; case 3: for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+)if(hrememberi.mscorehj.mscore)k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in;i+) printf(nn*學(xué)校編號:%dn,hrememberi.schoolnum); printf(*學(xué)??偡?%dn ,hrememberi.score); printf(*男團總分:%dn,hrememberi.mscore); printf(*女團總分: %dnnn,hrememberi.wscore); /按男團總分輸出 break;case 4: for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.wscorehj.wscore) k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in)printf(錯誤:這個學(xué)校沒有參加此次運動會!nnn); elseprintf(要查詢的項目編號:); scanf(%d,&j); if(jm+w|j=0) printf(此次運動會沒有這個項目nnn);/學(xué)校編號超出范圍,則輸出警告 else printf(這個項目取前 %d名,該學(xué)校的成績?nèi)缦?n, h0.cj-1.top); for(k=0;km+w|s=0)printf(此次運動會不包括這個項目.nnn);/項目編號超出范圍則輸出警告elseprintf(該項目取前 %d名,取得名次的學(xué)校n,h0.cs-1.top);for(i=0; in;i+) for(j=0;jn)printf(錯誤:這個學(xué)校沒有參加此次運動會!nnn); elseprintf(要查詢的項目編號:); scanf(%d,&j); if(jm+w|j=0) printf(此次運動會沒有這個項目nnn);/學(xué)校編號超出范圍,則輸出警告 else printf(這個項目取前 %d名,該學(xué)校的成績?nèi)缦?n, h0.cj-1.top); for(k=0;km+w|s=0)printf(此次運動會不包括這個項目.nnn);/項目編號超出范圍則輸出警告elseprintf(該項目取前 %d名,取得名次的學(xué)校n,h0.cs-1.top);for(i=0; in;i+) for(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf(學(xué)校編號:%d,名次:%dn,hi.schoolnum,hi.cs-1.rangej); /輸出該項目取得名次學(xué)校的成績 printf(nnn繼續(xù) 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2); break;void writedata() /把數(shù)據(jù)存儲在文件中 FILE *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(不能打開文件n); exit(1); for(i=0;in時輸出錯誤:這個學(xué)校沒有參加此次運動會! 否則,輸入項目編號,如果jm+w|j=0,輸出此次運動會沒有這個項目。否則,使用for循環(huán)輸出相關(guān)數(shù)據(jù),從而實現(xiàn)查詢功能。5.2.5 將數(shù)據(jù)存儲在文件中void writedata() /把數(shù)據(jù)存儲在文件中 FILE *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(不能打開文件n); exit(1); for(i=0;in;i+)fwrite(&hi,sizeof(headnode),1,report); fclose(report); /按頭結(jié)點塊寫入 5.2.6 調(diào)用統(tǒng)計結(jié)果模塊調(diào)用統(tǒng)計模塊從文件中讀取數(shù)據(jù)輸出。void readdata() /讀出文件中數(shù)據(jù)的函數(shù) FILE *report; int i,j,k,s; if(report=fopen(sportsdata.txt,r)=null) printf(file can not be openedn); exit(1); for(i=0;in;i+) printf(*學(xué)校編號:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*學(xué)??偡?); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*男團總分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*女團總分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(nnn); getch(); for(j=0;jm+w;j+) printf(*項目編號:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*所取名次數(shù)量:); fread(&k,sizeof(int),1,report); printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*名次:), printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*分數(shù):), printf(%dn,k); printf(nnn); getch(); fclose(report); /關(guān)閉文件 /按照讀一個數(shù)據(jù)就輸出一個數(shù)據(jù)的方式顯示數(shù)據(jù)內(nèi)容 此模塊定義了FILE *report; int i,j,k,s; for循環(huán)中套用for循環(huán),for循環(huán)分別對學(xué)校編號、學(xué)校總分、男團總分、女團總分進行輸出,在使用for循環(huán)對各學(xué)校的項目編號、所取名次數(shù)量、各個名次輸出,實現(xiàn)對文件中的數(shù)據(jù)的調(diào)用。6 調(diào)試與測試6.1 調(diào)試調(diào)試過程主要是運行編制好的程序,然后遇到錯誤后根據(jù)系統(tǒng)的提示,找到相關(guān)的問題所在。本系統(tǒng)調(diào)試過程中遇到的主要問題、原因和解決方法如下面介紹。調(diào)試過程中出現(xiàn)的問題和處理方式:(1) 程序出現(xiàn)語法錯誤發(fā)現(xiàn)是輸入名次信息的地方忘帶地址符&。 添加取地址符。 printf(*名次:); scanf(%d,&hi.cj.ranges);(2)在輸出模塊不能將全部的學(xué)校信息輸出,屬于算法編寫錯誤,正確的程序應(yīng)該為:if(hrememberi.mscorehj.mscore)k=rememberi;rememberi=rememberj;rememberj=k;6.2 測試軟件測試是軟件生存期中的一個重要階段,是軟件質(zhì)量保證的關(guān)鍵步驟從用戶的角度來看,普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,所以軟件測試應(yīng)該是“為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程”?;蛘哒f,軟件測試應(yīng)該根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計一批測試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測試用例去運行程序,以發(fā)現(xiàn)程序錯誤或缺陷。過度測試則會浪費許多寶貴的資源。到測試后期,即使找到了錯誤,然而付出了過高的代價。測試數(shù)據(jù)過程如下。(1) 輸入功能測試輸入數(shù)據(jù)1:1 1 1 3 3 1 2 3 2 3 2 2 3 2 1 3 2 1 3 2 3 3 1 2 3預(yù)期結(jié)果:學(xué)校編號:1學(xué)校總分:15男團總分:10女團總分:5項目編號:1所取名次數(shù):3名次:1名次:2名次:3分數(shù):5分數(shù):3分數(shù):2項目編號:2所取名次數(shù):3名次:2名次:3分數(shù):3分數(shù):2學(xué)校編號:2學(xué)??偡郑?7男團總分:7女團總分:10項目編號:1所取名次數(shù):3名次:1名次:3分數(shù):5分數(shù):2項目編號:2所取名次數(shù):3名次:1名次:2名次:3分數(shù):5分數(shù):3分數(shù):2運行結(jié)果:學(xué)校編號:1學(xué)??偡郑?5男團總分:10女團總分:5項目編號:1所取名次數(shù):3名次:1名次:2名次:3分數(shù):5分數(shù):3分數(shù):2項目編號:2所取名次數(shù):3名次:2名次:3分數(shù):3分數(shù):2學(xué)校編號:2學(xué)??偡郑?7男團總分:7女團總分:10項目編號:1所取名次數(shù):3名次:1名次:3分數(shù):5分數(shù):2項目編號:2所取名次
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年網(wǎng)絡(luò)管理員考試的復(fù)習大綱探討試題及答案
- 主管工作總結(jié)的結(jié)果評估計劃
- 法學(xué)概論中常見法律術(shù)語解讀試題及答案
- 財務(wù)課程學(xué)習的重要性計劃
- 自信面對2025年法學(xué)概論考試試題及答案
- 2024年南昌航空大學(xué)輔導(dǎo)員考試真題
- 2024年烏什縣人民醫(yī)院招聘筆試真題
- 法學(xué)教育的現(xiàn)狀與未來試題及答案
- 2024年湖北省生態(tài)環(huán)境廳下屬事業(yè)單位真題
- 法學(xué)概論法律教育政策的研究進展試題及答案
- 委托尋找房源協(xié)議書
- 景觀畢業(yè)設(shè)計
- 法洛四聯(lián)癥的護理課件
- 2025年佛山市三水海江建設(shè)投資有限公司招聘筆試參考題庫附帶答案詳解
- 鹵味學(xué)員合同協(xié)議書
- 統(tǒng)編版三年級語文下冊期末考試卷(帶答案)
- 建設(shè)項目全過程工程咨詢-第一次形成性考核-國開(SC)-參考資料
- 2024建安杯信息通信建設(shè)行業(yè)安全競賽題庫(試題含答案)
- (正式版)JBT 14581-2024 閥門用彈簧蓄能密封圈
- 波浪理論基礎(chǔ)要點圖解[精]
- 關(guān)于磷化行業(yè)企業(yè)建設(shè)項目及污染排放有關(guān)問題法律適用的復(fù)函
評論
0/150
提交評論