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

下載本文檔

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

文檔簡介

1、<p><b>  課程設計任務書</b></p><p><b>  一、課程設計的內容</b></p><p>  對學生信息(包括學號、數(shù)學、英語、計算機、平均分)進行管理,包括學生成績的信息輸入、輸出、查詢、刪除、排序、統(tǒng)計、退出.每個教師都將各自班學生的成績信息進行記錄,信息內容包含:(1)學生的學號(2)學生的姓名(3)學生

2、的成績員。假設,教師現(xiàn)收集到了一個班學生的所有成績信息,要求用C語言編寫一個簡單的成績管理系統(tǒng),可進行錄入、查詢、修改和瀏覽等功能。學習相關開發(fā)工具和應用軟件,熟悉系統(tǒng)建設過程。</p><p>  二、課程設計的要求與數(shù)據(jù)</p><p>  1、用C語言實現(xiàn)系統(tǒng);</p><p>  對學生信息(包括學號、數(shù)學、英語、C語言、平均分)進行管理,包括學生成績的信息

3、輸入、輸出、查詢、刪除、排序、統(tǒng)計、退出.</p><p>  是高等學校教務管理的重要組成部分,學生信息包括:其內容較多,為了簡化討論,要求設計的管理系統(tǒng)能夠完成以下功能:</p><p>  (1) 每一條記錄包括一個學生的學號、姓名、3門課成績</p><p>  (2)、成績信息錄入功能:(成績信息用文件保存,可以一次完成若干條記錄的輸入。)</p&

4、gt;<p>  (3)、成績信息顯示瀏覽功能:完成全部學生記錄的顯示。</p><p>  (4)、查詢功能:完成按姓名查找學生記錄,并顯示。</p><p>  (5)成績信息的刪除:按學號進行刪除某學生的成績.</p><p>  (6)、排序功能:按學生平均成績進行排序。</p><p>  (7)、應提供一個界面來調用

5、各個功能,調用界面和各個功能的操作界面應盡可能清晰美觀!</p><p>  三、課程設計應完成的工作</p><p><b>  (1)編寫算法;</b></p><p>  (2)算法測試,并有具體的測試結果和結果分析;</p><p>  (3)撰寫課程設計報告。</p><p>  四、課

6、程設計(論文)進程安排</p><p>  五、應收集的資料及主要參考文獻</p><p>  [1]譚浩強. C程序設計(第三版) . 北京:清華大學出版社, 2005 </p><p>  [2]譚浩強. C程序設計題解與上機指導(第三版) . 北京:清華大學出版社, 2005</p><p>  [3]譚浩強. C程序設計教程

7、北京:清華大學出版社, 2007</p><p>  [4]譚浩強. C++程序設計 北京:清華大學出版社, 2004</p><p>  [5]李春葆,張植民,肖忠付.C語言設計題典[M].北京:清華大學出版社,2002</p><p>  發(fā)出任務書日期: 2010 年 6 月 9 日 指導教師簽名:</p><p>  計劃完成

8、日期: 2010 年 7 月 2 日 教學單位責任人簽章:</p><p><b>  目 錄</b></p><p>  一 總體設計(包含幾大功能模塊)1</p><p>  二 詳細設計(各功能模塊的具體實現(xiàn)算法——流程圖)5</p><p>  三 調試分析(包含各模塊的測試用例,及測

9、試結果)15</p><p><b>  3.1源程序15</b></p><p>  3.2調試與測試15</p><p><b>  四 總結15</b></p><p><b>  五 參考資料15</b></p><p>  一 總

10、體設計(包含幾大功能模塊)</p><p><b>  1、成績錄入功能</b></p><p><b>  2、成績輸出功能</b></p><p><b>  3、成績查詢功能</b></p><p><b>  4、刪除模塊</b></p>

11、;<p><b>  5、排序功能</b></p><p><b>  6、統(tǒng)計功能 </b></p><p><b>  7、退出系統(tǒng)</b></p><p>  二、詳細設計(各功能模塊的具體實現(xiàn)算法——流程圖)</p><p>  2.1各函數(shù)的功能和實現(xiàn)

12、</p><p>  1、輸入初始的學生信息:輸入信息包括學生的姓名、學號以及學生的成績等相關信息;可用函數(shù)void input(STUDENT *data, int *len)來實現(xiàn)此操作。 </p><p>  2、成績輸出模塊:輸出學生的信息以及成績void output(STUDENT *data, int len):通過學生的姓名來查看學生的相關成績,同時也可以分別通過cave

13、rage() 、maverage() 、eaverage() 和comaverage() 來輸出成績的平均分數(shù)、最高和最低分數(shù)。</p><p>  3、成績查詢模塊:可用void find(STUDENT *data, int len) 來實現(xiàn)。找到就輸出此學生全部信息。</p><p>  4、刪除模塊:用函數(shù)void delete_i

14、tem(STUDENT *data, int *len)來實現(xiàn)</p><p>  5、排序模塊:用函數(shù)void sort(STUDENT *data, int len)來實現(xiàn)</p><p>  6、統(tǒng)計功能能:用函數(shù)void stat(STUDENT *data, int len) 來實現(xiàn)</p><p>  7、退出系統(tǒng):可用一個函數(shù)exit()來實現(xiàn),首先將

15、信息保存到文件中,釋放動態(tài)創(chuàng)建的內存空間,再退出此程序。</p><p>  三 調試分析(包含各模塊的測試用例,及測試結果)</p><p><b>  3.1源程序</b></p><p>  #include <stdlib.h></p><p>  #include <stdio.h>&

16、lt;/p><p>  #include <string.h></p><p>  #define MAXN 35</p><p>  #define MAX_NAME 256</p><p>  typedef struct student //學生信息</p><p><b>  {</b

17、></p><p><b>  int no;</b></p><p>  char name[MAX_NAME];</p><p>  double english;</p><p>  double math;</p><p>  double Programming;</

18、p><p>  double mark_ave;</p><p>  double mark_tot;</p><p>  } STUDENT;</p><p>  /*-----------輸入信息子程序---------*/</p><p>  void input(STUDENT *data, int *len)

19、</p><p><b>  {</b></p><p><b>  int no;</b></p><p>  putchar('\n');</p><p>  printf("%s\n", "請輸入新的記錄,如果需要退出當前菜單請輸入-1."

20、;);</p><p>  printf("%s\n", "格式:\n學號\n");</p><p>  printf("%s\n", "姓名 英語 數(shù)學 C語言");</p><p>  putchar('\n');</p><p>  prin

21、tf("如:\n");</p><p>  printf("5\n");</p><p>  printf("黃宏業(yè) 100 100 100\n");</p><p>  scanf("%d", &no);</p><p>  while(no != -1

22、) {</p><p>  data[*len].no = no;</p><p>  scanf("%s %lf %lf %lf", data[*len].name, &data[*len].english, &data[*len].math,&data[*len].Programming);data[*len].mark_ave=(dat

23、a[*len].english+data[*len].math+data[*len].Programming)/3.0;data[*len].mark_tot=data[*len].english+data[*len].math+data[*len].Programming;</p><p><b>  (*len)++;</b></p><p>  scanf(

24、"%d", &no);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*---------------輸出信息子程序---------------*/</p><p>  void output(STUDENT *

25、data, int len)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  system("cls");</p><p>  printf("%8s", "學號");</

26、p><p>  printf("%8s", "姓名");</p><p>  printf("%8s", "英語");</p><p>  printf("%8s", "數(shù)學");</p><p>  printf("

27、%10s", "C語言");</p><p>  printf("%12s", "平均分");</p><p>  printf("%10s", "總分");</p><p>  putchar('\n');</p><p

28、>  for (i =0; i < 80; i++)</p><p>  putchar('=');</p><p>  putchar('\n');</p><p>  for (i = 0; i< len; i++)</p><p><b>  {</b></p

29、><p>  printf("%8d", data[i].no);</p><p>  printf("%8s", data[i].name);</p><p>  printf("%8.1lf", data[i].english);</p><p>  printf("%8.

30、1lf", data[i].math);</p><p>  printf("%10.1lf", data[i].Programming);</p><p>  printf("%12.1lf", data[i].mark_ave);</p><p>  printf("%10.1lf", dat

31、a[i].mark_tot);</p><p>  putchar('\n');</p><p><b>  }</b></p><p>  for (i =0; i < 80; i++)</p><p>  putchar('=');</p><p>  p

32、utchar('\n');</p><p>  printf("按回車鍵繼續(xù).");</p><p>  getchar();</p><p>  getchar();</p><p><b>  }</b></p><p>  /*--------------

33、排序子程序------------*/</p><p>  void sort(STUDENT *data, int len)</p><p><b>  {</b></p><p>  int i,j,k;</p><p>  STUDENT temp;</p><p>  for (i=0;

34、i<len-1; i++) {</p><p>  for (k=i, j=i+1; j<len; j++)</p><p>  if (data[k].mark_ave > data[j].mark_ave) k=j;</p><p>  if (k != i) {</p><p>  temp = data[i];<

35、;/p><p>  data[i] = data[k];</p><p>  data[k] = temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><

36、;p>  /*--------------------搜索子程序-----------------------*/</p><p>  void find(STUDENT *data, int len)</p><p><b>  {</b></p><p>  int find_no, result ;</p><p

37、><b>  int i;</b></p><p>  lab: result=0;</p><p>  printf("%s\n", "請輸入需要查找的學生的學號,退出當前菜單請輸入 -1.");</p><p>  scanf("%d", &find_no);<

38、/p><p>  if (find_no == -1) return; /*exit the fine sub program*/</p><p>  while( data[result].no != find_no && result < len) result ++;</p><p>  if (result >= len )

39、{</p><p>  printf("%s\n", "未查詢到相關信息");</p><p><b>  goto lab;</b></p><p><b>  }</b></p><p><b>  else {</b></p&

40、gt;<p>  system("cls");</p><p>  printf("%s\n", "查詢信息如下:");</p><p>  for (i =0; i < 80; i++)</p><p>  putchar('=');</p><p&

41、gt;  putchar('\n');</p><p>  printf("%8s", "學號");</p><p>  printf("%8s", "姓名");</p><p>  printf("%8s", "英語");<

42、/p><p>  printf("%8s", "數(shù)學");</p><p>  printf("%10s", "C語言");</p><p>  printf("%12s", "平均分");</p><p>  printf(&

43、quot;%10s", "總分");</p><p>  putchar('\n');</p><p>  printf("%8d", data[result].no);</p><p>  printf("%8s", data[result].name);</p>

44、<p>  printf("%8.1lf", data[result].english);</p><p>  printf("%8.1lf", data[result].math);</p><p>  printf("%10.1lf", data[result].Programming);</p>&l

45、t;p>  printf("%12.1lf", data[result].mark_ave);</p><p>  printf("%10.1lf", data[result].mark_tot);</p><p>  putchar('\n');</p><p>  for (i =0; i <

46、80; i++)</p><p>  putchar('=');</p><p>  putchar('\n');</p><p><b>  goto lab;</b></p><p><b>  }</b></p><p><b>

47、;  }</b></p><p>  /*-----------------插入子程序-------------*/</p><p>  void insert(STUDENT *data, int *len)</p><p><b>  {</b></p><p>  int no, pos;</p&

48、gt;<p>  double english, math, Programming, mark_ave, mark_tot;</p><p><b>  int i;</b></p><p>  char name[MAX_NAME];</p><p>  lab: printf("%s\n", "

49、輸入新的記錄,退出當前菜單請輸入-1.");</p><p>  printf("%s\n", "格式:學號");</p><p>  printf("%s\n", " 姓名 英語 數(shù)學 C語言");</p><p>  scanf("%d", &

50、amp;no);</p><p>  if (no == -1) return;</p><p>  data[*len].no = no;</p><p>  scanf("%s %lf %lf %lf", name, &english, &math, &Programming);</p><p>

51、;  mark_ave=(english+math+Programming)/3.0;</p><p>  mark_tot=english+math+Programming;</p><p><b>  pos = 0;</b></p><p>  while ((data[pos].mark_ave < mark_ave) &

52、& (pos < *len) )</p><p><b>  pos ++;</b></p><p>  for (i = *len-1; i >= pos; i--)</p><p>  data[i+1] = data[i];</p><p>  data[pos].no = no;</p&

53、gt;<p>  strcpy(data[pos].name, name);</p><p>  data[pos].english = english;</p><p>  data[pos].math = math;</p><p>  data[pos].Programming = Programming;</p><p>

54、;  data[pos].mark_ave = mark_ave;</p><p>  data[pos].mark_tot = mark_tot;</p><p><b>  (*len)++;</b></p><p><b>  goto lab;</b></p><p><b>  

55、}</b></p><p>  /*-------------刪除子程序--------------*/</p><p>  void delete_item(STUDENT *data, int *len)</p><p><b>  {</b></p><p>  int no, i, pos;</

56、p><p>  lab: pos=0;</p><p>  printf("%s\n", "輸入需要刪除的學生的學號,退出當前菜單請輸入-1.");</p><p>  scanf("%d", &no);</p><p>  if (no == -1) return;</p

57、><p>  while( (data[pos].no != no) && (pos < *len) ) pos = pos +1;</p><p>  if (pos >= *len) {</p><p>  printf("%s\n", "未找到需要刪除的學生");</p><p

58、><b>  goto lab;</b></p><p><b>  }</b></p><p><b>  else {</b></p><p>  for (i = pos+1;i < *len; i++)</p><p>  data[i-1] = data[

59、i];</p><p>  *len = *len -1;</p><p>  if (*len == 0) {</p><p>  printf("%s\n", "沒有任何記錄,請按回車鍵返回.");</p><p>  getchar();</p><p>  getchar

60、();</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  goto lab;</b></p><p><b>  }</b></p><p><b> 

61、 }</b></p><p>  /*---------------統(tǒng)計子程序------------*/</p><p>  void stat(STUDENT *data, int len)</p><p><b>  {</b></p><p>  int no_59=0, no_69=0, no_79

62、=0, no_89=0, no_100=0;</p><p><b>  int i;</b></p><p>  for (i = 0;i < len; i++) {</p><p>  if (data[i].mark_ave <=59) no_59++;</p><p>  else if (data[

63、i].mark_ave <=69) no_69++;</p><p>  else if (data[i].mark_ave <=79) no_79++;</p><p>  else if (data[i].mark_ave <= 89) no_89++;</p><p>  else no_100++;</p><p>

64、<b>  }</b></p><p>  system("cls");</p><p>  for (i =0; i < 80; i++)</p><p>  putchar('=');</p><p>  putchar('\n');</p>&

65、lt;p>  printf("%10s", "分數(shù)");</p><p>  printf("%10s", "0--59");</p><p>  printf("%10s", "60--69");</p><p>  printf(&quo

66、t;%10s", "70--79");</p><p>  printf("%10s", "80--89");</p><p>  printf("%10s", "90--100");</p><p>  putchar('\n');<

67、/p><p>  putchar('\n');</p><p>  printf("%10s", "學生");</p><p>  printf("%10d", no_59);</p><p>  printf("%10d", no_69);</

68、p><p>  printf("%10d", no_79);</p><p>  printf("%10d", no_89);</p><p>  printf("%10d", no_100);</p><p>  putchar('\n');</p>&l

69、t;p>  for (i =0; i < 80; i++)</p><p>  putchar('=');</p><p>  putchar('\n');</p><p>  printf("按回車鍵返回");</p><p>  getchar();</p>&

70、lt;p>  getchar();</p><p><b>  }</b></p><p>  /*---------------顯示信息子程序------------*/</p><p>  void paint()</p><p><b>  {</b></p><p&

71、gt;<b>  int i;</b></p><p>  system("cls");</p><p>  printf("%55s\n", "中南大學機電工程學院學生管理系統(tǒng)\n");</p><p>  printf(" 制作者:中南大學機電工程學院

72、機械類0908班 勞同炳 \n");</p><p>  for (i = 0; i < 80; i++)</p><p>  putchar('=');</p><p>  putchar('\n');</p><p>  printf(" 1 輸入信息

73、 2 輸出信息\n");</p><p>  printf(" 3 按平均分排序 4 按學號查找\n");</p><p>  printf(" 5 插入 6 按學號刪

74、除\n");</p><p>  printf(" 7 按平均分輸出統(tǒng)計信息 8 保存到文件\n");</p><p>  printf(" 0 退出\n");</p><p>  for (i = 0; i<= 79; i++)</p

75、><p>  putchar('=');</p><p>  putchar('\n');</p><p>  printf("%s\n", "請輸入各操作對應的序號:");</p><p><b>  }</b></p><p>

76、;  void save(STUDENT *data, int len)//將數(shù)據(jù)保存到文件</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  FILE *fp;</b></p><p>  fp=fopen(

77、"成績統(tǒng)計表.txt","w");</p><p>  fprintf(fp,"%8s", "學號");</p><p>  fprintf(fp,"%8s", "姓名");</p><p>  fprintf(fp,"%8s"

78、, "英語");</p><p>  fprintf(fp,"%8s", "數(shù)學");</p><p>  fprintf(fp,"%10s", "C語言");</p><p>  fprintf(fp,"%12s", "平均分"

79、;);</p><p>  fprintf(fp,"%10s\n", "總分");</p><p>  fprintf(fp,"========================================================================\n");</p><p>  pu

80、tchar('\n');</p><p>  for (i = 0; i< len; i++)</p><p><b>  {</b></p><p>  fprintf(fp,"%8d", data[i].no);</p><p>  fprintf(fp,"%8s&

81、quot;, data[i].name);</p><p>  fprintf(fp,"%8.1lf", data[i].english);</p><p>  fprintf(fp,"%8.1lf", data[i].math);</p><p>  fprintf(fp,"%10.1lf", data[

82、i].Programming);</p><p>  fprintf(fp,"%12.1lf", data[i].mark_ave);</p><p>  fprintf(fp,"%10.1lf\n", data[i].mark_tot);</p><p><b>  }</b></p>&

83、lt;p>  fprintf(fp,"========================================================================\n");</p><p>  fclose(fp);</p><p>  printf("文件已保存到\"成績統(tǒng)計表.txt\"");<

84、/p><p>  getchar();getchar();</p><p><b>  }</b></p><p>  /*-----------主程序--------------*/</p><p>  void main()</p><p><b>  {</b></p

85、><p>  STUDENT data[MAXN];</p><p>  int len = 0;</p><p>  char ctrl_ch;</p><p><b>  paint();</b></p><p>  scanf("%c", &ctrl_ch);<

86、/p><p>  while (ctrl_ch != '0') {</p><p>  switch(ctrl_ch) {</p><p><b>  case '1':</b></p><p>  input(data, &len);</p><p><

87、b>  break;</b></p><p><b>  case '2':</b></p><p>  output(data, len);</p><p><b>  break;</b></p><p><b>  case '3':

88、</b></p><p>  sort(data, len);</p><p><b>  break;</b></p><p><b>  case '4':</b></p><p>  find(data, len);</p><p><

89、b>  break;</b></p><p><b>  case '5':</b></p><p>  insert(data, &len);</p><p><b>  break;</b></p><p><b>  case '6&

90、#39;:</b></p><p>  delete_item(data, &len);</p><p><b>  break;</b></p><p><b>  case '7':</b></p><p>  stat(data, len);</p&g

91、t;<p><b>  break;</b></p><p><b>  case '8':</b></p><p>  save(data, len);</p><p><b>  break;</b></p><p><b>  de

92、fault:</b></p><p>  if (ctrl_ch != '\n') printf("%s\n", "輸入錯誤!");</p><p><b>  break;</b></p><p><b>  }</b></p><p

93、>  if (ctrl_ch != '\n') paint();</p><p>  scanf("%c", &ctrl_ch);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

94、3.2調試與測試</b></p><p>  3.2.1算法調試過程中出現(xiàn)的問題及解決方法</p><p>  --------------------Configuration: 4 - Win32 Debug--------------------</p><p>  Compiling...</p><p><b>

95、;  4.cpp</b></p><p>  f:\學習\c語言\ex1\4.cpp(288) : error C2065: 'MAXN' : undeclared identifier</p><p>  f:\學習\c語言\ex1\4.cpp(288) : error C2057: expected constant expression</p>

96、<p>  f:\學習\c語言\ex1\4.cpp(288) : error C2466: cannot allocate an array of constant size 0</p><p>  f:\學習\c語言\ex1\1.cpp(288) : error C2133: 'data' : unknown size</p><p>  執(zhí)行 cl.exe

97、 時出錯.</p><p>  1.obj - 1 error(s), 0 warning(s)</p><p>  解決方法:對MAXN進行定義,在第三行加入#define MAXN 35</p><p>  3.2.2主要程序運行結果</p><p><b>  運行開始</b></p><p&g

98、t;<b>  選擇1輸入成績</b></p><p><b>  選擇2 輸出成績</b></p><p>  選擇3按平均分排序 再按2輸出成績</p><p>  選擇4查找(輸入學號1)</p><p><b>  選擇5插入新數(shù)據(jù)</b></p><

99、;p>  選擇6按學號刪除(輸入學號3)</p><p>  選擇7按平均分輸出統(tǒng)計信息</p><p><b>  選擇8保存</b></p><p><b>  選擇0退出</b></p><p><b>  總 結</b></p><p&g

100、t;  由于本課題中的許多知識點都沒有學過都要靠自己到課外的資料中去查找。在用的時候難免出現(xiàn)這樣那樣的錯誤。如開始設計出來的菜單不是預想的那樣,而是總個窗中出現(xiàn)混亂。解決的這個問題的辦法是調整。一個系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設計的這個系統(tǒng)。在設計的調試過程中也無法順利的完成調試工作。有了一個清晰簡單的菜單和一些提示信息這后,調試過程完成的非常順利。</p><p>  回顧起

101、此次課程設計,至今我仍感慨頗多,的確,從拿到題目到完成整個編程,從理論到實踐,在整整半個月的日子里,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難

102、重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結構體……通過這次課程設計之后,一定把以前所學過的知識本次課程設計結束了,對于我的影響很大。我通過這次實踐學到了許多知識。學到了設計一個簡單的系統(tǒng)。要注意哪些方面。也使我知道自己哪些方面做得還不夠。</p><p>  但我出總結出了一點點的經(jīng)驗如下:</p&g

溫馨提示

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

評論

0/150

提交評論