2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  2010-2011(二)C程序設計課程設計報告</p><p>  課設題目: 學生成績簡單管理程序一 </p><p>  學生學號: </p><p>  課設教師: </p><p>  日 期: 2011.5.31

2、 </p><p>  一.程序主要功能:(寫出程序完成的主要功能)</p><p>  用結(jié)構(gòu)體數(shù)組結(jié)構(gòu)實現(xiàn)簡單的學生成績管理功能,要求具有數(shù)據(jù)輸入、數(shù)據(jù)輸出、數(shù)組排序、元素插入、元素刪除、查詢等功能。</p><p><b>  各菜單功能:</b></p><p>  Input Records(輸入若干條記

3、錄)</p><p>  從鍵盤一次輸入一個學生的姓名和成績(一條記錄),依次存放到結(jié)構(gòu)體數(shù)組中。摻入一條記錄后,顯示提示信息:確認是否輸入下一條記錄,如確認,繼續(xù)輸入,否則,退出輸入功能。</p><p>  Display All Record(顯示所有記錄)</p><p>  按順序顯示表中所有記錄,每屏顯示十條記錄。每顯示十條記錄,按<ENTER&g

4、t;鍵繼續(xù)顯示下一屏。</p><p>  3. Sort(排序)</p><p>  以姓名為序排列數(shù)組。</p><p>  4. Insert a Record(插入一條記錄)</p><p>  在以姓名為序排列的數(shù)組中插入一條記錄,插入后數(shù)組仍有序。輸出插入成功的信息。</p><p>  5.

5、Delete a Record(按姓名查找,刪除一條記錄)</p><p>  輸入待刪除記錄的姓名,顯示提示信息,讓用戶再次確認是否要刪除。確認后,將該姓名的記錄刪除。</p><p>  6. Query(查找并顯示一個記錄)</p><p>  輸入姓名,查找該記錄,并顯示該同學的成績。</p><p>  7. Add Rec

6、ords from a Text File(從正文文件中添加數(shù)據(jù)到結(jié)構(gòu)體數(shù)組中)</p><p>  用戶可事前建立一個正文文件data.txt,存放多個待加入的記錄。提示輸入正文文件的文件名,然后從該文件中一次性加入多條學生記錄。文件data,txt格式如下:</p><p><b>  2</b></p><p>  Wang Xiao

7、 95</p><p>  LiuLin 87</p><p>  8. Write to a Text file </p><p>  將數(shù)組中的全部記錄寫入文件records.txt,要求文件格式和文件data.txt相同。</p><p>  9. Quit(退出學生成績管理程序)</p><p&g

8、t;  二.說明:(寫出對題目的分析,設計中遇到的主要問題及解決方法,對設計的感想和心得。如有新增加的功能,給出增加功能的設計說明)</p><p><b>  1.題目分析 </b></p><p>  該題主要考察對結(jié)構(gòu)體,指針,文件的操作,以及C語言算法的掌握,所以完成此道題目要求較強的設計能力,尤其是要有一種大局觀的意識。如何調(diào)程序也非常重要,通過這個程序可以

9、學習到以前調(diào)試短程序沒有的的經(jīng)驗。 </p><p>  菜單中的每一個選項都對應一個子程序,子程序的算法幾乎囊獲了所有C語言學過的技巧,下面就各個子程序中的功能進行說明: </p><p>  功能1和4的算法相似,輸入一條記錄到結(jié)構(gòu)體中去,其中有一部很關鍵,就是通過gets將所有的多余的字符,回車讀去,否則就會出錯。 </p><p>  功能2是顯示所有的記錄

10、,通過循環(huán)輸出,格式也比較重要。 </p><p>  功能3為按學號排序,因為學號定義成了字符數(shù)組的形式,因此在運用冒泡法進行排序的時候,要用到strcmp,strcpy等函數(shù)。 </p><p>  功能5為按姓名刪除記錄,先輸入姓名,再一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,返回n-1。 </p><p>  功能6的算法在5中就已經(jīng)

11、體現(xiàn)了,輸入姓名,一一比較。 </p><p>  功能7為新增的功能,因為考慮到原來給出的函數(shù)中竟然沒有對學生成績的統(tǒng)計功能,因此新增此功能,可以得出所有的記錄個數(shù),最高、最低、平均分,并輸出相關的學生信息等。 </p><p>  功能8和9是對文件的操作,提前準備好數(shù)據(jù)。 </p><p>  2. 在寫程序中遇到的問題:</p><p&g

12、t;  開始時無法正確完成“確認后再繼續(xù)”我先是自己認真耐心地用很多方法調(diào)試修改,然后問了幾個同學,解決了這個問題,還有有關文件讀寫的問題,因為是上課時沒有聽太明白,所以自己再次仔細看了一遍書,分析書中例題,然后再運用到該程序的編寫中,在同學的幫助下解決了。面對遇到的其他很多或大或小的問題主要都是和同學交流探討與問老師相結(jié)合的方式來達到徹底的解決的。</p><p><b>  3. 心得體會:<

13、;/b></p><p>  編這樣一個程序在之前看的時候總是覺得不可能做到,完全沒有思路,不過當靜下心坐在電腦前仔細看完要求和提示后,一步一步地編寫,慢慢地發(fā)現(xiàn)其實只要肯想肯問就能積少成多,完成這樣一個在我們之前看來很復雜的程序設計。兩百多行的程序內(nèi)容很多,有的地方也很復雜,尤其是一些細節(jié)問題,粗心地丟三落四,造成很多不必要的錯誤并且很難發(fā)現(xiàn),因此的確是對我毅力的一種考驗。完成之后程序運行到第一次輸入數(shù)據(jù)

14、總是會停止,不得不對300多行的程序進行單步調(diào)試,再次解決了之前沒有發(fā)現(xiàn)的問題之后,發(fā)現(xiàn)編程需要非常嚴謹?shù)膽B(tài)度和足夠的耐心,否則就會因為一些問題而卡住甚至放棄。當然在整個過程中,同學幫助解決了許多自己沒有意識到得錯誤,換一個角度,才能發(fā)現(xiàn)問題吧。</p><p><b>  三.源程序</b></p><p>  #include <stdio.h> /

15、*調(diào)用庫函數(shù)*/</p><p>  #include <stdlib.h></p><p>  #include <ctype.h></p><p>  #include <string.h></p><p>  #define NULL 0</p><p>  typedef s

16、truct /*定義結(jié)構(gòu)體數(shù)組*/</p><p><b>  {</b></p><p>  char name[20]; /*姓名*/</p><p>  float score; /*成績*/ </p><p><b>  }Student;</b></p><p

17、>  int menu_select(); /*個函數(shù)的類型聲明*/</p><p>  int Input(Student stud[],int n);</p><p>  void Display(Student stud[],int n);</p><p>  void Sort_by_Name(Student stud[],int n);</

18、p><p>  int Insert(Student stud[],int n,Student *s);</p><p>  int Insert_a_record(Student stud[],int n);</p><p>  int Delete(Student stud[],int n,char *name);</p><p>  int

19、 Delete_a_record(Student stud[],int n);</p><p>  int Query(Student stud[],int n,char *name);</p><p>  void Query_a_record(Student stud[],int n);</p><p>  int AddfromText(Student stu

20、d[],int n,char*filename);</p><p>  void WritetoText(Student stud[],int n,char*filename);</p><p>  void Quit();</p><p>  void Display_Main_Menu();</p><p>  Student s,t;

21、 /*定義結(jié)構(gòu)體變量*/</p><p>  Student stud[40];/*定義結(jié)構(gòu)體數(shù)組變量*/ </p><p>  void main() /*主函數(shù)*/</p><p><b>  {</b></p><p>  int n=0; /*定義文件的記錄數(shù)變量*/</p><

22、p>  char filename[20]; </p><p><b>  for(;;)</b></p><p><b>  { </b></p><p>  switch(menu_select()) /*判斷使用者需要使用的程序*/</p><p><b>  {</b

23、></p><p>  case 1 : /*執(zhí)行1所代表的函數(shù)功能*/</p><p>  printf("\tInput Records:\n");</p><p>  n=Input(stud,n);</p><p>  system("pause");</p><p

24、><b>  break;</b></p><p><b>  case 2 :</b></p><p>  printf("\tDisplay All Record :\n");</p><p>  Display(stud,n);</p><p>  system(&q

25、uot;pause");</p><p><b>  break;</b></p><p><b>  case 3 :</b></p><p>  printf("\tSort:\n");</p><p>  Sort_by_Name(stud,n);</p&g

26、t;<p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 4 :</b></p><p>  printf("\tInsert a Record:\n");</p><p

27、>  n=Insert_a_record(stud,n);</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 5 :</b></p><p>  printf("\tDel

28、ete a Record:\n");</p><p>  n=Delete_a_record(stud,n);</p><p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 6 :</b>&

29、lt;/p><p>  printf("\tQuery:\n");</p><p>  Query_a_record(stud,n);</p><p>  system("pause");</p><p><b>  break;</b></p><p><

30、;b>  case 7: </b></p><p>  printf("\tAdd Records from a Text File:\n");</p><p>  n=AddfromText(stud,n,filename);</p><p>  system("pause");</p>&l

31、t;p><b>  break;</b></p><p><b>  case 8 :</b></p><p>  printf("\tWrite to a Text File:\n");</p><p>  WritetoText(stud,n,filename);</p><

32、;p>  system("pause");</p><p><b>  break;</b></p><p><b>  case 0 :</b></p><p>  printf("\tQuit:");</p><p>  system("p

33、ause");</p><p>  exit(0); /*退出程序*/</p><p><b>  }</b></p><p><b>  } </b></p><p>  menu_select();/*返回菜單函數(shù)*/</p><p><b>  

34、}</b></p><p>  int menu_select() /*菜單函數(shù)*/ </p><p><b>  { </b></p><p><b>  char c;</b></p><p><b>  do{</b></p><p&

35、gt;  system("cls"); /*運行前清屏*/ </p><p>  printf("\n\t\t * Welcome to use this program ! *\n\n\n"); </p><p>  printf("\t\t\t1.Input Records\n"); </p>

36、<p>  printf("\t\t\t2.Display All Record\n");</p><p>  printf("\t\t\t3.Sort\n");</p><p>  printf("\t\t\t4.Insert a Record\n");</p><p>  printf(&q

37、uot;\t\t\t5.Delete a Record\n");</p><p>  printf("\t\t\t6.Query\n");</p><p>  printf("\t\t\t7.Add Records from a Text File\n");</p><p>  printf("\t\t\t

38、8.Write to a Text File\n");</p><p>  printf("\t\t\t0.Quit\n");</p><p>  printf("********************************************************************************\n");<

39、/p><p>  printf("Please Input Your Choice 0-8:");</p><p>  c=getchar(); /*讀入選擇*/ </p><p><b>  }</b></p><p>  while(c<'0'||c>'8'

40、;);</p><p>  return(c-'0');/*返回選擇*/ </p><p><b>  }</b></p><p>  int Input(Student stud[],int n) /*輸入若干條記錄*/ </p><p><b>  {</b></p

41、><p>  int i=0, p=1;</p><p><b>  char e;</b></p><p>  while(p!=0)</p><p><b>  {</b></p><p>  printf("\tplease input a name :"

42、;);</p><p>  scanf("%s",stud[i].name); /*輸入學生姓名*/</p><p>  getchar();</p><p>  printf("\tplease input the score:");</p><p>  scanf("%f",&

43、amp;stud[i].score); /*輸入學生成績*/</p><p>  getchar();</p><p><b>  i++;</b></p><p>  printf("Do you want to continue to input :(Y/N)?");</p><p>  scan

44、f("%c",&e);</p><p>  if (e=='n'||e=='N')</p><p><b>  p=0;</b></p><p><b>  }</b></p><p><b>  n=i;</b>&l

45、t;/p><p>  return(n);</p><p><b>  }</b></p><p>  void Display(Student stud[],int n)/*顯示所有記錄*/</p><p><b>  {</b></p><p><b>  int

46、i=0;</b></p><p>  printf("\tName\tScore\n");</p><p>  while(i<n) /*循環(huán)輸出學生的成績和學號*/</p><p><b>  {</b></p><p>  printf("\t%s\t%f\n&qu

47、ot;,stud[i].name,stud[i].score);</p><p>  if((i+1)%10==0) /*判斷是否十行暫停一下*/</p><p><b>  {</b></p><p>  system("pause"); </p><p><b>  }</b&g

48、t;</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void Sort_by_Name(Student stud[],int n) /*將所有數(shù)據(jù)按姓名排序*/</p&g

49、t;<p>  { int i,j;</p><p>  for (i=0;i<n-1;i++) /*選擇法排序*/</p><p>  { for(j=i;j<n;j++)</p><p>  if (strcmp(stud[i].name,stud[j].name)>0)</p><p>

50、  { t=stud[i];</p><p>  stud[i]=stud[j];</p><p>  stud[j]=t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("Succeed!&q

51、uot;);</p><p><b>  }</b></p><p>  int Insert (Student stud[],int n,Student *s) /*插入給定記錄*/</p><p><b>  { </b></p><p>  stud[n]=*s;</p>

52、<p><b>  n++;</b></p><p>  Sort_by_Name(stud,n); /*調(diào)用排序函數(shù)*/</p><p>  printf("successfully insert!"); /*返回成功信息*/ </p><p>  return(n);</p><p>

53、<b>  }</b></p><p>  int Insert_a_record(Student stud[],int n ) /*插入一條記錄*/</p><p><b>  {</b></p><p>  Student *p = (Student*)malloc(sizeof(Student));</p&g

54、t;<p>  printf("\tplease input a name :");</p><p>  scanf("%s",&p->name);</p><p>  printf("\tplease input the score:");</p><p>  scanf(&q

55、uot;%f",&p->score);</p><p>  n=Insert(stud,n,p); /*調(diào)用插入函數(shù)*/</p><p>  return(n);</p><p><b>  }</b></p><p>  int Delete(Student stud[],int n,char

56、 *name) /*刪除給定姓名的記錄*/</p><p><b>  {</b></p><p><b>  int i,k;</b></p><p>  for (i=0;i<n;i++) /*循環(huán)刪除操作*/</p><p><b>  { </b></

57、p><p>  if(strcmp(stud[i].name,name)== 0)</p><p><b>  { </b></p><p>  for(k=i;k<n;k++)</p><p><b>  {</b></p><p>  stud[k].score=stu

58、d[k+1].score;</p><p>  strcpy(stud[k].name,stud[k+1].name);</p><p><b>  }</b></p><p><b>  n--;</b></p><p>  printf("Delete successfully!&qu

59、ot;);/*返回成功信息*/ </p><p>  return(n);</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("This record doesn't exsit!");/*返回失敗信息*/

60、</p><p>  return (n);</p><p><b>  }</b></p><p>  int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/ </p><p><b>  {</b></p><p

61、>  char c,k[20],*p;</p><p><b>  p=k;</b></p><p>  printf("\tplease input a name:");</p><p>  scanf("%s",k);</p><p>  getchar(); /*讀入

62、姓名*/</p><p>  printf("Make sure that you really want to delete it :(Y/N)?");/*詢問是否繼續(xù)操作*/</p><p>  c=getchar();</p><p>  if (c=='y'||c=='Y')</p><

63、p><b>  {</b></p><p>  n=Delete(stud,n,p);/*調(diào)用刪除函數(shù)*/</p><p><b>  }</b></p><p>  return(n);</p><p><b>  }</b></p><p> 

64、 int Query(Student stud[],int n,char *name) /*查找給定姓名的記錄信息*/</p><p><b>  { int i;</b></p><p>  for (i=0;i<n;i++)</p><p><b>  { </b></p><p> 

65、 if(strcmp(stud[i].name,name)==0) /*比較是否存在給定信息*/</p><p><b>  { </b></p><p>  printf("Query successfully!");/*返回成功信息*/ </p><p>  return(i);</p><p>

66、;<b>  }</b></p><p><b>  }</b></p><p>  return( -1);</p><p><b>  }</b></p><p>  void Query_a_record(Student stud[],int n) /*查找記錄*/&l

67、t;/p><p><b>  { </b></p><p>  char p[20];</p><p><b>  int a;</b></p><p>  printf("\tplease input a name:");</p><p>  scanf(

68、"%s",p); /*讀入姓名*/</p><p>  a=Query(stud,n,p);/*調(diào)用查找函數(shù)*/</p><p>  if (a==(-1))</p><p><b>  {</b></p><p>  printf("This record doesn't exsi

69、t!");/*返回失敗信息*/ </p><p><b>  }</b></p><p>  printf("\n\t%s\t%f",stud[a].name,stud[a].score);/*輸出查找到的學生記錄*/</p><p><b>  }</b></p><p&

70、gt;  int AddfromText(Student stud[],int n,char*filename) /*從外界文件中讀入記錄*/</p><p><b>  { </b></p><p>  int i=0,m; </p><p>  FILE *fp; </p><p>  printf("\

71、t\tInput the filename:"); </p><p>  scanf("\t\t%s",filename); </p><p>  if((fp=fopen(filename,"r"))==NULL) /*打開文件并判斷文件是否存在*/</p><p><b>  {</b>&

72、lt;/p><p>  printf("\t\t\tcann't open the file\n"); </p><p>  printf("\t\t\t"); </p><p>  system("pause"); </p><p>  return(n); /*返回記錄數(shù)*/

73、</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  fscanf(fp,"%d",&m); /*讀入文件中記錄的條數(shù)*/</p><

74、p>  while(i<m) </p><p><b>  {</b></p><p>  fscanf(fp,"%s%f",stud[n+i].name,&stud[n+i].score); /*將文件中的記錄寫入程序*/</p><p><b>  i++; </b></p

75、><p><b>  } </b></p><p><b>  n+=m; </b></p><p>  fclose(fp); </p><p>  printf("\t\t\tSuccessed!\n"); </p><p>  printf("

76、\t\t\t"); </p><p>  system("pause"); </p><p>  return(n); /*返回記錄數(shù)*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  voi

77、d WritetoText(Student stud[],int n,char*filename) /*將程序中的記錄寫入文件*/</p><p><b>  { </b></p><p><b>  int i=0; </b></p><p>  FILE *fp; </p><p>  pri

78、ntf("\t\t\tWrite Records to a Text File\n"); </p><p>  printf("\t\t\tInput the filename:"); </p><p>  scanf("\t\t\t%s",filename); </p><p>  if((fp=fope

79、n(filename,"w"))==NULL) </p><p><b>  { </b></p><p>  printf("\t\t\tcann't open the file\n"); </p><p>  system("pause"); </p>&l

80、t;p><b>  return; </b></p><p><b>  } </b></p><p>  fprintf(fp,"%d\n",n); </p><p>  while(i<n) </p><p><b>  { </b><

81、/p><p>  fprintf(fp,"%-15s%f\n",stud[i].name,stud[i].score); /*將記錄寫入文件*/</p><p><b>  i++; </b></p><p><b>  } </b></p><p>  fclose(fp);/*關

82、閉文件*/</p><p>  printf("Successed!\n"); </p><p><b>  }</b></p><p>  四.畫出函數(shù)調(diào)用關系圖,描述程序中主要算法的實現(xiàn)</p><p>  五.寫出測試流程,提供典型測試數(shù)據(jù)</p><p><b&g

83、t;  1、進入界面 </b></p><p>  2、輸入選項1,<ENTER>; </p><p>  按提示依次輸入: A<ENTER> 80<ENTER> Y</p><p>  B<ENTER> 90<ENTER> Y</p><p>  C<

84、;ENTER> 75<ENTER> Y</p><p>  D<ENTER> 88<ENTER> Y</p><p>  E<ENTER> 65<ENTER> Y</p><p>  F<ENTER> 55<ENTER> Y</p><

85、;p>  G<ENTER> 98<ENTER> Y</p><p>  H<ENTER> 69<ENTER> Y</p><p>  I<ENTER> 89<ENTER> Y</p><p>  J<ENTER> 76<ENTER> Y&

86、lt;/p><p>  K<ENTER> 83<ENTER> N</p><p><b>  3、回到主菜單;</b></p><p>  輸入7,<ENTER>; </p><p>  輸入文件名:data.txt,<ENTER> </p><p&g

87、t;  輸出“Succeed!”,則讀入文件操作成功。 </p><p>  4、回到主菜單,輸入2,<ENTER> </p><p>  輸出: 第一屏 A<ENTER> 80<ENTER> Y</p><p>  B<ENTER> 90<ENTER> Y</p><

88、;p>  C<ENTER> 75<ENTER> Y</p><p>  D<ENTER> 88<ENTER> Y</p><p>  E<ENTER> 65<ENTER> Y</p><p>  F<ENTER> 55<ENTER> Y<

89、;/p><p>  G<ENTER> 98<ENTER> Y</p><p>  H<ENTER> 69<ENTER> Y</p><p>  I<ENTER> 89<ENTER> Y</p><p>  J<ENTER> 76<EN

90、TER> Y</p><p>  第二屏 K<ENTER> 83<ENTER> N</p><p>  5、回到主菜單,輸入3,<ENTER> </p><p><b>  輸出:</b></p><p>  6、回到主菜單,輸入4,<ENTER> &

91、lt;/p><p>  按提示插入一組數(shù)據(jù) L <ENTER> 56<ENTER></p><p>  輸出:successfully insert!</p><p>  7、回到主菜單,輸入5,<ENTER></p><p>  按提示輸入姓名D,刪除數(shù)據(jù) </p><p>  

92、輸出:Delete successfully! </p><p>  8、回到主菜單,輸入6,<ENTER> </p><p><b>  輸入姓名F</b></p><p>  輸出:55.000000</p><p>  9、回到主菜單,輸入9,<ENTER> </p><

溫馨提示

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

評論

0/150

提交評論