數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--學(xué)生成績管理程序的設(shè)計與實現(xiàn)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  學(xué)生成績管理程序的設(shè)計與實現(xiàn)</p><p>  摘要:本次設(shè)計的程序主要實現(xiàn)對班級同學(xué)成績的管理,在初始化時輸入班級總?cè)藬?shù)。老師可以通過系統(tǒng)輸入學(xué)生的學(xué)號、姓名、各科成績,對學(xué)生的成績可以按照平均分?jǐn)?shù)進(jìn)行排名,學(xué)生對自己的成績和排名可以進(jìn)行查詢,另外就是信息的添加、刪除、修改、以及信息的保存等功能。</p><p>  Summary:The management

2、of the design program of classmates achievement, the total number of input class initialization. The teacher can enter the number of students through the system, the name, the academic results, student achievement accord

3、ing to the average scores rank students' own scores and rankings can query other information to add, delete, modify, and information save function</p><p>  關(guān)鍵字:學(xué)生成績管理 數(shù)據(jù)結(jié)構(gòu) 鏈表 結(jié)構(gòu)體</p><p> 

4、 Keyword:Student achievement management Data structure Linked list Structure</p><p><b>  1.引言</b></p><p>  數(shù)據(jù)結(jié)構(gòu)是計算機科學(xué)的算法理論基礎(chǔ)和軟件設(shè)計的技術(shù)基礎(chǔ),主要研究信息的邏輯結(jié)構(gòu)及其基本操作在計算機中的表示和實現(xiàn)。數(shù)據(jù)結(jié)構(gòu)不僅是計算機專業(yè)的核

5、心課程,而且已成為其他理工科專業(yè)的熱門選修課。課程的教學(xué)要求之一是訓(xùn)練學(xué)生進(jìn)行復(fù)雜程序設(shè)計的技能和培養(yǎng)良好程序設(shè)計的習(xí)慣,其重要程度不亞于知識傳授。</p><p>  在計算機高速發(fā)展的今天,它已經(jīng)應(yīng)用到了各個行業(yè),當(dāng)然,學(xué)校也不例外。以前學(xué)校對學(xué)生的成績是用人管理,而作為計算機應(yīng)用的一部分,使用計算機對學(xué)生成績進(jìn)行信息管理,有著手工管理所無法比擬的優(yōu)點,如:查找方便、可靠性高、存儲量大、保密性好、壽命長、成本

6、低等。這些優(yōu)點能夠極大地提高學(xué)校對學(xué)生成績管理的效率。因此,開發(fā)一套學(xué)生成績管理系統(tǒng)是有必要的。</p><p><b>  2.需求分析</b></p><p>  該學(xué)生成績管理系統(tǒng)主要可以實現(xiàn)以下功能,具體如下:</p><p> ?。?)輸入學(xué)生的姓名、學(xué)號、成績;</p><p> ?。?)在輸入基本信息以后,

7、將信息按照平均成績進(jìn)行排名,還可以實現(xiàn)對數(shù)據(jù)的修改、插入、刪除、打印、保存等; </p><p> ?。?)學(xué)生可以根據(jù)自己的學(xué)號對成績進(jìn)行查詢。</p><p><b>  3.程序設(shè)計</b></p><p>&

8、lt;b>  3.1 程序模塊</b></p><p>  可以將這個系統(tǒng)分為以下模塊: 查詢模塊、排序模塊、添加模塊、刪除模塊。</p><p><b>  3.2程序流程圖</b></p><p><b>  主函數(shù)流程圖</b></p><p>  查詢模塊流程圖

9、 排序模塊流程圖</p><p>  刪除模塊流程圖 添加模塊流程圖</p><p><b>  4.數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></p><p><b>  學(xué)生結(jié)構(gòu)體的定義:</b></p&

10、gt;<p>  typedef struct student//定義學(xué)生</p><p><b>  {</b></p><p>  char name[10];</p><p>  int number;</p><p>  char sex[2];</p><p><b&

11、gt;  int math;</b></p><p>  int eglish;</p><p>  int clanguge;</p><p>  int average;</p><p><b>  }student;</b></p><p><b>  5.算法設(shè)計&l

12、t;/b></p><p><b>  5.1主函數(shù)模塊</b></p><p>  void main()</p><p><b>  {</b></p><p>  int m=0,n, i;</p><p>  unit *head;</p><

13、;p>  printf("********************************************************************************\n\n");</p><p>  printf("\t\t\t* 歡迎使用學(xué)生成績管理系統(tǒng) * \n\n\n");</p><p>  printf(&quo

14、t;=>正在讀取系統(tǒng)信息......\n");</p><p>  if((head=read())==0)</p><p><b>  {</b></p><p>  printf("=>是否新建?\n");</p><p>  printf("\t\t\t是(1)\

15、t\t否(2)\n");</p><p>  scanf("%d",&i);</p><p>  fflush(stdin);</p><p><b>  if(i==1)</b></p><p>  head=build();</p><p>  else

16、if(i==2)</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  else </b></p><p>  printf("=>信息導(dǎo)入成功!");</p><

17、p>  while(m==0)</p><p><b>  {</b></p><p><b>  menu();</b></p><p>  scanf("%d",&n);</p><p>  fflush(stdin);</p><p>

18、<b>  switch(n)</b></p><p><b>  {</b></p><p>  case 1: head=build();break;</p><p>  case 2:add(head);break;</p><p>  case 3:deletion(head);break;

19、</p><p>  case 4:display(head);break;</p><p>  case 5: range(head);break;</p><p>  case 6:head=read();if(head!=0) printf("=>讀取存盤成功!\n");break;</p><p>  cas

20、e 7:save(head);break;</p><p>  case 8:m=1;break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2輸入數(shù)據(jù)

21、函數(shù)模塊</p><p>  void add(unit *head)//增加學(xué)生</p><p><b>  {</b></p><p>  unit *p,*q;</p><p>  int m,n=0;</p><p>  q=head->next;</p><p&

22、gt;  p=(unit*)malloc(sizeof(unit));</p><p>  printf("=>請輸入新生姓名!\n");</p><p>  gets(p->date.name);fflush(stdin);</p><p>  printf("=>請輸入學(xué)號!\n");</p>

23、<p>  while(n==0)</p><p><b>  {</b></p><p>  scanf("%d",&m);fflush(stdin);</p><p>  if(q==NULL) n=1;</p><p><b>  while(q)</b&g

24、t;</p><p><b>  {</b></p><p>  if(q->date.number==m)</p><p><b>  {</b></p><p>  printf("=>你輸入的學(xué)號與已有同學(xué)的學(xué)號相同,請重新輸入!\n");</p>

25、<p>  q=head->next;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

26、<p>  q=q->next;</p><p>  if(q==NULL) n=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  p->

27、;date.number=m;</p><p>  printf("=>請輸入性別!\n");</p><p>  gets(p->date.sex);fflush(stdin);</p><p>  printf("=>請輸入數(shù)學(xué)成績\n");</p><p>  scanf(&qu

28、ot;%d",&m);fflush(stdin);</p><p>  p->date.math=m;</p><p>  printf("=>請輸入英語成績\n");</p><p>  scanf("%d",&m);fflush(stdin);</p><p>

29、  p->date.eglish=m;</p><p>  printf("=>請輸入c語言成績\n");</p><p>  scanf("%d",&m);fflush(stdin);</p><p>  p->date.clanguge=m;</p><p>  p->

30、;date.average=(p->date.math+p->date.eglish+p->date.clanguge);</p><p>  q=head->next;</p><p>  head->next=p;</p><p>  p->next=q;</p><p>  head->date

31、.number++;</p><p><b>  }</b></p><p>  5.3顯示記錄函數(shù)模塊</p><p>  int display(unit *head)//顯示學(xué)生信息</p><p><b>  {</b></p><p>  unit *p=head-

32、>next;</p><p>  int m,n=0;</p><p>  char N[10];</p><p>  if(p==NULL)</p><p><b>  {</b></p><p>  printf("=>系統(tǒng)無學(xué)生!\n");</p>

33、<p><b>  return 0;</b></p><p><b>  }</b></p><p>  while(n==0)</p><p><b>  {</b></p><p>  printf("***********************

34、*******************************************************\n");</p><p>  printf("=>請選擇你的操作!\n");</p><p>  printf("=>\t\t\t1.顯示所有\(zhòng)t2.按姓名查找\n\t\t\t3.按學(xué)號查找\t4.返回主菜單\n");

35、</p><p>  scanf("%d",&m);</p><p>  fflush(stdin);</p><p><b>  switch(m)</b></p><p><b>  {</b></p><p>  case 1:printf(

36、"\n=>該系統(tǒng)擁有%d名學(xué)生!\n\n",head->date.number);</p><p>  p=head->next;</p><p>  printf("\t姓名\t學(xué)號\t\t性別\t數(shù)學(xué)\t英語\tc語言\t綜合\n\n");</p><p><b>  while(p)</

37、b></p><p><b>  {</b></p><p>  printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->date.name,p->date.number,p->date.sex,p->date.math,</p><p>  p->date.

38、eglish,p->date.clanguge,p->date.average);</p><p>  p=p->next;</p><p><b>  } </b></p><p><b>  break;</b></p><p>  case 2:printf("=&

39、gt;請輸入查找姓名!\n");</p><p><b>  gets(N);</b></p><p>  fflush(stdin);</p><p>  p=head->next;</p><p><b>  while(p)</b></p><p>&l

40、t;b>  {</b></p><p>  if(strcmp(p->date.name,N)==0)</p><p><b>  {</b></p><p>  printf("\t姓名\t學(xué)號\t性別\t數(shù)學(xué)\t英語\tc語言\t綜合\n");</p><p>  prin

41、tf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->date.name,p->date.number,p->date.sex,p->date.math,</p><p>  p->date.eglish,p->date.clanguge,p->date.average);</p><p><b&g

42、t;  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p=p->next;</p><p>  if(p==NUL

43、L)</p><p>  printf("=>你要查的學(xué)生不存在!");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  ca

44、se 3: printf("=>請輸入查找學(xué)號!\n");</p><p>  scanf("%d",&m);</p><p>  fflush(stdin);</p><p>  p=head->next;</p><p><b>  while(p)</b>

45、</p><p><b>  {</b></p><p>  if(p->date.number==m)</p><p><b>  {</b></p><p>  printf("\t姓名\t學(xué)號\t性別\t數(shù)學(xué)\t英語\tc語言\t綜合\n");</p>

46、<p>  printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->date.name,p->date.number,p->date.sex,p->date.math,</p><p>  p->date.eglish,p->date.clanguge,p->date.average);</p>&

47、lt;p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p=p->next;</p><p

48、>  if(p==NULL)</p><p>  printf("=>你要查的學(xué)生不存在!\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break; </b></p&

49、gt;<p>  case 4:n=1;break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p&

50、gt;<p>  5.4刪除記錄函數(shù)模塊</p><p>  void deletion(unit *head)//刪除一名學(xué)生</p><p><b>  {</b></p><p>  unit *p=head->next,*q=head;</p><p>  char N[10];</p&

51、gt;<p>  printf("=>請輸入你想刪除的學(xué)生姓名!\n");</p><p>  gets(N);fflush(stdin);</p><p>  if(p==NULL)</p><p>  printf("=>系統(tǒng)無學(xué)生可刪除!\n");</p><p><

52、;b>  while(p)</b></p><p><b>  {</b></p><p>  if(strcmp(p->date.name,N)==0)</p><p><b>  {</b></p><p>  q->next=p->next;</p&g

53、t;<p>  head->date.number--;</p><p>  printf("=>刪除%s成功!\n",p->date.name);</p><p><b>  free(p);</b></p><p><b>  break;</b></p>

54、<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p=p->next;</p><p>  q=q->next;</p><p>  if(

55、p==NULL)</p><p>  printf("=>你要刪除的學(xué)生不存在,刪除失敗!\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><

56、p><b>  5.5排序函數(shù)模塊</b></p><p>  int range(unit *head)//排序</p><p><b>  {</b></p><p>  unit *p=head,*q=head->next;</p><p>  int n,i,m=head->

57、;date.number;</p><p>  printf("*******************************************************************************\n");</p><p>  printf("\t\t\t1.按學(xué)號\t2.按成績\n\n");</p><

58、p>  printf("=>請選擇操作!\n》");</p><p>  scanf("%d",&n);</p><p>  fflush(stdin);</p><p>  if(q==NULL)</p><p>  { printf("=>無學(xué)生可排序!\n&qu

59、ot;);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case

60、 2:for(i=0;i<m;i++)//按總分排序</p><p><b>  {</b></p><p>  p=head;q=head->next;</p><p>  while(q->next)</p><p><b>  {</b></p><p&g

61、t;  if((q->date.average)<(q->next->date.average))</p><p><b>  {</b></p><p>  p->next=q->next;</p><p>  p=p->next;</p><p>  q->next=p

62、->next;</p><p>  p->next=q;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p=p->next;q=q-&g

63、t;next;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 1:for(i=

64、0;i<=m;i++)//按學(xué)號排序</p><p><b>  {</b></p><p>  p=head;q=head->next;</p><p>  while(q->next)</p><p><b>  {</b></p><p>  if((

65、q->date.number)>(q->next->date.number))</p><p><b>  {</b></p><p>  p->next=q->next;</p><p>  p=p->next;</p><p>  q->next=p->next;

66、</p><p>  p->next=q;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  p=p->next;q=q->next;<

67、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b><

68、;/p><p>  printf("=>排序成功!\n");</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  5.6讀入記錄函數(shù)模塊</p><p>  unit* read()//讀入

69、系統(tǒng)學(xué)生信息</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  unit *p,*q,*head;</p><p><b>  FILE *fp;</b></p><p>  if((head=

70、(unit*)malloc(sizeof(unit)))==NULL)</p><p>  { printf("=>開辟空間失??!");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  el

71、se</b></p><p><b>  {</b></p><p>  head->next=NULL;</p><p>  head->date.number=0;//頭結(jié)點存放學(xué)生人數(shù)</p><p><b>  }</b></p><p>&l

72、t;b>  q=head;</b></p><p>  if((fp=fopen("d:\\學(xué)生","rb"))==NULL)</p><p>  {printf("=>系統(tǒng)無學(xué)生!\n");</p><p><b>  return 0;</b></p&

73、gt;<p><b>  }</b></p><p>  fread(&(q->date),sizeof(student),1,fp);</p><p>  for(i=0;i<head->date.number;i++)</p><p><b>  {</b></p>

74、<p>  if((p=(unit*)malloc(sizeof(unit)))==NULL)</p><p>  { printf("=>讀值失敗!");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p&

75、gt;  fread(&(p->date),sizeof(student),1,fp);</p><p>  p->next=q->next;</p><p>  q->next=p;</p><p><b>  }</b></p><p>  fclose(fp);</p>

76、<p>  return head;</p><p><b>  }</b></p><p>  5.7保存記錄函數(shù)模塊</p><p>  int save(unit *head)//保存</p><p><b>  {</b></p><p><b>

77、;  FILE *fp;</b></p><p><b>  unit *p;</b></p><p><b>  p=head;</b></p><p>  if((fp=fopen("d:\\學(xué)生","wb+"))==NULL)</p><p>

78、;<b>  {</b></p><p>  printf("=>保存失?。?quot;);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  while(p)</b>

79、;</p><p>  {fwrite(&(p->date),sizeof(student),1,fp);</p><p>  p=p->next;</p><p><b>  }</b></p><p>  printf("=>保存成功!");</p><

80、;p>  fclose(fp);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  5.8主要技術(shù)說明</b></p><p>  在該程序中定義了一個學(xué)生結(jié)構(gòu)體,每個功能都用不同的函數(shù)塊實現(xiàn)。整個

81、程序在Visual C++ 6.0軟件下開發(fā)的。 </p><p><b>  5.9運行結(jié)果</b></p><p><b>  5.9.1主菜單</b></p><p>  5.9.2添加模塊 </p><p>  5.9.3查詢所有學(xué)生信息</p><p>  5

82、.9.4按成績排序 </p><p><b>  5.9.5刪除學(xué)生</b></p><p><b>  5.9.6結(jié)果分析</b></p><p>  實驗結(jié)果完全正確,完全符合實驗要求。整個系統(tǒng)主要可以實現(xiàn)學(xué)生成績信息的輸入、修改、刪除、插入、保存、查找、排序等功能。在信息的輸入時若出現(xiàn)相同的學(xué)號時

83、系統(tǒng)會自動報錯;若輸入的時相同的姓名則不會報錯,可根據(jù)學(xué)號進(jìn)行區(qū)別;若成績大于100的話系統(tǒng)也會報錯。查找信息時,系統(tǒng)會自行判斷學(xué)生的信息是否存在,若不存在則會報錯,存在時會顯示系統(tǒng)的所有相關(guān)信息。在進(jìn)行刪除信息時,輸入學(xué)生的信息還后判斷存在的情況下會刪除要刪除的信息,系統(tǒng)會將剩余的信息進(jìn)行重排序。插入一個學(xué)生的信息時,系統(tǒng)在判斷要插入學(xué)生的平均成績和已存在的學(xué)生成績進(jìn)行比較,會在大于和小于該成績之間插入要插入的值,小于該成績的所有成績

84、將自行后移一位。在所有信息輸入之后將這些信息進(jìn)行保存。系統(tǒng)的優(yōu)點是基本上能對學(xué)生成績進(jìn)行管理,它的管理系統(tǒng)是比較完善的。不足之處在于不能實現(xiàn)按班進(jìn)行打印顯示。而且輸入錯誤的名字信息,輸入數(shù)字之后系統(tǒng)不能做相應(yīng)的處理,健壯性還不夠完善,還需要做相應(yīng)的處理??傊?,整個程序基本上能滿足課程設(shè)計的要求,但是程序的健壯性還不是很好,還有許多地方需要改進(jìn)。</p><p><b>  6.設(shè)計體會</b>

85、;</p><p>  通過本學(xué)期對數(shù)據(jù)結(jié)構(gòu)這門課的學(xué)習(xí),我了解到:“數(shù)據(jù)結(jié)構(gòu)”在計算機科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)的研究不僅涉及到計算機硬件(特別是編碼理論、存儲裝置和存取方法等)的研究,而且和計算機軟件的研究有著更密切的關(guān)系,無論是編譯程序還是操作系統(tǒng),都涉及到數(shù)據(jù)元素在存儲器中的分配問題。在研究信息檢索時也必須考慮如何組織數(shù)據(jù),以便使查找和存取數(shù)據(jù)元素更為方便。可以認(rèn)為數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機

86、硬件和計算機軟件三者之間的一個核心內(nèi)容,是從事計算機科學(xué)研究及其應(yīng)用的科技工作者必須掌握的重要內(nèi)容。 在課程設(shè)計中我體會到:一個好的程序應(yīng)該是一個所占空間小、運行時間短、其他性能也好的算法。然而,實際上很難做到十全十美,原因是上述要求有時相互抵觸。要節(jié)約算法的執(zhí)行時間往往要以犧牲更多的存儲空間為代價;而為了節(jié)省存儲空間又可能要以更多的時間作為代價。因此,只能根據(jù)具體情況有所側(cè)重:如果程序的使用次數(shù)較少,則應(yīng)該力求算法簡明易懂,而

87、易于轉(zhuǎn)換為上機程序;如果程序反復(fù)多次使用,則應(yīng)該盡可能選用快速的算法;如果待解決的問題數(shù)據(jù)量極大,機器的存儲空間較小,則在編寫算法時應(yīng)該考慮如何節(jié)省空間。 學(xué)習(xí)</p><p><b>  7.結(jié)束語</b></p><p>  本文是學(xué)生成績管理系統(tǒng),主要功能有:學(xué)生成績信息的添加﹑存儲﹑修改及刪除;同學(xué)信息的查詢(按姓名,學(xué)號)。利用軟件Visual C+

88、+ 6.0來實現(xiàn)。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 黃同成,黃俊民,董建寅.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國電力出版社,2008年</p><p>  [2] 董建寅,黃俊民,黃同成.?dāng)?shù)據(jù)結(jié)構(gòu)實驗指導(dǎo)與題解[M].北京:中國電力出版社,2008年</p><p>  [3] 嚴(yán)蔚敏,吳

溫馨提示

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

最新文檔

評論

0/150

提交評論