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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、;/p><p>  可以輸入各個項目的前三名或前五名的成績;</p><p><b>  能統(tǒng)計各學(xué)??偡?;</b></p><p>  可以按學(xué)校編號、學(xué)??偡帧⒛信畧F體總分排序輸出;</p><p>  可以按學(xué)校編號查詢學(xué)校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W(xué)校。 </p><p&

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

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

9、;<b>  1需求分析1</b></p><p><b>  2.概要設(shè)計1</b></p><p><b>  3. 詳細設(shè)計3</b></p><p>  3.1 數(shù)據(jù)結(jié)構(gòu)定義3</p><p>  3.2統(tǒng)計輸出模塊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. 測試結(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)主要是運動會分數(shù)統(tǒng)計方案設(shè)計。根據(jù)具體情況選擇輸入?yún)⒓禹椖康哪信悇e和取成績名次類別;最后選擇輸入名次。運動會分數(shù)統(tǒng)計方案適合采用結(jié)構(gòu)體數(shù)組,為了實現(xiàn)系統(tǒng)功能,主要應(yīng)實現(xiàn)以下幾部分:程序以用戶和計算機對

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

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

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

15、建信息部分,該部分需輸入學(xué)校編號,項目編號,取得的名次,以及哪些名次;算法部分,得到排序結(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)計結(jié)果</b></p><p>  將輸入的各學(xué)校運動會成績排序輸出。</p><p><b>  3. 詳細設(shè)計</b></p><p>  3.1 數(shù)據(jù)結(jié)構(gòu)定義:</p><p> 

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

18、<p>  int mark[5]; /*分數(shù)*/</p><p>  }itemnode; /*存放項目信息*/</p><p>  typedef struct </p><p><b>  {</b></p><p>  int snum; /*

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

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

21、s;先初始化儲存分數(shù)的數(shù)組各元素,for循環(huán)實現(xiàn)各學(xué)校信息的輸入,包括學(xué)校編號、項目編號、取前3名or前5名、獲得幾個名次,使用switch語句實現(xiàn)對輸入的各個名次賦予對應(yīng)的分數(shù)。</p><p>  void output(int n,int m,int w) /*統(tǒng)計輸出*/</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é)校編號:%d 學(xué)??偡?%d 男團總分:%d 女團總分:%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("項目編號:%

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 分數(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)計完畢!返回? 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>  比賽成績輸出模塊實現(xiàn)按要求輸出相應(yīng)的數(shù)據(jù)。有以下輸出選項:按學(xué)校編號輸出、按學(xué)校總分輸出、按男團總分輸出、按女團總分輸出。for循環(huán)實現(xiàn)輸出各個方式輸出的每個數(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é)校編號輸出****\n");</p><p>  printf("\t\t****2.按學(xué)校總分輸出***

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

32、 {</b></p><p>  printf("請選擇要實現(xiàn)功能的編號(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é)校編號:%d 學(xué)??偡?%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按學(xué)校編號輸出*/</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é)校編號:%d 學(xué)??偡?%d 男團總分:%d 女團總分:%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é)校編號:%d 學(xué)校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按男團總分輸出*/<

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é)校編號:%d 學(xué)??偡?%d 男團總分:%d 女團總分:%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("輸入錯誤,請重試!\n");</p><p><b>  }</b></p&g

50、t;<p>  printf("請選擇 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>  此模塊實現(xiàn)查詢的兩種方式的選擇,當i>n時輸出錯誤:這個學(xué)校沒有參加此次運動會! 否則,輸入項目編號,如果j>m+w||j==0,輸出此次運動會沒有這個項目。否則,使用for循環(huán)輸出相關(guān)數(shù)據(jù),從而實現(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é)校編號查詢****\n");</p><p>  printf("\t\t****2.按項目編號查詢****\n");</p><p><b>  do</b></p><p><b> 

55、 {</b></p><p>  k=-1;d=-1;l=-1;</p><p>  printf("請選擇要實現(xiàn)功能的編號(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é)校編號:"); /*查找學(xué)校編號下標*/</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("錯誤:這個學(xué)校沒有參加此次運動會!\n");</p><p><b>  else</b></p><p><b>  {</b></p><p>  printf(&qu

59、ot;要查詢的項目編號:"); /*查找項目編號下標*/</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("此次運動會沒有這個項目\n");</p><p&g

61、t;  else /*顯示結(jié)果*/</p><p><b>  { </b></p><p>  printf("這個項目取前 %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("要查詢的項目編號:"); /*查找項目編號下標*/</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("此次運動會沒有這個項目\n");</p><p>  else /*顯示結(jié)果*/</p><p><b>  {</b></p><p>  printf

66、("該項目取前 %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、號:%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("輸入錯誤,請重試!\n");</p><p><b>  }</b></p><p>  printf("請選擇 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)試過程主要是運行編制好的程序,然后遇到錯誤后根據(jù)系統(tǒng)的提示,找到相關(guān)的問題所在。本系統(tǒng)調(diào)試過程中遇到的主要問題、原因和解決方法如下面介紹。</p><p>  調(diào)試過程中出現(xiàn)

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

72、[j].range[s]);</p><p> ?。?)在輸出模塊不能將全部的學(xué)校信息輸出,屬于算法編寫錯誤,正確的程序應(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>  本程序的運行環(huán)境為Microsoft Visual C++6.0,在進入該程序軟件打開文檔,然后對本程序進行調(diào)試,調(diào)試完畢,用戶可根據(jù)需求從主菜單選擇相應(yīng)的功能,</p><p>  用戶根據(jù)窗口的提示進行操作,依自己的需求選擇相應(yīng)序號調(diào)用功能函數(shù)對用戶需求進行單獨運算。</p><p><b>  6. 測試結(jié)果</b

74、></p><p>  軟件測試是軟件生存期中的一個重要階段,是軟件質(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)程序錯誤或缺陷。過度測試則會浪費許多寶貴的資源。到

75、測試后期,即使找到了錯誤,然而付出了過高的代價。</p><p><b>  圖5 信息的錄入</b></p><p>  圖6 參賽學(xué)校信息統(tǒng)計輸出</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è)計時間學(xué)習(xí),我對數(shù)據(jù)結(jié)構(gòu)有了更進一步的認識和了解,但在實踐的過程中,也發(fā)現(xiàn)自己很多不足之處。但是在課程設(shè)計的過程中,雖然遇到了很多問題,但最終差不多也都解決了。我發(fā)現(xiàn)在實踐過程中出現(xiàn)的錯誤有的時候只是一些很小的邏輯錯誤,表明在整個過程中不夠細心。另外,這次的課程設(shè)計,我們是兩個人合作完成的,多個人思考多個力量,在整個過程中,我們互相

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

78、算法之上,而數(shù)據(jù)結(jié)構(gòu)前期的整體規(guī)劃和構(gòu)思非常重要,先確立合理的存儲結(jié)構(gòu),再來編寫算法,實際上一旦存儲結(jié)構(gòu)確立了,算法的實現(xiàn)相對來說簡單很多,難就難在如何確立合理的存儲結(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 /*男子項目最大數(shù)目*/ </p><p>  #define w0 20 /*

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

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

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

83、0]; /*項目數(shù)組*/</p><p>  }snode; /*存放學(xué)校信息*/</p><p>  snode a[n0]; /* 定義一個學(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)計輸出*******\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("請選擇要實現(xiàn)步驟的編號(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("輸入錯誤,請重試!\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é)校編號:");</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("項目編號:");</p><p>  scanf("%d",&a[i].t[j].inum);</p><p>  printf(

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

102、 /*輸入項目信息*/</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、 /*初始化分數(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]; /*記男子團體總分*/</p><p><b>  else</b></p><p>  a[i].wscore=a[i].wscore+a[i].t[j].mark[s]; /*記女子團體總分*/</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)計輸出*/</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é)校編號:%d 學(xué)??偡?%d 男團總分:%d 女團總分:%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("項目編號:%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 分數(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)計完畢!返回? 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é)校編號輸出****\n");</p><p>  printf("\t\t****2.按學(xué)??偡州敵?***\n");&l

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

125、lt;/p><p>  printf("請選擇要實現(xiàn)功能的編號(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é)校編號:%d 學(xué)校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按學(xué)校編號輸出*/</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é)校編號:%d 學(xué)??偡?%d 男團總分:%d 女團總分:%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é)校編號:%d 學(xué)校總分:%d 男團總分:%d 女團總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);</p><p>  } /*按男團總分輸出*

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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論