數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p>  課題名稱 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì) </p><p>  專 業(yè) </p><p>  班 級(jí) &

2、lt;/p><p>  學(xué) 號(hào) </p><p>  姓 名 </p><p>  指導(dǎo)老師 </p><p>  2013年 6 月 29 日</p><p><b>  課程設(shè)計(jì)內(nèi)容</b></p&

3、gt;<p><b>  1.課程設(shè)計(jì)目的:</b></p><p>  課程設(shè)計(jì)是對(duì)學(xué)生的一種全面綜合訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的必不可少的一個(gè)教學(xué)環(huán)節(jié)。通常,實(shí)習(xí)題中的問題比平時(shí)的習(xí)題復(fù)雜得多,也更接近實(shí)際。實(shí)習(xí)著眼于原理與應(yīng)用的結(jié)合點(diǎn),使讀者學(xué)會(huì)如何把書上學(xué)到的知識(shí)用于解決實(shí)際問題,培養(yǎng)軟件工作所需要的動(dòng)手能力;另一方面,能使書上的知識(shí)變“活”,起到深化理解和

4、靈活掌握教學(xué)內(nèi)容的目的。平時(shí)的練習(xí)較偏重于如何編寫功能單一的“小”算法,而實(shí)習(xí)題是軟件設(shè)計(jì)的綜合訓(xùn)練,包括問題分析、總體結(jié)構(gòu)設(shè)計(jì)、用戶界面設(shè)計(jì)、程序設(shè)計(jì)基本技能和技巧,多人合作,以至一整套軟件工作規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng)。</p><p><b>  課程設(shè)計(jì)題目</b></p><p><b>  1)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)</b></p>

5、;<p>  任務(wù):參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)為1……n。比賽分成m個(gè)男子項(xiàng)目,和w個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1……m,女子m+1……m+w。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。(m<=20,n<=20)</p><p><b>  功能要求:</b><

6、;/p><p>  可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績;</p><p><b>  能統(tǒng)計(jì)各學(xué)??偡?;</b></p><p>  可以按學(xué)校編號(hào)、學(xué)??偡?、男女團(tuán)體總分排序輸出;</p><p>  可以按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校。 </p><p&

7、gt;  規(guī)定:輸入數(shù)據(jù)形式和范圍:20以內(nèi)的整數(shù)(如果做得更好可以輸入學(xué)校的名稱,運(yùn)動(dòng)項(xiàng)目的名稱)</p><p>  輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整形</p><p>  界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。</p><p>  存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求運(yùn)動(dòng)會(huì)的相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件

8、中。(數(shù)據(jù)文件的數(shù)據(jù)讀寫方法等相關(guān)內(nèi)容在c語言程序設(shè)計(jì)的書上,請(qǐng)自學(xué)解決)請(qǐng)?jiān)谧詈蟮纳辖毁Y料中指明你用到的存儲(chǔ)結(jié)構(gòu);</p><p>  測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫明;</p><p><b>  目 錄</b></p><p>

9、;<b>  1需求分析1</b></p><p><b>  2.概要設(shè)計(jì)1</b></p><p><b>  3. 詳細(xì)設(shè)計(jì)3</b></p><p>  3.1 數(shù)據(jù)結(jié)構(gòu)定義3</p><p>  3.2統(tǒng)計(jì)輸出模塊3</p><p>

10、  3.3排序輸出函數(shù)6</p><p>  3.4查詢函數(shù)11</p><p><b>  4.調(diào)試分析15</b></p><p>  5. 程序使用及說明15</p><p>  6. 測(cè)試結(jié)果15</p><p><b>  7. 總結(jié)18</b><

11、/p><p><b>  8. 附錄18</b></p><p><b>  1需求分析</b></p><p>  本系統(tǒng)主要是運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)方案設(shè)計(jì)。根據(jù)具體情況選擇輸入?yún)⒓禹?xiàng)目的男女類別和取成績名次類別;最后選擇輸入名次。運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)方案適合采用結(jié)構(gòu)體數(shù)組,為了實(shí)現(xiàn)系統(tǒng)功能,主要應(yīng)實(shí)現(xiàn)以下幾部分:程序以用戶和計(jì)算機(jī)對(duì)

12、話方式進(jìn)行,即在計(jì)算機(jī)終端上顯示提示信息之后,由用戶輸入進(jìn)行查詢成績的操作:產(chǎn)生各學(xué)校的成績單,包括:各學(xué)校所取得的每項(xiàng)成績的項(xiàng)目號(hào)、名次(成績)、姓名和得。產(chǎn)生團(tuán)體總分報(bào)表,內(nèi)容包括校號(hào)、男子團(tuán)體總分、女子團(tuán)子總分和團(tuán)體總分,然后進(jìn)行數(shù)據(jù)保存操作。并且應(yīng)該提供鍵盤式選擇菜單實(shí)現(xiàn)功能選擇。由于運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)需要處理大量的數(shù)據(jù),所以在運(yùn)行期間,為了避免在運(yùn)行大量數(shù)據(jù)時(shí)出錯(cuò),并且系統(tǒng)能夠在很短的時(shí)間內(nèi)將運(yùn)行結(jié)果穩(wěn)定準(zhǔn)確輸出,就需要系統(tǒng)達(dá)到安

13、全性能好,可靠性高,穩(wěn)定性強(qiáng),處理數(shù)據(jù)迅速等特點(diǎn)。</p><p><b>  2.概要設(shè)計(jì)</b></p><p>  按照課題要求,在設(shè)計(jì)時(shí)將本系統(tǒng)分為比賽成績輸入、比賽成績輸出、查詢比賽成績和調(diào)用統(tǒng)計(jì)結(jié)果幾個(gè)功能模塊,并且將對(duì)錄入的分?jǐn)?shù)按照各項(xiàng)成績得分以及團(tuán)體總分排序。系統(tǒng)定義數(shù)據(jù)時(shí)使用結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組來存儲(chǔ)信息數(shù)據(jù),輸入基本信息后由系統(tǒng)統(tǒng)計(jì)總分的內(nèi)容并全部存

14、入文件file中,在排序輸出中使用冒泡排序法進(jìn)行不同關(guān)鍵字的排序,查詢函數(shù)采用順序表的查找來完成。在設(shè)計(jì)中采用了按照模塊功能來實(shí)現(xiàn)程序的功能,每個(gè)模塊完成系統(tǒng)的部分功能。具體情況將詳細(xì)設(shè)計(jì)中做具體介紹。</p><p>  圖1 系統(tǒng)功能模塊</p><p><b>  比賽成績輸入模塊</b></p><p>  比賽成績輸入模塊分為:創(chuàng)

15、建信息部分,該部分需輸入學(xué)校編號(hào),項(xiàng)目編號(hào),取得的名次,以及哪些名次;算法部分,得到排序結(jié)果。 </p><p><b>  比賽成績輸出模塊</b></p><p>  將以輸入的數(shù)據(jù)按照輸出比賽菜單的選擇輸出相應(yīng)的數(shù)據(jù)。</p><p><b>  查詢比賽成績模塊</b></p><p>  

16、按照查詢比賽結(jié)果菜單和其查詢方式子菜單查詢需要的數(shù)據(jù)。</p><p><b>  調(diào)用統(tǒng)計(jì)結(jié)果</b></p><p>  將輸入的各學(xué)校運(yùn)動(dòng)會(huì)成績排序輸出。</p><p><b>  3. 詳細(xì)設(shè)計(jì)</b></p><p>  3.1 數(shù)據(jù)結(jié)構(gòu)定義:</p><p> 

17、 typedef struct</p><p><b>  { </b></p><p>  int inum; /*項(xiàng)目編號(hào)*/</p><p>  int top; /*取名次的數(shù)目*/</p><p>  int range[5]; /*名次*/</p>

18、<p>  int mark[5]; /*分?jǐn)?shù)*/</p><p>  }itemnode; /*存放項(xiàng)目信息*/</p><p>  typedef struct </p><p><b>  {</b></p><p>  int snum; /*

19、學(xué)校編號(hào)*/</p><p>  int score; /*學(xué)??偡?/</p><p>  int mscore; /*男團(tuán)體總分*/</p><p>  int wscore; /*女團(tuán)體總分*/</p><p>  itemnode t[m0+w0]; /*項(xiàng)目數(shù)組*/</p>

20、<p>  }snode; /*存放學(xué)校信息*/</p><p>  snode a[n0]; /* 定義一個(gè)學(xué)校數(shù)組*/</p><p>  3.2統(tǒng)計(jì)輸出模塊:</p><p>  比賽成績輸入模塊需要輸入學(xué)校編號(hào),項(xiàng)目編號(hào),取得的名次,以及哪些名次。算法模塊流程圖如圖2所示.此模塊定義變量i,j,k,

21、s;先初始化儲(chǔ)存分?jǐn)?shù)的數(shù)組各元素,for循環(huán)實(shí)現(xiàn)各學(xué)校信息的輸入,包括學(xué)校編號(hào)、項(xiàng)目編號(hào)、取前3名or前5名、獲得幾個(gè)名次,使用switch語句實(shí)現(xiàn)對(duì)輸入的各個(gè)名次賦予對(duì)應(yīng)的分?jǐn)?shù)。</p><p>  void output(int n,int m,int w) /*統(tǒng)計(jì)輸出*/</p><p><b>  {</b></p><p>  

22、readfromfile();</p><p>  int i,j,s,q=0;</p><p>  for(i=0;i<n;i++) /*顯示結(jié)果*/</p><p><b>  {</b></p><p>  printf(&quo

23、t;學(xué)校編號(hào):%d 學(xué)校總分:%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore);</p><p>  for(j=0;j<m+w;j++)</p><p><b>  {</b></p><p>  printf("項(xiàng)目編號(hào):%

24、d 所取名次數(shù)量:%d\n",a[i].t[j].inum,a[i].t[j].top);</p><p>  for(s=0;s<5;s++)</p><p><b>  {</b></p><p>  if(a[i].t[j].range[s]!=0)</p><p>  printf("

25、名次:%d 分?jǐn)?shù):%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n");</p><p><b>

26、;  }</b></p><p>  printf("\n");</p><p>  while(q!=1)</p><p><b>  {</b></p><p>  printf("統(tǒng)計(jì)完畢!返回? 1是 2否"); /*返回菜單*/</p>

27、<p>  scanf("%d",&q);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  printf("\n");</p><p>  menu(n,m,w);</p>

28、<p><b>  }</b></p><p>  圖2比賽成績輸入模塊</p><p>  3.3排序輸出函數(shù):</p><p>  比賽成績輸出模塊實(shí)現(xiàn)按要求輸出相應(yīng)的數(shù)據(jù)。有以下輸出選項(xiàng):按學(xué)校編號(hào)輸出、按學(xué)校總分輸出、按男團(tuán)總分輸出、按女團(tuán)總分輸出。for循環(huán)實(shí)現(xiàn)輸出各個(gè)方式輸出的每個(gè)數(shù)據(jù)。排序輸出流程圖如圖3所示。<

29、;/p><p>  void sortput(int n,int m,int w) /*排序輸出函數(shù)*/ </p><p><b>  {</b></p><p>  readfromfile();</p><p>  int c,i,j,k,q=0;</p><p>  

30、int temp[n0];</p><p>  printf("\t**************排序輸出系統(tǒng)**************\n\n");</p><p>  printf("\t\t****1.按學(xué)校編號(hào)輸出****\n");</p><p>  printf("\t\t****2.按學(xué)??偡州敵?**

31、*\n");</p><p>  printf("\t\t****3.按男團(tuán)總分輸出****\n");</p><p>  printf("\t\t****4.按女團(tuán)總分輸出****\n");</p><p><b>  do</b></p><p><b> 

32、 {</b></p><p>  printf("請(qǐng)選擇要實(shí)現(xiàn)功能的編號(hào)(1——4):");</p><p>  scanf("%d",&c);</p><p><b>  switch(c)</b></p><p><b>  {</b>

33、</p><p><b>  case 1: </b></p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p><b>  { </b></p>

34、;<p>  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].snum>a[j].snum)</p><p><b>  { </b></p><p>  k=temp[i];</p><p>  temp[i]=temp[j];</p>&l

35、t;p>  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>

36、  printf("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按學(xué)校編號(hào)輸出*/</p><p> 

37、 break; </p><p>  case 2: </p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p><b>  { </b></

38、p><p>  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].score<a[j].score)</p><p><b>  { </b></p><p>  k=temp[i];</p><p>  temp[i]=temp[j];</p&g

39、t;<p>  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><

40、;p>  printf("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按學(xué)校總分輸出*/</p><

41、p><b>  break;</b></p><p>  case 3: </p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p><b>  { <

42、/b></p><p>  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].mscore<a[j].mscore)</p><p><b>  { </b></p><p>  k=temp[i];</p><p>  temp[i]=tem

43、p[j];</p><p>  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b>&l

44、t;/p><p>  printf("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按男團(tuán)總分輸出*/<

45、;/p><p><b>  break; </b></p><p>  case 4: </p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p>&l

46、t;b>  { </b></p><p>  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].wscore<a[j].wscore)</p><p><b>  { </b></p><p>  k=temp[i];</p><p&g

47、t;  temp[i]=temp[j];</p><p>  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>

48、  {</b></p><p>  printf("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  }

49、 /*按女圖總分輸出*/</p><p><b>  break; </b></p><p><b>  default: </b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重試!\n");</p><p><b>  }</b></p&g

50、t;<p>  printf("請(qǐng)選擇 1 返回主菜單 0繼續(xù)"); /*返回菜單或繼續(xù)排序*/</p><p>  scanf("%d",&q);</p><p>  printf("\n");</p><p>  }while(q==0);</p>

51、<p>  printf("\n");</p><p><b>  if(q!=0)</b></p><p>  menu(n,m,w);</p><p><b>  }</b></p><p>  圖3 排序結(jié)果輸出流程圖</p><p>&l

52、t;b>  3.4查詢函數(shù):</b></p><p>  此模塊實(shí)現(xiàn)查詢的兩種方式的選擇,當(dāng)i>n時(shí)輸出錯(cuò)誤:這個(gè)學(xué)校沒有參加此次運(yùn)動(dòng)會(huì)! 否則,輸入項(xiàng)目編號(hào),如果j>m+w||j==0,輸出此次運(yùn)動(dòng)會(huì)沒有這個(gè)項(xiàng)目。否則,使用for循環(huán)輸出相關(guān)數(shù)據(jù),從而實(shí)現(xiàn)查詢功能。</p><p>  void search(int n,int m,int w)

53、 /*查詢函數(shù)*/ </p><p><b>  {</b></p><p>  readfromfile();</p><p>  int c,i,j,k,d,l,q=0;</p><p>  printf("\t****************查詢系統(tǒng)****************\

54、n\n");</p><p>  printf("\t\t****1.按學(xué)校編號(hào)查詢****\n");</p><p>  printf("\t\t****2.按項(xiàng)目編號(hào)查詢****\n");</p><p><b>  do</b></p><p><b> 

55、 {</b></p><p>  k=-1;d=-1;l=-1;</p><p>  printf("請(qǐng)選擇要實(shí)現(xiàn)功能的編號(hào)(1——2):");</p><p>  scanf("%d",&c);</p><p><b>  switch(c)</b></

56、p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  printf("要查詢的學(xué)校編號(hào):"); /*查找學(xué)校編號(hào)下標(biāo)*/</p><p>  scanf("%d",&c);</p>

57、;<p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  if(a[i].snum==c)</p><p><b>  k=i;</b></p><p><b>  }</b></p><

58、p><b>  if(k==-1)</b></p><p>  printf("錯(cuò)誤:這個(gè)學(xué)校沒有參加此次運(yùn)動(dòng)會(huì)!\n");</p><p><b>  else</b></p><p><b>  {</b></p><p>  printf(&qu

59、ot;要查詢的項(xiàng)目編號(hào):"); /*查找項(xiàng)目編號(hào)下標(biāo)*/</p><p>  scanf("%d",&c);</p><p>  for(j=0;j<m+w;j++)</p><p><b>  {</b></p><p>  if(a[k].t[j].inum

60、==c)</p><p><b>  d=j;</b></p><p><b>  }</b></p><p><b>  if(d==-1)</b></p><p>  printf("此次運(yùn)動(dòng)會(huì)沒有這個(gè)項(xiàng)目\n");</p><p&g

61、t;  else /*顯示結(jié)果*/</p><p><b>  { </b></p><p>  printf("這個(gè)項(xiàng)目取前 %d名,該學(xué)校的成績?nèi)缦?\n", a[k].t[d].top);</p><p>  for(i=0;

62、i<5;i++)</p><p>  if(a[k].t[d].range[i]!=0)</p><p>  printf("名次:%d\n",a[k].t[d].range[i]);</p><p><b>  }</b></p><p><b>  }</b></

63、p><p>  break; </p><p><b>  case 2:</b></p><p>  printf("要查詢的項(xiàng)目編號(hào):"); /*查找項(xiàng)目編號(hào)下標(biāo)*/</p><p>  scanf("%d",&c);<

64、/p><p>  for(i=0;i<n;i++)</p><p>  for(j=0;j<m+w;j++)</p><p>  if(a[i].t[j].inum==c)</p><p><b>  l=j;</b></p><p><b>  if(l==-1)</b&

65、gt;</p><p>  printf("此次運(yùn)動(dòng)會(huì)沒有這個(gè)項(xiàng)目\n");</p><p>  else /*顯示結(jié)果*/</p><p><b>  {</b></p><p>  printf

66、("該項(xiàng)目取前 %d名,取得名次的學(xué)校\n",a[0].t[l].top);</p><p>  for(i=0; i<n;i++)</p><p>  for(j=0;j<5;j++)</p><p>  if(a[i].t[l].range[j]!=0)</p><p>  printf("學(xué)校編

67、號(hào):%d,名次:%d\n",a[i].snum,a[i].t[l].range[j]); </p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  default: </b></p><p>  print

68、f("輸入錯(cuò)誤,請(qǐng)重試!\n");</p><p><b>  }</b></p><p>  printf("請(qǐng)選擇 1 返回主菜單 0繼續(xù)"); /*返回菜單或繼續(xù)查詢*/</p><p>  scanf("%d",&q);</p><p>

69、;  printf("\n");</p><p>  }while(q==0);</p><p>  printf("\n");</p><p><b>  if(q!=0)</b></p><p>  menu(n,m,w);</p><p><b&

70、gt;  }</b></p><p>  圖4 查詢函數(shù)流程圖</p><p><b>  4.調(diào)試分析</b></p><p>  調(diào)試過程主要是運(yùn)行編制好的程序,然后遇到錯(cuò)誤后根據(jù)系統(tǒng)的提示,找到相關(guān)的問題所在。本系統(tǒng)調(diào)試過程中遇到的主要問題、原因和解決方法如下面介紹。</p><p>  調(diào)試過程中出現(xiàn)

71、的問題和處理方式:</p><p><b>  程序出現(xiàn)語法錯(cuò)誤</b></p><p>  發(fā)現(xiàn)是輸入名次信息的地方忘帶地址符&。 添加取地址符。</p><p>  printf("*****名次:");</p><p>  scanf("%d",&h[i].c

72、[j].range[s]);</p><p> ?。?)在輸出模塊不能將全部的學(xué)校信息輸出,屬于算法編寫錯(cuò)誤,正確的程序應(yīng)該為:if(h[remember[i]].mscore<h[j].mscore)</p><p>  k=remember[i];remember[i]=remember[j];remember[j]=k;</p><p>  5. 程序使

73、用及說明</p><p>  本程序的運(yùn)行環(huán)境為Microsoft Visual C++6.0,在進(jìn)入該程序軟件打開文檔,然后對(duì)本程序進(jìn)行調(diào)試,調(diào)試完畢,用戶可根據(jù)需求從主菜單選擇相應(yīng)的功能,</p><p>  用戶根據(jù)窗口的提示進(jìn)行操作,依自己的需求選擇相應(yīng)序號(hào)調(diào)用功能函數(shù)對(duì)用戶需求進(jìn)行單獨(dú)運(yùn)算。</p><p><b>  6. 測(cè)試結(jié)果</b

74、></p><p>  軟件測(cè)試是軟件生存期中的一個(gè)重要階段,是軟件質(zhì)量保證的關(guān)鍵步驟從用戶的角度來看,普遍希望通過軟件測(cè)試暴露軟件中隱藏的錯(cuò)誤和缺陷,所以軟件測(cè)試應(yīng)該是“為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程”。或者說,軟件測(cè)試應(yīng)該根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)一批測(cè)試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測(cè)試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤或缺陷。過度測(cè)試則會(huì)浪費(fèi)許多寶貴的資源。到

75、測(cè)試后期,即使找到了錯(cuò)誤,然而付出了過高的代價(jià)。</p><p><b>  圖5 信息的錄入</b></p><p>  圖6 參賽學(xué)校信息統(tǒng)計(jì)輸出</p><p>  圖7 學(xué)校成績排序輸出</p><p><b>  圖8 查詢輸出</b></p><p><b

76、>  7. 總結(jié)</b></p><p>  經(jīng)過數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)時(shí)間學(xué)習(xí),我對(duì)數(shù)據(jù)結(jié)構(gòu)有了更進(jìn)一步的認(rèn)識(shí)和了解,但在實(shí)踐的過程中,也發(fā)現(xiàn)自己很多不足之處。但是在課程設(shè)計(jì)的過程中,雖然遇到了很多問題,但最終差不多也都解決了。我發(fā)現(xiàn)在實(shí)踐過程中出現(xiàn)的錯(cuò)誤有的時(shí)候只是一些很小的邏輯錯(cuò)誤,表明在整個(gè)過程中不夠細(xì)心。另外,這次的課程設(shè)計(jì),我們是兩個(gè)人合作完成的,多個(gè)人思考多個(gè)力量,在整個(gè)過程中,我們互相

77、幫助,能更好更快地解決了我們面臨的難題。另外,由于此次課程設(shè)計(jì)用到數(shù)據(jù)文件的知識(shí),而這些知識(shí)課堂上學(xué)的很少,所以需要我們自學(xué)一些有關(guān)知識(shí),所以對(duì)一些函數(shù)的應(yīng)用不太熟悉,但是經(jīng)過此次課程設(shè)計(jì),我們隊(duì)對(duì)文件的讀寫也有了更深的了解,也在一定程度上培養(yǎng)了我的自學(xué)能力。</p><p>  經(jīng)過C語言和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)比較,我發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)與C語言有很大的不同,C語言不需要考慮存儲(chǔ)結(jié)構(gòu)之類的,只需要定義個(gè)變量或數(shù)組,集中精力于

78、算法之上,而數(shù)據(jù)結(jié)構(gòu)前期的整體規(guī)劃和構(gòu)思非常重要,先確立合理的存儲(chǔ)結(jié)構(gòu),再來編寫算法,實(shí)際上一旦存儲(chǔ)結(jié)構(gòu)確立了,算法的實(shí)現(xiàn)相對(duì)來說簡單很多,難就難在如何確立合理的存儲(chǔ)結(jié)構(gòu)。</p><p><b>  8. 附錄</b></p><p><b>  源程序代碼:</b></p><p>  #include<stdi

79、o.h></p><p>  #include <process.h></p><p>  #define n0 20 /*學(xué)校最大數(shù)目*/ </p><p>  #define m0 20 /*男子項(xiàng)目最大數(shù)目*/ </p><p>  #define w0 20 /*

80、女子項(xiàng)目最大數(shù)目*/</p><p>  typedef struct</p><p><b>  { </b></p><p>  int inum; /*項(xiàng)目編號(hào)*/</p><p>  int top; /*取名次的數(shù)目*/</p><p>  int ran

81、ge[5]; /*名次*/</p><p>  int mark[5]; /*分?jǐn)?shù)*/</p><p>  }itemnode; /*存放項(xiàng)目信息*/</p><p>  typedef struct </p><p><b>  {</b></p><

82、;p>  int snum; /*學(xué)校編號(hào)*/</p><p>  int score; /*學(xué)??偡?/</p><p>  int mscore; /*男團(tuán)體總分*/</p><p>  int wscore; /*女團(tuán)體總分*/</p><p>  itemnode t[m0+w

83、0]; /*項(xiàng)目數(shù)組*/</p><p>  }snode; /*存放學(xué)校信息*/</p><p>  snode a[n0]; /* 定義一個(gè)學(xué)校數(shù)組*/</p><p>  void menu(int n,int m,int w) /*菜單函數(shù)*/ </p><p><b&g

84、t;  { </b></p><p><b>  int c;</b></p><p>  void input(int n,int m,int w);</p><p>  void output(int n,int m,int w);</p><p>  void sortput(int n,int m,i

85、nt w);</p><p>  void search(int n,int m,int w);</p><p>  printf("\t\t\t歡迎使用\t\t\t\t\n\n"); </p><p>  printf("\t\t*******1.信息輸入*******\n");</p><p>

86、  printf("\t\t*******2.統(tǒng)計(jì)輸出*******\n");</p><p>  printf("\t\t*******3.排序輸出*******\n");</p><p>  printf("\t\t*******4.信息查詢*******\n");</p><p>  printf(&

87、quot;\t\t*******0.退出系統(tǒng)*******\n\n");</p><p>  printf("\n\n");</p><p>  printf("請(qǐng)選擇要實(shí)現(xiàn)步驟的編號(hào)(0——4):");</p><p>  scanf("%d",&c);</p><p

88、><b>  switch(c)</b></p><p><b>  { </b></p><p><b>  case 1: </b></p><p>  input(n,m,w);break;</p><p><b>  case 2: </b>

89、</p><p>  output(n,m,w);break;</p><p><b>  case 3: </b></p><p>  sortput(n,m,w);break;</p><p><b>  case 4: </b></p><p>  search(n,m

90、,w);break;</p><p><b>  case 0:</b></p><p>  printf("謝謝使用,再見!\n");</p><p><b>  exit(0);</b></p><p><b>  default: </b></p

91、><p>  printf("輸入錯(cuò)誤,請(qǐng)重試!\n");</p><p>  menu(n,m,w);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void savetofile() /*信息存入

92、文件file*/</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p><b>  int i;</b></p><p>  if((fp=fopen("file.txt","w"

93、;))==NULL)</p><p><b>  {</b></p><p>  printf("不能打開文件\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  

94、for(i=0;i<n0;i++)</p><p><b>  {</b></p><p>  fwrite(&a[i],sizeof(snode),1,fp);</p><p>  fclose(fp);</p><p><b>  }</b></p><p>

95、;  fclose(fp);</p><p><b>  }</b></p><p>  void readfromfile() /*信息從文件file中取出*/</p><p><b>  {</b></p><p><b>  int i;</b></p>

96、<p><b>  FILE *fp;</b></p><p>  if((fp=fopen("file.txt","rb"))==NULL)</p><p><b>  {</b></p><p>  printf("cannot open the file

97、\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  for(i=0;i<n0;i++)</p><p>  fread(&a[i],sizeof(snode),1,fp);</p><

98、p>  fclose(fp);</p><p><b>  }</b></p><p>  void input(int n,int m,int w) /*信息輸入*/</p><p><b>  {</b></p><p>  int i,j,s,k,q=0;</p>&

99、lt;p>  for(i=0;i<n;i++)</p><p><b>  { </b></p><p>  printf("學(xué)校編號(hào):");</p><p>  scanf("%d",&a[i].snum); /*輸入學(xué)校信息*/</p>&

100、lt;p>  for(j=0;j<m+w;j++)</p><p><b>  { </b></p><p>  printf("項(xiàng)目編號(hào):");</p><p>  scanf("%d",&a[i].t[j].inum);</p><p>  printf(

101、"取名次個(gè)數(shù)(3或者5):");</p><p>  scanf("%d",&a[i].t[j].top);</p><p>  printf("獲得名次個(gè)數(shù)(1——5):");</p><p>  scanf("%d",&k);

102、 /*輸入項(xiàng)目信息*/</p><p>  for(s=0;s<k;s++)</p><p><b>  { </b></p><p>  printf("所獲名次(1——5):");</p><p>  scanf("%d",&a[i].t[j].ran

103、ge[s]); /*輸入所獲名次信息*/</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>

104、  for(i=0;i<n;i++)</p><p><b>  { </b></p><p>  a[i].score=0;</p><p>  a[i].mscore=0;</p><p>  a[i].wscore=0;</p><p>  }

105、 /*初始化分?jǐn)?shù)*/</p><p>  for(i=0;i<n;i++)</p><p>  for(j=0;j<m+w;j++)</p><p>  for(s=0;s<5;s++)</p><p><b>  { </b></p><

106、;p>  if(a[i].t[j].top==3)</p><p>  switch(a[i].t[j].range[s])</p><p><b>  {</b></p><p>  case 0: a[i].t[j].mark[s]=0; break;</p><p>  case 1: a[i].t[j].m

107、ark[s]=5; break;</p><p>  case 2: a[i].t[j].mark[s]=3; break;</p><p>  case 3: a[i].t[j].mark[s]=2; break;</p><p><b>  }</b></p><p>  else if(a[i].t[j].top=

108、=5)</p><p>  switch(a[i].t[j].range[s])</p><p><b>  {</b></p><p>  case 0: a[i].t[j].mark[s]=0; break;</p><p>  case 1: a[i].t[j].mark[s]=7; break;</p>

109、;<p>  case 2: a[i].t[j].mark[s]=5; break;</p><p>  case 3: a[i].t[j].mark[s]=3; break;</p><p>  case 4: a[i].t[j].mark[s]=2; break;</p><p>  case 5: a[i].t[j].mark[s]=1; bre

110、ak;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  printf("信息有誤!");</p><p>  printf("

111、;\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  a[i].score=a[i].score+a[i].t[j].mark[s]; /*記學(xué)??偡?/</p><p>  if(j<=m-

112、1)</p><p>  a[i].mscore=a[i].mscore+a[i].t[j].mark[s]; /*記男子團(tuán)體總分*/</p><p><b>  else</b></p><p>  a[i].wscore=a[i].wscore+a[i].t[j].mark[s]; /*記女子團(tuán)體總分*/</p>

113、<p><b>  }</b></p><p>  while(q!=1)</p><p><b>  {</b></p><p>  printf("輸入完畢!返回? 1是 2否"); /*返回菜單*/</p><p>  scanf("%d&qu

114、ot;,&q);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  printf("\n");</p><p>  savetofile();</p><p>  menu(n,m,w);&l

115、t;/p><p><b>  }</b></p><p>  void output(int n,int m,int w) /*統(tǒng)計(jì)輸出*/</p><p><b>  {</b></p><p>  readfromfile();</p><p>  int i,j,s,q

116、=0;</p><p>  for(i=0;i<n;i++) /*顯示結(jié)果*/</p><p><b>  {</b></p><p>  printf("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[i]

117、.snum,a[i].score,a[i].mscore,a[i].wscore);</p><p>  for(j=0;j<m+w;j++)</p><p><b>  {</b></p><p>  printf("項(xiàng)目編號(hào):%d 所取名次數(shù)量:%d\n",a[i].t[j].inum,a[i].t[j].top

118、);</p><p>  for(s=0;s<5;s++)</p><p><b>  {</b></p><p>  if(a[i].t[j].range[s]!=0)</p><p>  printf("名次:%d 分?jǐn)?shù):%d\n",a[i].t[j].range[s],a[i].t[j]

119、.mark[s]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  printf("

120、;\n");</p><p>  while(q!=1)</p><p><b>  {</b></p><p>  printf("統(tǒng)計(jì)完畢!返回? 1是 2否"); /*返回菜單*/</p><p>  scanf("%d",&q);</p>

121、;<p>  printf("\n");</p><p><b>  }</b></p><p>  printf("\n");</p><p>  menu(n,m,w);</p><p><b>  }</b></p><

122、p>  void sortput(int n,int m,int w) /*排序輸出函數(shù)*/ </p><p><b>  {</b></p><p>  readfromfile();</p><p>  int c,i,j,k,q=0;</p><p>  int temp[n0];

123、</p><p>  printf("\t**************排序輸出系統(tǒng)**************\n\n");</p><p>  printf("\t\t****1.按學(xué)校編號(hào)輸出****\n");</p><p>  printf("\t\t****2.按學(xué)??偡州敵?***\n");&l

124、t;/p><p>  printf("\t\t****3.按男團(tuán)總分輸出****\n");</p><p>  printf("\t\t****4.按女團(tuán)總分輸出****\n");</p><p><b>  do</b></p><p><b>  {</b>&

125、lt;/p><p>  printf("請(qǐng)選擇要實(shí)現(xiàn)功能的編號(hào)(1——4):");</p><p>  scanf("%d",&c);</p><p><b>  switch(c)</b></p><p><b>  {</b></p>&

126、lt;p><b>  case 1: </b></p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p><b>  { </b></p><p> 

127、 for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].snum>a[j].snum)</p><p><b>  { </b></p><p>  k=temp[i];</p><p>  temp[i]=temp[j];</p><p>  temp

128、[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  printf(&quo

129、t;學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按學(xué)校編號(hào)輸出*/</p><p>  break;

130、 </p><p>  case 2: </p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p><b>  { </b></p><p&

131、gt;  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].score<a[j].score)</p><p><b>  { </b></p><p>  k=temp[i];</p><p>  temp[i]=temp[j];</p><p>

132、  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  print

133、f("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按學(xué)校總分輸出*/</p><p>  break;

134、 </p><p>  case 3: </p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p><b>  {

135、</b></p><p>  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].mscore<a[j].mscore)</p><p><b>  { </b></p><p>  k=temp[i];</p><p>  temp[i]

136、=temp[j];</p><p>  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b&g

137、t;</p><p>  printf("學(xué)校編號(hào):%d 學(xué)??偡?%d 男團(tuán)總分:%d 女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按男團(tuán)總分輸出*

138、/</p><p><b>  break; </b></p><p>  case 4: </p><p>  for(i=0;i<n;i++)</p><p>  temp[i]=i;</p><p>  for(i=0;i<n;i++)</p><p&g

139、t;<b>  { </b></p><p>  for(j=i+1;j<n;j++)</p><p>  if(a[temp[i]].wscore<a[j].wscore)</p><p><b>  { </b></p><p>  k=temp[i];</p><

140、;p>  temp[i]=temp[j];</p><p>  temp[j]=k;</p><p><b>  }</b></p><p>  } /* 用冒泡排序方法排序*/</p><p>  for(i=0;i<n;i++)</p><p><b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論