c語(yǔ)言課程設(shè)計(jì)-學(xué)生成績(jī)統(tǒng)計(jì)管理_第1頁(yè)
已閱讀1頁(yè),還剩70頁(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>  學(xué)生成績(jī)統(tǒng)計(jì)管理</b></p><p><b>  一、課程設(shè)計(jì)內(nèi)容</b></p><p>  輸入一個(gè)班級(jí)的學(xué)生的基本信息(包括學(xué)號(hào),姓名,性別,5門(mén)課程成績(jī))。</p><p>  按姓名或者學(xué)號(hào)查找、修改、刪除和保存各個(gè)學(xué)生的信息。</p><p>  計(jì)算每

2、個(gè)學(xué)生各門(mén)功課總分和平均分,按學(xué)號(hào)或總分排序輸出每個(gè)學(xué)生的基本信息及總分、平均分和名次。</p><p>  計(jì)算全班各門(mén)功課的平均分,顯示每門(mén)課程中低于平均分的每一個(gè)學(xué)生的學(xué)號(hào),姓名,性別,科目,成績(jī)。</p><p>  顯示每門(mén)科目中,成績(jī)?cè)?0分以上的學(xué)生信息,以及每門(mén)科目中不及格的學(xué)生信息。</p><p><b>  用菜單進(jìn)行管理</b

3、></p><p>  只有正確輸入用戶名密碼才能使用此系統(tǒng)。</p><p>  所有內(nèi)容能夠保存到文件中。下次進(jìn)入系統(tǒng)是從文件中讀取原有信息。</p><p><b>  二、課程設(shè)計(jì)目的</b></p><p>  1. 培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成課題的能力。 </p><

4、p>  2. 使學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計(jì)思想和方法。</p><p>  3. 提高對(duì)工作認(rèn)真負(fù)責(zé)、一絲不茍,對(duì)同學(xué)團(tuán)結(jié)友愛(ài),協(xié)作攻關(guān)的基本素質(zhì)。 </p><p>  4. 培養(yǎng)勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有錯(cuò)必改,用實(shí)踐來(lái)檢驗(yàn)理論,全方位考慮問(wèn)題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。 </p><p>  5. 培

5、養(yǎng)從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識(shí)的能力,提高從別人經(jīng)驗(yàn)中找到解決問(wèn)題的新途徑的悟性,初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。 </p><p>  6. 對(duì)掌握知識(shí)的深度、運(yùn)用理論去處理問(wèn)題的能力、實(shí)驗(yàn)?zāi)芰?、課程設(shè)計(jì)能力、書(shū)面及口頭表達(dá)能力進(jìn)行考核</p><p><b>  三、工具/準(zhǔn)備工作</b></p><p>  查閱相關(guān)資料,借鑒他人

6、寫(xiě)過(guò)的程序,從中找到突破口。從程序中了解需要的各種函數(shù)準(zhǔn)備,再進(jìn)一步獲悉該函數(shù)的功能與使用方法。</p><p><b>  功能分析:</b></p><p>  菜單管理:分列功能選項(xiàng),學(xué)生信息的構(gòu)建,查找、修改、刪除和保存各個(gè)學(xué)生的信息,計(jì)算各科總分,平均分,并排序,查找優(yōu)秀學(xué)生信息及不及格學(xué)生信息。</p><p>  功能實(shí)現(xiàn):實(shí)現(xiàn)各

7、個(gè)功能。</p><p>  寫(xiě)入文件:所有內(nèi)容能夠保存到文件中。下次進(jìn)入系統(tǒng)是從文件中讀取原有信息。</p><p><b>  四、設(shè)計(jì)步驟、方法</b></p><p><b>  4. 1 菜單管理</b></p><p><b>  菜單顯示: </b></p&

8、gt;<p>  4. 2 輸入一個(gè)班級(jí)的學(xué)生信息</p><p>  4. 2. 1 創(chuàng)建一個(gè)鏈表</p><p><b>  結(jié)構(gòu)體:</b></p><p>  struct student</p><p><b>  {</b></p><p>  in

9、t num; //學(xué)號(hào)</p><p>  float score[Subject_n]; //五個(gè)學(xué)科的分?jǐn)?shù)</p><p>  float summary; //總分</p><p>  float aver_score; //平均分</p><p>  c

10、har name[16]; //學(xué)生姓名 </p><p>  char sex[3]; //性別</p><p>  struct student *next;</p><p><b>  };</b></p><p><b>  輸入

11、學(xué)生信息: </b></p><p>  4. 3 按學(xué)號(hào)查找、修改、刪除和保存各個(gè)學(xué)生的信息</p><p>  4. 3. 1 查找學(xué)生信息</p><p>  4. 3. 2 修改學(xué)生信息</p><p>  4. 3. 3 刪除學(xué)生信息</p><p>  4. 4 計(jì)算總分和平均分</p&g

12、t;<p>  4. 4. 1 總分</p><p>  4. 4. 2 平均分</p><p>  ( 1 ) 學(xué)生的平均成績(jī)</p><p>  ( 2 ) 學(xué)科的平均成績(jī)</p><p>  4. 5 按總分/學(xué)號(hào)排序</p><p>  4. 6 篩選優(yōu)秀和不及格學(xué)生的信息</p>

13、<p>  4. 6. 1 篩選優(yōu)秀學(xué)生</p><p>  4. 6. 2 篩選不及格學(xué)生</p><p>  4. 7 每門(mén)課程低于平均分的學(xué)生</p><p><b>  4. 8 寫(xiě)入文本</b></p><p><b>  4. 9 密碼管理</b></p>&l

14、t;p><b>  五、設(shè)計(jì)結(jié)果及分析</b></p><p><b>  5. 1 輸入密碼</b></p><p>  5. 2輸入學(xué)生信息</p><p>  5. 3 根據(jù)所需功能選擇選項(xiàng)</p><p><b>  5. 4 文件讀取</b></p>

15、<p><b>  5. 5 排序</b></p><p><b>  5. 6 刪除</b></p><p><b>  5.7 添加</b></p><p><b>  5. 8 查找</b></p><p>  5. 9 低于平均分&l

16、t;/p><p>  5. 10 高于90分</p><p><b>  5. 11 不及格</b></p><p>  5.12 按0結(jié)束程序</p><p><b>  六、設(shè)計(jì)結(jié)論</b></p><p>  在實(shí)現(xiàn)程序過(guò)程中往往不會(huì)一帆風(fēng)順,學(xué)會(huì)調(diào)試才是關(guān)鍵。</p

17、><p>  注意使用子函數(shù),在子函數(shù)中分段調(diào)試實(shí)現(xiàn)階段性成功,能更好地走向終點(diǎn)。</p><p>  編譯成功不代表程序運(yùn)行的完整性,在運(yùn)行程序時(shí),要更多的實(shí)現(xiàn)各種各樣的特殊值,提高程序的可行性。</p><p><b>  七、問(wèn)題及心得體會(huì)</b></p><p>  常見(jiàn)問(wèn)題:變量的定義,在循環(huán)過(guò)程中變量的初始化。&

18、lt;/p><p>  程序測(cè)試時(shí)出現(xiàn)的問(wèn)題:</p><p>  1.科目平均成績(jī)計(jì)算錯(cuò)誤;</p><p>  2.科目平均成績(jī)有時(shí)會(huì)亂碼;</p><p><b>  3.不顯示總成績(jī);</b></p><p>  4.修改信息沒(méi)有提示;</p><p>  5.修改信息

19、要輸入兩次學(xué)號(hào);</p><p>  6.文件操作時(shí),按提示操作確無(wú)法創(chuàng)建也無(wú)法打開(kāi)文件;</p><p>  7.文件在程序結(jié)束前不能保存;</p><p><b>  8.不能讀取文件;</b></p><p>  9.查找不存在的學(xué)生時(shí)程序崩潰;</p><p>  10.第一次顯示鏈表時(shí)平

20、均成績(jī)沒(méi)有計(jì)算出來(lái);</p><p>  11.按總成績(jī)排序時(shí),第一個(gè)和最后一個(gè)無(wú)法參與排序;</p><p><b>  12.沒(méi)有名次;</b></p><p>  13.文件輸出格式不對(duì);</p><p>  14.人數(shù)大于科目數(shù)時(shí),明明有數(shù)據(jù)輸出卻同時(shí)輸出了無(wú);</p><p>  15.

21、寫(xiě)入文件后,鏈表變成空;</p><p>  16.鏈表為空時(shí),修改學(xué)生信息仍然工作,但寫(xiě)入信息后程序崩潰;</p><p>  17.主菜單,第二次輸入操作數(shù)字時(shí),如果輸入的不是數(shù)字,程序陷入死循環(huán);</p><p>  18.修改不存在的學(xué)生信息,雖然提示了學(xué)生不存在,但修改信息確依然工作,輸入信息后程序崩潰;</p><p>  19.

22、兩個(gè)學(xué)生的排序無(wú)法進(jìn)行;</p><p>  20.不只是主菜單,其他要求輸入數(shù)字的菜單,如果收入的不是數(shù)字,程序陷入死循環(huán);</p><p>  21.輸入密碼的時(shí)候,如果輸入的密碼過(guò)長(zhǎng),程序崩潰;</p><p>  22.輸入學(xué)生姓名過(guò)長(zhǎng)時(shí),程序崩潰;</p><p>  23.類似問(wèn)題就是輸入字符串較長(zhǎng)的時(shí)候,程序一般都會(huì)崩潰;<

23、;/p><p>  24.多重錯(cuò)誤信息的輸出;</p><p>  25.學(xué)生姓名為四個(gè)漢字時(shí),因?yàn)樾彰c性別連在一起,輸出文件后再讀取文件時(shí),把姓名和性別當(dāng)成一個(gè)字符串,導(dǎo)致后面所有的信息讀取錯(cuò)誤;26.修改學(xué)生信息時(shí),輸出的確認(rèn)信息里,沒(méi)有重新計(jì)算總分,平均分;27.0個(gè)文件讀取錯(cuò)誤;28.當(dāng)添加相同學(xué)號(hào)的學(xué)生時(shí),不會(huì)提示重復(fù);29.添加學(xué)生后,沒(méi)有計(jì)算總分與平均分;30.修改了

24、代碼的格式,簡(jiǎn)化了排序函數(shù);31.經(jīng)過(guò)按成績(jī)排序后,添加相同學(xué)號(hào)的學(xué)生,不會(huì)提示重復(fù);32.修改信息,如果不想修改,增加了可跳過(guò)的功能;</p><p>  在程序?qū)崿F(xiàn)的過(guò)程中,需要考慮變量的范圍,一般程序順序思考過(guò)程中,要全面考慮。另外在實(shí)現(xiàn)程序的過(guò)程中要學(xué)會(huì)注釋,使得在重新審視程序時(shí)能更方便快捷。其中,在書(shū)寫(xiě)程序師趨向于人性化,一步一步步驟化。解決實(shí)際問(wèn)題是需要樣樣斟酌,考慮不同的可能性。</p&g

25、t;<p>  八、對(duì)本設(shè)計(jì)過(guò)程及方法、手段的改進(jìn)建議</p><p>  本程序?qū)τ脩糨斎氲南拗品矫嫒杂腥毕?,?dāng)接受不符合要求或過(guò)長(zhǎng)的字符(串)時(shí),程序仍然可能出現(xiàn)異常。建議對(duì)每一次的輸入都進(jìn)行檢驗(yàn),并使用更安全的函數(shù)scanf_s(); fgets(); 等函數(shù)取代scanf(); gets(); 以確保程序的穩(wěn)定運(yùn)行。</p><p>  程序顯示過(guò)程中沒(méi)有清屏操作,每

26、一次顯示都在上一次的結(jié)果后進(jìn)行,導(dǎo)致程序多次執(zhí)行顯示任務(wù)后,界面變得很混亂。建議在某些顯示任務(wù)執(zhí)行前,使用system(“cls”); 函數(shù)執(zhí)行清屏操作。</p><p>  程序在讀取文件或者創(chuàng)建新的成績(jī)單時(shí),覆蓋了上一次的成績(jī)單,但是程序并沒(méi)有將上一次保存在內(nèi)存中的數(shù)據(jù)清理,也沒(méi)有釋放被占用的內(nèi)存。這就有可能導(dǎo)致程序在執(zhí)行多次讀取或創(chuàng)建操作后,占用的內(nèi)存越來(lái)越大。建議在覆蓋后立即釋放不需要的內(nèi)存,節(jié)約空間。&

27、lt;/p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 賈宗璞、許合利.《C語(yǔ)言程序設(shè)計(jì)(第二版)》.人民郵電出版社,2014年.</p><p><b>  [2] 百度百科.</b></p><p><b>  附錄I</b></p><

28、;p><b>  分工:</b></p><p>  程序設(shè)計(jì)、編寫(xiě)、修改和測(cè)試,撰寫(xiě)報(bào)告。</p><p><b>  附錄II</b></p><p><b>  源代碼:</b></p><p>  #include<stdio.h></p>

29、<p>  #include<string.h></p><p>  #include<malloc.h></p><p>  #define Subject_n 5</p><p>  #define LEN sizeof(struct student)</p><p>  struct student

30、</p><p><b>  {</b></p><p><b>  int num;</b></p><p>  float score[Subject_n];</p><p>  float summary; </p><p>  float aver_score;<

31、;/p><p>  char name[16];</p><p>  char sex[3];</p><p>  struct student *next;</p><p><b>  };</b></p><p>  typedef struct student stu;</p>&

32、lt;p>  const static char Format_head[]={"學(xué)號(hào)\t姓名\t 性別\t科目1\t科目2\t科目3\t科目4\t科目5\t總分\t平均分\n"};</p><p>  const static char Format_head_2[]={"\n學(xué)號(hào)\t姓名\t 性別\t該科成績(jī)\n"};</p><p>

33、  const static char Format_data[]={"%-8d%-10s %-3s\t"};</p><p>  const static char PassWord[16]={"123456\n"};</p><p>  float sub_ave_s[Subject_n]={0};</p><p>  s

34、tu *Creat(stu *head);</p><p>  stu *Insert(stu *head);</p><p>  stu *Insert_File(int rf_stu_n);</p><p>  stu *Delete(stu *head);</p><p>  stu *Sort(stu *head);</p>

35、;<p>  stu *File_R_And_W(stu *head,const char *type);</p><p>  stu *Find_Stu(stu *head);</p><p>  stu *Change_Value(stu *head);</p><p>  int Count_Stu(stu *head);</p>

36、<p>  void Summary_Score(stu *head);</p><p>  void Stu_Aver_Score(stu *head,int count);</p><p>  void Sub_Aver_Score(stu *head);</p><p>  void Display(stu *head);</p>&l

37、t;p>  void Show_Under_Average(stu *head);</p><p>  void Show_Higher(stu *head);</p><p>  void Show_Fail(stu *head);</p><p>  void Show_One(stu *one);</p><p>  void S

38、how_Subject_Average(stu *head,float *sub_ave_s);</p><p>  void Show_By_Condition(stu *head,int type);</p><p>  void help(int type);</p><p>  int Log_In();</p><p>  int

39、main(void)</p><p><b>  {</b></p><p>  stu *head = NULL;</p><p>  int Access=0;</p><p>  int Access_n=3;</p><p>  int operate = 0;</p>&l

40、t;p>  char File_type[3];</p><p>  int Show_type=0;</p><p>  printf("學(xué)生成績(jī)統(tǒng)計(jì)管理程序\n");</p><p>  Access=Log_In();</p><p>  while(Access_n)</p><p>

41、<b>  {</b></p><p>  if(Access>0)</p><p><b>  {</b></p><p><b>  help(1);</b></p><p>  while (scanf("%d", &operate)==

42、1)</p><p><b>  {</b></p><p>  switch (operate)</p><p><b>  {</b></p><p>  case 1:head = Creat(head);Display(head);break;</p><p>  c

43、ase 2:Display(head);break;</p><p>  case 3:head = Insert(head);break;</p><p>  case 4:head = Delete(head);break;</p><p>  case 5:Show_By_Condition(Find_Stu(head),4);break;</p>

44、<p>  case 6:Change_Value(head);Sub_Aver_Score(head);break;</p><p>  case 7:Stu_Aver_Score(head,Count_Stu(head));Display(head);break;</p><p>  case 8:Sub_Aver_Score(head);Show_Subject_Ave

45、rage(head,sub_ave_s);break;</p><p>  case 9:help(4);Sort(head);Display(head);break;</p><p>  case 10:help(2);</p><p>  while(scanf("%d",&Show_type) != 1)</p>&l

46、t;p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  Show_By_Condition(head,Show_type)

47、;break;</p><p>  case 11:help(3);scanf_s("%s",File_type,3);</p><p>  head=File_R_And_W(head,File_type);break;</p><p>  case 0:return 0;</p><p><b>  defa

48、ult:;</b></p><p><b>  }</b></p><p><b>  help(1);</b></p><p><b>  }</b></p><p>  fflush(stdin);</p><p><b> 

49、 }</b></p><p>  else if(Access_n>1)</p><p><b>  {</b></p><p>  Access_n--;</p><p>  printf("\n密碼錯(cuò)誤,你還有%d次機(jī)會(huì)輸入\n",Access_n);</p>&l

50、t;p>  Access=Log_In();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\n錯(cuò)誤次數(shù)過(guò)多,程序終止!\n"); &l

51、t;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }<

52、/b></p><p>  stu *Creat(stu *head)</p><p><b>  {</b></p><p>  stu *head_old = head;</p><p><b>  stu *p;</b></p><p>  stu *tail;&

53、lt;/p><p><b>  int x=0;</b></p><p>  int score_n;</p><p><b>  char y_n;</b></p><p>  tail = head = NULL;</p><p>  printf("\n此操作會(huì)覆

54、蓋原有的成績(jī)單!是否繼續(xù)?(y/n) ");</p><p>  getchar();</p><p>  y_n=getchar();</p><p>  if(y_n == 'y' || y_n == 'Y')</p><p><b>  {</b></p>&

55、lt;p>  printf("\n請(qǐng)輸入學(xué)生的學(xué)號(hào)(輸入 0 結(jié)束):");</p><p>  while(scanf("%d", &x) != 1)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p&

56、gt;<p>  fflush(stdin);</p><p><b>  }</b></p><p>  while (x != 0)</p><p><b>  {</b></p><p>  p = (stu *)malloc(LEN);</p><p>

57、  (*p).num = x;</p><p>  if (head == NULL) head = p;</p><p>  printf("請(qǐng)輸入學(xué)生的姓名:");</p><p>  scanf_s("%s", &(*p).name,16);</p><p>  printf("

58、請(qǐng)輸入學(xué)生的姓別:");</p><p>  scanf_s("%s", &(*p).sex,3);</p><p>  printf("請(qǐng)輸入學(xué)生五門(mén)課的成績(jī):");</p><p>  for(score_n=0;score_n<Subject_n;score_n++)</p><

59、;p><b>  {</b></p><p>  while(scanf("%f", &(*p).score[score_n]) != 1)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p>

60、<p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if (tail != NULL) (*tail).next = p;</p><p><b>  tail = p;</b>

61、;</p><p>  printf("請(qǐng)輸入學(xué)生的學(xué)號(hào)(輸入 0 結(jié)束):");</p><p>  while(scanf("%d", &x) != 1)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:&qu

62、ot;);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if (tail != NULL) (*tail).next = NULL;</p><p>  Stu_Aver

63、_Score(head,Count_Stu(head));</p><p>  Sub_Aver_Score(head);</p><p>  return head;</p><p><b>  }</b></p><p><b>  else</b></p><p>&

64、lt;b>  {</b></p><p>  return head_old;</p><p><b>  }</b></p><p><b>  }</b></p><p>  stu *Insert(stu *head)</p><p><b>

65、;  {</b></p><p>  int score_n;</p><p>  stu *new_stu = (stu *)malloc(LEN);</p><p>  stu *find = NULL;</p><p>  stu *last = NULL;</p><p>  stu *traver

66、sal = NULL; </p><p>  find = head;</p><p>  printf("\n請(qǐng)輸入學(xué)生的學(xué)號(hào):");</p><p>  while(scanf("%d",&(*new_stu).num) != 1)</p><p><b>  {</b>

67、;</p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  if (find != NULL)</p><p><b>  {</b>&

68、lt;/p><p>  for ( ; find!=NULL&&(*find).num < (*new_stu).num ; find = (*find).next )</p><p><b>  {</b></p><p>  last = find;</p><p><b>  }<

69、/b></p><p>  for(traversal = head ; traversal != NULL ; traversal=(*traversal).next )</p><p><b>  {</b></p><p>  if((*new_stu).num == (*traversal).num)</p><

70、;p><b>  {</b></p><p>  printf("\n該學(xué)生已存在\n");</p><p>  free(new_stu);</p><p>  new_stu=NULL;</p><p>  return head;</p><p><b>

71、  }</b></p><p><b>  }</b></p><p>  if (find != NULL)</p><p><b>  {</b></p><p>  if(find != head) (*last).next = new_stu;</p><p

72、>  else head = new_stu;</p><p>  (*new_stu).next = find;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><

73、p>  (*last).next = new_stu;</p><p>  (*new_stu).next = NULL;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p>

74、<p><b>  {</b></p><p>  head = new_stu;</p><p>  (*new_stu).next = NULL;</p><p><b>  }</b></p><p>  printf("請(qǐng)輸入學(xué)生的姓名:");</p>

75、;<p>  scanf_s("%s", &(*new_stu).name,16);</p><p>  printf("請(qǐng)輸入學(xué)生的姓別:");</p><p>  scanf_s("%s", &(*new_stu).sex,3);</p><p>  printf(&quo

76、t;請(qǐng)輸入學(xué)生五門(mén)課的成績(jī):");</p><p>  for(score_n=0;score_n<Subject_n;score_n++)</p><p><b>  {</b></p><p>  while(scanf("%f", &(*new_stu).score[score_n]) != 1

77、)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  }</b&g

78、t;</p><p>  Stu_Aver_Score(new_stu,1);</p><p>  if(new_stu != NULL)</p><p><b>  {</b></p><p>  printf("\n添加的學(xué)生信息:\n");</p><p>  Show_

79、By_Condition(new_stu,4);</p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b></p><p>  stu *Insert_File(int rf_stu_n)</p><p>&

80、lt;b>  {</b></p><p>  stu *rf = NULL;</p><p>  stu *head = NULL;</p><p><b>  int n=0;</b></p><p>  if(rf_stu_n<1)</p><p><b> 

81、 {</b></p><p>  return head;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  rf = (stu *)malloc

82、(LEN);</p><p><b>  head=rf;</b></p><p>  for(n=0;n<rf_stu_n-1;n++)</p><p><b>  {</b></p><p>  (*rf).next = (stu *)malloc(LEN);</p><

83、;p>  rf=(*rf).next;</p><p><b>  }</b></p><p>  (*rf).next=NULL;</p><p><b>  }</b></p><p>  return head;</p><p><b>  }<

84、/b></p><p>  stu *Delete(stu *head)</p><p><b>  {</b></p><p>  int num = 0;</p><p>  stu *find = NULL;</p><p>  stu *last = NULL;</p>

85、<p>  find = head;</p><p>  if(head != NULL)</p><p><b>  {</b></p><p>  printf("\n請(qǐng)輸入需要?jiǎng)h除的學(xué)生的學(xué)號(hào):");</p><p>  while(scanf("%d", &am

86、p;num) != 1)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  for ( ;

87、 find != NULL && (*find).num != num ; find = (*find).next)</p><p><b>  {</b></p><p>  last = find;</p><p><b>  }</b></p><p>  if (find !

88、= NULL && (*find).num == num)</p><p><b>  {</b></p><p>  if (find == head) head = (*head).next;</p><p>  else (*last).next = (*find).next;</p><p>  

89、free(find);</p><p>  printf("\n已刪除\n"); </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  pr

90、intf("\nERROR:NotFound!\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p

91、><p>  printf("\nERROR:The list is NULL!\n");</p><p>  return head;</p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b>

92、;</p><p>  stu *Sort(stu *head)</p><p><b>  {</b></p><p>  stu *find = NULL;</p><p>  stu *tail = NULL;</p><p>  stu *next = NULL;</p>&

93、lt;p><b>  stu temp;</b></p><p>  int type=0;</p><p>  find = head;</p><p>  next = find;</p><p>  while(scanf("%d",&type) != 1)</p>

94、<p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  if(type==1)</p><p>

95、;<b>  {</b></p><p>  if (find != NULL)</p><p><b>  {</b></p><p>  if(head->next==NULL) return head;</p><p>  for(find=head;find!=NULL;find=fi

96、nd->next);</p><p>  tail=find;</p><p>  while(tail!=head->next)</p><p><b>  {</b></p><p>  for(find=head;find->next!=tail;find=(*find).next)</p&

97、gt;<p><b>  {</b></p><p>  next=(*find).next;</p><p>  if((*find).summary<(*next).summary)</p><p><b>  {</b></p><p>  temp=(*next);<

98、;/p><p>  (*next)=(*find);</p><p>  (*find)=temp;</p><p>  temp.next=(*next).next;</p><p>  (*next).next=(*find).next;</p><p>  (*find).next=temp.next;&

99、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  tail=find;</p><p><b>  }</b></p><p><b>  }</b></p><

100、p>  return head;</p><p><b>  }</b></p><p>  else if(type==2)</p><p><b>  {</b></p><p>  if(find != NULL)</p><p><b>  {<

101、;/b></p><p>  if(head->next==NULL) return head;</p><p>  for(find=head;find!=NULL;find=find->next);</p><p>  tail=find;</p><p>  while(tail!=head->next)<

102、/p><p><b>  {</b></p><p>  for(find=head;find->next!=tail;find=(*find).next)</p><p><b>  {</b></p><p>  next=(*find).next;</p><p> 

103、 if((*find).num>(*next).num)</p><p><b>  {</b></p><p>  temp=(*next);</p><p>  (*next)=(*find);</p><p>  (*find)=temp;</p><p>  temp.next=(*

104、next).next;</p><p>  (*next).next=(*find).next;</p><p>  (*find).next=temp.next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  tail=

105、find;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b></p><p>  else printf("\nERROR\n

106、");</p><p><b>  }</b></p><p>  stu* File_R_And_W(stu *head,const char *type)</p><p><b>  {</b></p><p>  FILE *read_f=NULL;</p><p

107、>  FILE *write_f=NULL;</p><p>  stu *p=NULL;</p><p>  stu *head_new=head;</p><p>  int rf_stu_n=0;</p><p>  int sub_n=0;</p><p>  char file_name[128];&l

108、t;/p><p>  char temp[128];</p><p><b>  char y_n;</b></p><p>  if(strcmp(type,"r")==0 || strcmp(type,"R")==0)</p><p><b>  {</b>&

109、lt;/p><p>  getchar();</p><p>  printf("\n此操作會(huì)覆蓋原有的成績(jī)單!是否繼續(xù)?(y/n) ");</p><p>  y_n=getchar();</p><p>  if(y_n == 'y' || y_n == 'Y')</p>&l

110、t;p><b>  {</b></p><p>  printf("文件名:");</p><p>  getchar();</p><p>  gets(file_name);</p><p>  read_f=fopen(file_name,"r");</p>

111、<p>  if(read_f==NULL)</p><p><b>  {</b></p><p>  printf("\nERROR:This file cannot be opened!\n");</p><p><b>  }</b></p><p><

112、;b>  else</b></p><p><b>  {</b></p><p>  fscanf(read_f,"%d\n",&rf_stu_n);</p><p>  p=Insert_File(rf_stu_n);</p><p>  head_new=p;</

113、p><p>  fgets(temp,100,read_f);</p><p>  while (p!=NULL&&!feof(read_f))</p><p><b>  {</b></p><p>  fscanf(read_f,"%d%s%s",&(*p).num,&

114、(*p).name,&(*p).sex);</p><p>  for(sub_n=0;sub_n<Subject_n;sub_n++)</p><p><b>  {</b></p><p>  fscanf(read_f,"%f",&(*p).score[sub_n]);</p>&l

115、t;p><b>  }</b></p><p>  fscanf(read_f,"%f%f",&(*p).summary,&(*p).aver_score);</p><p>  p = (*p).next;</p><p><b>  }</b></p><p

116、>  Display(head_new);</p><p><b>  }</b></p><p>  fclose(read_f);</p><p>  return head_new;</p><p><b>  }</b></p><p><b>  

117、else</b></p><p><b>  {</b></p><p>  return head_new;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if( (strcm

118、p(type,"w")==0 || strcmp(type,"W")==0) && head!=NULL)</p><p><b>  {</b></p><p>  getchar();</p><p>  printf("文件名:");</p><

119、;p>  gets(file_name);</p><p>  write_f=fopen(file_name,"w");</p><p><b>  p=head;</b></p><p>  if(write_f==NULL)</p><p><b>  {</b>&l

120、t;/p><p>  printf("\nERROR:This file cannot be opened!\n");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

121、;<p>  fprintf(write_f,"%d\n",Count_Stu(head));</p><p>  fprintf(write_f,Format_head);</p><p><b>  do</b></p><p><b>  {</b></p><p

122、>  fprintf(write_f,Format_data,(*p).num,(*p).name,(*p).sex);</p><p>  for(sub_n=0;sub_n<Subject_n;sub_n++)</p><p><b>  {</b></p><p>  fprintf(write_f,"%5.1f\t

123、",(*p).score[sub_n]);</p><p><b>  }</b></p><p>  fprintf(write_f,"%5.1f\t%5.1f\n",(*p).summary,(*p).aver_score);</p><p>  p = (*p).next;</p><p&

124、gt;  } while (p != NULL);</p><p><b>  }</b></p><p>  fclose(write_f);</p><p><b>  }</b></p><p>  else printf("\nERROR!\n");</p>

125、<p>  return head_new;</p><p><b>  }</b></p><p>  stu *Find_Stu(stu *head)</p><p><b>  {</b></p><p><b>  int num;</b></p>

126、;<p>  stu *find = head;</p><p>  if (head != NULL)</p><p><b>  {</b></p><p>  printf("\n請(qǐng)輸入要查找的學(xué)生的學(xué)號(hào):");</p><p>  while(scanf("%d&quo

127、t;,&num) != 1)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><

128、;b>  do</b></p><p><b>  {</b></p><p>  if((*find).num == num) break;</p><p>  else find = (*find).next;</p><p>  } while (find != NULL);</p>

129、<p>  if(find == NULL)printf("\nERROR:NotFound!\n");</p><p><b>  }</b></p><p>  else printf("\nERROR:The list is NULL!\n");</p><p>  return fin

130、d;</p><p><b>  }</b></p><p>  stu *Change_Value(stu *head)</p><p><b>  {</b></p><p>  stu *change=NULL;</p><p><b>  stu temp;

131、</b></p><p>  int score_n;</p><p>  change=Find_Stu(head);</p><p>  if(change!=NULL)</p><p><b>  {</b></p><p>  temp = *change;</p>

132、<p>  getchar();</p><p>  Show_One(change);</p><p>  printf("\n請(qǐng)重新輸入學(xué)生信息\n");</p><p>  printf("請(qǐng)輸入學(xué)生的姓名(直接按回車鍵可跳過(guò)此步驟):");</p><p>  gets((*cha

133、nge).name);</p><p>  if(strcmp((*change).name,"")==0)</p><p><b>  {</b></p><p>  strcpy((*change).name,temp.name);</p><p><b>  }</b>&l

134、t;/p><p>  printf("請(qǐng)輸入學(xué)生的姓別(直接按回車鍵可跳過(guò)此步驟):");</p><p>  gets((*change).sex);</p><p>  if(strcmp((*change).sex,"")==0)</p><p><b>  {</b></

135、p><p>  strcpy((*change).sex,temp.sex);</p><p><b>  }</b></p><p>  printf("請(qǐng)輸入學(xué)生五門(mén)課的成績(jī)(輸入 -1 可跳過(guò)此步驟):");</p><p>  for(score_n=0;score_n<Subject_n;

136、score_n++)</p><p><b>  {</b></p><p>  while(scanf("%f", &(*change).score[score_n]) != 1)</p><p><b>  {</b></p><p>  printf("輸

137、入錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  if((*change).score[0] == -1)</p><p><b>  {</b></p><p>  (*cha

138、nge).score[0]=temp.score[0];</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  Stu_Aver_Score(change,1);</p&g

139、t;<p>  printf("\n修改的學(xué)生信息:\n");</p><p>  Show_By_Condition(change,4);</p><p><b>  }</b></p><p>  return change; </p><p><b>  }</b&

140、gt;</p><p>  int Count_Stu(stu *head)</p><p><b>  {</b></p><p>  stu *p = head;</p><p>  int count=0;</p><p>  if (head != NULL)</p><

141、;p><b>  {</b></p><p><b>  do</b></p><p><b>  {</b></p><p><b>  count++;</b></p><p>  p = (*p).next;</p><p&

142、gt;  } while (p != NULL);</p><p><b>  }</b></p><p>  return count;</p><p><b>  }</b></p><p>  void Summary_Score(stu *head)</p><p>

143、<b>  {</b></p><p>  stu *p = head;</p><p>  int score_n=0;</p><p>  if (head != NULL)</p><p><b>  {</b></p><p><b>  do</b&

144、gt;</p><p><b>  {</b></p><p>  for(score_n=0,(*p).summary=0;score_n<Subject_n;score_n++)</p><p>  (*p).summary += (*p).score[score_n];</p><p>  p = (*p).

145、next;</p><p>  } while (p != NULL);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Stu_Aver_Score(stu *head,int count)</p><p>&l

溫馨提示

  • 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)論