c語言課程設計---學生成績管理1_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計</b></p><p><b>  課程設計任務書</b></p><p>  院系:自動 專業(yè):自動 班級: 202</p><p>  學號: 題目:學生成績管理1</p><p><b>  一、課程設計時間</b&

2、gt;</p><p>  2011~12第1學期第4周,共計1周,20學時。</p><p><b>  二、課程設計內容</b></p><p>  用C語言編寫軟件完成以下任務:</p><p>  一個文本文件(file15.txt,由指導教師提供)存儲了若干位同學的數學成績,文件中每行的內容按照順序為:學號,班

3、級,數學成績,姓名。請完成以下問題:</p><p>  1 將文件中的內容全部顯示到窗體,并統計總人數;</p><p>  2 統計數學成績的平均分;</p><p>  3 統計各個班級的平均分。</p><p><b>  三、課程設計要求</b></p><p><b>  1

4、. 程序質量:</b></p><p>  貫徹結構化的程序設計思想。</p><p>  用戶界面友好,功能明確,操作方便。</p><p>  用戶界面中的菜單至少應包括“打印全部,并統計總人數”、“計算總平均分”、“計算各個班的平均分”、“退出”4項。</p><p>  代碼應適當縮進,并給出必要的注釋,以增強程序的可讀性

5、。</p><p>  2. 課程設計說明書:</p><p>  課程結束后,上交課程設計說明書和源程序。課程設計說明書的格式和內容參見提供的模板。</p><p>  四、指導教師和學生簽字</p><p>  指導教師:________ 學生簽名:________</p><p><b>  五、說

6、明書成績</b></p><p><b>  六、教師評語</b></p><p><b>  目錄</b></p><p><b>  一、需求分析1</b></p><p><b>  二、設計分析1</b></p>&l

7、t;p>  三、主要界面截圖1</p><p><b>  四、技術要點5</b></p><p><b>  五、個人總結9</b></p><p><b>  六、參考文獻10</b></p><p><b>  七、源程序11</b>

8、</p><p><b>  需求分析</b></p><p>  通過分析可知,此程序是對表格的信息的統計。很明顯程序可分為三個部分:即打印并統計數據,計算總平均分,計算各個平均分。在此只須構件若干個函數進行編程設計。</p><p><b>  二、設計分析</b></p><p><b&

9、gt;  1、程序總體結構圖</b></p><p><b>  圖1程序總體結構圖</b></p><p>  2.具體功能函數流程圖 </p><p>  讀取學生數據reads</p><p>  圖2. 讀取學生數據</p><p>  (2)顯示所有學生信息show</

10、p><p>  圖3. 顯示所有學生信息</p><p>  (3).計算總平均分average</p><p><b>  圖4.計算總平均分</b></p><p>  (4).各班平均分aver</p><p><b>  圖5.各班平均分</b></p>&

11、lt;p><b>  主要界面截圖</b></p><p><b>  程序主界面截圖</b></p><p><b>  技術要點</b></p><p>  本程序有主函數和三個自定義的函數組成即main和show,average,aver。這些是整個程序中最核心的部分,以下便是對這些函數的

12、說明;</p><p><b>  1.定義函數</b></p><p>  首先要知道讀取數據的文件,定義一個文件指針,把所需的數據讀入到程序中,同時定義一個l,每讀入一個,l 加一來統計學生數目;具體程序如下:</p><p>  #include<stdio.h></p><p>  #include&

13、lt;string.h></p><p>  #include"stdlib.h"</p><p>  #define N 40</p><p>  struct student</p><p>  {char num[20];</p><p>  char cla[10];</p>

14、;<p>  int math;</p><p>  char name[10];</p><p><b>  };</b></p><p>  void menu();</p><p>  void show();</p><p>  void average();</p&

15、gt;<p>  void aver();</p><p>  void main()</p><p><b>  {</b></p><p><b>  int n;</b></p><p><b>  while(1)</b></p><p

16、><b>  { </b></p><p><b>  menu();</b></p><p>  printf("\n 請輸入您要選擇的操作序號,按回車鍵確認:");</p><p>  scanf("%d",&n);</p><p><

17、b>  switch(n)</b></p><p>  {case 1: show();break;</p><p>  case 2: average();break;</p><p>  case 3: aver();break;</p><p>  case 4: exit(0);break;</p>&

18、lt;p>  default: printf("輸入錯誤,請輸入列表中存在的序號!\n ");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void me

19、nu()</p><p>  {printf("**************** 數據統計 *****************");</p><p>  printf("\n 1 打印全部,并統計人數");</p><p>  printf(" 2 計算總平均分");<

20、/p><p>  printf("\n 3 計算各個班平均分");</p><p>  printf("\n 4 退出");</p><p><b>  }</b></p><p>  void reads(struct student stu[N],int

21、 *n)</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p><b>  int i=0;</b></p><p>  if((fp=fopen("d:\\file15.txt","r&q

22、uot;))==NULL)</p><p>  { printf("文件打開失?。n");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p>&l

23、t;p><b>  {</b></p><p>  for(i=0;!feof(fp);i++)</p><p>  fscanf(fp,"%s%s%d%s",stu[i].num,stu[i].cla,&stu[i].math,&stu[i].name);</p><p><b>  }&l

24、t;/b></p><p><b>  *n=i;</b></p><p>  fclose(fp);</p><p><b>  }</b></p><p>  void show()</p><p>  {struct student stu[N];</p&g

25、t;<p><b>  int i,n;</b></p><p>  reads(stu,&n);/*從文件中讀出所有學生信息*/</p><p>  printf(" *****************所有的學生信息如下*****************");</p><p>  for(i

26、=0;i<n;i++)</p><p>  printf("\n%s %s %d %s\n",stu[i].num,stu[i].cla,stu[i].math,stu[i].name);</p><p>  printf("\n");</p><p>  printf(" 總人數為: ");<

27、;/p><p>  printf("%d\n",n);</p><p>  printf("\n\n");</p><p><b>  }</b></p><p><b>  2.計算總平均分</b></p><p>  求全部同學的數學平

28、均分,只需將所有同學的成績相加,然后除以總人數,從而得到總平均分數。</p><p>  在此需對單獨的模塊進行引入,再.定義文件指針,打開讀入數據。</p><p>  void average()</p><p><b>  { </b></p><p>  struct student stu[N];</p&

29、gt;<p>  int i,n, average,temp=0;</p><p>  reads(stu,&n);</p><p>  for(i=0;i<n-1;i++)</p><p>  temp=temp+stu[i].math;</p><p>  average=temp/(n-1);</p&g

30、t;<p>  printf("\n");</p><p>  printf(" 總平均分為: ");</p><p>  printf("%d\n",average);</p><p>  printf("\n\n");</p><p><

31、b>  }</b></p><p><b>  3.計算各班平均分</b></p><p>  把結構體中的班級按從大到小排序,然后取第一個與后面的比較,當與第一個不同是取出,它與后面的繼續(xù)比較,依次下去,即可的班級和人數。計算各班平均分是用這些跟結構體中的班級比較,相同的數學成績相加,最后除以各班人數即可得到。</p><p&g

32、t;<b>  具體程序如下:</b></p><p>  void aver()</p><p><b>  {</b></p><p>  struct student stu[N];</p><p>  char ban[N][10];</p><p>  int av

33、a[N],ren[N],m=0,i,j,n;</p><p>  reads(stu,&n);</p><p>  strcpy(ban[0],stu[0].cla);</p><p><b>  ren[0]=1;</b></p><p>  ava[0]=stu[0].math;</p>&l

34、t;p><b>  i=n-1;</b></p><p>  while(i>0)</p><p>  {for(int j=0;j<=m;j++)</p><p>  {if(strcmp(ban[j],stu[i].cla)==0)</p><p><b>  {</b&

35、gt;</p><p>  ava[j]+=stu[i].math;</p><p>  ren[j]++; </p><p>  i--; </p><p>  break; </p><p><b>  

36、}</b></p><p><b>  else</b></p><p><b>  if(j!=m)</b></p><p><b>  continue;</b></p><p>  else </p><

37、p>  {m++; </p><p>  strcpy(ban[m],stu[i].cla);</p><p>  ren[m]=1; </p><p>  ava[m]=stu[i].math; </p><p><b>

38、;  i--; </b></p><p>  break; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p> 

39、 for(i=0;i<=m;i++)</p><p>  { printf("班級%s 平均分%d\n",ban[i],ava[i]/ren[i]);</p><p><b>  }</b></p><p><b>  五、個人總結</b></p><p>  在這幾天的課

40、程設計過程中,我學到了一些編寫大程序的基本步驟.課設之后我深深的感覺:上學期學習的C語言課,雖然學到很多東西,但是要編寫一個長程序,自己腦海中的思路不清晰,其中最主要的主干就明確不下來!我認為那是自己沒有更好的理解和應用C語言的一些語句。在幾天的課設中,經過自己的努力,我學習并認識到:首先,一個程序必須有一個明確的程序主干和清晰的編程思路,具體下來就是一個大的程序是由各種小程序組成,最后用菜單函數把它組成一個整體,也就實現了所想要的各個

41、功能。此外,在編程的過程中每一個細節(jié)都得做好,有時候一個標點或是一個字母都會影響程序的正常運行。我從中感悟做任何事情都要把最基本知識學扎實,要思路縝密,細心些,這樣在以后的學習中才會有所的收獲。</p><p>  總結:在完成一個大程序過程中要明確思路,找出主干。中心思想明確之后,就要耐心的思考·分析問題,踏踏實實的完成每一步的程序(結構體.文件.函數調用),雖然大程序是非常復雜的,只要我們將事情簡單

42、化,分成每一個小部分,這樣耐心的去做,到最后就會得到滿意的大程序!</p><p>  當看到自己編寫的程序正常準確運行的時候,心里有種滿足感,成就感!很開心!同時也要感謝老師和同學的幫助!</p><p><b>  六、參考文獻</b></p><p>  1 譚浩強.C程序設計.北京:清華大學出版社,2005</p><

43、;p><b>  七、源程序</b></p><p>  #include<stdio.h></p><p>  #include<string.h></p><p>  #include"stdlib.h"</p><p>  #define N 40</p>

44、;<p>  struct student</p><p>  {char num[20];</p><p>  char cla[10];</p><p>  int math;</p><p>  char name[10];</p><p><b>  };</b></

45、p><p>  void menu();</p><p>  void show();</p><p>  void average();</p><p>  void aver();</p><p>  void main()</p><p><b>  {</b></

46、p><p><b>  int n;</b></p><p><b>  while(1)</b></p><p><b>  { </b></p><p><b>  menu();</b></p><p>  printf(&quo

47、t;\n 請輸入您要選擇的操作序號,按回車鍵確認:");</p><p>  scanf("%d",&n);</p><p><b>  switch(n)</b></p><p>  {case 1: show();break;</p><p>  case 2: average(

48、);break;</p><p>  case 3: aver();break;</p><p>  case 4: exit(0);break;</p><p>  default: printf("輸入錯誤,請輸入列表中存在的序號!\n ");</p><p><b>  }</b></p

49、><p><b>  }</b></p><p><b>  }</b></p><p>  void menu()</p><p>  {printf("**************** 數據統計 *****************");</p><p> 

50、 printf("\n 1 打印全部,并統計人數");</p><p>  printf(" 2 計算總平均分");</p><p>  printf("\n 3 計算各個班平均分");</p><p>  printf("\n 4 退出

51、");</p><p><b>  }</b></p><p>  void reads(struct student stu[N],int *n)</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p>

52、<p><b>  int i=0;</b></p><p>  if((fp=fopen("d:\\file15.txt","r"))==NULL)</p><p>  { printf("文件打開失?。n");</p><p><b>  return;<

53、;/b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  for(i=0;!feof(fp);i++)</p><p>  fscanf(fp,&qu

54、ot;%s%s%d%s",stu[i].num,stu[i].cla,&stu[i].math,&stu[i].name);</p><p><b>  }</b></p><p><b>  *n=i;</b></p><p>  fclose(fp);</p><p>

55、<b>  }</b></p><p>  void show()</p><p>  {struct student stu[N];</p><p><b>  int i,n;</b></p><p>  reads(stu,&n);/*從文件中讀出所有學生信息*/</p>

56、<p>  printf(" *****************所有的學生信息如下*****************");</p><p>  for(i=0;i<n;i++)</p><p>  printf("\n%s %s %d %s\n",stu[i].num,stu[i].cla,stu[i].math,stu[

57、i].name);</p><p>  printf("\n");</p><p>  printf(" 總人數為: ");</p><p>  printf("%d\n",n);</p><p>  printf("\n\n");</p><

58、;p><b>  }</b></p><p>  void average()</p><p><b>  {</b></p><p>  struct student stu[N];</p><p>  int i,n,average,temp=0;</p><p>

59、  reads(stu,&n);</p><p>  for(i=0;i<n-1;i++)</p><p>  temp=temp+stu[i].math;</p><p>  average=temp/(n-1);</p><p>  printf("\n");</p><p>  

60、printf(" 總平均分為: ");</p><p>  printf("%d\n",average);</p><p>  printf("\n\n");</p><p><b>  }</b></p><p>  void aver()</p>

61、;<p><b>  {</b></p><p>  struct student stu[N];</p><p>  char ban[N][10];</p><p>  int ava[N],ren[N],m=0,i,j,n;</p><p>  reads(stu,&n);</p>

62、<p>  strcpy(ban[0],stu[0].cla);</p><p><b>  ren[0]=1;</b></p><p>  ava[0]=stu[0].math;</p><p><b>  i=n-1;</b></p><p>  while(i>0)&l

63、t;/p><p><b>  {</b></p><p>  for(int j=0;j<=m;j++)</p><p><b>  {</b></p><p>  if(strcmp(ban[j],stu[i].cla)==0)</p><p><b>  

64、{</b></p><p>  ava[j]+=stu[i].math;</p><p>  ren[j]++; </p><p>  i--; </p><p>  break; </p><p>

65、<b>  }</b></p><p><b>  else</b></p><p><b>  if(j!=m)</b></p><p><b>  continue;</b></p><p>  else </

66、p><p><b>  {</b></p><p>  m++; </p><p>  strcpy(ban[m],stu[i].cla);</p><p>  ren[m]=1; </p><p>  av

67、a[m]=stu[i].math; </p><p><b>  i--; </b></p><p>  break; </p><p><b>  }</b></p><p><b>  }</b></p>

68、<p><b>  }</b></p><p>  for(i=0;i<=m;i++)</p><p><b>  { </b></p><p>  printf("班級%s 平均分%d\n",ban[i],ava[i]/ren[i]);</p><p><

溫馨提示

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

評論

0/150

提交評論