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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

4、平均分。</p><p><b>  設(shè)計(jì)要求:</b></p><p> ?。?)界面菜單主菜單,具體要求如下:</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 /*計(jì)算所有學(xué)生的總分和均分*/</p><p>  6. sort by score /*排序*/</p><p>  7. Quit /*退出*/</p><p> ?。?)需要定義多個(gè)函數(shù)對(duì)應(yīng)菜單</p><p>  /*以下是函數(shù)原型對(duì)應(yīng)

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); /*計(jì)算總分和均分*/</p><p>  STUDENT *sort(STUDENT *h); /*排序*/</p><p>  int menu_select();

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

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

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

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

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

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

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

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

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

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

19、,當(dāng)strcmp(p->name,s) && p != NULL時(shí),使p后移一個(gè)結(jié)點(diǎn),如果p!=NULL,輸出p所指的結(jié)點(diǎn)。如果有該學(xué)生就修改。并出現(xiàn)提示信息"***Modify success!***"。如果沒有該學(xué)生則出現(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>  這是一個(gè)有參函數(shù),形參為“鏈表頭的指針”,按學(xué)生成績(jī)的平均分高低進(jìn)行排序,還可以顯示名次。</p><p><b>  N-S流程圖:</b></p><p><b>  程序的

21、函數(shù)設(shè)計(jì)</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>  計(jì)算總分和均分函數(shù): void computer(STUDENT *h)</p><p>  修改函數(shù): STUDENT *Modify(STUDENT *head,STUDENT *new)</p><p>  按學(xué)號(hào)排序函數(shù): STUDENT *index(STUDENT *h)</p><p>  菜

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

25、<p>  刪除函數(shù): 刪除某學(xué)生的信息。</p><p>  排序函數(shù): 按總成績(jī)排序。</p><p>  按學(xué)號(hào)排序函數(shù): 按學(xué)號(hào)排序。</p><p>  插入函數(shù): 可以插入新的信息。</p><p><b>  函數(shù)的調(diào)用關(guān)系</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;/*學(xué)號(hào)*/</p><p>  char name[10];/*姓名*/</p><

28、p>  float yuwen;/*語(yǔ)文成績(jī)*/</p><p>  float yingyu;/*英語(yǔ)成績(jī)*/</p><p>  float shuxue;/*數(shù)學(xué)成績(jī) */</p><p>  float zongfen;/*個(gè)人總分*/</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ù)帶回一個(gè)指向鏈表頭的指針*/</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; /*開辟一個(gè)新單元*/</p><p>  printf("請(qǐng)輸入學(xué)生資料,輸0退出!\n");</p><p>  repeat1: printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/</p&g

33、t;<p>  scanf("%d",&p1->number);</p><p>  while(p1->number<0)</p><p>  {getchar();</p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");</p><p>  

34、scanf("%d",&p1->number);} </p><p>  /*輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/</p><p>  if(p1->number==0)</p><p>  goto end;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(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("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");</p><p>  goto

37、 repeat1;</p><p>  /*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p>

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

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

40、績(jī)");/*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/</p><p>  scanf("%f",&p1->yuwen);}</p><p>  printf("請(qǐng)輸入英語(yǔ)成績(jī)(0~100):");/*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在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("輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī)");/*輸入錯(cuò)誤,重新輸入英語(yǔ)成績(jī)直到正確為止*/</p><

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

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

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("請(qǐng)輸入學(xué)生資料,輸0退出!\n");</p><p>  repeat2:printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");</p><p>  scanf("%d",&p1->number);/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/</p><p>

47、;  while(p1->number<0)</p><p>  {getchar();</p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");</p><p>  scanf("%d",&p1->number);} </p><p>  /*輸入學(xué)號(hào)為

48、字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/</p><p>  if(p1->number==0)</p><p>  goto end;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(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("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");</p><p>  goto repeat2;</p><p>  /*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/</p><p&g

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

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

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

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

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

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

57、;/p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī)");</p><p>  scanf("%f",&p1->shuxue);}/*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/</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>  /*交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/</p><p>  strcpy(t,max->name);</p><p&g

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

62、lt;/p><p>  p1->yuwen=fen;</p><p>  /*交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與學(xué)號(hào)相匹配*/</p><p>  fen=max->yingyu;</p><p>  max->yingyu=p1->yingyu;</p><p>  p1->yingyu=fe

63、n;</p><p>  /*交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與學(xué)號(hào)相匹配*/</p><p>  fen=max->shuxue;</p><p>  max->shuxue=p1->shuxue;</p><p>  p1->shuxue=fen;</p><p>  /*交換前后結(jié)點(diǎn)中的數(shù)學(xué)

64、成績(jī),使之與學(xué)號(hào)相匹配*/</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;/*鏈表結(jié)尾*/</p><p>  printf("輸入的學(xué)生數(shù)為:%d個(gè)!\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,功能:從文件讀入學(xué)生記錄*/</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("請(qǐng)輸入文件路徑及文件名:");</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," 學(xué)生成績(jī)管理系統(tǒng) \n");</p><p>  fscanf(fp,"作者:李鵬超 班級(jí): 電信1101班 學(xué)號(hào):1107050113 \n");</p><p>  fscanf(fp,"-----------------------------------------\n");&l

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

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

73、f("|學(xué)號(hào)\t|姓名\t|語(yǔ)文\t|英語(yǔ)\t|數(shù)學(xué)\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); /*開辟一個(gè)新單元*/</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); /*開辟一個(gè)新單元*/ </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);/*結(jié)束讀入,關(guān)閉文件*/</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,功能:追加學(xué)生資料,并且將所有學(xué)生資料按學(xué)號(hào)排序*/</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);/*開辟一個(gè)新單元*/</p><p>  printf("\n輸入要

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

85、tu->number<0)</p><p>  {getchar();</p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");</p><p>  scanf("%d",&stu->number);}/*輸入錯(cuò)誤,重新輸入學(xué)號(hào)*/</p><p>  /***

86、***************************************************/</p><p>  if(stu->number==0)</p><p>  goto end2;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束追加*/</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("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");</p><p>  goto repeat4;</p><p>  /*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序

89、報(bào)錯(cuò),返回前面重新輸入*/</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>  /

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

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

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

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

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

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

96、uot;%f",&stu->shuxue);}/*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/</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;}/*當(dāng)原來鏈表為空時(shí),從首結(jié)點(diǎn)開始存放資料*/</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>  /*交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/</p><p>  strcpy(t,max->n

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

105、>yuwen=p1->yuwen;</p><p>  p1->yuwen=fen;</p><p>  /*交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與學(xué)號(hào)相匹配*/</p><p>  fen=max->yingyu;</p><p>  max->yingyu=p1->yingyu;</p><

106、;p>  p1->yingyu=fen;</p><p>  /*交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與學(xué)號(hào)相匹配*/</p><p>  fen=max->shuxue;</p><p>  max->shuxue=p1->shuxue;</p><p>  p1->shuxue=fen;</p>

107、<p>  /*交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與學(xué)號(hào)相匹配*/</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)在的學(xué)生數(shù)為:%d個(gè)!\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,功能:查詢學(xué)生成績(jī)*/</p><p>  {int number;</p><p>  score *p1,*p2;</p><p>  printf("輸入要查詢的學(xué)生的學(xué)號(hào),");</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沒有任何學(xué)生資料!\n");return(head);}</p>

112、<p>  printf("-----------------------------------------\n");</p><p>  printf("|學(xué)號(hào)\t|姓名\t|語(yǔ)文\t|英語(yǔ)\t|數(shù)學(xué)\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不存在此學(xué)生!\n",number);</p><p>  printf("輸入要查詢的學(xué)生的學(xué)號(hào),");<

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

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

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

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

120、>  if(head==NULL)</p><p><b>  {</b></p><p>  printf("\n沒有任何學(xué)生資料!\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指向的不是所要找的首結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/</p><p><b>  {</b></p><p>

122、;  p2=p1;p1=p1->next;</p><p>  } /*p1后移一個(gè)結(jié)點(diǎn)*/</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指向的是首結(jié)點(diǎn),把地二個(gè)結(jié)點(diǎn)地址賦予head*/</p><p><b>  else </b></p><p>  p2->next=p1->next;</p>&l

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

125、;%d不存在此學(xué)生!\n",number);</p><p>  /*找不到該結(jié)點(diǎn)*/</p><p>  printf("輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):");</p><p>  scanf("%d",&number);</p><p>  getchar();</p>&l

126、t;p><b>  }</b></p><p>  #ifdef DEBUG </p><p>  printf("已經(jīng)退出了!\n");</p><p><b>  #endif</b></p><p>  printf("現(xiàn)在的學(xué)生數(shù)為:%d個(gè)!\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,功能:顯示學(xué)生成績(jī)*/</p><

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

130、b></p><p>  {printf("%d\n",n);</p><p>  printf("-----------------------------------------\n");</p><p>  printf("|學(xué)號(hào)\t|姓名\t|語(yǔ)文\t|英語(yǔ)\t|數(shù)學(xué)\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)計(jì)學(xué)生成績(jī)*/</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個(gè)人總分和平均分\t2單科平均分\t3總分最高分\t4總分最低分\n");</p><p>  scanf("%d",&x);</p&

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論