《軟件認(rèn)知實(shí)踐》報(bào)告_第1頁
《軟件認(rèn)知實(shí)踐》報(bào)告_第2頁
《軟件認(rèn)知實(shí)踐》報(bào)告_第3頁
《軟件認(rèn)知實(shí)踐》報(bào)告_第4頁
《軟件認(rèn)知實(shí)踐》報(bào)告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、中國礦業(yè)大學(xué)徐海學(xué)院計(jì)算機(jī)系軟件認(rèn)知實(shí)踐報(bào)告姓 名: 王震 學(xué) 號: 22120494 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 設(shè)計(jì)題目: 運(yùn)動會分?jǐn)?shù)統(tǒng)計(jì) 指導(dǎo)教師: 吳川 2013年12月目 錄第1章 題目概述1第1.1節(jié) 題目要求1第1.2節(jié) 主要難點(diǎn)1第2章 系統(tǒng)流程圖3第3章 數(shù)據(jù)結(jié)構(gòu)和算法3第4章 核心代碼分析與調(diào)試4第5章 復(fù)雜度分析.11參考文獻(xiàn).11附錄:.12中國礦業(yè)大學(xué)徐海學(xué)院軟件認(rèn)知實(shí)踐報(bào)告第1章 題目概述參加運(yùn)動會有n個(gè)學(xué)校,學(xué)校編號為1n。比賽分成m個(gè)男子項(xiàng)目,和w個(gè)女子項(xiàng)目。項(xiàng)目編號為男子1m,女子m+1m+w。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、

2、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。(m=20,n=20)第1.1節(jié) 題目要求一、題目要求:1)可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績;2)能統(tǒng)計(jì)各學(xué)校總分,3)可以按學(xué)校編號或名稱、學(xué)校總分、男女團(tuán)體總分排序輸出;4)可以按學(xué)校編號查詢學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號查詢?nèi)〉们叭蚯拔迕膶W(xué)校。5)數(shù)據(jù)存入文件并能隨時(shí)查詢 6)規(guī)定:輸入數(shù)據(jù)形式和范圍:可以輸入學(xué)校的名稱,運(yùn)動項(xiàng)目的名稱輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整形二、界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。三、存儲結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)

3、計(jì),但是要求運(yùn)動會的相關(guān)數(shù)據(jù)要存儲在數(shù)據(jù)文件中。(數(shù)據(jù)文件的數(shù)據(jù)讀寫方法等相關(guān)內(nèi)容在c語言程序設(shè)計(jì)的書上,請自學(xué)解決)請?jiān)谧詈蟮纳辖毁Y料中指明你用到的存儲結(jié)構(gòu)。四、測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測試,以保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結(jié)果請?jiān)谏辖坏馁Y料中寫明。第1.2節(jié) 主要難點(diǎn)1.用冒泡排序方法,用數(shù)組記住頭結(jié)點(diǎn)下標(biāo)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=remembe

4、rj,rememberj=k; 2.根據(jù)要求設(shè)計(jì)存儲每個(gè)項(xiàng)目的編號、名稱、要取的名次以及各個(gè)名次對應(yīng)的學(xué)校的編號,在初始輸入時(shí)僅輸入項(xiàng)目編號、名稱及要取的名次,而各名次對應(yīng)的學(xué)校編號將由系統(tǒng)自動統(tǒng)計(jì)。這也有利于以后項(xiàng)目情況的查詢。typedef structint itemnum; /項(xiàng)目編號 int top; /取名次的數(shù)目int range5; /名次int mark5; /分?jǐn)?shù) itemnode; /定義項(xiàng)目結(jié)點(diǎn)的類型3.儲存了各個(gè)參賽學(xué)校的總體情況,包括學(xué)校的編號、名稱、男子團(tuán)體總分、女子團(tuán)體總分和學(xué)校總分。其中學(xué)校編號和名稱是提前輸入的,而其他三項(xiàng)內(nèi)容將由系統(tǒng)進(jìn)行自動統(tǒng)計(jì)。typed

5、ef structint schoolnum; /學(xué)校編號int score; /學(xué)??偡謎nt mscore; /男團(tuán)體總分int wscore; /女團(tuán)體總分itemnode cm+w; /項(xiàng)目數(shù)組headnode;/定義頭結(jié)點(diǎn)類型4.對各個(gè)學(xué)校的報(bào)名情況及成績進(jìn)行匯總,為了操作方便,只包含了學(xué)校的編號、項(xiàng)目的編號以及其在比賽中的成績。typedef struct /*單項(xiàng)成績*/ int schoolnum; /*學(xué)校編號*/ int itemnum; /* 項(xiàng)目編號*/ int xmch; /*項(xiàng)目成績*/danx; 第2章 系統(tǒng)流程圖開始-初始化輸入判斷N Y輸入學(xué)校及男女項(xiàng)目范圍輸

6、入某項(xiàng)目各名次成績Y繼續(xù)輸入N查詢團(tuán)體總分Case3成績查詢Case2Y繼續(xù)Case1N查詢各學(xué)校成績Y輸出查詢學(xué)校成績繼續(xù)N結(jié)束退出第3章 數(shù)據(jù)結(jié)構(gòu)和算法本方案要求準(zhǔn)備結(jié)構(gòu)體數(shù)組、讀寫文件。還能把信息直接輸入存儲到文件中,讀取文件中信息,從而得到結(jié)果。 (1) 菜單設(shè)計(jì)分為主函數(shù)菜單、比賽成績輸出菜單、查詢分?jǐn)?shù)統(tǒng)計(jì)結(jié)果菜單、查詢方式子菜單。 (2) 數(shù)據(jù)保存方式建立文件,數(shù)據(jù)保存在文件中。運(yùn)動運(yùn)分?jǐn)?shù)統(tǒng)計(jì)程序(3) 數(shù)據(jù)類型采用結(jié)構(gòu)體類型。(4) 存儲結(jié)構(gòu)采用結(jié)構(gòu)體類型數(shù)組存儲結(jié)構(gòu)存儲。(5) 算法設(shè)計(jì)輸入比賽結(jié)果模塊中運(yùn)用了冒泡算法將輸入的數(shù)據(jù)排序。第4章 核心代碼分析1.核心代碼 void

7、 inputinformation() /輸入信息,建立系統(tǒng) int i,j,k,s; for(i=0;in)printf(錯誤:這個(gè)學(xué)校沒有參加此次運(yùn)動會!nnn); elseprintf(要查詢的項(xiàng)目編號:); scanf(%d,&j); if(jm+w|j=0) printf(此次運(yùn)動會沒有這個(gè)項(xiàng)目nnn);/學(xué)校編號超出范圍,則輸出警告 else printf(這個(gè)項(xiàng)目取前 %d名,該學(xué)校的成績?nèi)缦?n, h0.cj-1.top); for(k=0;km+w|s=0)printf(此次運(yùn)動會不包括這個(gè)項(xiàng)目.nnn);/項(xiàng)目編號超出范圍則輸出警告elseprintf(該項(xiàng)目取前 %d名,

8、取得名次的學(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); /輸出該項(xiàng)目取得名次學(xué)校的成績 printf(nnn繼續(xù) 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2); break;2.調(diào)試結(jié)果:(1)首先運(yùn)行文件運(yùn)動會統(tǒng)計(jì)分?jǐn)?shù)系統(tǒng)(2) 輸入信息:程序首先賦初值,定義學(xué)校的個(gè)數(shù)為2,男生項(xiàng)目為1,女生項(xiàng)目為1。輸入1得到進(jìn)入輸入信息模塊。按回車鍵可得到學(xué)校的得分

9、信息和按編號獲得的所以信息。(3)輸出信息:輸入2進(jìn)入輸出信息模塊,該模塊分四項(xiàng): 按學(xué)校編號輸出: 按學(xué)校總分輸出: 按男團(tuán)總分輸出: 按女團(tuán)總分輸出: 輸入2返回輸出信息模塊,輸入0返回主菜單。(4)查詢信息:輸入3進(jìn)入信息查詢模塊: 按學(xué)校編號查詢 按項(xiàng)目編號查詢 輸入錯誤信息時(shí)給出提示: 輸入2繼續(xù)查詢,輸入0返回主菜單第5章 復(fù)雜度分析時(shí)間復(fù)雜度的計(jì)算:數(shù)據(jù)初始錄入中學(xué)校為O(b),項(xiàng)目為O(c),成績的錄入為O(a),統(tǒng)計(jì)函數(shù)調(diào)入內(nèi)存函數(shù)為O(a+b+c),學(xué)校成績統(tǒng)計(jì)為O(a+2)*b),項(xiàng)目統(tǒng)計(jì)為O(a+1)*c),按學(xué)校編號、按學(xué)校總成績、男團(tuán)和女團(tuán)輸出函數(shù)為O(b2/2),

10、查詢某校某項(xiàng)目函數(shù)為O(c*b*5/2),查詢某項(xiàng)目的信息為O(5*b*c/2)。參考文獻(xiàn)1 陳志泊,王春鈴. 面向?qū)ο蟮某绦蛟O(shè)計(jì)語言C+.北京:人民郵電出版社,20042 數(shù)據(jù)結(jié)構(gòu)(C+版),嚴(yán)蔚敏,清華大學(xué)出版社,20103 C語言 楊磊,中國礦業(yè)大學(xué)出版社2012.4 C+程序設(shè)計(jì). 吳乃陵 況迎輝.第2版.高等教育出版社,2012 附錄:#include#include#include #include #define n 2/學(xué)校數(shù)目 #define m 1/男子項(xiàng)目數(shù)目 #define w 1/女子項(xiàng)目數(shù)目#define null 0typedef struct int itemn

11、um; /項(xiàng)目編號 int top; /取名次的數(shù)目 int range5; /名次 int mark5; /分?jǐn)?shù)itemnode; /定義項(xiàng)目結(jié)點(diǎn)的類型typedef structint schoolnum; /學(xué)校編號 int score; /學(xué)校總分 int mscore; /男團(tuán)體總分 int wscore; /女團(tuán)體總分 itemnode cm+w; /項(xiàng)目數(shù)組headnode;/定義頭結(jié)點(diǎn)類型headnode hn;/定義一個(gè)頭結(jié)點(diǎn)數(shù)組void inputinformation() /輸入信息,建立系統(tǒng)int i,j,k,s; for(i=0;in;i+) hi.score=0;

12、hi.mscore=0; hi.wscore=0; /初始化頭結(jié)點(diǎn) for(i=0;in;i+) printf(*學(xué)校編號:); scanf(%d,&hi.schoolnum); /輸入頭結(jié)點(diǎn)信息 for(j=0;jm+w;j+) printf(*項(xiàng)目編號:); scanf(%d,&hi.cj.itemnum); printf(*取前3名or前5名:); scanf(%d,&hi.cj.top); printf(*獲得幾個(gè)名次:); scanf(%d,&k); /輸入項(xiàng)目信息 for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分?jǐn)?shù) for

13、(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; bre

14、ak; 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;/是男子項(xiàng)目則記到男子分?jǐn)?shù)里面去 else hi.wscore=hi.wscore+hi.cj.marks;/是女子項(xiàng)目則記到女子項(xiàng)目里面去 printf(n); void

15、output() /輸出函數(shù) int choice,i,j,k;int remembern;int sign; do printf(*1.按學(xué)校編號輸出.*n); printf(*2.按學(xué)??偡州敵?*n); printf(*3.按男團(tuán)總分輸出.*n); printf(*4.按女團(tuán)總分輸出.*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(*

16、男團(tuán)總分:%dn,hi.mscore); printf(*女團(tuán)總分: %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é)點(diǎn)下標(biāo) for(i=0;in;i+) printf(“nn*學(xué)校編號:%dn”,hrememberi.schoolnum); printf(*學(xué)

17、??偡?%dn ,hrememberi.score); printf(*男團(tuán)總分:%dn,hrememberi.mscore); printf(*女團(tuán)總分: %dnnn,hrememberi.wscore); /按所記下標(biāo)順序輸出 /按學(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é)

18、校編號:%dn,hrememberi.schoolnum); printf(*學(xué)??偡?%dn ,hrememberi.score); printf(*男團(tuán)總分:%dn,hrememberi.mscore); printf(*女團(tuán)總分: %dnnn,hrememberi.wscore); /按男團(tuán)總分輸出 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;remember

19、j=k; for(i=0;in)printf(錯誤:這個(gè)學(xué)校沒有參加此次運(yùn)動會!nnn); elseprintf(要查詢的項(xiàng)目編號:); scanf(%d,&j); if(jm+w|j=0) printf(此次運(yùn)動會沒有這個(gè)項(xiàng)目nnn);/學(xué)校編號超出范圍,則輸出警告 else printf(這個(gè)項(xiàng)目取前 %d名,該學(xué)校的成績?nèi)缦?n, h0.cj-1.top); for(k=0;km+w|s=0)printf(此次運(yùn)動會不包括這個(gè)項(xiàng)目.nnn);/項(xiàng)目編號超出范圍則輸出警告elseprintf(該項(xiàng)目取前 %d名,取得名次的學(xué)校n,h0.cs-1.top);for(i=0; in;i+) f

20、or(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf(學(xué)校編號:%d,名次:%dn,hi.schoolnum,hi.cs-1.rangej); /輸出該項(xiàng)目取得名次學(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;i+)fw

21、rite(&hi,sizeof(headnode),1,report); fclose(report); /按頭結(jié)點(diǎn)塊寫入 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(*男團(tuán)總分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*女團(tuán)總分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(nnn); getch(); for(j=0;jm+w;j+) printf(*項(xiàng)目編號:); fread(&k,sizeof(int),1,re

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論