運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)課程設(shè)計(jì)報(bào)告_第1頁(yè)
運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)課程設(shè)計(jì)報(bào)告_第2頁(yè)
運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)課程設(shè)計(jì)報(bào)告_第3頁(yè)
運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)課程設(shè)計(jì)報(bào)告_第4頁(yè)
運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)院系:專業(yè):班級(jí):學(xué)號(hào):姓名:教師:時(shí)間:1一、問(wèn)題描述1、功能任務(wù):參加運(yùn)動(dòng)會(huì)有n 個(gè)學(xué)校,學(xué)校編號(hào)為1n。比賽分成m 個(gè)男子項(xiàng)目,和w 個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1m ,女子 m+1 m+w 。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為: 5、 3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。( m=20,n=20 ),按要求實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)輸入、查詢、計(jì)分等功能。2、數(shù)據(jù)建議輸入學(xué)校的名稱,運(yùn)動(dòng)項(xiàng)目的名稱等,其余信息學(xué)生自行設(shè)計(jì);輸出形式:有合理的提示,各學(xué)校分?jǐn)?shù)為整形;數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)自行設(shè)計(jì)。建議運(yùn)動(dòng)會(huì)的

2、相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件中。3、操作1)可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績(jī);2)能統(tǒng)計(jì)各學(xué)??偡?,3)可以按學(xué)校編號(hào)或名稱、學(xué)??偡?、男女團(tuán)體總分排序輸出;4)可以按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況; 可以按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校。4、要求提供系統(tǒng)菜單,界面友好,提示信息完整。二、系統(tǒng)分析及設(shè)計(jì)1、需求分析根據(jù)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)的問(wèn)題分析及設(shè)計(jì)要求, 可以將此系統(tǒng)分為四個(gè)模塊: 信息統(tǒng)計(jì)模塊、信息輸出模塊、信息查詢模塊、信息調(diào)用模塊。其系統(tǒng)功能結(jié)構(gòu)圖如圖所示。( 1)、信息統(tǒng)計(jì)模塊實(shí)現(xiàn)信息的輸入、統(tǒng)計(jì)、存檔。( 2)、信息輸出模塊實(shí)現(xiàn)信息的輸出。( 3)、信息查詢模塊實(shí)現(xiàn)信息的查

3、詢。( 4)、信息調(diào)用模塊實(shí)現(xiàn)信息的調(diào)用,即從文件中讀出信息并輸出。2運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)信息統(tǒng)計(jì)模塊信息輸出模塊信息查詢模塊信息調(diào)用模塊信分信息數(shù)息輸統(tǒng)存入計(jì)檔2、概要設(shè)計(jì)此系統(tǒng)采用順序存儲(chǔ)結(jié)構(gòu)存儲(chǔ), 定義了一個(gè)結(jié)構(gòu)體數(shù)組存放參賽學(xué)校的信息。 之所以采用順序存儲(chǔ)結(jié)構(gòu),是因?yàn)橛盟鼇?lái)實(shí)現(xiàn)信息的存儲(chǔ)、查詢比較方便,節(jié)省時(shí)間,效率高,而且也方便把信息寫入文件以及讀取文件。( 1)、結(jié)構(gòu)體定義如下:、定義運(yùn)動(dòng)項(xiàng)目數(shù)據(jù)類型,用于存放運(yùn)動(dòng)項(xiàng)目的信息,包括項(xiàng)目名稱、項(xiàng)目編號(hào)、用戶自己定義的取前3 名還是前5 名的積分、名次、分?jǐn)?shù)。typedef structchar proname10;/項(xiàng)目名稱int pr

4、onum;/ 項(xiàng)目編號(hào)int top;/取前 3 名或前 5 名積分,由用戶自己定義int range5;/ 名次int mark5;/ 分?jǐn)?shù)Pronode;/項(xiàng)目結(jié)點(diǎn)類型定義、定義學(xué)校數(shù)據(jù)類型,用于存放參賽學(xué)校的信息,包括學(xué)校名稱、學(xué)校編號(hào)、學(xué)??偡帧⒛凶訄F(tuán)體總分、女子團(tuán)體總分以及項(xiàng)目數(shù)組。typedef structchar schname20;/學(xué)校名稱int schnum;/ 學(xué)校編號(hào)int score;/ 總分int Mscore;/男子團(tuán)體總分int Wscore;/ 女子團(tuán)體總分Pronode aM+W;/項(xiàng)目數(shù)組Schnode;/ 學(xué)校結(jié)點(diǎn)類型定義、定義一個(gè)學(xué)校結(jié)點(diǎn)類型的結(jié)構(gòu)體

5、數(shù)組Schnode sN 。采用數(shù)組結(jié)構(gòu)有利于隨機(jī)存儲(chǔ)和查詢。3(2 )、信息統(tǒng)計(jì)模塊的算法設(shè)計(jì)說(shuō)明輸入?yún)①悓W(xué)校比賽成績(jī)的信息時(shí),采用三重循環(huán), 第一重循環(huán)控制參賽學(xué)校的個(gè)數(shù),第二重循環(huán)控制各參賽學(xué)校的參賽項(xiàng)目個(gè)數(shù),第三重循環(huán)控制各參賽學(xué)校的各參賽項(xiàng)目所獲得的名次個(gè)數(shù), 并依次輸入相應(yīng)信息,根據(jù)所輸入的名次得出相對(duì)應(yīng)的分?jǐn)?shù)。然后分別統(tǒng)計(jì)出各學(xué)校的總分、 男子團(tuán)體總分和女子團(tuán)體總分。 調(diào)用文件數(shù)據(jù)塊寫函數(shù) fwrite 將信息寫入文件,方便以后調(diào)用。( 3 )、信息輸出模塊的算法設(shè)計(jì)說(shuō)明根據(jù)設(shè)計(jì)要求,實(shí)現(xiàn)按學(xué)校名稱、學(xué)??偡?、男子團(tuán)體總分、女子團(tuán)體總分輸出。因此選用 switch 語(yǔ)句實(shí)現(xiàn)此功能

6、。case 1 按學(xué)校名稱輸出時(shí),直接取出數(shù)據(jù)進(jìn)行輸出;case 2 按學(xué)??偡州敵鰰r(shí),采用冒泡排序法進(jìn)行排序然后按分?jǐn)?shù)由高到低輸出;case 3 和 case 4 也均采用冒泡排序法進(jìn)行排序最后按分?jǐn)?shù)由高到低輸出。其流程圖如圖所示:開(kāi)始總分顯示菜單界面輸入功能序號(hào)按按按按退直學(xué)學(xué)男女出接校校團(tuán)團(tuán)返退名總總總回出稱分分分主本輸輸輸輸菜系出出出出單統(tǒng)主菜單結(jié)束(4 )、信息查詢模塊的算法設(shè)計(jì)說(shuō)明根據(jù)設(shè)計(jì)要求, 提供兩種不同的查詢方式:按學(xué)校編號(hào)查詢和按項(xiàng)目編號(hào)查詢。因此也采用 switch 語(yǔ)句實(shí)現(xiàn)此功能。case 1 按學(xué)校編號(hào)查詢,提示輸入要查詢的學(xué)校編號(hào)以及要查詢的項(xiàng)目編號(hào),直接取出該學(xué)校

7、該項(xiàng)目的信息進(jìn)行輸出。case 2 按項(xiàng)目編號(hào)查詢,提示輸入要查詢的項(xiàng)目編號(hào),輸出該項(xiàng)目取得名次的學(xué)校的信息。4其流程圖如圖所示:開(kāi)始信息查詢界面選擇查詢方式按按退直學(xué)項(xiàng)出接校目返退編編回出號(hào)號(hào)主本查查菜系詢?cè)儐谓y(tǒng)主菜單結(jié)束(5 )、信息調(diào)用模塊的算法設(shè)計(jì)說(shuō)明信息調(diào)用, 即讀取保存在文件里的信息并輸出。 由于采用的是數(shù)組存儲(chǔ), 可以很方便的一下把文件里的信息全部讀取出來(lái),再利用三重循環(huán)依次把各學(xué)校各項(xiàng)目所取得的成績(jī)輸出。3、詳細(xì)設(shè)計(jì)(1)、信息輸入及分?jǐn)?shù)統(tǒng)計(jì)功能void InfoInput() 是信息輸入及分?jǐn)?shù)統(tǒng)計(jì)的函數(shù),在輸入信息的同時(shí)進(jìn)行分?jǐn)?shù)統(tǒng)計(jì),可以輸入各學(xué)校各項(xiàng)目前 3 名或前 5 名

8、的成績(jī)。結(jié)果取前 3 名還是前 5 名由用戶自己定。 用 switch 語(yǔ)句將前 3 名的成績(jī)賦值為 5、 3、2,前 5 名的成績(jī)賦值為 7、 5、3、 2、 1,未取得的成績(jī)則賦為 0。并統(tǒng)計(jì)總分、男子團(tuán)體總分和女子團(tuán)體總分。其主要功能代碼如下:for(m=0;mk;m+)/ 輸入所獲名次信息coutsi.aj.rangem;if(si.aj.top=3)/匹配各名次對(duì)應(yīng)的分?jǐn)?shù)5switch(si.aj.rangem)case 0: si.aj.markm=0; break;case 1: si.aj.markm=5; break;case 2: si.aj.markm=3; break;

9、case 3: si.aj.markm=2; break;elseswitch(si.aj.rangem)case 0: si.aj.markm=0; break;case 1: si.aj.markm=7; break;case 2: si.aj.markm=5; break;case 3: si.aj.markm=3; break;case 4: si.aj.markm=2; break;case 5: si.aj.markm=1; break;si.score=si.score+si.aj.markm; / 統(tǒng)計(jì)學(xué)??偡?if(j=M-1)si.Mscore=si.Mscore+si.a

10、j.markm;/ 統(tǒng)計(jì)男團(tuán)總分elsesi.Wscore=si.Wscore+si.aj.markm;/ 統(tǒng)計(jì)女團(tuán)總分(2 )、信息輸出功能void InfoOutput() 是信息輸出函數(shù)。輸出一個(gè)總分顯示菜單,利用switch 語(yǔ)句實(shí)現(xiàn)按學(xué)校名稱輸出或按學(xué)??偡?、男子團(tuán)體總分、 女子團(tuán)體總分由高到低輸出。采用冒泡排序的方法使之按總分由高到低輸出。利用循環(huán)語(yǔ)句while(1) 返回總分顯示菜單,break 語(yǔ)句終止循環(huán)。其主要功能代碼如下:for(i=0;iN;i+)/冒泡排序,用輔助數(shù)組b 記住學(xué)校結(jié)點(diǎn)的下標(biāo)bi=i;for(i=0;iN;i+)for(j=i+1;jN;j+)if(sb

11、i.score sj.score)k=bi;bi=bj;bj=k;6couty;按項(xiàng)目編號(hào)查詢:elseelsecouti;if(iN)coutfor(i=0;iN;i+)/ 輸出各學(xué)校運(yùn)動(dòng)會(huì)分?jǐn)?shù)信息cout學(xué)校名稱: sbi.schnameendl;cout學(xué)校編號(hào): sbi.schnumendl;cout學(xué)??偡郑?sbi.scoreendl;cout男團(tuán)總分: sbi.Mscoreendl;cout女團(tuán)總分: sbi.Wscoreendl;coutendl;(3 )、信息查詢功能void Inquiry() 函數(shù)是信息查詢函數(shù),顯示一個(gè)查詢菜單,利用switch 語(yǔ)句實(shí)現(xiàn)按學(xué)校編號(hào)查詢和

12、按項(xiàng)目編號(hào)查詢,并輸出該學(xué)校某個(gè)項(xiàng)目的情況或某個(gè)項(xiàng)目取得前3 名或前 5 名的學(xué)校信息。利用循環(huán)語(yǔ)句while(1) 返回查詢菜單,break 語(yǔ)句終止循環(huán)。其主要功能代碼如下:按學(xué)校編號(hào)查詢:要查詢的學(xué)校編號(hào):;/學(xué)校編號(hào)超出范圍,輸出提示信息這個(gè)學(xué)校沒(méi)有參加此次運(yùn)動(dòng)會(huì) !endl;coutj;if(jM+W | j=0)/項(xiàng)目編號(hào)超出范圍,輸出提示信息cout此次運(yùn)動(dòng)會(huì)沒(méi)有這個(gè)項(xiàng)目!endl;/ 輸出要查詢學(xué)校項(xiàng)目的成績(jī)cout這個(gè)項(xiàng)目取前s0.aj-1.top名,該學(xué)校的成績(jī)?nèi)缦拢篹ndl;for(k=0;k5;k+)if(si-1.aj-1.rangek!=0)cout名次: si-1

13、.aj-1.rangek;if(si-1.aj-1.markk!=0)cout分?jǐn)?shù): si-1.aj-1.markkM+W | y=0)/項(xiàng)目編號(hào)超出范圍,輸出提示信息cout此次運(yùn)動(dòng)會(huì)沒(méi)有這個(gè)項(xiàng)目!endl;else/輸出該項(xiàng)目取得名次的學(xué)校的成績(jī)cout該項(xiàng)目取前 s0.ay-1.top名,取得該名次的學(xué)校:endl;for(i=0;jN;i+)for(j=0;j5;j+)if(si.ay-1.rangej!=0)cout學(xué)校名稱: si.schname學(xué)校編號(hào):si.schnum名次: si.ay-1.rangej;if(si.ay-1.markj!=0)cout分?jǐn)?shù): si.ay-1.

14、markjendl;三、系統(tǒng)實(shí)現(xiàn)1、完整源代碼見(jiàn)附錄。2、調(diào)試分析運(yùn)行程序, 進(jìn)入主菜單界面,用戶可以選擇輸入信息、輸出信息、 查詢信息、 調(diào)用信息、關(guān)于或退出系統(tǒng)。測(cè)試數(shù)據(jù):學(xué)校名稱:武漢理工大學(xué);學(xué)校編號(hào):1;項(xiàng)目名稱:男子 100 米;項(xiàng)目編號(hào): 1;取前5 名;獲得 1 個(gè)名次,第 5 名。項(xiàng)目名稱:女子100 米;項(xiàng)目編號(hào):2;取前3 名,獲得 3個(gè)名次,分別是第 1、 2、 3 名。學(xué)校名稱:湖北經(jīng)濟(jì)學(xué)院;學(xué)校編號(hào):2;項(xiàng)目名稱:男子跳遠(yuǎn);項(xiàng)目編號(hào):1;取前 5名,獲得 4 個(gè)名次,分別是第 1、2、3、 4 名。項(xiàng)目名稱:女子跳高;項(xiàng)目編號(hào):2;取前 5名,獲得一個(gè)名次,第3 名

15、。測(cè)試輸出的結(jié)果:按學(xué)校名稱輸出:學(xué)校名稱:武漢理工大學(xué);學(xué)校編號(hào):1;學(xué)??偡郑?1;男團(tuán)總分:1;女團(tuán)總分: 10。學(xué)校名稱:湖北經(jīng)濟(jì)學(xué)院;學(xué)校編號(hào):2;學(xué)??偡郑?0;男團(tuán)總分: 17;女團(tuán)總分: 3。按學(xué)??偡州敵觯簩W(xué)校名稱:湖北經(jīng)濟(jì)學(xué)院;學(xué)校編號(hào):2;學(xué)??偡郑?0;男團(tuán)總分: 17;女團(tuán)總分: 3。學(xué)校名稱:武漢理工大學(xué);學(xué)校編號(hào):1;學(xué)??偡郑?1;男團(tuán)總分:1;女團(tuán)總分: 10。按男團(tuán)總分輸出:學(xué)校名稱:湖北經(jīng)濟(jì)學(xué)院;學(xué)校編號(hào):2;學(xué)??偡郑?0;男團(tuán)總分: 17;女團(tuán)總分: 3。學(xué)校名稱:武漢理工大學(xué);學(xué)校編號(hào):1;學(xué)??偡郑?1;男團(tuán)總分:1;女團(tuán)總分: 10。按女團(tuán)總分輸

16、出:學(xué)校名稱:武漢理工大學(xué);學(xué)校編號(hào):1;學(xué)??偡郑?1;男團(tuán)總分:1;女團(tuán)總分: 10。學(xué)校名稱:湖北經(jīng)濟(jì)學(xué)院;學(xué)校編號(hào):2;學(xué)??偡郑?0;男團(tuán)總分: 17;女團(tuán)總分: 3。8時(shí)間復(fù)雜度分析:用戶輸入信息時(shí),采用三重循環(huán)進(jìn)行輸入,因此信息輸入函數(shù)的時(shí)間復(fù)雜度為O(N*(M+W ) *k) 。利用冒泡排序法進(jìn)行排序,采用二重循環(huán),時(shí)間復(fù)雜度為O( N*N )。采用順序存儲(chǔ)結(jié)構(gòu),信息存放在數(shù)組的相應(yīng)內(nèi)存單元里,因此查詢函數(shù)的時(shí)間復(fù)雜度為O( 1)。寫信息時(shí)可以一次全部寫進(jìn)去,讀信息時(shí)也可以一次全部讀出來(lái),因此寫文件函數(shù)和讀文件函數(shù)的時(shí)間復(fù)雜度都為O( 1)。存在問(wèn)題的思考及算法的改進(jìn)設(shè)想:剛開(kāi)

17、始運(yùn)行程序時(shí),就是一句一句的顯示,界面很不好看, 于是想把他弄成菜單的形式,但是兩個(gè)子菜單要實(shí)現(xiàn)與主菜單之間的切換,能夠自如返回主菜單。開(kāi)始時(shí)沒(méi)有想到要去直接調(diào)用實(shí)現(xiàn)主菜單操作的函數(shù) Menu (),廢了好大周折,后來(lái)問(wèn)了同學(xué),頓時(shí)茅塞頓開(kāi)。顯示的內(nèi)容堆積在一個(gè)屏幕上,看著很混亂,用C 語(yǔ)言里的clrscr() 函數(shù)在VC+ 里似乎不能用,上網(wǎng)查了下資料,找到了一個(gè)頭文件為stdlib.h 的清屏函數(shù)system( ”cls”)。調(diào)試程序時(shí), 遇到了屏幕一閃又回到原來(lái)界面的情況,沒(méi)有輸出想要得到的信息,原來(lái)是信息在屏幕上顯示后,程序執(zhí)行到了清屏函數(shù),所以立馬清屏了,為了看到輸出信息,調(diào)用 sy

18、stem( ”pause”)函數(shù),使程序暫停,以讓用戶看到輸出地信息,然后再按任意鍵繼續(xù)執(zhí)行程序。對(duì)此程序結(jié)構(gòu)體的定義比較難,要整體考慮全局設(shè)置出結(jié)構(gòu)體,這次課設(shè)用到結(jié)構(gòu)體的嵌套, 由于對(duì)結(jié)構(gòu)體的使用還不是很熟悉,所以做起來(lái)時(shí)花費(fèi)了不少時(shí)間,但一個(gè)課設(shè)做下來(lái),還算是得心應(yīng)手。對(duì)于讀寫文件不是很熟悉, fread 和 fwrite 函數(shù)不是很會(huì)用,在讀出文件里的信息并輸出時(shí)花了很長(zhǎng)時(shí)間,不過(guò),最后總算是會(huì)用了。3、輸出界面運(yùn)行程序, 進(jìn)入主菜單界面, 用戶可以選擇輸入信息、 輸出信息、 查詢信息、 調(diào)用信息、關(guān)于或退出系統(tǒng)。注意:第一次運(yùn)行本程序時(shí),請(qǐng)選擇輸入信息。以后再運(yùn)行時(shí),為了避免再次輸入

19、大量信息, 可以先選擇調(diào)用信息, 將以前輸入的信息重新顯示在屏幕上, 再進(jìn)行后續(xù)操作。9主菜單界面如圖所示:(1)、輸入信息選擇 1 號(hào)功能進(jìn)入輸入信息模塊,根據(jù)提示信息將以下信息輸入系統(tǒng)中。學(xué)校名稱:武漢理工大學(xué);學(xué)校編號(hào):1;項(xiàng)目名稱:男子100 米;項(xiàng)目編號(hào):1;取前5 名;獲得 1 個(gè)名次,第 5 名。項(xiàng)目名稱:女子 100 米;項(xiàng)目編號(hào): 2;取前 3 名,獲得 3 個(gè)名次,分別是第 1、 2、 3 名。學(xué)校名稱:湖北經(jīng)濟(jì)學(xué)院;學(xué)校編號(hào):2;項(xiàng)目名稱:男子跳遠(yuǎn);項(xiàng)目編號(hào):1;取前 5名,獲得 4 個(gè)名次,分別是第1、2、3、 4 名。項(xiàng)目名稱:女子跳高;項(xiàng)目編號(hào):2;取前 5名,獲得

20、一個(gè)名次,第3 名。輸入信息后,信息會(huì)自動(dòng)存檔,并自動(dòng)返回到主菜單。10輸入信息如圖所示:( 2)、輸出信息輸入 2 進(jìn)入總分顯示菜單界面。 用戶可根據(jù)自己喜好選擇按學(xué)校名稱輸出、 按學(xué)??偡州敵觥茨袌F(tuán)總分輸出、按女團(tuán)總分輸出或者退出返回主菜單、直接退出系統(tǒng)。11總分顯示菜單界面如圖所示:用戶可根據(jù)自己喜好選擇按哪種方式輸出, 信息輸出后, 按任意鍵返回總分顯示菜單界面。輸入 5 則返回主菜單,輸入 6 則退出系統(tǒng)。以下是分別按照學(xué)校名稱、學(xué)??偡?、男團(tuán)總分、女團(tuán)總分輸出的情況。按學(xué)校名稱輸出:12按學(xué)??偡州敵觯喊茨袌F(tuán)總分輸出:13按女團(tuán)總分輸出:(3 )、查詢信息輸入 3 進(jìn)入信息查詢界

21、面, 用戶可根據(jù)自己喜好選擇按學(xué)校編號(hào)查詢、 按項(xiàng)目編號(hào)查詢或者退出返回主菜單、直接退出系統(tǒng)。信息查詢界面如圖所示:用戶可根據(jù)自己喜好選擇按哪種方式查詢,查詢結(jié)束后,按任意鍵返回信息查詢界面。輸入 3 則返回主菜單, 輸入 4 則退出系統(tǒng)。 以下是分別按照學(xué)校編號(hào)、項(xiàng)目編號(hào)查詢的情況。14按學(xué)校編號(hào)查詢:按項(xiàng)目編號(hào)查詢:(4 )、調(diào)用信息為了避免每次運(yùn)行程序時(shí)都要輸入大量數(shù)據(jù), 在第一次運(yùn)行程序后, 就已經(jīng)將信息自動(dòng)存檔,再次運(yùn)行時(shí),可以先直接調(diào)用信息,按任意鍵返回主菜單,再進(jìn)行后續(xù)操作。15調(diào)用的信息如圖所示:( 5 )關(guān)于界面自行設(shè)計(jì)( 6 )退出系統(tǒng)輸入 6 則退出系統(tǒng),并有中文提示。如

22、圖所示:16四、設(shè)計(jì)總結(jié)在課程設(shè)計(jì)的過(guò)程中,雖然遇到了很多問(wèn)題, 但最終差不多也都一一解決了。有的時(shí)候是一些很小的邏輯錯(cuò)誤,需要的是細(xì)心。 同學(xué)之間互相幫助, 多個(gè)人思考多個(gè)力量,遇到自己解決不了的問(wèn)題, 向同學(xué)求助, 能更好的幫我們解決所面臨的難題。由于此次課程設(shè)計(jì)用到數(shù)據(jù)文件的知識(shí), 而這些知識(shí)老師都沒(méi)講, 自學(xué)起來(lái)稍微有點(diǎn)困難,但也不是完全看不懂,只是對(duì)一些函數(shù)的應(yīng)用不太熟悉,經(jīng)過(guò)此次課程設(shè)計(jì), 對(duì)文件的讀寫有了更深的了解,也相應(yīng)的培養(yǎng)了我的自學(xué)能力。經(jīng)過(guò) C 語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí),我發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)與C 語(yǔ)言有很大的不同,C 語(yǔ)言不需要考慮存儲(chǔ)結(jié)構(gòu)之類的,只需要定義個(gè)變量或數(shù)組,集中精力于

23、算法之上, 而數(shù)據(jù)結(jié)構(gòu)前期的整體規(guī)劃和構(gòu)思非常重要, 先確立合理的存儲(chǔ)結(jié)構(gòu),再來(lái)編寫算法, 實(shí)際上一旦存儲(chǔ)結(jié)構(gòu)確立了,算法的實(shí)現(xiàn)相對(duì)來(lái)說(shuō)簡(jiǎn)單很多,難就難在如何確立合理的存儲(chǔ)結(jié)構(gòu)。能夠把此次課程設(shè)計(jì)做出來(lái),是一個(gè)很大的挑戰(zhàn), 但我經(jīng)過(guò)自己的不懈努力,終于完成了,看著自己的作品,心里還是說(shuō)不出的高興,雖然做的過(guò)程很艱難。人生就是要把困難踩在腳下。附錄:源代碼:# include # include # include # define M 1/ 男子項(xiàng)目個(gè)數(shù)# define W 1/ 女子項(xiàng)目個(gè)數(shù)# define N 2/ 學(xué)校個(gè)數(shù)# define NULL 0void Menu();/ 函數(shù)聲明

24、typedef structchar proname10;/項(xiàng)目名稱int pronum;/項(xiàng)目編號(hào)int top;/取前 3 名或前 5 名積分,由用戶自己定義int range5;/名次int mark5;/ 分?jǐn)?shù)Pronode;/ 項(xiàng)目結(jié)點(diǎn)類型定義typedef structchar schname20;/ 學(xué)校名稱int schnum;/學(xué)校編號(hào)17int score;/ 總分int Mscore;/ 男團(tuán)體總分int Wscore;/ 女團(tuán)體總分Pronode aM+W;/項(xiàng)目數(shù)組Schnode;/學(xué)校結(jié)點(diǎn)類型定義Schnode sN;/ 定義一個(gè)學(xué)校結(jié)點(diǎn)類型的結(jié)構(gòu)體數(shù)組void H

25、ead()/ 頭菜單界面cout*endl;cout*歡迎使用*endl;cout*運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)*endl;cout*endl;coutendl;void MainMenu()/ 主菜單界面cout*endl;cout*主菜單*endl;cout*endl;cout*1.輸入信息*endl;cout*2.輸出信息*endl;cout*3.查詢信息*endl;cout*4.調(diào)用信息*endl;cout*5.關(guān)于*endl;cout*6.退出系統(tǒng)*endl;cout*endl;cout*注:第一次運(yùn)行本程序時(shí)請(qǐng)選擇1 號(hào)功能 *endl;cout*endl;void SubMenu()/ 總

26、分顯示菜單界面cout*endl;cout*運(yùn)動(dòng)會(huì)總分顯示菜單*endl;cout*endl;cout*1.按學(xué)校名稱輸出*endl;cout*2.按學(xué)??偡州敵?endl;cout*3.按男團(tuán)總分輸出*endl;cout*4.按女團(tuán)總分輸出*endl;cout*5.退出返回主菜單*endl;cout*6.直接退出本系統(tǒng)*endl;18cout*endl;void InitSch()/ 初始化信息int i;for(i=0;iN;i+)si.score=0;si.Mscore=0;si.Wscore=0;void InfoInput()/信息輸入模塊int i,j,k,m;InitSch();

27、/ 初始化信息for(i=0;iN;i+)/ 輸入學(xué)校信息coutsi.schname;coutsi.schnum;for(j=0;jM+W;j+)/輸入各學(xué)校內(nèi)項(xiàng)目信息name;num;coutsi.aj.top;coutk;for(m=0;m5;m+)/初始化排名和分?jǐn)?shù)si.aj.rangem=0;si.aj.markm=0;for(m=0;mk;m+)/ 輸入所獲名次信息coutsi.aj.rangem;if(si.aj.top=3)/ 匹配各名次對(duì)應(yīng)的分?jǐn)?shù)19switch(si.aj.rangem)case 0: si.aj.mark

28、m=0; break;case 1: si.aj.markm=5; break;case 2: si.aj.markm=3; break;case 3: si.aj.markm=2; break;elseswitch(si.aj.rangem)case 0: si.aj.markm=0; break;case 1: si.aj.markm=7; break;case 2: si.aj.markm=5; break;case 3: si.aj.markm=3; break;case 4: si.aj.markm=2; break;case 5: si.aj.markm=1; break;si.s

29、core=si.score+si.aj.markm; / 統(tǒng)計(jì)學(xué)??偡?if(j=M-1)si.Mscore=si.Mscore+si.aj.markm;/ 統(tǒng)計(jì)男團(tuán)總分elsesi.Wscore=si.Wscore+si.aj.markm;/ 統(tǒng)計(jì)女團(tuán)總分coutendl;void Output(int b)/ 輸出各學(xué)校運(yùn)動(dòng)會(huì)分?jǐn)?shù)信息int i;for(i=0;iN;i+)cout學(xué)校名稱: sbi.schnameendl;cout學(xué)校編號(hào): sbi.schnumendl;cout學(xué)??偡郑?sbi.scoreendl;cout男團(tuán)總分: sbi.Mscoreendl;cout女團(tuán)總分:

30、sbi.Wscoreendl;coutendl;20system(pause);/ 程序暫停,以顯示結(jié)果system(cls);/清屏void InfoOutput()/信息輸出模塊FILE *fp;int number,i,j,k,bN;if(fp=fopen(sport.txt,r)=NULL)/以讀方式打開(kāi)文本文件/ 并判定能否正常打開(kāi)cout文件打不開(kāi) !endl;/ 不能正常打開(kāi)文件的處理exit(0);/調(diào)用函數(shù)exit 終止程序運(yùn)行while(1)Head();/頭菜單界面SubMenu();/總分顯示菜單界面coutnumber;switch(number)case 1:/按學(xué)

31、校名稱輸出system(cls);Head();/ 頭菜單界面cout運(yùn)動(dòng)會(huì)各學(xué)校信息按學(xué)校名稱輸出如下:endl;for(i=0;iN;i+)/輸出各學(xué)校運(yùn)動(dòng)會(huì)分?jǐn)?shù)信息cout學(xué)校名稱: si.schnameendl;cout學(xué)校編號(hào): si.schnumendl;cout學(xué)??偡郑?si.scoreendl;cout男團(tuán)總分: si.Mscoreendl;cout女團(tuán)總分: si.Wscoreendl;coutendl;system(pause);/ 程序暫停,以顯示結(jié)果system(cls);/ 清屏break;case 2:/ 按學(xué)??偡州敵鰏ystem(cls);Head();/頭菜

32、單界面cout運(yùn)動(dòng)會(huì)各學(xué)校信息按學(xué)??偡州敵鋈缦拢篹ndl;for(i=0;iN;i+)/冒泡排序,用輔助數(shù)組記住學(xué)校結(jié)點(diǎn)的下標(biāo)bi=i;21for(i=0;iN;i+)for(j=i+1;jN;j+)if(sbi.score sj.score)k=bi;bi=bj;bj=k;Output(b);/按所記下標(biāo)的順序輸出各學(xué)校運(yùn)動(dòng)會(huì)分?jǐn)?shù)信息break;case 3:/ 按男團(tuán)總分輸出system(cls);Head();cout運(yùn)動(dòng)會(huì)各學(xué)校信息按男團(tuán)總分輸出如下:endl;for(i=0;iN;i+)/冒泡排序, 用輔助數(shù)組記住學(xué)校結(jié)點(diǎn)的下標(biāo)bi=i;for(i=0;iN;i+)for(j=i+

33、1;jN;j+)if(sbi.Mscore sj.Mscore)k=bi;bi=bj;bj=k;Output(b);/按所記下標(biāo)的順序輸出各學(xué)校運(yùn)動(dòng)會(huì)分?jǐn)?shù)信息break;case 4:/ 按女團(tuán)總分輸出system(cls);Head();cout運(yùn)動(dòng)會(huì)各學(xué)校信息按女團(tuán)總分輸出如下:endl;for(i=0;iN;i+)/冒泡排序,用輔助數(shù)組記住學(xué)校結(jié)點(diǎn)的下標(biāo)bi=i;for(i=0;iN;i+)for(j=i+1;jN;j+)22if(sbi.Wscore sj.Wscore)k=bi;bi=bj;bj=k;Output(b);/ 按所記下標(biāo)的順序輸出各學(xué)校運(yùn)動(dòng)會(huì)分?jǐn)?shù)信息break;case

34、 5:/退出返回主菜單system(cls);Menu();break;case 6:/退出系統(tǒng)exit(0);default:cout 對(duì)不起,無(wú)此功能,請(qǐng)輸入正確的功能序號(hào) !endl; system(pause);system(cls);InfoOutput();break;fclose(fp);/ 關(guān)閉文件void BMenu()/信息查詢界面cout*endl;cout*1.按學(xué)校編號(hào)查詢*endl;cout*2.按項(xiàng)目編號(hào)查詢*endl;cout*3.退出返回主菜單*endl;cout*4.直接退出本系統(tǒng)*endl;cout*endl;void Inquiry()/信息查詢模塊int number,i,j,k,y;while(1)Head();BMenu();23coutnumber;switch(number)case 1:/按學(xué)校編號(hào)查詢system(cls);Head();couti;if(iN)/學(xué)校編號(hào)超出范圍,輸出提示信息cout這個(gè)學(xué)校沒(méi)有參加此次運(yùn)動(dòng)會(huì)!endl;elsecoutj;if(jM+W | j=0)/項(xiàng)目編號(hào)超出范圍,輸出提示信息cout此次運(yùn)動(dòng)會(huì)沒(méi)有這個(gè)項(xiàng)目!endl;else/輸出要查詢學(xué)校項(xiàng)目的成績(jī)cout這個(gè)項(xiàng)目取前s0.aj-1.top名,該學(xué)校的成績(jī)?nèi)缦拢?endl;for(k=0;k5;k+)if

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論