c語(yǔ)言程序設(shè)計(jì)報(bào)告-班級(jí)學(xué)生成績(jī)管理系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  C語(yǔ)言程序設(shè)計(jì)</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  設(shè)計(jì)題目:班級(jí)學(xué)生成績(jī)管理系統(tǒng)</p><p>  專(zhuān) 業(yè): </p><p>  班 級(jí): </p><p>

2、  學(xué) 號(hào): </p><p>  姓 名: </p><p>  指導(dǎo)教師: </p><p>  時(shí)間:2011/06/12</p><p>  目 錄</p><p>  課程設(shè)計(jì)目的和要求……………………3</p><p&g

3、t;  課程設(shè)計(jì)任務(wù)內(nèi)容………………………4</p><p>  程序流程圖………………………………16</p><p>  軟件使用說(shuō)明……………………………17</p><p>  課程設(shè)計(jì)心得與體會(huì)……………………19</p><p>  一. 課程設(shè)計(jì)的目的和要求</p><p>  目的:本課程設(shè)計(jì)是計(jì)算機(jī)科

4、學(xué)與技術(shù)專(zhuān)業(yè)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計(jì)語(yǔ)言(C)》課程后進(jìn)行的一次全面的綜合練習(xí)。本課程設(shè)計(jì)的目的和任務(wù):</p><p>  1. 鞏固和加深學(xué)生對(duì)C語(yǔ)言課程的基本知識(shí)的理解和掌握</p><p>  2. 掌握C語(yǔ)言編程和程序調(diào)試的基本技能</p><p>  3. 利用C語(yǔ)言進(jìn)行基本的軟件設(shè)計(jì)</p><p>  4

5、. 掌握書(shū)寫(xiě)程序設(shè)計(jì)說(shuō)明文檔的能力</p><p>  5. 提高運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的能力</p><p><b>  程序功能和要求:</b></p><p><b>  學(xué)生記錄用結(jié)構(gòu)體</b></p><p>  學(xué)生信息數(shù)據(jù)用文件保存</p><p>  采用多文

6、件形式組織程序</p><p><b>  基本功能:</b></p><p><b>  增加學(xué)生記錄</b></p><p><b>  文件存儲(chǔ)</b></p><p><b>  讀取文件</b></p><p><b

7、>  刪除記錄 </b></p><p><b>  修改記錄</b></p><p><b>  查詢(xún)記錄 </b></p><p><b>  5.程序簡(jiǎn)潔易懂</b></p><p>  二.課程設(shè)計(jì)任務(wù)和內(nèi)容</p><p>&

8、lt;b>  代碼:</b></p><p>  #ifndef H_STUDENT_HH</p><p>  #define H_STUDENT_HH</p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p&

9、gt;  #include<conio.h></p><p>  #include<string.h></p><p>  #define NUM_SUBJECT 5 //科目數(shù)</p><p>  #define INITIAL_SIZE 100 //數(shù)組初始大小</p><

10、p>  #define INCR_SIZE 50 //數(shù)組每次增加的大小</p><p>  struct student_info{</p><p>  char number[15]; //學(xué)號(hào)</p><p>  char name[20]; //姓名</p&g

11、t;<p>  char gender[4]; //性別</p><p>  float score[NUM_SUBJECT]; //某學(xué)生的各科成績(jī)</p><p>  float sum; //總分</p><p>  float average;

12、 //平均分</p><p>  int index; //名次</p><p><b>  };</b></p><p>  typedef struct student_info StuInfo;</p><p>  extern int numStus;

13、 //記錄的學(xué)生數(shù)</p><p>  extern StuInfo* records; //記錄學(xué)生信息的數(shù)組</p><p>  extern char savedTag; //信息是否保存</p><p>  extern int arraySize; //數(shù)組大小<

14、;/p><p>  extern char* subject[];</p><p>  void handle_menu(void);</p><p>  int menu_select(void);</p><p>  void addRecord(void);</p><p>  void modifyRecord(v

15、oid);</p><p>  void display(void);</p><p>  void queryInfo(void);</p><p>  void removeRecord(void);</p><p>  int saveRecords(void);</p><p>  int loadRecord

16、s(void);</p><p>  void quit(void);</p><p>  void showTable(void);</p><p>  int findRecord(char* target,int targetType,int from);</p><p>  void copyRecord(StuInfo* src,S

17、tuInfo* dest);</p><p>  void sortInfo(void);</p><p>  int findRecord(char* target,int targetType,int from);</p><p>  int getIndex(float);</p><p>  #endif // H_STUDENT_

18、HH</p><p>  #include "student.h"</p><p>  //******************輸出表頭**********************</p><p>  void showTable(void)</p><p><b>  {</b></p>

19、<p><b>  int j;</b></p><p>  printf("學(xué)號(hào)\t姓名\t性別");</p><p>  for(j=0;j<NUM_SUBJECT;j++)</p><p>  printf(" %s ",subject[j]);</p><

20、p>  printf(" 總分 平均分 名次\n");</p><p><b>  }</b></p><p>  //****************顯示所有學(xué)生信息函數(shù)******************</p><p>  void display(void)</p><p>&

21、lt;b>  {</b></p><p><b>  int i,j;</b></p><p>  if(numStus==0)</p><p><b>  {</b></p><p>  printf("沒(méi)有可供顯示的記錄!");</p><

22、;p><b>  return;</b></p><p><b>  }</b></p><p>  showTable();</p><p>  for(i=0;i<numStus;i++)</p><p><b>  {</b></p><p

23、>  printf("%4s\t%3s\t%3s",records[i].number,records[i].name,records[i].gender);</p><p>  for(j=0;j<NUM_SUBJECT;j++)</p><p>  printf("\ %.1f ",records[i].score[j]);<

24、/p><p>  printf(" %.1f %.1f %d\n",records[i].sum,records[i].average,records[i].index);</p><p>  if(i%19==0 && i!=0)</p><p><b>  {</b></p>&l

25、t;p>  printf("輸入一行字符后繼續(xù)...\n");</p><p><b>  getch();</b></p><p>  printf("\n\n");</p><p>  showTable();</p><p><b>  }</b>

26、</p><p><b>  }</b></p><p><b>  }</b></p><p>  //*******************在當(dāng)前表的末尾增加新的信息*************************</p><p>  void addRecord(void)</p>

27、;<p><b>  {</b></p><p>  char str[10];</p><p><b>  int j;</b></p><p>  float mark,sum;</p><p>  if(numStus==0)</p><p>  prin

28、tf("原來(lái)沒(méi)有記錄,現(xiàn)在建立新表\n");</p><p><b>  else</b></p><p>  printf("先面在當(dāng)前的末尾增加新的信息\n");</p><p><b>  while(1)</b></p><p><b>  

29、{</b></p><p>  printf("您將要添加一組信息,確定嗎?(y/n)");</p><p>  gets(str);</p><p>  if(str[0]=='n' || str[0]=='N')</p><p><b>  break;</b

30、></p><p>  if(numStus >= arraySize)</p><p><b>  {</b></p><p>  records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));</p><p>  if(records==NU

31、LL)</p><p><b>  {</b></p><p>  printf("memory falled!");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p> 

32、 arraySize=arraySize+INCR_SIZE;</p><p><b>  }</b></p><p>  printf("請(qǐng)輸入學(xué)號(hào):");</p><p>  gets(records[numStus].number);</p><p>  printf("請(qǐng)輸入姓名:&

33、quot;);</p><p>  gets(records[numStus].name);</p><p>  printf("請(qǐng)輸入性別(0為女,1為男):");</p><p>  gets(str);</p><p>  if(str[0]=='0')</p><p>  s

34、trcpy(records[numStus].gender,"女");</p><p><b>  else</b></p><p>  strcpy(records[numStus].gender,"男");</p><p><b>  sum=0;</b></p>

35、<p>  for(j=0;j<NUM_SUBJECT;j++)</p><p><b>  {</b></p><p>  printf("請(qǐng)輸入%s成績(jī):",subject[j]);</p><p>  gets(str);</p><p>  mark=(float)atof(s

36、tr);</p><p>  records[numStus].score[j]=mark;</p><p>  sum+=mark;</p><p><b>  }</b></p><p>  records[numStus].sum=sum;</p><p>  records[numStus

37、].average=sum/NUM_SUBJECT;</p><p>  records[numStus].index=getIndex(sum);</p><p>  numStus++;</p><p><b>  }</b></p><p>  printf("現(xiàn)在一共有%d條信息\n",num

38、Stus);</p><p>  savedTag=1;</p><p><b>  }</b></p><p>  //************找出總分為sum在第0至numStus-1個(gè)記錄中按升序排序的位置************</p><p>  int getIndex(float sum)</p>

39、;<p><b>  {</b></p><p><b>  int i;</b></p><p>  int count=0;</p><p>  for(i=0;i<numStus;i++)</p><p><b>  {</b></p>

40、<p>  if(records[i].sum<sum)</p><p><b>  {</b></p><p>  records[i].index++;</p><p><b>  }</b></p><p>  else if(records[i].sum>sum)<

41、;/p><p><b>  {</b></p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return count+1;</p

42、><p><b>  }</b></p><p>  #include "student.h"</p><p>  //******************文件存儲(chǔ)操作函數(shù)*********************</p><p>  int saveRecords(void)</p>&l

43、t;p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  char fname[30];</p><p>  if(numStus==0)</p><p><b>  {</b></p><p> 

44、 printf("沒(méi)有記錄可存!");</p><p>  return -1;</p><p><b>  }</b></p><p>  printf("請(qǐng)輸入要存入的文件名(直接回車(chē)選擇文件stu_info):");</p><p>  gets(fname);</p&

45、gt;<p>  if(strlen(fname)==0)</p><p>  strcpy(fname,"stu_info");</p><p>  if((fp=fopen(fname,"wb"))==NULL)</p><p><b>  {</b></p><p&

46、gt;  printf("不能存入文件!\n");</p><p>  return -1;</p><p><b>  }</b></p><p>  printf("\n存文件...\n");</p><p>  fwrite(records,sizeof(StuInfo)*n

47、umStus,1,fp);</p><p>  fclose(fp);</p><p>  printf("%d條記錄已經(jīng)存入文件,請(qǐng)繼續(xù)操作。\n",numStus);</p><p>  savedTag=0;</p><p><b>  return 0;</b></p><

48、p><b>  }</b></p><p>  //************************文件讀取操作函數(shù)****************************</p><p>  int loadRecords(void)</p><p><b>  {</b></p><p>

49、<b>  FILE *fp;</b></p><p>  char fname[30];</p><p>  char str[5];</p><p>  if(numStus!=0 && savedTag==0)</p><p><b>  {</b></p>&l

50、t;p>  printf("請(qǐng)選擇您是要覆蓋現(xiàn)有記錄(y),還是要將");</p><p>  printf("讀取的記錄添加到現(xiàn)有記錄之后(n)?\n");</p><p>  printf("直接回車(chē)則覆蓋現(xiàn)有記錄\n");</p><p>  gets(str);</p><

51、p>  if(str[0]=='n'||str[0]=='N')</p><p><b>  {</b></p><p>  savedTag=1;</p><p><b>  }</b></p><p><b>  else</b><

52、;/p><p><b>  {</b></p><p>  if(savedTag==1)</p><p><b>  {</b></p><p>  printf("讀取文件將會(huì)更改原來(lái)的記錄,");</p><p>  printf("是否保存原

53、來(lái)記錄?(y/n)");</p><p>  gets(str);</p><p>  if(str[0]!='n'&&str[0]!='N')</p><p>  saveRecords();</p><p><b>  }</b></p><

54、;p>  numStus=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入要讀取的文件名(直接回車(chē)選擇文件stu_info):");</p><p>  gets(fname);</p&g

55、t;<p>  if(strlen(fname)==0)</p><p>  strcpy(fname,"stu_info");</p><p>  if((fp=fopen(fname,"rb"))==NULL)</p><p><b>  {</b></p><p&g

56、t;  printf("打不開(kāi)文件!請(qǐng)重新選擇\'n");</p><p>  return -1;</p><p><b>  }</b></p><p>  printf("\n取文件...\n");</p><p>  while(!feof(fp))</p&g

57、t;<p><b>  {</b></p><p>  if(numStus>=arraySize)</p><p><b>  {</b></p><p>  records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));</p&g

58、t;<p>  if(records==NULL)</p><p><b>  {</b></p><p>  printf("memory failed!");</p><p><b>  exit(-1);</b></p><p><b>  }<

59、;/b></p><p>  arraySize=arraySize+INCR_SIZE;</p><p><b>  }</b></p><p>  if(fread(&records[numStus],sizeof(StuInfo),1,fp)!=1) break;</p><p>  //按照addR

60、ecord函數(shù)的方法,更新名次</p><p>  records[numStus].index = getIndex(records[numStus].sum);</p><p>  numStus++;</p><p><b>  }</b></p><p>  fclose(fp);</p><

61、p>  printf("現(xiàn)在共有%d條記錄。",numStus);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  #include "student.h"</p><p>  //**

62、****************文件存儲(chǔ)操作函數(shù)*********************</p><p>  int saveRecords(void)</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  char fname[30]

63、;</p><p>  if(numStus==0)</p><p><b>  {</b></p><p>  printf("沒(méi)有記錄可存!");</p><p>  return -1;</p><p><b>  }</b></p>

64、<p>  printf("請(qǐng)輸入要存入的文件名(直接回車(chē)選擇文件stu_info):");</p><p>  gets(fname);</p><p>  if(strlen(fname)==0)</p><p>  strcpy(fname,"stu_info");</p><p>  

65、if((fp=fopen(fname,"wb"))==NULL)</p><p><b>  {</b></p><p>  printf("不能存入文件!\n");</p><p>  return -1;</p><p><b>  }</b></p

66、><p>  printf("\n存文件...\n");</p><p>  fwrite(records,sizeof(StuInfo)*numStus,1,fp);</p><p>  fclose(fp);</p><p>  printf("%d條記錄已經(jīng)存入文件,請(qǐng)繼續(xù)操作。\n",numStus

67、);</p><p>  savedTag=0;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  //************************文件讀取操作函數(shù)****************************</

68、p><p>  int loadRecords(void)</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  char fname[30];</p><p>  char str[5];</p>&l

69、t;p>  if(numStus!=0 && savedTag==0)</p><p><b>  {</b></p><p>  printf("請(qǐng)選擇您是要覆蓋現(xiàn)有記錄(y),還是要將");</p><p>  printf("讀取的記錄添加到現(xiàn)有記錄之后(n)?\n");<

70、;/p><p>  printf("直接回車(chē)則覆蓋現(xiàn)有記錄\n");</p><p>  gets(str);</p><p>  if(str[0]=='n'||str[0]=='N')</p><p><b>  {</b></p><p>  

71、savedTag=1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(savedTag==1)</p><p><b>  {</b

72、></p><p>  printf("讀取文件將會(huì)更改原來(lái)的記錄,");</p><p>  printf("是否保存原來(lái)記錄?(y/n)");</p><p>  gets(str);</p><p>  if(str[0]!='n'&&str[0]!='

73、;N')</p><p>  saveRecords();</p><p><b>  }</b></p><p>  numStus=0;</p><p><b>  }</b></p><p><b>  }</b></p>&

74、lt;p>  printf("請(qǐng)輸入要讀取的文件名(直接回車(chē)選擇文件stu_info):");</p><p>  gets(fname);</p><p>  if(strlen(fname)==0)</p><p>  strcpy(fname,"stu_info");</p><p>  i

75、f((fp=fopen(fname,"rb"))==NULL)</p><p><b>  {</b></p><p>  printf("打不開(kāi)文件!請(qǐng)重新選擇\'n");</p><p>  return -1;</p><p><b>  }</b&g

76、t;</p><p>  printf("\n取文件...\n");</p><p>  while(!feof(fp))</p><p><b>  {</b></p><p>  if(numStus>=arraySize)</p><p><b>  {&

77、lt;/b></p><p>  records=realloc(records,(arraySize+INCR_SIZE)*sizeof(StuInfo));</p><p>  if(records==NULL)</p><p><b>  {</b></p><p>  printf("memory

78、 failed!");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  arraySize=arraySize+INCR_SIZE;</p><p><b>  }</b></p>&l

79、t;p>  if(fread(&records[numStus],sizeof(StuInfo),1,fp)!=1) break;</p><p>  //按照addRecord函數(shù)的方法,更新名次</p><p>  records[numStus].index = getIndex(records[numStus].sum);</p><p>  

80、numStus++;</p><p><b>  }</b></p><p>  fclose(fp);</p><p>  printf("現(xiàn)在共有%d條記錄。",numStus);</p><p><b>  return 0;</b></p><p>

81、;<b>  }</b></p><p>  #include "student.h"</p><p>  //*********************學(xué)生信息排序函數(shù)*************************</p><p>  void sortInfo(void)</p><p>&l

82、t;b>  {</b></p><p>  char str[5];</p><p><b>  int i,j;</b></p><p>  StuInfo tmps;</p><p>  if(numStus==0)</p><p><b>  {</b>

83、;</p><p>  printf("沒(méi)有可供排序的記錄!");</p><p><b>  return; </b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入您希望進(jìn)行排序的方式:\n");</p>

84、<p>  printf("1.按學(xué)號(hào)進(jìn)行升序排序\n");</p><p>  printf("2.按學(xué)號(hào)進(jìn)行降序排序\n");</p><p>  printf("3.按姓名進(jìn)行升序排序\n");</p><p>  printf("4.按姓名進(jìn)行降序排序\n");<

85、/p><p>  printf("5.按名次進(jìn)行升序排序\n");</p><p>  printf("6.按名次進(jìn)行降序排序\n");</p><p>  printf("7.按錯(cuò)了,現(xiàn)在并不想進(jìn)行排序\n");</p><p>  gets(str);</p><

86、p>  if(str[0]<'1'||str[0]>'6') return;</p><p><b>  //進(jìn)行排序</b></p><p>  for(i=0;i<numStus-1;i++)</p><p><b>  {</b></p><

87、p>  for(j=i+1;j<numStus;j++)</p><p><b>  {</b></p><p>  if((str[0]=='1' && strcmp(records[i].number,records[j].number)>0) ||</p><p>  (str[0]==&

88、#39;2' && strcmp(records[i].number,records[j].number)<0) ||</p><p>  (str[0]=='3' && strcmp(records[i].name,records[j].name)>0) ||</p><p>  (str[0]=='4'

89、 && strcmp(records[i].name,records[j].name)<0) ||</p><p>  (str[0]=='5' && records[i].index>records[j].index) ||</p><p>  (str[0]=='6' && records[i]

90、.index<records[j].index))</p><p><b>  {</b></p><p>  copyRecord(&records[i],&tmps);</p><p>  copyRecord(&records[j],&records[i]);</p><p>

91、  copyRecord(&tmps,&records[j]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("排序已經(jīng)完成\n")

92、;</p><p>  savedTag=1;</p><p><b>  }</b></p><p>  #include "student.h"</p><p><b>  //初始化</b></p><p>  int numStus=0;

93、 //記錄學(xué)生數(shù)</p><p>  StuInfo *records=NULL; //記錄學(xué)生信息</p><p>  char savedTag=0; //信息保存標(biāo)志,1為未保存,0為已保存</p><p>  int array

94、Size; //數(shù)組大小</p><p>  char* subject[]={"高數(shù)","英語(yǔ)","線代","物理","電工","體育"};</p><p>  //*****************主函數(shù)*****

95、*********************</p><p>  int main()</p><p><b>  {</b></p><p>  records=(StuInfo*)malloc(sizeof(StuInfo)*INITIAL_SIZE);</p><p>  if(records==NULL)</

96、p><p><b>  {</b></p><p>  printf("memory fall!");</p><p><b>  exit(-1);</b></p><p><b>  }</b></p><p>  arraySize

97、=INITIAL_SIZE;</p><p>  printf("\n");</p><p>  printf("\t****************************\n");</p><p>  printf("\t* 這是一個(gè) *\n");</p>

98、<p>  printf("\t* 學(xué)生成績(jī)管理程序 *\n");</p><p>  printf("\t* 可以對(duì)學(xué)生成績(jī)進(jìn)行管理 *\n");</p><p>  printf("\t* 歡迎使用管理系統(tǒng) *\n");</p><p>  printf(&

99、quot;\t****************************\n");</p><p>  printf("\n");</p><p>  handle_menu();</p><p><b>  }</b></p><p>  //******************菜單處理函數(shù)

100、***********************</p><p>  void handle_menu(void)</p><p><b>  {</b></p><p><b>  for(;;){</b></p><p>  switch(menu_select())</p><

101、;p><b>  {</b></p><p><b>  case 1:</b></p><p>  addRecord();</p><p><b>  break;</b></p><p><b>  case 2:</b></p>

102、<p>  modifyRecord();</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  display();</p><p><b>  break;</b></p><

103、;p><b>  case 4:</b></p><p>  queryInfo();</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  removeRecord();</p><

104、p><b>  break;</b></p><p><b>  case 6:</b></p><p>  saveRecords();</p><p><b>  break;</b></p><p><b>  case 7:</b></

105、p><p>  loadRecords();</p><p><b>  break;</b></p><p><b>  case 8:</b></p><p>  sortInfo();</p><p><b>  break;</b></p>

106、;<p><b>  case 9:</b></p><p><b>  quit();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>&l

107、t;/p><p>  //*********************菜單選擇函數(shù)*************************</p><p>  int menu_select()</p><p><b>  {</b></p><p>  char s[2];</p><p><b>

108、;  int cn=0;</b></p><p>  printf("\n");</p><p>  printf("\t1.增加學(xué)生信息\n");</p><p>  printf("\t2.修改學(xué)生信息\n");</p><p>  printf("\t3.

109、顯示學(xué)生信息\n");</p><p>  printf("\t4.查詢(xún)學(xué)生信息\n");</p><p>  printf("\t5.刪除學(xué)生信息\n");</p><p>  printf("\t6.保存學(xué)生信息至記錄文件\n");</p><p>  printf(&

110、quot;\t7.從記錄文件讀取學(xué)生信息\n");</p><p>  printf("\t8.排序?qū)W生信息\n");</p><p>  printf("\t9.結(jié)束運(yùn)行\(zhòng)n");</p><p>  printf("\n左邊數(shù)字對(duì)應(yīng)功能選擇,請(qǐng)選1-9:\t");</p><

111、;p><b>  for(;;)</b></p><p><b>  {</b></p><p><b>  gets(s);</b></p><p>  cn=atoi(s);</p><p>  if(cn<1||cn>9) printf("\n

112、\t輸入錯(cuò)誤,重選1-9:");</p><p>  else break;</p><p><b>  }</b></p><p>  return cn;</p><p><b>  }</b></p><p>  //*********************

113、*結(jié)束運(yùn)行*************************</p><p>  void quit(void)</p><p><b>  {</b></p><p>  char str[5];</p><p>  if(savedTag==1)</p><p><b>  {<

114、;/b></p><p>  printf("是否保存原來(lái)的記錄?(y/n)");</p><p>  gets(str);</p><p>  if(str[0]!='n' && str[0]!='N')</p><p>  saveRecords();</p&

115、gt;<p><b>  }</b></p><p>  free(records);</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p><b>  1.總體設(shè)計(jì):</b></

116、p><p>  本設(shè)計(jì)有4個(gè)C文件(14個(gè)函數(shù))和一個(gè)頭文件組成,每個(gè)C文件都代表著某種特定功能,他們的關(guān)系如表12-1</p><p><b>  所示。</b></p><p>  程序包含頭文件的存、取過(guò)程,其功能就是按輸入順序建立記錄。如果原來(lái)沒(méi)有記錄文件,可以重新建立一個(gè)文件;</p><p>  如果已經(jīng)有記錄,

117、可以先把文件內(nèi)容讀入,然后把新記錄追加到原來(lái)記錄的尾部;也可以單獨(dú)建立新文件,以后再使用</p><p>  讀取文件的方法拼裝。</p><p>  表12—1 文件及函數(shù)組成</p><p>  由上述功能分析可以看到改程序的全貌。因?yàn)樗胁⒘羞x擇,所</p><p>  可以用選擇菜單方便地實(shí)現(xiàn)。這個(gè)菜單具有8項(xiàng),用switch語(yǔ)句可&

118、lt;/p><p>  以實(shí)現(xiàn)這些選擇。所以用簡(jiǎn)潔的偽碼對(duì)它們進(jìn)行選擇,因?yàn)椴⒉粡?fù)雜,所以這里不自在贅述。</p><p><b>  2.函數(shù)具體設(shè)計(jì)</b></p><p>  為一些函數(shù)設(shè)計(jì)兩個(gè)返回值以區(qū)分其執(zhí)行結(jié)果是否正確。每個(gè)學(xué)生信息資料用一個(gè)StnInfo結(jié)構(gòu)來(lái)保存,用StuInfo數(shù)組的全局變量records來(lái)保存一批學(xué)生的信息資料。

119、宏定義INTIAL_SIZE表示數(shù)組初始大小,當(dāng)已分配的數(shù)組大小不夠用時(shí),敬愛(ài)那個(gè)增加數(shù)組大小,INCR_SIZE為每次增加的大小。全局變量numStus 表示數(shù)組中記錄的學(xué)生數(shù),arraySize是為數(shù)組分配的空間大小。全局變量savedTag是信息是否保存的標(biāo)志,當(dāng)數(shù)組內(nèi)容被保存只文件后,設(shè)為‘’以保存‘’狀態(tài),當(dāng)數(shù)組內(nèi)容被修改之后,設(shè)為“未保存”狀態(tài)。</p><p><b>  .文件存儲(chǔ)操作函

120、數(shù)</b></p><p>  函數(shù)原型:int savedRecord(void)</p><p>  功 能:將及錄存入默認(rèn)文件 stu_info 或者指定文件。</p><p>  參 數(shù):void。</p><p>  返 回 值:成功0,失敗-1。</p><p>  工作方式:數(shù)組r

121、ecords被保存至指定文件。</p><p>  要 求:報(bào)告是否有記錄可保存、是否能正常建立或打開(kāi)文件、根據(jù)要求執(zhí)行存入操作并報(bào)告存入記錄的條數(shù)。</p><p><b>  .文件讀取操作函數(shù)</b></p><p>  函數(shù)原型:int loadRecords(void)</p><p>  功 能:

122、將默認(rèn)文件stu_info 或者指定文件里的記錄存入內(nèi)存。</p><p>  參 數(shù):void。</p><p>  返 回 值:成功0,失敗-1。</p><p>  工作方式:records 為從指定文件中讀取出記錄。</p><p>  要 求:報(bào)告是否有記錄可存、是否能正常打開(kāi)文件、是否覆蓋已有記錄以及讀取記錄的條數(shù)。&

123、lt;/p><p>  .顯示所有學(xué)生信息函數(shù)</p><p>  函數(shù)原型:void display(void)</p><p>  功 能:顯示內(nèi)存里的記錄信息。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  工作方式:從頭文

124、件開(kāi)始逐個(gè)顯示記錄內(nèi)容。</p><p>  要 求:報(bào)告是否有記錄及記錄條數(shù)和內(nèi)容。</p><p><b>  .增加信息函數(shù)</b></p><p>  函數(shù)原型:void addRecord(void)</p><p>  功 能:增加記錄。</p><p>  參 數(shù):

125、void。</p><p>  返 回 值:void。</p><p>  工作方式:從尾部開(kāi)始逐個(gè)追加記錄。</p><p>  要 求:將新記錄追加在記錄尾部,并對(duì)記錄進(jìn)行計(jì)數(shù)。</p><p><b>  .輸出表頭函數(shù)</b></p><p>  函數(shù)原型:void showTabl

126、e(void)</p><p>  功 能:輸出表頭信息。</p><p>  改表頭里面含有學(xué)生學(xué)號(hào),姓名,性別,及各學(xué)科名稱(chēng),總分,平均分,這樣以后每一次要輸出學(xué)生信息是直接就可以用此函數(shù),減少程序的代碼,是程序簡(jiǎn)單化。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p>

127、<p>  工作方式:輸出頭一行表頭信息。</p><p>  要 求:輸出一行表頭信息。</p><p><b>  .刪除記錄函數(shù)</b></p><p>  函數(shù)原型:void removerecord(void)</p><p>  功 能:刪除內(nèi)存數(shù)組中指定記錄。</p>&

128、lt;p>  如果有的學(xué)生信息發(fā)生改變,你可以丟它進(jìn)行刪除,刪除之前,你必須找到你要修改學(xué)生的記錄,你可以根據(jù)姓名,學(xué)號(hào)超找改學(xué)生的信息,找到之后,若要?jiǎng)h除,就對(duì)它進(jìn)行刪除。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  工作方式:根據(jù)給定的關(guān)鍵字,查找符合的記錄并刪除之。</p>

129、<p>  要 求:將后面的記錄前移,同時(shí)改變名次并給出相關(guān)信息。</p><p><b>  .查找指定記錄函數(shù)</b></p><p>  函數(shù)原型:void findRecord(char*,int,int)</p><p>  功 能:查找指定記錄。</p><p>  參 數(shù):cha

130、r *target:欲查找記錄的某一項(xiàng)與target相同。</p><p>  int targetType:表明通過(guò)哪一項(xiàng)來(lái)查找,0為學(xué)號(hào),</p><p>  1為姓名,2為名次。</p><p>  int from:從第from個(gè)記錄開(kāi)始找。</p><p>  返 回 值:int(找到的記錄序號(hào)),若找不到則返回-1。</p&

131、gt;<p>  工作方式:根據(jù)給定的關(guān)鍵字,查找符合記錄的序號(hào)。</p><p>  要 求:找不到則返回-1。</p><p>  .查找指定學(xué)生信息函數(shù)</p><p>  函數(shù)原型:void queryInfo(void)</p><p>  功 能:將一個(gè)文件的內(nèi)容追加到另一個(gè)文件的尾部。</p>

132、;<p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  工作方式:可以按照學(xué)號(hào)、姓名或名次來(lái)查詢(xún)。</p><p>  要 求:打印查詢(xún)到得學(xué)生信息或給出相關(guān)信息。</p><p><b>  .記錄復(fù)制函數(shù)</b></p><p&g

133、t;  函數(shù)原型:void copyRecord(stuInfo*, stuInfo*)</p><p>  功 能:將src指向的一條記錄復(fù)制給dest指向的記錄。</p><p>  參 數(shù):StuInfo* src為源記錄StuInfo* dest為目的記錄。</p><p>  返 回 值:void。</p><p>  

134、工作方式:將源記錄逐條復(fù)制到目的記錄。</p><p>  要 求:正確復(fù)制字符串。</p><p>  .修改指定學(xué)生信息函數(shù)</p><p>  函數(shù)原型:void modifyRecord(void)</p><p>  功 能:找到指定記錄并修改。如果有的學(xué)生信息發(fā)生改變,你可以丟它進(jìn)行修改,修改之前,你必須找到你要修改學(xué)

135、生的記錄,你可以根據(jù)姓名,學(xué)號(hào)超找改學(xué)生的信息,找到之后,若要修改,就對(duì)它進(jìn)行修改。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  工作方式:可以按照學(xué)號(hào)、姓名活名次找到要修改的記錄,確認(rèn)后方可修改。</p><p>  要 求:同時(shí)需要調(diào)整名次。</p>&

136、lt;p><b>  .菜單處理函數(shù)函數(shù)</b></p><p>  函數(shù)原型:void handle_menu(void)</p><p>  功 能:處理選擇的菜單命令。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  

137、工作方式:根據(jù)命令,調(diào)用相應(yīng)函數(shù)。</p><p>  要 求:給出結(jié)束信息。</p><p><b>  .菜單選擇函數(shù)</b></p><p>  函數(shù)原型:void menu_select(void)</p><p>  功 能:接受用戶選擇代碼。</p><p>  參

138、數(shù):void。</p><p>  返 回 值:int。</p><p>  工作方式:返回命令代碼整數(shù)值。</p><p>  要 求:只允許選擇規(guī)定鍵,若果輸入不符合要求,則提醒用戶重新輸入。</p><p><b>  .結(jié)束程序運(yùn)行函數(shù)</b></p><p>  函數(shù)原型:void

139、 quit(ADDR*)</p><p>  功 能:結(jié)束程序運(yùn)行。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  工作方式:根據(jù)要求決定在退出前是否將修改的記錄存入文件。</p><p>  要 求:結(jié)束運(yùn)行之前,詢(xún)問(wèn)是否丟修改的記錄進(jìn)行存儲(chǔ)

140、。</p><p><b>  排序函數(shù)</b></p><p>  函數(shù)原型:sortInfo(void)</p><p>  功 能:對(duì)學(xué)生的總進(jìn)行排序,可以按照升序,降序,對(duì)學(xué)生成績(jī)或?qū)W號(hào)進(jìn)行準(zhǔn)確的排名。</p><p>  參 數(shù):void。</p><p>  返 回 值:v

141、oid。</p><p>  工作方式:對(duì)學(xué)生進(jìn)行排序,可以根據(jù)需要,對(duì)學(xué)生的學(xué)號(hào)或者成績(jī)進(jìn)行升序或者降序。你通過(guò)選擇1—7中的選項(xiàng)來(lái)滿足你的需求。</p><p>  要 求:升序或者降序。</p><p><b>  .主函數(shù)</b></p><p>  函數(shù)原型:void main(void)</p&g

142、t;<p>  功 能:控制程序。</p><p>  參 數(shù):void。</p><p>  返 回 值:void。</p><p>  要 求:管理菜單命令并完成初始化。</p><p><b>  .頭文件</b></p><p>  文件名稱(chēng):student

143、.h</p><p>  功 能:聲明函數(shù)原型,包含文件及自定義宏和數(shù)據(jù)結(jié)構(gòu)。</p><p>  要 求:報(bào)告是否能正常打開(kāi)文件執(zhí)行存入操作及存入記錄條數(shù)。</p><p>  #ifndef H_STUDENT_HH</p><p>  #define H_STUDENT_HH</p><p>  用來(lái)

144、防止重復(fù)包含的。這種比較怪異方式,不如STUDENT_H那樣清晰明了,目的是盡量避免可能出現(xiàn)的重復(fù)的宏定義。</p><p>  在頭文件是,對(duì)于系統(tǒng)庫(kù)投文件,使用“<>”形勢(shì),表示從系統(tǒng)查找頭文件;對(duì)于自己建立的頭文件,如student.h,使用 #include“student”的形勢(shì),表示處理系統(tǒng)庫(kù)目錄外,還要從目錄去查找頭文件。</p><p>  這14個(gè)函

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論