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

下載本文檔

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

文檔簡介

1、<p>  高級語言(C語言)課程設計說明書</p><p>  起止日期: 2012 年 07 月 2 日 至 2012 年 07 月 14 日</p><p><b>  通信與信息工程學院</b></p><p><b>  說明書撰寫提綱</b></p><p><b&

2、gt;  課程設計要求</b></p><p>  課程設計系統(tǒng)組成及模塊功能:學生成績管理是教學管理中的一項重要內容,主要包括成績的錄入、顯示、查詢和統(tǒng)計四大模塊。各主要模塊的功能如下:</p><p><b>  錄入模塊</b></p><p>  通過鍵盤錄入某同學的學號,姓名,3門課成績。</p><p

3、><b>  顯示模塊</b></p><p>  顯示所有錄入的成績。</p><p><b>  查詢模塊</b></p><p>  查詢相關同學的成績。</p><p><b>  統(tǒng)計模塊</b></p><p>  計算全部同學的總分和

4、平均分。</p><p><b>  設計要求:</b></p><p>  (1)界面菜單主菜單,具體要求如下:</p><p>  ***************MENU***************"</p><p>  1. Enter list /*輸入記錄*/</

5、p><p>  2. Delete a record from list /*從表中刪除記錄*/</p><p>  3. print list /*顯示單鏈表中所有記錄*/</p><p>  4. Search record on name /*按照姓名查找記錄*/</p><p>  5. compu

6、te the score /*計算所有學生的總分和均分*/</p><p>  6. sort by score /*排序*/</p><p>  7. Quit /*退出*/</p><p> ?。?)需要定義多個函數(shù)對應菜單</p><p>  /*以下是函數(shù)原型對應

7、以上菜單*/</p><p>  STUDENT *create(); /*輸入記錄*/</p><p>  STUDENT *delete(STUDENT *h); /*刪除記錄*/</p><p>  void print(STUDENT *h); /*顯示所有記錄*/</p><p> 

8、 void search(STUDENT *h); /*查找*/</p><p>  void computer(STUDENT *h); /*計算總分和均分*/</p><p>  STUDENT *sort(STUDENT *h); /*排序*/</p><p>  int menu_select();

9、 /*菜單函數(shù)*/</p><p>  (3) 要求設計流程圖</p><p>  (4) 要求功能框圖</p><p><b> ?。?)代碼</b></p><p><b>  二、程序的功能設計</b></p><p><b>  程序的數(shù)據結構&l

10、t;/b></p><p><b>  主要功能的實現(xiàn)</b></p><p><b>  函數(shù)明細:</b></p><p>  整個系統(tǒng)除了主函數(shù)外,另外還有14個函數(shù),實現(xiàn)八大功能:輸入功能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。各個函數(shù)的詳細設計說明分別如下:</p>&l

11、t;p>  主函數(shù) main()</p><p>  利用無限次循環(huán)for(;;)和swithch()實現(xiàn)各函數(shù)的調用,系統(tǒng)根據輸入的數(shù)字選項來調用相應的函數(shù)。</p><p>  菜單選擇函數(shù) int menu_select()</p><p>  這是一個無參函數(shù),主要實現(xiàn)“功能選擇”的界面,在這個界面里有顯示系統(tǒng)的九大功能,根據每個功能前面的序號進行選擇

12、。等執(zhí)行完每一個函數(shù)功能后,再自行返回該函數(shù)。</p><p>  初始化函數(shù) STUDENT *init()</p><p>  這是一個無參函數(shù),里面只有兩個語句,它的作用是使鏈表初始化,使head的值為NULL和一個清屏語句。比如:沒有這個函數(shù)的話,在你沒有輸入任何數(shù)據的情況下,去執(zhí)行顯示功能的時候會顯示一些亂碼!</p><p>  輸入記錄函數(shù) STUD

13、ENT *create()</p><p>  這是一個無參函數(shù),用來執(zhí)行第學生成績記錄的輸入,當學生為@時停止輸入,函數(shù)結束后,帶回一個指鏈表頭的指針向head。將下一個學生的信息插在表頭。</p><p>  顯示記錄函數(shù) void print(STUDENT *h)</p><p>  這是一個不返回值的有參函數(shù),形參為“鏈表頭的指針”,負責對全部學生成績記錄

14、的輸出,不足之處就是不能對學生成績進行分頁顯示。</p><p>  算法:先將p結點的指針指向第一個結點,將p結點(即第一個結點)的數(shù)據輸出。然后再將p結點的指針指向p指針的的指針(即下一結點),將p結點(即第一結點)的數(shù)據輸出。重復執(zhí)行此步聚直到p指針指向NULL為止。</p><p>  查找記錄函數(shù) void search(STUDENT *h)</p><p&

15、gt;  這是一個不返回值的有參函數(shù),形參為“鏈表頭的指針”,實現(xiàn)按學號對某個學生進行查找,并顯示所查找到的記錄。</p><p>  算法:采用線性查找法往下一個結點查找。輸入所要查找的學生的學號s,設一個指針變量p,先指向第一個結點,當strcmp(p->name,s) && p != NULL時,使p后移一個結點,如果p!=NULL,輸出p所指的結點。</p><p

16、>  刪除記錄函數(shù) STUDENT *delete(STUDENT *h)</p><p>  這是一個有返回值的有參函數(shù)。形參為“鏈表頭的指針”,在核對密碼后。實現(xiàn)對所要刪除學生按學號進行查找。找到后顯示該學生的信息。按任意鍵進行刪除。</p><p>  算法:主函數(shù)鏈表的頭指針,用一個輸出語句printf("Input your password:");&l

17、t;/p><p>  提示用戶輸入密碼。在輸入過程中如果需要用到退格。putchar(8);putchar(' '); putchar(8);來達到視覺和功能上的要求。如果密碼錯誤,則兩秒后自動返回主菜單。正確后輸入要刪除的學生學號,進行刪除。</p><p><b>  N-S流程圖如下:</b></p><p>  修改函數(shù) S

18、TUDENT *Modify(STUDENT *h)</p><p>  這是一個有參函數(shù),一個是“鏈表頭的指針”修改之后,并返回鏈表的頭指針。</p><p><b>  算法:</b></p><p>  首先向系統(tǒng)申請一塊空間,用于存放輸入的信息。程序會根據用戶輸入的學號。采用線性查找法往下一個結點查找。設一個指針變量p,先指向第一個結點

19、,當strcmp(p->name,s) && p != NULL時,使p后移一個結點,如果p!=NULL,輸出p所指的結點。如果有該學生就修改。并出現(xiàn)提示信息"***Modify success!***"。如果沒有該學生則出現(xiàn)“***Find out No.%s student***”提示。并2秒后返回主菜單。</p><p><b>  N-S流程圖如下:&l

20、t;/b></p><p>  按部分排序函數(shù) STUDENT *sort(STUDENT *head)</p><p>  這是一個有參函數(shù),形參為“鏈表頭的指針”,按學生成績的平均分高低進行排序,還可以顯示名次。</p><p><b>  N-S流程圖:</b></p><p><b>  程序的

21、函數(shù)設計</b></p><p><b>  函數(shù)的功能描述</b></p><p>  1) 程序的模塊組成:</p><p>  主 函 數(shù): int main()</p><p>  新建函數(shù):STUDENT *init()</p><p>  輸入函數(shù) :STUDENT *

22、create()</p><p>  顯示函數(shù): void print(STUDENT *h)</p><p>  刪除函數(shù): STUDENT *delete(STUDENT *h)</p><p>  按名字尋找函數(shù): void search(STUDENT *h)</p><p>  按總分排序函數(shù): STUDENT *sort(STUD

23、ENT *h)</p><p>  計算總分和均分函數(shù): void computer(STUDENT *h)</p><p>  修改函數(shù): STUDENT *Modify(STUDENT *head,STUDENT *new)</p><p>  按學號排序函數(shù): STUDENT *index(STUDENT *h)</p><p>  菜

24、單函數(shù):int menu_select()</p><p>  2) 各個函數(shù)的主要功能:</p><p>  輸入函數(shù): 隨時輸入數(shù)據。</p><p>  菜單函數(shù):顯示系統(tǒng)主菜單。</p><p>  顯示函數(shù): 顯示所有學生的信息。</p><p>  尋找函數(shù): 方便學生查找自己的成績。</p>

25、<p>  刪除函數(shù): 刪除某學生的信息。</p><p>  排序函數(shù): 按總成績排序。</p><p>  按學號排序函數(shù): 按學號排序。</p><p>  插入函數(shù): 可以插入新的信息。</p><p><b>  函數(shù)的調用關系</b></p><p><b>  

26、源程序代碼</b></p><p>  #include <malloc.h></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #define LEN sizeof(struct scorenode)<

27、;/p><p>  #define DEBUG</p><p>  #include <string.h></p><p>  struct scorenode</p><p>  {int number;/*學號*/</p><p>  char name[10];/*姓名*/</p><

28、p>  float yuwen;/*語文成績*/</p><p>  float yingyu;/*英語成績*/</p><p>  float shuxue;/*數(shù)學成績 */</p><p>  float zongfen;/*個人總分*/</p><p>  struct scorenode *next;</p>&

29、lt;p><b>  };</b></p><p>  typedef struct scorenode score;</p><p>  int n,k;/*n,k為全局變量,本程序中的函數(shù)均可以使用它*/</p><p>  /*=====================================================

30、=========================================*/</p><p>  score *creat2311(void)</p><p>  /*函數(shù)creat2311,功能:創(chuàng)建鏈表,此函數(shù)帶回一個指向鏈表頭的指針*/</p><p><b>  {</b></p><p>  scor

31、e*head;</p><p>  score *p1,*p2,*p3,*max;</p><p><b>  int i,j;</b></p><p>  float fen;</p><p>  char t[10];</p><p><b>  n=0;</b><

32、/p><p>  p1=p2=p3=(score *)malloc(LEN);head=p3; /*開辟一個新單元*/</p><p>  printf("請輸入學生資料,輸0退出!\n");</p><p>  repeat1: printf("請輸入學生學號(學號應大于0):");/*輸入學號,學號應大于0*/</p&g

33、t;<p>  scanf("%d",&p1->number);</p><p>  while(p1->number<0)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入學生學號:");</p><p>  

34、scanf("%d",&p1->number);} </p><p>  /*輸入學號為字符或小于0時,程序報錯,提示重新輸入學號*/</p><p>  if(p1->number==0)</p><p>  goto end;/*當輸入的學號為0時,轉到末尾,結束創(chuàng)建鏈表*/</p><p>

35、;<b>  else </b></p><p><b>  { </b></p><p><b>  p3=head;</b></p><p><b>  if(n>0)</b></p><p>  {for(i=0;i<n;i++)<

36、/p><p>  {if(p1->number!=p3->number)</p><p>  p3=p3->next;</p><p><b>  else </b></p><p>  {printf("學號重復,請重輸!\n");</p><p>  goto

37、 repeat1;</p><p>  /*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p>

38、;<b>  }</b></p><p>  printf("請輸入學生姓名:");</p><p>  scanf("%s",&p1->name);/*輸入學生姓名*/</p><p>  printf("請輸入語文成績(0~100):");/*輸入語文成績,成績應在0

39、-100*/</p><p>  scanf("%f",&p1->yuwen);</p><p>  while(p1->yuwen<0||p1->yuwen>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入語文成

40、績");/*輸入錯誤,重新輸入語文成績直到正確為止*/</p><p>  scanf("%f",&p1->yuwen);}</p><p>  printf("請輸入英語成績(0~100):");/*輸入英語成績,成績應在0-100*/</p><p>  scanf("%f",&

41、amp;p1->yingyu);</p><p>  while(p1->yingyu<0||p1->yingyu>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入英語成績");/*輸入錯誤,重新輸入英語成績直到正確為止*/</p><

42、p>  scanf("%f",&p1->yingyu);}</p><p>  printf("請輸入數(shù)學成績(0~100):");/*輸入數(shù)學成績,成績應在0-100*/</p><p>  scanf("%f",&p1->shuxue);</p><p>  while

43、(p1->shuxue<0||p1->shuxue>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入數(shù)學成績");</p><p>  scanf("%f",&p1->shuxue);}/*輸入錯誤,重新輸入數(shù)學成績直到正確為止

44、*/</p><p>  head=NULL;</p><p>  while(p1->number!=0)</p><p><b>  {</b></p><p><b>  n=n+1;</b></p><p>  if(n==1) </p><

45、;p><b>  head=p1;</b></p><p><b>  else</b></p><p>  p2->next=p1;</p><p><b>  p2=p1;</b></p><p>  p1=(score *)malloc(LEN);</p

46、><p>  printf("請輸入學生資料,輸0退出!\n");</p><p>  repeat2:printf("請輸入學生學號(學號應大于0):");</p><p>  scanf("%d",&p1->number);/*輸入學號,學號應大于0*/</p><p>

47、;  while(p1->number<0)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入學生學號:");</p><p>  scanf("%d",&p1->number);} </p><p>  /*輸入學號為

48、字符或小于0時,程序報錯,提示重新輸入學號*/</p><p>  if(p1->number==0)</p><p>  goto end;/*當輸入的學號為0時,轉到末尾,結束創(chuàng)建鏈表*/</p><p><b>  else</b></p><p><b>  {</b></p&g

49、t;<p><b>  p3=head;</b></p><p><b>  if(n>0)</b></p><p>  {for(i=0;i<n;i++)</p><p>  {if(p1->number!=p3->number)</p><p>  p3=p

50、3->next;</p><p><b>  else </b></p><p>  {printf("學號重復,請重輸!\n");</p><p>  goto repeat2;</p><p>  /*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/</p><p&g

51、t;<b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>  printf("請輸入學生姓名:");<

52、/p><p>  scanf("%s",&p1->name);/*輸入學生姓名*/</p><p>  printf("請輸入語文成績(0~100):");</p><p>  scanf("%f",&p1->yuwen);/*輸入語文成績,成績應在0-100*/</p>

53、<p>  while(p1->yuwen<0||p1->yuwen>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入語文成績");</p><p>  scanf("%f",&p1->yuwen);}/*輸入錯誤

54、,重新輸入語文成績直到正確為止*/</p><p>  printf("請輸入英語成績(0~100):");</p><p>  scanf("%f",&p1->yingyu);/*輸入英語成績,成績應在0-100*/</p><p>  while(p1->yingyu<0||p1->ying

55、yu>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入英語成績");</p><p>  scanf("%f",&p1->yingyu);}/*輸入錯誤,重新輸入英語成績直到正確為止*/</p><p>  printf(

56、"請輸入數(shù)學成績(0~100):");</p><p>  scanf("%f",&p1->shuxue);/*輸入數(shù)學成績,成績應在0-100*/</p><p>  while(p1->shuxue<0||p1->shuxue>100)</p><p>  {getchar();<

57、;/p><p>  printf("輸入錯誤,請重新輸入數(shù)學成績");</p><p>  scanf("%f",&p1->shuxue);}/*輸入錯誤,重新輸入數(shù)學成績直到正確為止*/</p><p><b>  }</b></p><p>  end: p1=hea

58、d;</p><p><b>  p3=p1;</b></p><p>  for(i=1;i<n;i++)</p><p><b>  {</b></p><p>  for(j=i+1;j<=n;j++)</p><p><b>  {</b&

59、gt;</p><p><b>  max=p1;</b></p><p>  p1=p1->next;</p><p>  if(max->number>p1->number)</p><p><b>  {</b></p><p>  k=max-

60、>number;</p><p>  max->number=p1->number;</p><p>  p1->number=k;</p><p>  /*交換前后結點中的學號值,使得學號大者移到后面的結點中*/</p><p>  strcpy(t,max->name);</p><p&g

61、t;  strcpy(max->name,p1->name);</p><p>  strcpy(p1->name,t);</p><p>  /*交換前后結點中的姓名,使之與學號相匹配*/</p><p>  fen=max->yuwen;</p><p>  max->yuwen=p1->yuwen;&

62、lt;/p><p>  p1->yuwen=fen;</p><p>  /*交換前后結點中的語文成績,使之與學號相匹配*/</p><p>  fen=max->yingyu;</p><p>  max->yingyu=p1->yingyu;</p><p>  p1->yingyu=fe

63、n;</p><p>  /*交換前后結點中的英語成績,使之與學號相匹配*/</p><p>  fen=max->shuxue;</p><p>  max->shuxue=p1->shuxue;</p><p>  p1->shuxue=fen;</p><p>  /*交換前后結點中的數(shù)學

64、成績,使之與學號相匹配*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  max=head;p1=head;/*重新使max,p指向鏈表頭*/</p><p><b>  } </b></p><p>

65、;  p2->next=NULL;/*鏈表結尾*/</p><p>  printf("輸入的學生數(shù)為:%d個!\n",n);</p><p>  return(head);</p><p><b>  }</b></p><p>  /*============================

66、==================================================================*/</p><p>  /*==============================================================================================*/</p><p>  score *l

67、oad2311(score *head)</p><p>  /*函數(shù)load2311,功能:從文件讀入學生記錄*/</p><p>  { score *p1,*p2;</p><p><b>  int m=0;</b></p><p>  char filepn[10];</p><p&

68、gt;<b>  FILE *fp;</b></p><p>  printf("請輸入文件路徑及文件名:");</p><p>  scanf("%s",filepn);/*輸入文件路徑及名稱*/</p><p>  if((fp=fopen(filepn,"r+"))==NULL)

69、</p><p><b>  {</b></p><p>  printf("不能打開文件!\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  fscanf(

70、fp," 學生成績管理系統(tǒng) \n");</p><p>  fscanf(fp,"作者:李鵬超 班級: 電信1101班 學號:1107050113 \n");</p><p>  fscanf(fp,"-----------------------------------------\n");&l

71、t;/p><p>  fscanf(fp,"|學號\t|姓名\t|語文\t|英語\t|數(shù)學\t|\n");</p><p>  fscanf(fp,"-----------------------------------------\n");/*讀入表格域*/</p><p>  printf(" 學生成績

72、管理系統(tǒng) \n");</p><p>  printf(" 作者:李鵬超 班級: 電信1101班 學號:1107050113 \n");</p><p>  printf("-----------------------------------------\n");</p><p>  print

73、f("|學號\t|姓名\t|語文\t|英語\t|數(shù)學\t|\n");</p><p>  printf("-----------------------------------------\n");/*打印表格域*/</p><p><b>  m=m+1; </b></p><p><b>

74、  if(m==1)</b></p><p><b>  {</b></p><p>  p1=(score *)malloc(LEN); /*開辟一個新單元*/</p><p>  fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->

75、;yuwen,&p1->yingyu,&p1->shuxue);</p><p>  printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);</p><p>  /*文件讀入

76、與顯示*/</p><p>  head=NULL;</p><p><b>  do</b></p><p><b>  {</b></p><p><b>  n=n+1;</b></p><p>  if(n==1) head=p1;</p&

77、gt;<p>  else p2->next=p1;</p><p><b>  p2=p1;</b></p><p>  p1=(score *)malloc(LEN); /*開辟一個新單元*/ </p><p>  fscanf(fp,"%d%s%f%f%f\n",&p1->num

78、ber,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);</p><p>  printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);&l

79、t;/p><p>  /*文件讀入與顯示*/</p><p>  }while(!feof(fp));</p><p>  p2->next=p1;</p><p>  p1->next=NULL;</p><p><b>  n=n+1; </b></p><p>

80、;  }printf("-----------------------------------------\n");/*表格下線*/</p><p>  fclose(fp);/*結束讀入,關閉文件*/</p><p>  return (head);</p><p><b>  }</b></p><p

81、>  /*==============================================================================================*/</p><p>  /*===========================================================================================

82、===*/</p><p>  score *add2311(score *head,score *stu)</p><p>  /*函數(shù)add2311,功能:追加學生資料,并且將所有學生資料按學號排序*/</p><p><b>  {</b></p><p>  score *p0,*p1,*p2,*p3,*max;

83、</p><p><b>  int i,j;</b></p><p>  float fen;</p><p>  char t[10];</p><p>  p3=stu=(score *)malloc(LEN);/*開辟一個新單元*/</p><p>  printf("\n輸入要

84、增加的學生的資料!");</p><p>  repeat4: printf("請輸入學生學號(學號應大于0):");</p><p>  scanf("%d",&stu->number); </p><p>  /*輸入學號,學號應大于0*/</p><p>  while(s

85、tu->number<0)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入學生學號:");</p><p>  scanf("%d",&stu->number);}/*輸入錯誤,重新輸入學號*/</p><p>  /***

86、***************************************************/</p><p>  if(stu->number==0)</p><p>  goto end2;/*當輸入的學號為0時,轉到末尾,結束追加*/</p><p><b>  else </b></p><p>

87、<b>  { </b></p><p><b>  p3=head;</b></p><p><b>  if(n>0)</b></p><p>  {for(i=0;i<n;i++)</p><p>  {if(stu->number!=p3->nu

88、mber)</p><p>  p3=p3->next;</p><p><b>  else </b></p><p>  {printf("學號重復,請重輸!\n");</p><p>  goto repeat4;</p><p>  /*當輸入的學號已經存在,程序

89、報錯,返回前面重新輸入*/</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>  /

90、******************************************************/ </p><p>  printf("輸入學生姓名:");</p><p>  scanf("%s",stu->name); /*輸入學生姓名*/</p><p>  printf("

91、請輸入語文成績(0~100):");</p><p>  scanf("%f",&stu->yuwen); /*輸入語文成績,成績應在0-100*/</p><p>  while(stu->yuwen<0||stu->yuwen>100)</p><p>  {getchar();</p

92、><p>  printf("輸入錯誤,請重新輸入語文成績");</p><p>  scanf("%f",&stu->yuwen);} /*輸入錯誤,重新輸入語文成績直到正確為止*/</p><p>  printf("請輸入英語成績(0~100):");</p><p

93、>  scanf("%f",&stu->yingyu);/*輸入英語成績,成績應在0-100*/</p><p>  while(stu->yingyu<0||stu->yingyu>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入

94、英語成績");</p><p>  scanf("%f",&stu->yingyu);}/*輸入錯誤,重新輸入英語成績直到正確為止*/</p><p>  printf("請輸入數(shù)學成績(0~100):");</p><p>  scanf("%f",&stu->shu

95、xue);/*輸入數(shù)學成績,成績應在0-100*/</p><p>  while(stu->shuxue<0||stu->shuxue>100)</p><p>  {getchar();</p><p>  printf("輸入錯誤,請重新輸入數(shù)學成績");</p><p>  scanf(&q

96、uot;%f",&stu->shuxue);}/*輸入錯誤,重新輸入數(shù)學成績直到正確為止*/</p><p><b>  p1=head;</b></p><p><b>  p0=stu;</b></p><p>  if(head==NULL)</p><p>  {he

97、ad=p0;p0->next=NULL;}/*當原來鏈表為空時,從首結點開始存放資料*/</p><p>  else/*原來鏈表不為空*/</p><p><b>  {</b></p><p>  if(p1->next==NULL)/*找到原來鏈表的末尾*/</p><p><b>  {&l

98、t;/b></p><p>  p1->next=p0;</p><p>  p0->next=NULL;/*將它與新開單元相連接*/</p><p><b>  }</b></p><p><b>  else</b></p><p><b> 

99、 {</b></p><p>  while(p1->next!=NULL)/*還沒找到末尾,繼續(xù)找*/</p><p><b>  {</b></p><p>  p2=p1;p1=p1->next;</p><p><b>  }</b></p><p

100、>  p1->next=p0;</p><p>  p0->next=NULL;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=n+1;</b></p><p><

101、b>  p1=head;</b></p><p><b>  p0=stu;</b></p><p>  for(i=1;i<n;i++)</p><p><b>  {</b></p><p>  for(j=i+1;j<=n;j++)</p><

102、p><b>  {</b></p><p><b>  max=p1;</b></p><p>  p1=p1->next;</p><p>  if(max->number>p1->number)</p><p><b>  {</b></

103、p><p>  k=max->number;</p><p>  max->number=p1->number;</p><p>  p1->number=k;</p><p>  /*交換前后結點中的學號值,使得學號大者移到后面的結點中*/</p><p>  strcpy(t,max->n

104、ame);</p><p>  strcpy(max->name,p1->name);</p><p>  strcpy(p1->name,t);</p><p>  /*交換前后結點中的姓名,使之與學號相匹配*/</p><p>  fen=max->yuwen;</p><p>  max-

105、>yuwen=p1->yuwen;</p><p>  p1->yuwen=fen;</p><p>  /*交換前后結點中的語文成績,使之與學號相匹配*/</p><p>  fen=max->yingyu;</p><p>  max->yingyu=p1->yingyu;</p><

106、;p>  p1->yingyu=fen;</p><p>  /*交換前后結點中的英語成績,使之與學號相匹配*/</p><p>  fen=max->shuxue;</p><p>  max->shuxue=p1->shuxue;</p><p>  p1->shuxue=fen;</p>

107、<p>  /*交換前后結點中的數(shù)學成績,使之與學號相匹配*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  max=head;p1=head;/*重新使max,p指向鏈表頭*/</p><p><b>  } end2:&

108、lt;/b></p><p>  printf("現(xiàn)在的學生數(shù)為:%d個!\n",n);</p><p>  return(head);</p><p><b>  }</b></p><p>  /*===============================================

109、===============================================*/</p><p>  /*==============================================================================================*/</p><p>  score *search2311(score *he

110、ad)</p><p>  /*函數(shù)search2311,功能:查詢學生成績*/</p><p>  {int number;</p><p>  score *p1,*p2;</p><p>  printf("輸入要查詢的學生的學號,");</p><p>  scanf("%d&qu

111、ot;,&number);</p><p>  while(number!=0)</p><p><b>  {</b></p><p>  if(head==NULL)</p><p>  {printf("\n沒有任何學生資料!\n");return(head);}</p>

112、<p>  printf("-----------------------------------------\n");</p><p>  printf("|學號\t|姓名\t|語文\t|英語\t|數(shù)學\t|\n");</p><p>  printf("-------------------------------------

113、----\n");/*打印表格域*/</p><p><b>  p1=head;</b></p><p>  while(number!=p1->number&&p1->next!=NULL)</p><p>  {p2=p1;p1=p1->next;} </p><p> 

114、 if(number==p1->number) </p><p>  {printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);</p><p>  printf("----------

115、-------------------------------\n");}/*打印表格域*/</p><p><b>  else </b></p><p>  printf("%d不存在此學生!\n",number);</p><p>  printf("輸入要查詢的學生的學號,");<

116、/p><p>  scanf("%d",&number);</p><p><b>  }</b></p><p>  printf("已經退出了!\n");</p><p>  return(head);}</p><p>  /*==========

117、====================================================================================*/</p><p>  /*==============================================================================================*/</p>&

118、lt;p>  score *del2311(score *head)/*函數(shù)del2311,功能:刪除學生資料*/</p><p><b>  {</b></p><p>  score *p1,*p2;</p><p>  int number;</p><p>  printf("輸入要刪除的學生的學

119、號(輸入0時退出):");</p><p>  scanf("%d",&number);</p><p>  getchar();</p><p>  while(number!=0)/*輸入學號為0時退出*/</p><p><b>  {</b></p><p

120、>  if(head==NULL)</p><p><b>  {</b></p><p>  printf("\n沒有任何學生資料!\n");</p><p>  return(head);</p><p><b>  }</b></p><p>

121、<b>  p1=head;</b></p><p>  while(number!=p1->number&&p1->next!=NULL)</p><p>  /*p1指向的不是所要找的首結點,并且后面還有結點*/</p><p><b>  {</b></p><p>

122、;  p2=p1;p1=p1->next;</p><p>  } /*p1后移一個結點*/</p><p>  if(number==p1->number) </p><p><b>  /*找到了*/ </b></p><p><b>  {</b></p><

123、;p>  if(p1==head)</p><p>  head=p1->next;</p><p>  /*若p1指向的是首結點,把地二個結點地址賦予head*/</p><p><b>  else </b></p><p>  p2->next=p1->next;</p>&l

124、t;p>  /*否則將下一個結點地址 賦給前一結點地址*/</p><p>  printf("刪除:%d\n",number);n=n-1;</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("

125、;%d不存在此學生!\n",number);</p><p>  /*找不到該結點*/</p><p>  printf("輸入要刪除的學生的學號:");</p><p>  scanf("%d",&number);</p><p>  getchar();</p>&l

126、t;p><b>  }</b></p><p>  #ifdef DEBUG </p><p>  printf("已經退出了!\n");</p><p><b>  #endif</b></p><p>  printf("現(xiàn)在的學生數(shù)為:%d個!\n"

127、;,n);</p><p>  return(head);</p><p><b>  } </b></p><p>  /*==============================================================================================*/</p>&l

128、t;p>  /*==============================================================================================*/</p><p>  void print2311(score *head)</p><p>  /*函數(shù)print2311,功能:顯示學生成績*/</p><

129、;p><b>  {</b></p><p><b>  score *p;</b></p><p>  if(head==NULL) </p><p>  {printf("\n沒有任何學生資料!\n");}</p><p><b>  else</

130、b></p><p>  {printf("%d\n",n);</p><p>  printf("-----------------------------------------\n");</p><p>  printf("|學號\t|姓名\t|語文\t|英語\t|數(shù)學\t|\n");</

131、p><p>  printf("-----------------------------------------\n");/*打印表格域*/</p><p><b>  p=head;</b></p><p><b>  do</b></p><p>  {printf("

132、;|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue);</p><p>  printf("-----------------------------------------\n");/*打印表格域*/</p><p&g

133、t;  p=p->next;}while (p!=NULL);/*打印完成了*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*==================================================================

134、============================*/</p><p>  /*==============================================================================================*/</p><p>  score *statistics2311(score *head)</p>

135、<p>  /*函數(shù)statistics2311,功能:統(tǒng)計學生成績*/</p><p><b>  {</b></p><p>  float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;</p><p><b>  score *p;</b><

136、/p><p>  int x,y=0,i=0;</p><p><b>  p=head;</b></p><p>  printf("1個人總分和平均分\t2單科平均分\t3總分最高分\t4總分最低分\n");</p><p>  scanf("%d",&x);</p&

137、gt;<p>  getchar();</p><p><b>  switch(x)</b></p><p>  /*用switch語句實現(xiàn)功能選擇*/</p><p><b>  {</b></p><p>  case 1: if(head==NULL)</p>&

138、lt;p>  {printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/</p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("----------------------------

139、-----------------------------\n");</p><p>  printf("|學號\t|姓名\t|語文\t|英語\t|數(shù)學\t|總分\t|平均分\t|\n");</p><p>  printf("---------------------------------------------------------\n&qu

溫馨提示

  • 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

提交評論