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

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計(jì)</b></p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  院系:自動(dòng) 專業(yè):自動(dòng) 班級(jí): 202</p><p>  學(xué)號(hào): 題目:學(xué)生成績管理1</p><p><b>  一、課程設(shè)計(jì)時(shí)間</b&

2、gt;</p><p>  2011~12第1學(xué)期第4周,共計(jì)1周,20學(xué)時(shí)。</p><p><b>  二、課程設(shè)計(jì)內(nèi)容</b></p><p>  用C語言編寫軟件完成以下任務(wù):</p><p>  一個(gè)文本文件(file15.txt,由指導(dǎo)教師提供)存儲(chǔ)了若干位同學(xué)的數(shù)學(xué)成績,文件中每行的內(nèi)容按照順序?yàn)椋簩W(xué)號(hào),班

3、級(jí),數(shù)學(xué)成績,姓名。請完成以下問題:</p><p>  1 將文件中的內(nèi)容全部顯示到窗體,并統(tǒng)計(jì)總?cè)藬?shù);</p><p>  2 統(tǒng)計(jì)數(shù)學(xué)成績的平均分;</p><p>  3 統(tǒng)計(jì)各個(gè)班級(jí)的平均分。</p><p><b>  三、課程設(shè)計(jì)要求</b></p><p><b>  1

4、. 程序質(zhì)量:</b></p><p>  貫徹結(jié)構(gòu)化的程序設(shè)計(jì)思想。</p><p>  用戶界面友好,功能明確,操作方便。</p><p>  用戶界面中的菜單至少應(yīng)包括“打印全部,并統(tǒng)計(jì)總?cè)藬?shù)”、“計(jì)算總平均分”、“計(jì)算各個(gè)班的平均分”、“退出”4項(xiàng)。</p><p>  代碼應(yīng)適當(dāng)縮進(jìn),并給出必要的注釋,以增強(qiáng)程序的可讀性

5、。</p><p>  2. 課程設(shè)計(jì)說明書:</p><p>  課程結(jié)束后,上交課程設(shè)計(jì)說明書和源程序。課程設(shè)計(jì)說明書的格式和內(nèi)容參見提供的模板。</p><p>  四、指導(dǎo)教師和學(xué)生簽字</p><p>  指導(dǎo)教師:________ 學(xué)生簽名:________</p><p><b>  五、說

6、明書成績</b></p><p><b>  六、教師評(píng)語</b></p><p><b>  目錄</b></p><p><b>  一、需求分析1</b></p><p><b>  二、設(shè)計(jì)分析1</b></p>&l

7、t;p>  三、主要界面截圖1</p><p><b>  四、技術(shù)要點(diǎn)5</b></p><p><b>  五、個(gè)人總結(jié)9</b></p><p><b>  六、參考文獻(xiàn)10</b></p><p><b>  七、源程序11</b>

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

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

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

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

12、說明;</p><p><b>  1.定義函數(shù)</b></p><p>  首先要知道讀取數(shù)據(jù)的文件,定義一個(gè)文件指針,把所需的數(shù)據(jù)讀入到程序中,同時(shí)定義一個(gè)l,每讀入一個(gè),l 加一來統(tǒng)計(jì)學(xué)生數(shù)目;具體程序如下:</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 請輸入您要選擇的操作序號(hào),按回車鍵確認(rè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("輸入錯(cuò)誤,請輸入列表中存在的序號(hào)!\n ");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void me

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

20、/p><p>  printf("\n 3 計(jì)算各個(gè)班平均分");</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);/*從文件中讀出所有學(xué)生信息*/</p><p>  printf(" *****************所有的學(xué)生信息如下*****************");</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(" 總?cè)藬?shù)為: ");<

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

28、均分,只需將所有同學(xué)的成績相加,然后除以總?cè)藬?shù),從而得到總平均分?jǐn)?shù)。</p><p>  在此需對單獨(dú)的模塊進(jìn)行引入,再.定義文件指針,打開讀入數(shù)據(jù)。</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.計(jì)算各班平均分</b></p><p>  把結(jié)構(gòu)體中的班級(jí)按從大到小排序,然后取第一個(gè)與后面的比較,當(dāng)與第一個(gè)不同是取出,它與后面的繼續(xù)比較,依次下去,即可的班級(jí)和人數(shù)。計(jì)算各班平均分是用這些跟結(jié)構(gòu)體中的班級(jí)比較,相同的數(shù)學(xué)成績相加,最后除以各班人數(shù)即可得到。</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("班級(jí)%s 平均分%d\n",ban[i],ava[i]/ren[i]);</p><p><b>  }</b></p><p><b>  五、個(gè)人總結(jié)</b></p><p>  在這幾天的課

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

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

42、化,分成每一個(gè)小部分,這樣耐心的去做,到最后就會(huì)得到滿意的大程序!</p><p>  當(dāng)看到自己編寫的程序正常準(zhǔn)確運(yùn)行的時(shí)候,心里有種滿足感,成就感!很開心!同時(shí)也要感謝老師和同學(xué)的幫助!</p><p><b>  六、參考文獻(xiàn)</b></p><p>  1 譚浩強(qiáng).C程序設(shè)計(jì).北京:清華大學(xué)出版社,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 請輸入您要選擇的操作序號(hào),按回車鍵確認(rè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("輸入錯(cuò)誤,請輸入列表中存在的序號(hào)!\n ");</p><p><b>  }</b></p

49、><p><b>  }</b></p><p><b>  }</b></p><p>  void menu()</p><p>  {printf("**************** 數(shù)據(jù)統(tǒng)計(jì) *****************");</p><p> 

50、 printf("\n 1 打印全部,并統(tǒng)計(jì)人數(shù)");</p><p>  printf(" 2 計(jì)算總平均分");</p><p>  printf("\n 3 計(jì)算各個(gè)班平均分");</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);/*從文件中讀出所有學(xué)生信息*/</p>

56、<p>  printf(" *****************所有的學(xué)生信息如下*****************");</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(" 總?cè)藬?shù)為: ");</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("班級(jí)%s 平均分%d\n",ban[i],ava[i]/ren[i]);</p><p><

溫馨提示

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

評(píng)論

0/150

提交評(píng)論