課程設計報告-學生成績管理系統(tǒng)_第1頁
已閱讀1頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《高級語言程序設計》</p><p><b>  課程設計報告</b></p><p>  課題名稱: 學生成績管理管理 </p><p><b>  電子信息學院</b></p><p>  2015年 07 月 10 日</p><p&

2、gt;<b>  目 錄</b></p><p><b>  1 課題分析1</b></p><p>  1.1 問題描述1</p><p> ?。?)錄入每個學生的學號、姓名和各科考試成績1</p><p> ?。?)計算每門課程的總分和平均分1</p><p>

3、;  (3)計算每個學生的總分和平均分1</p><p> ?。?)按每個學生的總分由高到低排出名次表1</p><p> ?。?)按每個學生的總分由低到高排出名次表1</p><p> ?。?)按學號由小到大排出成績表1</p><p> ?。?)按姓名的字典順序排出成績表1</p><p>  

4、(8)按學號查詢學生排名及其考試成績1</p><p> ?。?)按姓名查詢學生排名及其考試成績1</p><p> ?。?0)按優(yōu)秀(90-100)、良好(89-89)、中等(70-79)、及格(60-69)、不及格(0-59)5個類別,對每門課程分別統(tǒng)計每個類別的人數(shù)以及所占的百分比1</p><p> ?。?1)輸出每個學生的學號、姓名、各科考試

5、成績,以及每門課程的總分和平均分1</p><p> ?。?2)將每個學生的記錄信息寫入文件1</p><p> ?。?3)從文件中讀出每個學生的記錄信息并顯示1</p><p>  1.2 功能需求分析1</p><p><b>  2 系統(tǒng)設計3</b></p><p>  2.

6、1 數(shù)據(jù)結構設計3</p><p>  2.2 函數(shù)設計與說明3</p><p>  2.3 菜單設計3</p><p>  2.4 文件清單與說明4</p><p><b>  3 系統(tǒng)實現(xiàn)5</b></p><p>  3.1 管理系統(tǒng)菜單5</p><p>

7、;  3.2 學生成績排名5</p><p>  3.3 學生成績統(tǒng)計9</p><p>  4 測試數(shù)據(jù)與測試過程記錄10</p><p>  4.1 菜單測試10</p><p>  4.2 系統(tǒng)功能測試13</p><p>  4.2.1管理系統(tǒng)菜單13</p><p>  4

8、.2.2輸入學生信息14</p><p>  錄入每個學生的學號、姓名和各科考試成績14</p><p>  4.2.3計算總分和平均分14</p><p>  計算每門課程的總分和平均分測試14</p><p>  計算每個學生的總分和平均分測試15</p><p>  4.2.4學生成績排名16<

9、/p><p>  按每個學生總分由高到低排名16</p><p>  按每個學生總分由低到高排名16</p><p>  按學號由大到小排名17</p><p>  按姓名的在字典順序排名18</p><p>  4.2.5查詢學生成績18</p><p>  按學號查詢學生排名及其考試成

10、績測試18</p><p>  按姓名查詢學生排名及其考試成績測試19</p><p>  4.2.6學生成績統(tǒng)計20</p><p>  各等級學生的百分比20</p><p>  4.2.6學生信息的輸入輸出20</p><p>  輸出每個學生的學號、姓名、各科考試成績,以及每門課程的總分和平均分測試

11、20</p><p>  將每個學生的記錄信息寫入文件測試21</p><p>  從文件中讀出每個學生的記錄信息并顯示測試22</p><p>  5 課程設計遇到的問題及解決方法22</p><p>  6 課程設計總結23</p><p><b>  參考文獻23</b></

12、p><p><b>  附錄源代碼23</b></p><p><b>  1 課題分析</b></p><p><b>  1.1 問題描述</b></p><p>  某班有最多不超過30人(具體人數(shù)鍵盤輸入)參加期末考試,考試科目為數(shù)學(MT)、英語(EN)和物理(PH)。

13、學生成績管理系統(tǒng)是一個非常實用的程序,如果能夠把用戶輸入的數(shù)據(jù)存盤,下次運行時讀出,就更有用了。</p><p>  編程實現(xiàn)如下菜單驅動的學生成績管理系統(tǒng)</p><p>  (1)錄入每個學生的學號、姓名和各科考試成績</p><p>  (2)計算每門課程的總分和平均分</p><p> ?。?)計算每個學生的總分和平均分<

14、/p><p> ?。?)按每個學生的總分由高到低排出名次表</p><p> ?。?)按每個學生的總分由低到高排出名次表</p><p> ?。?)按學號由小到大排出成績表</p><p>  (7)按姓名的字典順序排出成績表</p><p> ?。?)按學號查詢學生排名及其考試成績</p><

15、;p>  (9)按姓名查詢學生排名及其考試成績</p><p> ?。?0)按優(yōu)秀(90-100)、良好(89-89)、中等(70-79)、及格(60-69)、不及格(0-59)5個類別,對每門課程分別統(tǒng)計每個類別的人數(shù)以及所占的百分比</p><p> ?。?1)輸出每個學生的學號、姓名、各科考試成績,以及每門課程的總分和平均分</p><p>  (

16、12)將每個學生的記錄信息寫入文件</p><p>  (13)從文件中讀出每個學生的記錄信息并顯示</p><p>  1.2 功能需求分析</p><p>  若要完成問題中的各項要求,首先需要運用結構體數(shù)據(jù)儲存學生的成績信息,再運用循環(huán)語句求得各學生成績之和及平均分和各學科成績之和及平均分,再運用文件存儲數(shù)據(jù)便于以后查詢,對于數(shù)據(jù)查詢,則同樣需要運用循環(huán)語

17、句將要查詢的姓名或學號與已儲存的信息進行對比,直至找到要查詢的信息。系統(tǒng)功能模塊如圖1.2.1所示</p><p>  圖1 系統(tǒng)功能模塊圖</p><p><b>  表1.2.1</b></p><p><b>  2 系統(tǒng)設計</b></p><p>  2.1 數(shù)據(jù)結構設計</p>

18、;<p>  系統(tǒng)處理的數(shù)據(jù)主要是學生信息,由C語言數(shù)據(jù)體表示</p><p>  2.2 函數(shù)設計與說明</p><p>  學生信息管理系統(tǒng)采用結構化程序設計思想,程序處理主函數(shù)以外,共設計了13個函數(shù),函數(shù)的原型及功能說明如表2.3.1所示</p><p>  表2.3.1 函數(shù)列表</p><p><b>  

19、2.3 菜單設計</b></p><p>  采用二級菜單設計,為保證程序有效性,先選擇1項錄入學生各項信息,再進入其他功能選擇。</p><p><b>  否</b></p><p><b>  是</b></p><p><b>  是</b></p&g

20、t;<p><b>  否</b></p><p>  2.4 文件清單與說明</p><p>  表2.3.1中的函數(shù)與主函數(shù),以及函數(shù)聲明、數(shù)據(jù)結構定義、數(shù)據(jù)存儲二進制文件共兩個,程序文件清單如表2.5.1所示。</p><p><b>  表2.5.1</b></p><p>&

21、lt;b>  3 系統(tǒng)實現(xiàn)</b></p><p>  3.1 管理系統(tǒng)菜單</p><p>  進入菜單選擇界面,進行成績單錄入和各項功能的選擇</p><p><b>  否</b></p><p><b>  是</b></p><p><b&g

22、t;  是</b></p><p><b>  否</b></p><p>  3.2 學生成績排名</p><p>  按每個學生的總分由高到低排出名次表</p><p>  進入菜單后選擇該功能,用循環(huán)語句計算出存儲在不同結構體中每個學生各科的分數(shù)之和即為總分。再應用比較語句進行比較總分大小,按照從高到低

23、進行輸出顯示</p><p><b>  N</b></p><p><b>  Y</b></p><p>  按每個學生的總分由低到高排出名次表</p><p>  進入菜單后選擇該功能,用循環(huán)語句計算出存儲在不同結構體中每個學生各科的分數(shù)之和即為總分。再應用比較語句進行比較總分大小,按照從低到

24、高進行輸出顯示</p><p><b>  N</b></p><p><b>  Y</b></p><p>  按學號由小到大排出名次表</p><p>  進入菜單后選擇該功能,用循環(huán)語句計算出存儲在不同結構體中每個學生各科的分數(shù)之和即為總分。再應用比較語句進行比較學號大小,按照學號從小到大進

25、行輸出顯示</p><p><b>  N</b></p><p><b>  Y</b></p><p>  按姓名的在字典順序排出成績表</p><p>  進入菜單后選擇該功能,用循環(huán)語句計算出存儲在不同結構體中每個學生各科的分數(shù)之和即為總分。再應用比較語句進行比較姓名在字典順序,按照姓名在字

26、典順序進行輸出顯示</p><p><b>  N</b></p><p><b>  Y</b></p><p>  3.3 學生成績統(tǒng)計</p><p>  進入菜單后選擇該功能,用switch語句進行各項等級累加,在將各項累加的數(shù)量處于總人數(shù)算出百分比,輸出顯示</p><

27、p><b>  N</b></p><p><b>  Y</b></p><p>  4 測試數(shù)據(jù)與測試過程記錄</p><p><b>  4.1 菜單測試</b></p><p>  進入菜單選擇,可以有多項選擇,選擇錄入學生信息后進行其他從菜單功能的選擇進行該項功

28、能。進行完此項功能后有選擇是否繼續(xù)的功能,可以進行選擇繼續(xù)返回主菜單在進行其他功能的選擇。</p><p><b>  圖4.1.1</b></p><p><b>  圖4.1.2</b></p><p><b>  圖4.1.3</b></p><p><b> 

29、 圖4.1.4</b></p><p><b>  圖4.2.5</b></p><p>  4.2 系統(tǒng)功能測試</p><p>  4.2.1管理系統(tǒng)菜單</p><p>  進入菜單選擇界面,選擇想要執(zhí)行的功能</p><p><b>  圖4.2.1</b>

30、;</p><p>  4.2.2輸入學生信息</p><p>  錄入每個學生的學號、姓名和各科考試成績</p><p>  先選擇1進入錄入信息界面,再按要求輸入總人數(shù),然后根據(jù)彈出的格式依次輸入學生信息,按回車結束輸入后可選擇是否繼續(xù)進行其他功能。</p><p><b>  圖4.2.2</b></p>

31、;<p>  4.2.3計算總分和平均分</p><p>  計算每門課程的總分和平均分測試</p><p>  輸入成績后,在菜單界面選擇計算成績功能進入二級菜單,選擇計算每門課程的總分和平均分,則功能完成,然后可選擇是否繼續(xù)實現(xiàn)其他功能。</p><p><b>  圖4.2.3.1</b></p><p&

32、gt;  計算每個學生的總分和平均分測試</p><p>  輸入成績后,在菜單界面選擇計算成績功能進入二級菜單,選擇計算每個學生的總分和平均分,則功能完成,然后可選擇是否繼續(xù)實現(xiàn)其他功能。</p><p><b>  圖4.2.3.2</b></p><p>  4.2.4學生成績排名</p><p>  按每個學生總

33、分由高到低排名</p><p>  先輸入學生信息,在一級菜單選擇排名,在二級菜單選擇該功能,可以選擇是否繼續(xù)</p><p><b>  圖4.2.4.1</b></p><p>  按每個學生總分由低到高排名</p><p>  先輸入學生信息,在一級菜單選擇排名,在二級菜單選擇該功能,可以選擇是否繼續(xù)</p&

34、gt;<p><b>  圖4.2.4.2</b></p><p><b>  按學號由大到小排名</b></p><p>  先輸入學生信息,在一級菜單選擇排名,在二級菜單選擇該功能,可以選擇是否繼續(xù)</p><p><b>  圖4.2.4.3</b></p><

35、p>  按姓名的在字典順序排名</p><p>  先輸入學生信息,在一級菜單選擇排名,在二級菜單選擇該功能,可以選擇是否繼續(xù)</p><p><b>  圖4.2.4.4</b></p><p>  4.2.5查詢學生成績</p><p>  按學號查詢學生排名及其考試成績測試</p><p&

36、gt;  輸入成績后,在菜單界面選擇查詢功能進入二級菜單,選擇按學號查詢學生排名及其考試成績,輸入要查詢的學號,則功能完成,然后可選擇是否繼續(xù)實現(xiàn)其他功能。</p><p><b>  圖4.2.5.1</b></p><p>  按姓名查詢學生排名及其考試成績測試</p><p>  輸入成績后,在菜單界面選擇查詢功能進入二級菜單,選擇按姓名

37、查詢學生排名及其考試成績,輸入要查詢的姓名,則功能完成,然后可選擇是否繼續(xù)實現(xiàn)其他功能。</p><p><b>  圖4.2.5.2</b></p><p>  4.2.6學生成績統(tǒng)計</p><p><b>  各等級學生的百分比</b></p><p>  先輸入學生信息,在一級菜單選擇統(tǒng)計進

38、入該功能,可以選擇是否繼續(xù)</p><p><b>  圖4.2.6</b></p><p>  4.2.6學生信息的輸入輸出</p><p>  輸出每個學生的學號、姓名、各科考試成績,以及每門課程的總分和平均分測試</p><p>  輸入學生個人信息后,進入菜單選擇界面,選擇菜單代碼1,則完成此功能。選擇是否繼續(xù),

39、進行其他操作。</p><p><b>  圖4.2.6.</b></p><p>  將每個學生的記錄信息寫入文件測試</p><p>  輸入學生個人信息后,進入菜單選擇界面,選擇菜單代碼2,則完成此功能。選擇是否繼續(xù),進行其他操作。</p><p><b>  圖4.2.6.2</b><

40、/p><p>  從文件中讀出每個學生的記錄信息并顯示測試</p><p>  輸入學生個人信息后,進入菜單選擇界面,選擇菜單代碼3,則完成此功能。選擇是否繼續(xù),進行其他操作。</p><p><b>  圖4.2.5.3</b></p><p>  5 課程設計遇到的問題及解決方法</p><p>

41、 ?。?)在建立二級菜單是定義錯誤</p><p>  問題內容:在switch選擇語句中定義變量,導致程序出錯;</p><p>  問題分析:switch選擇語句中不能定義變量;</p><p>  解決方法:重新定義變量在switch選擇語句前,同時修改二級菜單選擇的變量與一級菜單選擇的變量不同。</p><p> ?。?)輸出統(tǒng)計成績

42、百分比時錯誤</p><p>  問題內容:將第一門成績輸出錯誤,而后面課程的成績百分比變?yōu)榍耙婚T成績的百分比</p><p>  問題分析:學生成績與學號的混淆,系統(tǒng)錯將學號為學生成績;</p><p>  解決方法:修改學生成績的輸出方式,將循環(huán)輸出是定義的j=0改為j=1,輸出的j<3改為j<4。</p><p><b

43、>  6 課程設計總結</b></p><p>  在結束了一個學年的C語言學習后,在下學期結束后我們迎來了為期一周的C語言程序設計的實訓,嘗試去編輯一個比以前復雜而且較長的程序。在和同學討論、分工合作,終于做出了這個讓我們滿意的成果。短短的一個星期的設計讓我有了和以前的不一樣的感受。以前做的程序短小而且內容少,就一兩個知識點。而這次的程序整整結合一個學年所學到知識,要在其中選擇最好最方便的方法

44、。通過C語言實訓,讓我加深了對C語言的了解,而不只是單單的在課本中學到的那些理論,平時乏味的課程,通過自己動手親自編寫,變的生動有趣,而在自己動手的過程中,出現(xiàn)的問題很多,比理論要難的多,當一個程序寫完以后,經常會有很多錯誤而沒法解決。不過,通過幾天的實訓,逐漸積攢了一些經驗,有些錯誤可以很快就看出來。對于這次的實訓,我有很大的收獲,對于C語言有了更深度的了解,平時在課堂上學習的理論知識可以轉化為一些實際的技能。但一個程序出錯時,會去仔

45、細的觀察,思考,找出程序的錯誤點并修改;但程序成功運行時會有一種自豪感。通過短短的幾天,我認識到了我以前學習的不足之處,處在的問題,在老師和同學的幫助下去改正。我相信這將是我學習C語言中的一個里程碑,它將促進我以后</p><p><b>  參考文獻</b></p><p>  1. 吉順如,陶恂,曾祥緒.C程序設計教程與實驗.清華大學出版社.2011</p&

46、gt;<p>  2. 吉順如,計春雷.C程序設計習題集與課程設計指導.電子工業(yè)出版社.2012</p><p>  3. 程序設計語言. 百度百科.</p><p>  http://baike.baidu.com/view/128511.htm?fr=aladdin</p><p><b>  附錄源代碼</b></p&

47、gt;<p>  #include<stdio.h> </p><p>  #include<stdlib.h> </p><p>  #include<string.h> </p><p>  #define NUM_N 30 </p><p>  #define N 100 </p&

48、gt;<p>  #define SCORE_N 7 </p><p>  #define COURSE_N 6</p><p>  typedef struct student /*聲明一個結構體模板STUDENT*/ </p><p><b>  { </b></p><p>  char n

49、ame[NUM_N]; </p><p>  int score[SCORE_N]; </p><p>  float averstudent; </p><p>  }STUDENT; </p><p>  int Input(STUDENT stu[],int n); /*函數(shù)原型聲明*/ </p>

50、<p>  int Refernum(STUDENT stu[],int n); </p><p>  int Refername(STUDENT stu[],int n); </p><p>  void Print(STUDENT stu[],int n); </p><p>  void High(STUDENT stu[],STUDENT b[]

51、,int n); </p><p>  void Down(STUDENT stu[],STUDENT b[],int n); </p><p>  void Score(STUDENT stu[],STUDENT b[],int n); </p><p>  void SortString(STUDENT stu[],STUDENT b[],int n); <

52、;/p><p>  void Sum(STUDENT stu[],int n,int coursesum[]); </p><p>  void Count(STUDENT stu[],int n); </p><p>  void Printf(STUDENT stu[],int n,float avercourse[],int coursesum[]); <

53、/p><p>  void Average(STUDENT stu[],int n,float avercourse[],int coursesum[]); </p><p>  void Writetofile(STUDENT stu[],FILE *fp,int n); </p><p>  void Readfromfile(FILE *fp,int n); &l

54、t;/p><p>  void main() </p><p><b>  {</b></p><p>  int coursesum[COURSE_N]={0},count[NUM_N][COURSE_N]={0};</p><p>  float avercourse[NUM_N]; </p&g

55、t;<p>  int i,j,p,n,op,r=0,m; </p><p>  char answer='Y';</p><p>  FILE *fp; </p><p>  STUDENT stu[NUM_N]; </p><p>  STUDENT b[NUM_N]; </p><

56、p><b>  menu:; </b></p><p>  system("cls"); </p><p>  printf(" *歡迎使用學生成績管理系統(tǒng)*\n"); </p><p>  printf("\n"); </p><p>  pr

57、intf(" 歡迎使用如下菜單\n"); </p><p>  printf("\n"); </p><p>  printf(" 1.錄入每個學生的學號、姓名、各科考試成績\n"); </p><p>  printf(" 2.計算成績\n"); </p><

58、p>  printf(" 3.排名\n"); </p><p>  printf(" 4.查詢\n"); </p><p>  printf(" 5.統(tǒng)計\n"); </p><p>  printf(" 6.輸入輸出\n"); </p><p>  p

59、rintf(" 0.退出\n"); </p><p>  printf("\n"); </p><p><b>  choose:;</b></p><p>  printf("請輸入你的選擇:\n"); </p><p>  scanf("%d&qu

60、ot;,&op); </p><p>  if(op!=1&&op!=13&&r==0) </p><p><b>  { </b></p><p>  printf("請先輸入學號、姓名、各科成績!"); </p><p><b>  r++; &

61、lt;/b></p><p>  goto choose; </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  {</b></p><p><b>  r++; <

62、;/b></p><p>  goto start; </p><p><b>  } </b></p><p><b>  do{ </b></p><p>  answer='N'; </p><p>  printf("請輸入你的選擇

63、:\n"); </p><p>  scanf("%d",&op); </p><p><b>  start:; </b></p><p>  switch(op) </p><p><b>  {</b></p><p>  case

64、 1: n=Input(stu,n);break; /*調用Input函數(shù)*/</p><p>  case 2: printf("1.計算每門課程的總分和平均分\n");</p><p>  printf("2.計算每個學生的總分和平均分\n");</p><p>  printf("請輸入你的選擇:\n&

65、quot;); </p><p>  scanf("%d",&m);</p><p><b>  switch(m)</b></p><p><b>  {</b></p><p>  case 1: printf("計算每門課程的總分和平均分\n"

66、); /*調用Sum和Average函數(shù)*/</p><p>  Sum(stu,n,coursesum); </p><p>  for(i=0;i<3;i++) </p><p>  printf("課程[%d]總分=%d\n",i,coursesum[i]); </p><p>  Average(st

67、u,n,avercourse,coursesum);</p><p>  for(i=0;i<3;i++) </p><p>  printf("課程[%d]平均分=%f\n",i,avercourse[i]); </p><p><b>  break; </b></p><p><

68、b>  case 2: </b></p><p>  printf("計算每個學生的總分和平均分\n"); /*調用Sum和Average函數(shù)*/</p><p>  Sum(stu,n,coursesum); </p><p>  for(i=0;i<n;i++) </p><p>  p

69、rintf("學生%d總分=%d\n",i+1,stu[i].score[4]); </p><p>  Average(stu,n,avercourse,coursesum); </p><p>  for(i=0;i<n;i++) </p><p>  printf("學生%d平均分=%f\n",i+1,stu[i

70、].averstudent); </p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 3: printf("1.按每個學生的總分由高到低排出名次表\

71、n");</p><p>  printf("2.按每個學生的總分由低到高排出名次表\n");</p><p>  printf("3.按學號由小到大排出成績表\n");</p><p>  printf("4.按姓名的字典順序排出成績表\n");</p><p>  pr

72、intf("請輸入你的選擇:\n"); </p><p>  scanf("%d",&m);</p><p><b>  switch(m)</b></p><p><b>  {</b></p><p><b>  case 1:</

73、b></p><p>  printf("按每個學生的總分由高到低排出名次表\n"); /*調用Sum、High函數(shù)*/</p><p>  Sum(stu,n,coursesum); </p><p>  High(stu,b,n); </p><p>  Print(stu,n); </p>&l

74、t;p><b>  break; </b></p><p><b>  case 2: </b></p><p>  printf("按每個學生的總分由低到高排出名次表\n"); /*調用Sum、Down函數(shù)*/</p><p>  Sum(stu,n,coursesum); </p

75、><p>  Down(stu,b,n);</p><p>  Print(stu,n); </p><p><b>  break; </b></p><p><b>  case 3:</b></p><p>  printf("按學號由小到大排出成績表\n&quo

76、t;); /*調用Score函數(shù)*/</p><p>  Score(stu,b,n); </p><p>  Print(stu,n); </p><p><b>  break; </b></p><p><b>  case 4: </b></p><p>  p

77、rintf("按姓名的字典順序排出成績表\n"); /*調用Sum、SortString函數(shù)*/</p><p>  Sum(stu,n,coursesum); </p><p>  SortString(stu,b,n); </p><p>  printf("姓名 學號 物理 數(shù)學 英語 總分\n"); </

78、p><p>  for(i=0;i<n;i++) </p><p><b>  { </b></p><p>  puts(stu[i].name); </p><p>  for(j=0;j<5;j++) </p><p><b>  { </b></p&

79、gt;<p>  printf("%6ld",stu[i].score[j]); </p><p><b>  } </b></p><p>  printf("\n"); </p><p><b>  }</b></p><p><b&

80、gt;  break;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 4: printf("1.按學號查詢學生排名及其考試成績\n");</p><p>  printf("

81、2.按姓名查詢學生排名及其考試成績\n");</p><p>  printf("請輸入你的選擇:\n"); </p><p>  scanf("%d",&m);</p><p><b>  switch(m)</b></p><p><b>  {&l

82、t;/b></p><p><b>  case 1:</b></p><p>  Sum(stu,n,coursesum); /*調用Sum、High和Refernum函數(shù)*/</p><p>  High(stu,b,n); </p><p>  printf("按學號查詢學生排名及其考試成績

83、\n"); </p><p>  i=Refernum(stu,n); </p><p>  if(i!=-1) </p><p><b>  { </b></p><p>  printf("姓名 學號 物理 數(shù)學 英語 總分 名次\n"); </p><p>

84、  for(j=0;j<5;j++) </p><p>  printf("%6ld",stu[i].score[j]); </p><p>  printf("%6ld\n",i+1); </p><p><b>  } </b></p><p>  else prin

85、tf("查無此人\n"); </p><p><b>  break; </b></p><p><b>  case 2: </b></p><p>  printf("按姓名查詢學生排名及其考試成績\n"); /*調用Sum、High和Refername函數(shù)*/</

86、p><p>  Sum(stu,n,coursesum); </p><p>  High(stu,b,n); </p><p>  i=Refername(stu,n); </p><p><b>  if(i!=-1)</b></p><p><b>  { </b><

87、;/p><p>  printf("姓名 學號 物理 數(shù)學 英語 總分 名次\n"); </p><p>  printf("%s",stu[i].name); </p><p>  for(j=0;j<5;j++) </p><p>  printf("%6ld",stu[i]

88、.score[j]); </p><p>  printf("%6ld\n",i+1); </p><p><b>  } </b></p><p>  else printf("查無此人\n"); </p><p><b>  break; </b><

89、;/p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 5: </p><p>  printf("按優(yōu)秀、良好、中等、及格、不及格對每門課程分別統(tǒng)計人數(shù)及其所占百分比\n"); /*調用Count函數(shù)

90、*/</p><p>  Count(stu,n); </p><p><b>  break;</b></p><p>  case 6: printf("1.輸出每個學生的學號、姓名、各科考試成績,每門課程的總分和平均分\n");</p><p>  printf("2.將每個學生的

91、記錄信息寫入文件\n");</p><p>  printf("3.文件中讀出每個學生的記錄信息并顯示\n");</p><p>  printf("請輸入你的選擇:\n"); </p><p>  scanf("%d",&m);</p><p>  switch

92、(m)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  printf("輸出每個學生的學號、姓名、各科考試成績,每門課程的總分和平均分\n"); /*調用Sum、Average函數(shù)*/</p><p>  Sum

93、(stu,n,coursesum); </p><p>  Average(stu,n,avercourse,coursesum); </p><p>  Printf(stu,n,avercourse,coursesum); </p><p><b>  break; </b></p><p><b>  

94、case 2: </b></p><p>  printf("將每個學生的記錄信息寫入文件\n"); /*調用Sum、Average和Writeotfile函數(shù)*/</p><p>  Sum(stu,n,coursesum); </p><p>  Average(stu,n,avercourse,coursesum);<

95、;/p><p>  Writetofile(stu,fp,n); </p><p><b>  break; </b></p><p><b>  case 3: </b></p><p>  printf("文件中讀出每個學生的記錄信息并顯示\n"); /*調用Readfrom

96、eile函數(shù)*/</p><p>  Readfromfile(fp,n); </p><p><b>  break; </b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>

97、;  case 0: </b></p><p>  if(op==0) goto end; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  printf("您還需要繼續(xù)嗎?(回答Y或N)");

98、</p><p>  scanf("%c%c",&p,&answer); </p><p>  if(answer=='N') goto end; </p><p>  else goto menu; </p><p>  }while(op!=0); </p><p&

99、gt;<b>  end:; </b></p><p>  printf("感謝您的使用,下次再見!\n"); </p><p><b>  } </b></p><p>  int Input(STUDENT stu[],int n) /*輸入函數(shù)*/</p><p>

100、<b>  { </b></p><p><b>  int i; </b></p><p>  printf("總人數(shù):\n"); </p><p>  scanf("%d",&n); </p><p>  while (n>30) <

101、;/p><p><b>  { </b></p><p>  printf("人數(shù)應小于30\n"); </p><p>  printf("總人數(shù):\n"); </p><p>  scanf("%d",&n); </p><p>

102、;<b>  } </b></p><p>  printf("姓名 學號 物理 數(shù)學 英語\n"); </p><p>  for(i=0;i<n;i++) </p><p><b>  { </b></p><p>  scanf("%s %d %d %d

103、%d",&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]); </p><p><b>  } </b></p><p>  return(n); </p><p><b>

104、;  } </b></p><p>  void Print(STUDENT stu[],int n) /*輸出函數(shù)*/</p><p><b>  { </b></p><p>  int i,j; </p><p>  printf("姓名 學號 物理 數(shù)學 英語 總分\n"

105、); </p><p>  for(i=0;i<n;i++) </p><p><b>  { </b></p><p>  printf("%s",stu[i].name); </p><p>  for(j=0;j<5;j++)</p><p><b&g

106、t;  { </b></p><p>  printf("%6ld",stu[i].score[j]); </p><p><b>  } </b></p><p>  printf("\n"); </p><p><b>  } </b>&l

107、t;/p><p><b>  } </b></p><p>  void Sum(STUDENT stu[],int n,int coursesum[]) /*計算成績總和*/</p><p><b>  { </b></p><p>  int i,j; </p>

108、;<p>  for(j=1;j<4;j++) /*計算每門課程成績總和*/ </p><p><b>  { </b></p><p>  coursesum[j-1]=0; </p><p>  for(i=0;i<n;i++) </p><p><b>  { <

109、;/b></p><p>  coursesum[j-1]=coursesum[j-1]+stu[i].score[j]; </p><p><b>  } </b></p><p><b>  } </b></p><p>  for(i=0;i<n;i++) /*計算每個學生

110、成績總和*/ </p><p><b>  { </b></p><p>  stu[i].score[4]=0; </p><p>  for(j=1;j<4;j++) </p><p><b>  { </b></p><p>  stu[i].score

111、[4]=stu[i].score[4]+stu[i].score[j]; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  void Average(STUDENT stu[]

112、,int n,float avercourse[],int coursesum[]) /*計算平均分數(shù)*/</p><p><b>  { </b></p><p><b>  int i; </b></p><p>  for (i=0;i<3;i++) </p><p><b

113、>  { </b></p><p>  avercourse[i]=(float)coursesum[i]/n; /*計算每門課程平均分*//*強制類型轉換*/</p><p>  stu[i].averstudent=(float)stu[i].score[4]/3; /*計算每個學生平均分*//*強制類型轉換*/</p><p><

114、b>  } </b></p><p><b>  } </b></p><p>  void High(STUDENT stu[],STUDENT b[],int n) /*按總分由高到低排列*/</p><p><b>  { </b></p><p>  int i,s

115、=0; </p><p><b>  do{ </b></p><p>  for(i=0;i<n-1;i++) </p><p><b>  { </b></p><p>  if (stu[i].score[4]<stu[i+1].score[4]) </p>&l

116、t;p><b>  { </b></p><p>  b[i]=stu[i]; </p><p>  stu[i]=stu[i+1]; </p><p>  stu[i+1]=b[i]; </p><p><b>  } </b></p><p><b> 

117、 } </b></p><p><b>  s++; </b></p><p>  }while(s<n); </p><p><b>  } </b></p><p>  void Down(STUDENT stu[],STUDENT b[],int n) /*按學生成績

118、由低到高排列*/</p><p><b>  { </b></p><p>  int i,s=0; </p><p><b>  do{ </b></p><p>  for(i=0;i<n-1;i++) </p><p><b>  { </b&

119、gt;</p><p>  if (stu[i].score[4]>stu[i+1].score[4]) </p><p><b>  { </b></p><p>  b[i]=stu[i]; </p><p>  stu[i]=stu[i+1]; </p><p>  stu[i+1

120、]=b[i]; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  s++; </b></p><p>  }while(s<n); </p><p><b>  } <

121、;/b></p><p>  void Score(STUDENT stu[],STUDENT b[],int n) /*按學號由小到大排列*/</p><p><b>  { </b></p><p>  int i,s=0; </p><p><b>  do{ </b></p

122、><p>  for(i=0;i<n-1;i++) </p><p><b>  { </b></p><p>  if (stu[i].score[0]>stu[i+1].score[0]) </p><p><b>  { </b></p><p>  b[i

123、]=stu[i]; </p><p>  stu[i]=stu[i+1]; </p><p>  stu[i+1]=b[i]; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  s++; </b

124、></p><p>  }while(s<n); </p><p><b>  } </b></p><p>  void SortString(STUDENT stu[],STUDENT b[],int n) /*按姓名的字典順序排出成績表*/ </p><p><b>  { <

125、;/b></p><p>  int i,j; </p><p>  for(i=0;i<n-1;i++) </p><p><b>  { </b></p><p>  for(j=i+1;j<n;j++) </p><p><b>  { </b>

126、</p><p>  if(strcmp(stu[j].name,stu[i].name)<0) </p><p><b>  { </b></p><p>  b[i]=stu[i]; </p><p>  stu[i]=stu[i+1];</p><p>  stu[i+1]=b[i]

127、; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  int Refernum(STU

128、DENT stu[],int n) /*按學號查詢學生排名及其各科考試成績*/ </p><p><b>  { </b></p><p>  int i=0,t,num1; </p><p>  printf("請輸入所要查詢的學號:"); </p><p>  scanf("%d

129、",&num1); </p><p><b>  do{ </b></p><p>  if(i<=n) </p><p><b>  { </b></p><p>  if(stu[i].score[0]==num1) </p><p><

130、;b>  { </b></p><p>  return i; </p><p><b>  t=1; </b></p><p><b>  } </b></p><p>  else t=0; </p><p><b>  i++; </

131、b></p><p><b>  } </b></p><p><b>  else { </b></p><p><b>  t=1; </b></p><p>  return -1; </p><p><b>  } </b

132、></p><p>  }while(t==0); </p><p><b>  } </b></p><p>  int Refername(STUDENT stu[],int n) /*按姓名查詢學生排名及其各科考試成績*/ </p><p><b>  { </b></p

133、><p>  int i=0,j,t; </p><p>  char prt[NUM_N]; </p><p>  printf("請輸入需要查找的姓名\n"); </p><p>  scanf("%c",&j); </p><p>  gets(prt); <

134、/p><p><b>  do{ </b></p><p><b>  if(i<=n) </b></p><p><b>  { </b></p><p>  if(strcmp(stu[i].name,prt)==0) </p><p><

135、;b>  { </b></p><p>  return i; </p><p><b>  t=1; </b></p><p><b>  } </b></p><p>  else t=0; </p><p><b>  i++; <

136、/b></p><p><b>  } </b></p><p><b>  else { </b></p><p><b>  t=1; </b></p><p>  return -1; </p><p><b>  } </

137、b></p><p>  }while(t==0); </p><p><b>  } </b></p><p>  void Count(STUDENT stu[],int n) /*按優(yōu)秀、良好、中等、及格、不及格對每門課程分別統(tǒng)計人數(shù)及其所占百分比*/ </p><p><b>  { &

138、lt;/b></p><p>  int i,j,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,grade; </p><p>  double n1,n2,n3,n4,n5; </p><p>  for(j=1;j<4;j++) </p><p><b>  { </b><

139、/p><p>  for(i=0;i<n;i++) </p><p><b>  { </b></p><p>  grade=stu[i].score[j]/10; </p><p>  switch (grade) </p><p><b>  { </b><

140、/p><p>  case 10: </p><p>  case 9: sum1= sum1+1; break; </p><p>  case 8: sum2= sum2+1; break; </p><p>  case 7: sum3= sum3+1; break; </p><p>  case

141、 6: sum4= sum4+1; break; </p><p>  case 5: </p><p>  case 4: </p><p>  case 3: </p><p>  case 2: </p><p>  case 1: </p><p> 

142、 case 0:sum5= sum5+1; break; </p><p><b>  } </b></p><p><b>  } </b></p><p>  n1=(double)sum1/(double)n; </p><p>  n2=(double)sum2/(double)n;

143、</p><p>  n3=(double)sum3/(double)n; </p><p>  n4=(double)sum4/(double)n; </p><p>  n5=(double)sum5/(double)n; </p><p>  printf("第%d門\n",j); </p><

溫馨提示

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

評論

0/150

提交評論