數據結構課程設計——學生成績管理系統_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數據結構課程設計</b></p><p><b>  說 明 書</b></p><p>  學 院: </p><p>  班 級:

2、 </p><p>  完 成 人:姓 名: 學 號: </p><p>  姓 名: 學 號: </p><p>  指導教師: </p><p>  課 程 設 計 任 務 書</p>

3、<p>  一、課程設計題目: 學生成績管理 </p><p>  二、課程設計應解決的主要問題:</p><p>  (1) 從鍵盤輸入學生數據 </p><p> ?。?) 顯示所有學生成績

4、 </p><p> ?。?) 查詢學生成績 </p><p> ?。?) 在末尾增加學生 <

5、/p><p> ?。?) 在輸入學號的位置的后面插入學生 </p><p> ?。?) 按學號刪除學生 </p><p>  (7) 顯示不及格學生成績

6、 </p><p> ?。?) 按總成績排序并輸出成績 </p><p> ?。?) 保存所有學生信息 </p><p> ?。?0) 拷貝所有學生

7、信息到文件中 </p><p> ?。?1) 退出成績管理系統 </p><p>  三、任務發(fā)出日期: 2012-9-4 課程設計完成日期: 2010-12-8 </p><p>&l

8、t;b>  小組分工說明</b></p><p>  小組編號 9 題 目: 學生成績管理 </p><p><b>  小組分工情況:</b></p><p>  整體構思由兩人共同完成。</p><p>  

9、XXX:追加學生函數StudentScore *Add_new(),插入學生函數void *Insert(),刪除學生函數void Delete(),查找學生函數void Search(),拷貝鏈表中的數據函數StudentScore *Copy(),保存學生信息函數void Preserve(),main()函數。</p><p>  YY:從鍵盤輸入學生成績函數StudentScore *Input(),顯示

10、學生成績函數void Show(),顯示拷貝學生成績函數void Showcopy(),按總成績排序函數void Compositor(),顯示不及格學生成績函數void Fail()。</p><p>  課程設計說明書由XXX完成。</p><p>  組長簽字: </p><p>  2012 年 12 月 8 日</p>

11、<p>  指導教師對課程設計的評價</p><p>  成績: </p><p>  指導教師簽字: </p><p>  年 月 日 </p><p><b>  目 錄</b></p><p>  

12、1.需求分析說明…………….………………………4</p><p>  2.概要設計說明.........................................................4</p><p>  3.詳細設計說明…………………………………….6</p><p>  4.調試分析…………………………..……………..9</

13、p><p>  5.用戶使用說明及測試結果 ………………….…….10</p><p>  6.課程設計總結 ……………………...……….…….15</p><p>  7.參考書目 ………………………..…………..…….16</p><p>  8.附:程序代碼 …………………………………….16</p><p&

14、gt;<b>  需求分析說明</b></p><p><b>  1.需求分析</b></p><p>  為了提高學生信息的管理效率,方便對學生信息進行管理、學校里面的學生和管理員方便去管理和查詢學生信息,如果要進行查詢,就得在眾多的學生信息中查找自己的成績信息,面對學院大量的學生信息,怎么可以即時而方便的管理,建立一個學生成績管理系統,學生

15、只要登錄本系統就可以查找到自己的成績信息,而管理員也方便去管理每學期的學生的成績信息。使學生信息管理工作規(guī)范化,系統化,程序化,提高信息處理的速度和準確性,能夠及時、準確、有效的查詢和管理學生信息。</p><p>  建立學生成績管理系統可使學院教職員工減輕工作壓力,比較系統地對教務、教學上的各項服務和信息進行管理,同時,可以減少勞動力的使用,加快查詢速度、加強管理,使各項管理更加規(guī)范化。學生成績管理系統主要提

16、供成績查詢,學生可以通過該系統查閱與自己相關信息,管理員可以通過成績管理系統查閱學生成績信息。</p><p><b>  2. 功能分析</b></p><p>  “學生成績管理系統”實現的功能包括:輸入學生信息,輸出學生信息,按姓名查找并顯示學生信息,按學號查找并顯示學生信息,添加學生信息,插入學生信息,按學號刪除該學生信息,按總成績排序并輸出成績,顯示不及格學

17、生信息,拷貝所有學生信息,保存學生信息,退出管理系統。</p><p>  本系統根據學生成績管理的需要,而建立一個“學生成績管理系統”,以方便對成績的各項管理操作。本系統能對成績進行輸入和輸出;能按總成績對學生進行排序,并顯示學生成績等,不過得以系統輸入學生資料、成績?yōu)榍疤?;能添加學生成績資料;能根據學生的姓名和學號來查詢該學生的成績信息,或是刪除該學生信息;能把對系統所進行的操作進行備份,保存,以及時更新系統

18、中的數據。這些模塊既相互聯系又相互獨立。</p><p><b>  概要設計說明</b></p><p><b>  系統總體框架</b></p><p>  學生成績的結構體類型定義為:</p><p>  typedef struct StudentScore</p><p

19、><b>  {</b></p><p>  int stunum; // 學生學號</p><p>  char stuname[20]; // 學生姓名</p><p>  float score1; // 語文成績</p><p>  float score2;

20、 // 數學成績</p><p>  float score3; // 英語成績</p><p>  float sum; // 總成績</p><p>  struct StudentScore *next;</p><p>  } StudentScore;</p><p>  Studen

21、tScore *head=(StudentScore*)malloc(sizeof(StudentScore));</p><p>  // 定義一個單鏈表頭結點并申請結點空間</p><p>  StudentScore *headcopy=(StudentScore*)malloc(sizeof(StudentScore));</p><p>  // 定義另一

22、個單鏈表頭結點并申請結點空間</p><p>  int n=0; // 定義全局變量n,用以對學生人數計數 </p><p><b>  函數及功能:</b></p><p>  StudentScore *Input(); // 從鍵盤輸入學生成績</p><p>  void Show(); / /顯示

23、學生成績</p><p>  void Showcopy(); // 顯示拷貝學生成績</p><p>  StudentScore *Add_new(); // 在鏈表末尾追加學生</p><p>  void *Insert(); // 插入學生</p><p>  void Delete(); // 根據用戶輸入的學號

24、刪除該學生</p><p>  void Search(); // 按學號或姓名查找學生</p><p>  void Compositor(); // 按總成績排序</p><p>  void Fail(); // 顯示不及格學生成績</p><p>  StudentScore *Copy(); // 拷貝鏈表中的數據&l

25、t;/p><p>  void Preserve(); // 保存學生信息</p><p><b>  詳細設計說明</b></p><p>  主菜單包含在主函數里面,首先出現一個界面。</p><p>  printf("\n\t\t* * * * * 學生成績管理系統* * * * * * * *\n&qu

26、ot;);</p><p>  printf("\t\t*\t1.從鍵盤輸入學生數據\t\t*\n");</p><p>  printf("\t\t*\t2.顯示學生成績\t\t\t*\n");</p><p>  printf("\t\t*\t3.查詢學生成績\t\t\t*\n");</p>

27、<p>  printf("\t\t*\t4.追加學生\t\t\t*\n");</p><p>  printf("\t\t*\t5.插入學生\t\t\t*\n");</p><p>  printf("\t\t*\t6.按學號刪除學生\t\t*\n");</p><p>  printf(&

28、quot;\t\t*\t7.顯示不及格學生成績\t\t*\n");</p><p>  printf("\t\t*\t8.按總成績排序并輸出成績\t*\n");</p><p>  printf("\t\t*\t9.保存所有學生信息\t\t*\n");</p><p>  printf("\t\t*\t10

29、.拷貝所有學生信息\t\t*\n");</p><p>  printf("\t\t*\t0.退出成績管理系統\t\t*\n");</p><p>  printf("\t\t* * * * * * * * * * * * * * * * * * * *\n\n");</p><p>  printf("

30、請輸入你要執(zhí)行的操作:");</p><p>  下面是main( )的調用</p><p><b>  {</b></p><p><b>  case 1:</b></p><p><b>  Input();</b></p><p>  

31、Show(); break;</p><p><b>  case 2:</b></p><p>  Show(); break; </p><p><b>  case 3:</b></p><p>  Search();break;</p><p>&

32、lt;b>  case 4:</b></p><p>  Add_new(); break; </p><p><b>  case 5:</b></p><p>  Insert();break; </p><p><b>  case 6:</b><

33、/p><p>  Delete();break;</p><p><b>  case 7:</b></p><p>  Fail(); break;</p><p><b>  case 8:</b></p><p>  Compositorw(); break;</p&

34、gt;<p><b>  case 9:</b></p><p>  Preserve(); break;</p><p><b>  case 10:</b></p><p>  Copy(); break;</p><p><b>  case 0:</b>

35、</p><p>  system("pause"); return 0; </p><p><b>  }</b></p><p>  (1)輸入學生信息模塊:</p><p>  是通過Input() 和Show()兩個函數來實現的。</p><p>  主要功

36、能用來對學生的成績進行輸入。在學生信息保存在系統中的前提下,成績錄入需要輸入學生信息,比如學號,姓名。在準確輸入學生信息后,就可以對該學生的各科成績進行錄入。該學生各科成績輸入成功后,系統會提示是否繼續(xù)進行操作,如果想繼續(xù)輸入學生成績就繼續(xù)輸入學生的學號,不想再輸入學生成績的話就輸入0,輸入0之后會輸出一下當前所有學生信息,因為在輸入之后調用了一下輸出函數,并且統計輸入學生的總人數。然后按任意鍵返回主菜單?! ?lt;/p>&

37、lt;p>  (2)輸出學生信息模塊:</p><p>  是通過Show()函數實現的。</p><p>  主要功能用來對學生的成績進行輸出。在系統已經錄入了學生信息的前提下,使用該功能可以顯示所有學生的信息。具體包括學生的學號,姓名,各科成績,總成績和平均成績。在查看學生的成績等各方面的信息后,按任意鍵就可以返回到主菜單。</p><p> ?。?)查找

38、并顯示學生信息模塊:</p><p>  是通過Search()函數實現的。</p><p>  主要功能是用來查找學生資料。在系統保存了某學生資料的前提下,查找該學生資料。在主菜單進入查找后,會有子菜單,根據子菜單選擇1按學號查找,或者選擇2按姓名查找,或者選擇0退出查找。輸入該學生學號或者姓名后,系統就會顯示該學生學號,姓名,各科成績,總成績和平均成績。根據提示繼續(xù)輸入學號或姓名將繼續(xù)

39、查找,第一次輸入0表示結束按學號或姓名查找第二次輸入0表示結束查找,然后按任意鍵即可返回主菜單。</p><p>  (4) 追加學生模塊:</p><p>  是通過Add_new()函數實現的。</p><p>  主要功能是用來在鏈表末尾添加學生信息。在主菜單中進入次模塊后就可增加學生了,輸入學生學號,姓名,各科成績等。在成功添加學生信息后,就可以對該學生進行

40、其他的操作。增加一個節(jié)點t,t中存放追加學生的信息,將t連接到最后一個結點后邊,t->next=NULL。</p><p> ?。?)插入學生信息模塊:</p><p>  是通過Insert()函數實現的。</p><p>  主要功能是用來插入學生信息。進入此模塊后,用戶先輸入要插入位置的前一個學號,系統自動找到輸入的學號之后,用戶就可進行輸入要插入學生的

41、信息。繼續(xù)輸入學號將繼續(xù)插入,輸入0表示結束插入。在成功插入學生信息后,就可以對該學生進行其他的操作。</p><p> ?。?)刪除學生信息模塊:</p><p>  是通過Delete()函數實現的。</p><p>  主要功能是用來刪除學生信息。在系統保存學生信息的前提下,想刪除某學生的信息,可以輸入學生的學號,系統查找到該學生學號后,先顯示一下該學生的信息

42、和成績,就成功刪除了。由于學生輟學,畢業(yè)等原因,及時對系統進行更新,刪除一些沒用的信息,可以使系統更加優(yōu)化。</p><p>  (7) 顯示不及格學生成績:</p><p>  是通過Fail()函數實現的。</p><p>  主要功能用來對不及格學生的成績進行輸出。在系統已經錄入了學生信息的前提下,使用該功能可以顯示不及格學生的信息(只要有一科成績不及格,就認

43、為該生不及格)。具體也包括學生的學號,姓名,各科成績,總成績和平均成績,并且統計不及格學生的人數。</p><p> ?。?)按總成績排序并輸出成績:</p><p>  是通過Compositor()函數實現的。</p><p>  主要功能是用來對學生的總成績進行排序。在系統保存學生信息和成績的前提下,使用此功能可以對學生的總成績進行排序,這樣就方便查看學生的總

44、體成績情況。p=head->next,利用冒泡排序的思想,q結點中的總成績依次和其后邊結點r中的總成績進行比較,若有(q->sum)<(r->sum),則交換一下結點中的信息,兩層for循環(huán)實現排序。</p><p> ?。?)保存所有學生信息模塊:</p><p>  是通過Preserve()函數實現的。</p><p>  主要功能是用

45、來儲存學生信息。在對系統進行一系列操作,比如輸入、追加、插入、刪除、排序等,將學生信息保存在名為studentscore的文本文檔中。對系統的最新操作進行保存,及時更新系統信息,方便下一次的操作。</p><p> ?。?0)拷貝所有學生信息:</p><p>  是通過Copy()函數實現的。</p><p>  主要功能是用來拷貝學生信息。在系統已經錄入了學生信

46、息的前提下,或者在對系統進行一系列操作,比如輸入、追加、插入、刪除、排序等之后,將學生信息拷貝一遍。</p><p> ?。?1)保存學生信息并退出系統模塊:</p><p>  是通過Preserve()函數實現的。</p><p>  主要功能是退出學生成績管理系統。在退出學生成績管理系統之前先先自動保存一下學生信息。這樣就避免在進行一系列操作,比如添加、插入、

47、刪除、排序等之后,退出系統而忘記保存的情況。</p><p><b>  調試分析</b></p><p><b>  我遇到的問題:</b></p><p><b>  1.刪除模塊:</b></p><p>  我輸入一個要刪除的學號,顯示刪除成功!但輸出一下刪除學生的信息

48、,輸出的學生的學號和姓名是亂碼。</p><p>  解決問題:顯示一下當前所有學生信息,發(fā)現刪除成功。再檢查輸出,檢查指針指向的學號和姓名變量,發(fā)現沒有錯誤;重新檢查整個函數,發(fā)現錯誤原因是我在free(q)(q是要刪除的結點)之后輸出的被刪除學生的信息。結點已經釋放掉了,所以不知道q指的會是什么。</p><p>  2. 按總成績排序模塊:</p><p> 

49、 輸入幾個學生后,選擇按總成績排序,發(fā)現輸出的是原來的順序,根本沒排序。</p><p>  解決問題:利用printf發(fā)現進入了if循環(huán),但是輸出的卻是沒排序的成績。仔細分析指針的指向,值交換了但指針的指向不對。最終我決定利用指針不動,只交換值的方法。改完之后發(fā)現學號,姓名和各科成績交換了總成績和平均成績卻沒交換,仔細檢查覺得函數沒問題就是不知道為什么。通過向同學請教后來才發(fā)現程序運行過程中沒進入我寫的排序函數

50、,而是調用了我電腦中其他程序的排序函數。最后換了一個路徑才解決了這個問題。</p><p><b>  3.查找模塊:</b></p><p>  此模塊包括按學號查找和按姓名查找,我選擇按學號查詢完之后還想按姓名查找,但是程序沒有進行查找,一直出現“1、按學號查詢;2、按姓名查詢;0、我不查詢了?!弊謽?。</p><p>  解決問題:通過測

51、試發(fā)現沒進入按姓名查找循環(huán),檢查所編寫的程序代碼是否完全正確,通過重新一點一點改寫程序代碼,一遍一遍測試,最終解決了這個問題。</p><p><b>  4.保存模塊:</b></p><p>  我已經輸入了學生信息,保存時為讀寫建立一個新的文本文檔studentscore.txt,但仍出現“文件不存在”字樣。</p><p>  解決問題

52、:我把if((fp=fopen("studentscore.txt","w+"))==NULL);語句改成fp=fopen("studentscore.txt","w+"); if(!fp)后就能成功保存。后一種寫法是先建立一個studentscore.txt文本文檔,然后將學生信息寫進去。</p><p>  用戶使用說明及測試結果

53、</p><p>  運行程序,首先進入的是學生成績管理系統主菜單界面,如圖1所示,根據菜單上的提示選擇相應的序號進行操作。</p><p>  圖1 學生成績管理系統主菜單界面</p><p>  當用戶選擇1后,開始輸入學生信息,輸入學號,姓名,語文,數學和英語成績,當學號輸入為0時結束輸入,輸出一下當前所有學生的信息,如圖2所示。</p>&l

54、t;p>  圖2 輸入學生信息并顯示學生信息</p><p>  當用戶選擇3后,會出現“1、按學號查詢;2、按姓名查詢;0、我不查詢了?!钡淖硬藛?,按1選擇按學號查詢,按2選擇按姓名查詢,輸入正確的學號或姓名后會輸出相應的學生成績,如圖3所示。輸入0退出查詢子菜單,再輸入0退出查詢,再按任意鍵返回到主菜單界面。</p><p>  圖3 查找學生并輸出學生成績</p>

55、;<p>  用戶選擇4后,追加一個學生,輸入要追加學生的信息后,輸入0 結束輸入,顯示一下當前學生成績表,如圖4所示。</p><p>  圖4 追加學生并輸出追加后的學生成績表</p><p>  用戶選擇6后,輸入要刪除學生的學號后顯示一下刪除學生的信息,如圖5所示。</p><p>  圖5 刪除學生并顯示要刪除學生的信息</p&g

56、t;<p>  刪除學生成功后,回到主菜單,按2顯示當前學生成績表,如圖6所示。</p><p>  圖6 刪除后的學生成績表</p><p>  用戶選擇5后,插入學生信息并輸出當前學生成績表,如圖7所示。</p><p>  圖7 插入后的學生成績表</p><p>  用戶選擇8后,系統將按當前所有學生的總成績進行排序

57、,并輸出排序后的學生成績表,如圖8所示。</p><p>  圖8 排序后的學生成績表</p><p>  課程設計總結 </p><p>  在我和我的搭檔的共同努力下,我們最終完成了對此程序的編譯及試運行。通過這次數據結構課程設計,使我對程序的設計有了一個比較深刻的了解。</p><p>  首先是要設計整個程序的框架,確定各個

58、功能函數;然后一個個具體地對他們進行編程,并且仔細檢查看是否有錯;在完成這一步之后才開始構造主函數,通過主函數把各個功能函數聯系起來,編譯修改錯誤和不足之處。</p><p>  在實際編程過程中會遇到很多不同的錯誤,經過很多次的修改與調試,有時候是一些很明顯很細節(jié)的語法錯誤,這些可以通過編譯來查找錯誤的所在,然而那些并不明顯難以查找的隱性錯誤真讓人頭痛,只好利用斷點調試來一步步檢查代碼中的錯誤,這樣為了找一個錯

59、誤花費了大量的時間,但是找出錯誤之后會讓我記憶尤為深刻。</p><p>  在做這個課程設計的時候,涉及到很多學過的內容,比如鏈表的插入、刪除操作,再比如把鏈表中的數據保存到文件中等等,因此我們就得翻書重新看他們的用法。這樣不僅把以前學過的知識重新復習一遍,還能有效的把那些零散的知識點相結合,并運用。同時也學到了一些沒學過的知識,讓我從中受益匪淺。熟悉了一些基本操作和解決問題的方法。</p>&l

60、t;p>  總之,此次學生成績管理系統的設計給我們提供了一個既動手又動腦、自學、獨立實踐的機會,使我們養(yǎng)成了勤翻閱各種相關資料的習慣,將書本上的理論知識和實際有機地結合起來,鍛煉了實際分析問題和解決問題的能力,提高了適應實際、實踐編程的能力,為今后的學習和實踐打下了良好的基礎。</p><p><b>  參考書目</b></p><p>  [1] 數據結構

61、(c語言版),嚴蔚敏 吳偉民,清華大學出版社</p><p>  [2] 程序設計基礎——基于c語言,孫承愛 趙衛(wèi)東,科學出版社</p><p>  [3] 數據結構經典算法實現與習題解答,汪杰,人民郵電出版社</p><p>  [4] 數據結構與算法(c語言版),郭龍源 胡虛懷 何光明,清華大學出版社</p><p><b&g

62、t;  附:程序代碼</b></p><p>  #include<stdio.h></p><p>  #include <stdlib.h></p><p>  #include<string.h></p><p>  typedef struct StudentScore</p>

63、;<p><b>  {</b></p><p>  int stunum; //學生學號</p><p>  char stuname[20]; //學生姓名</p><p>  float score1; //語文成績</p><p>  float score2; //數學

64、成績</p><p>  float score3; //英語成績</p><p>  float sum; //總成績</p><p>  struct StudentScore *next;</p><p>  } StudentScore;</p><p>  StudentScore *h

65、ead=(StudentScore*)malloc(sizeof(StudentScore));</p><p>  //定義頭結點并申請結點空間</p><p>  StudentScore *headcopy=(StudentScore*)malloc(sizeof(StudentScore));</p><p>  int n=0; //定義全局變量n,用

66、以對學生人數計數</p><p><b>  //函數聲明</b></p><p>  StudentScore *Input();</p><p>  void Show();</p><p>  void Showcopy();</p><p>  StudentScore *Add_new(

67、);</p><p>  void *Insert();</p><p>  void Delete();</p><p>  void Search();</p><p>  void Compositor();</p><p>  void Fail();</p><p>  Student

68、Score *Copy();</p><p>  void Preserve();</p><p>  /*****從鍵盤輸入學生成績*****/</p><p>  StudentScore *Input()</p><p><b>  {</b></p><p>  int number;&l

69、t;/p><p>  StudentScore *p1, *p2;</p><p>  head=(StudentScore*)malloc(sizeof(StudentScore)); //分配空間</p><p><b>  p2=head;</b></p><p>  printf("\n請輸入第%d名

70、學生的學號,學號為0表示結束輸入:",n+1);</p><p>  scanf("%d",&number);</p><p>  while(getchar()!='\n');</p><p>  for(; number;)</p><p><b>  {</b>

71、</p><p><b>  n++;</b></p><p>  p1=(StudentScore*)malloc(sizeof(StudentScore));</p><p>  p1->stunum=number;</p><p>  printf("請輸入第%d名學生的姓名:",n);&

72、lt;/p><p>  scanf("%s",p1->stuname);</p><p>  printf("請輸入第%d名學生的語文成績:",n);</p><p>  scanf("%f",&p1->score1);</p><p>  printf("

73、請輸入第%d名學生的數學成績:",n);</p><p>  scanf("%f",&p1->score2);</p><p>  printf("請輸入第%d名學生的英語成績:",n);</p><p>  scanf("%f",&p1->score3);</p

74、><p>  p1->sum=p1->score1+p1->score2+p1->score3;</p><p>  p2->next=p1;</p><p><b>  p2=p1;</b></p><p>  printf("\n請輸入第%d名學生的學號,沒有此學生則輸入0表示結束

75、:",n+1);</p><p>  scanf("%d",&number);</p><p><b>  }</b></p><p>  p2->next=NULL;</p><p>  printf("\n\n");</p><p&g

76、t;  return (head);</p><p><b>  }</b></p><p>  /*****顯示學生成績*****/</p><p>  void Show()</p><p><b>  {</b></p><p>  StudentScore *p;&l

77、t;/p><p>  p=head->next;</p><p>  if(p==NULL)</p><p><b>  {</b></p><p>  printf("\n\n此系統目前沒有任何學生數據!\n\n\n");</p><p><b>  return

78、;</b></p><p><b>  }</b></p><p>  printf("目前共有學生%d名:\n",n);</p><p>  printf("* * * * * * * * *學生成績統計一覽* * * * * * * * *\n\n");</p><p&

79、gt;  printf("學號\t姓名\t語文成績\t數學成績\t英語成績\t總分\t平均分\n");</p><p>  for(; p; p=p->next)</p><p><b>  {</b></p><p>  printf("%d\t",p->stunum);</p>

80、<p>  printf("%s\t",p->stuname);</p><p>  printf("%.1f\t\t",p->score1);</p><p>  printf("%.1f\t\t",p->score2);</p><p>  printf("%.

81、1f\t\t",p->score3);</p><p>  printf("%.1f\t",p->sum);</p><p>  printf("%.1f\n",(p->sum)/3);</p><p><b>  }</b></p><p><b

82、>  }</b></p><p>  /*****顯示拷貝學生成績*****/</p><p>  void Showcopy()</p><p><b>  {</b></p><p>  StudentScore *p;</p><p>  p=headcopy->ne

83、xt;</p><p>  if(p==NULL)</p><p><b>  {</b></p><p>  printf("\n\n此系統目前沒有任何學生數據!\n\n\n");</p><p><b>  return;</b></p><p>&l

84、t;b>  }</b></p><p>  printf("目前共有學生%d名:\n",n);</p><p>  printf("* * * * * * * * *學生成績統計一覽* * * * * * * * *\n\n");</p><p>  printf("學號\t姓名\t語文成績\t數學

85、成績\t英語成績\t總分\t平均分\n");</p><p>  for(; p; p=p->next)</p><p><b>  {</b></p><p>  printf("%d\t",p->stunum);</p><p>  printf("%s\t&quo

86、t;,p->stuname);</p><p>  printf("%.1f\t\t",p->score1);</p><p>  printf("%.1f\t\t",p->score2);</p><p>  printf("%.1f\t\t",p->score3);</p&

87、gt;<p>  printf("%.1f\t",p->sum);</p><p>  printf("%.1f\n",(p->sum)/3);</p><p><b>  }</b></p><p><b>  }</b></p><p

88、>  /*****追加學生*****/</p><p>  StudentScore *Add_new()</p><p><b>  {</b></p><p>  StudentScore *p,*t;</p><p>  int number;</p><p>  printf(&qu

89、ot;\n\n請輸入你要追加學生的學號,學號為0表示結束輸入:");</p><p>  scanf("%d",&number);</p><p>  while(getchar()!='\n');</p><p>  for(; number;)</p><p><b>  {

90、</b></p><p>  t=(StudentScore*)malloc(sizeof(StudentScore));</p><p>  t->stunum=number;</p><p>  printf("請輸入新加入學生的姓名:");</p><p>  scanf("%s"

91、;,t->stuname);</p><p>  printf("請輸入新加入學生的語文成績:");</p><p>  scanf("%f",&t->score1);</p><p>  printf("請輸入新加入學生的數學成績:");</p><p>  s

92、canf("%f",&t->score2);</p><p>  printf("請輸入第%d名學生的英語成績:",n);</p><p>  scanf("%f",&t->score3);</p><p>  t->sum=t->score1+t->score

93、2+t->score3;</p><p><b>  p=head;</b></p><p>  while(p->next)</p><p><b>  {</b></p><p>  p=p->next;</p><p><b>  }<

94、/b></p><p>  p->next=t;</p><p>  t->next=NULL;</p><p><b>  n++;</b></p><p>  printf("\n請輸入還要追加學生的學號,沒有此學生則輸入0表示結束:");</p><p>

95、;  scanf("%d",&number);</p><p><b>  }</b></p><p>  printf("追加后的成績表為:\n");</p><p><b>  Show();</b></p><p>  return(head);

96、</p><p><b>  }</b></p><p>  /*****根據位置的前一個學號插入學生*****/</p><p>  void *Insert()</p><p><b>  {</b></p><p>  StudentScore *s,*p;</p

97、><p>  int flag; //flag是插入位置的前一個學號,</p><p>  printf("\n\n請輸入你要插入位置的前一個學生的學號,學號為0表示結束插入:");</p><p>  scanf("%d",&flag);</p><p>  while(get

98、char()!='\n');</p><p><b>  for(;;)</b></p><p><b>  {</b></p><p>  if (flag==0)</p><p><b>  {</b></p><p>  print

99、f("\n你選擇了不插入!\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p>  for(p=head->next; p!=NULL&&p->stunum!=flag; p=p->next);</p

100、><p><b>  if(!p)</b></p><p><b>  {</b></p><p>  printf("\n\n沒有你輸入的學號,請重新輸入,輸入0 表示結束:");</p><p>  scanf("%d",&flag);</p&g

101、t;<p><b>  }</b></p><p>  else if (p->stunum==flag)</p><p><b>  {</b></p><p>  s=(StudentScore *)malloc(sizeof(StudentScore));</p><p>

102、  printf("請輸入要插入學生的學號:");</p><p>  scanf("%d",&s->stunum); //不能寫成scanf("%d",&number);</p><p>  printf("請輸入要插入學生的姓名:");</p><p

103、>  scanf("%s",s->stuname);</p><p>  printf("請輸入要插入學生的語文成績:");</p><p>  scanf("%f",&s->score1);</p><p>  printf("請輸入要插入學生的數學成績:")

104、;</p><p>  scanf("%f",&s->score2);</p><p>  printf("請輸入要插入學生的英語成績:");</p><p>  scanf("%f",&s->score3);</p><p>  s->sum=s-

105、>score1+s->score2+s->score3;</p><p>  s->next=p->next; //先,</p><p>  p->next=s; //后,先后不能顛倒</p><p><b>  n++;</b></p><p>  pr

106、intf("\n請輸入還要插入位置的前一個學生的學號,輸入0表示結束插入:");</p><p>  scanf("%d",&flag);</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf

107、("插入后的成績表為:\n");</p><p><b>  Show();</b></p><p>  return(head);</p><p><b>  }</b></p><p>  /*****根據用戶輸入的學號刪除該學生*****/</p><p

108、>  void Delete()</p><p><b>  {</b></p><p>  int number;</p><p>  StudentScore *p,*q;</p><p>  int flag=0;</p><p>  printf("\n請輸入要刪除的學

109、生學號:");</p><p>  scanf("%d",&number);</p><p><b>  p=head;</b></p><p>  q=head->next;</p><p><b>  while(q)</b></p>&

110、lt;p><b>  {</b></p><p>  if(q->stunum==number)</p><p><b>  {</b></p><p>  p->next=q->next;</p><p>  printf("要刪除的學生信息為:\n")

111、; //一定要先顯示,若在free(q)之后再顯示的話,就找不到刪除學生的數據了</p><p>  printf("學號\t姓名\t語文成績\t數學成績\t英語成績\t總分\t平均分\n");</p><p>  printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t%.1f\n",</p>&

112、lt;p>  q->stunum,q->stuname,q->score1,q->score2,q->score3,q->sum,(q->sum)/3);</p><p><b>  free(q);</b></p><p><b>  flag=1;</b></p><p>

113、;  n--; //不要忘了總數減1</p><p><b>  break;</b></p><p><b>  }</b></p><p>  p=p->next;</p><p>  q=q->next;</p><p><

114、b>  }</b></p><p><b>  if(!flag)</b></p><p><b>  {</b></p><p>  printf("不存在該學號的學生\n");</p><p><b>  return;</b><

115、/p><p><b>  }</b></p><p>  printf("成功刪除!\n");</p><p><b>  }</b></p><p>  /*****按學號或姓名查找學生*****/</p><p>  void Search()</p

116、><p><b>  {</b></p><p>  StudentScore *p;</p><p>  int choose,number;</p><p>  char tem[20];</p><p><b>  if (n==0)</b></p><

117、p><b>  {</b></p><p>  printf("\n當前系統沒有任何學生數據!\n ");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  for(;;)

118、</b></p><p><b>  {</b></p><p>  printf("\n請輸入您要查詢學生的方式:\n\n");</p><p>  printf("1、按學號查詢;2、按姓名查詢;0、我不查詢了。\n\n");</p><p>  printf(&q

119、uot;請選擇:");</p><p>  scanf("%d",&choose);</p><p>  while(getchar()!='\n');</p><p>  if (choose==1)</p><p><b>  {</b></p>&

120、lt;p>  printf("\n請輸入你要查詢的學生的學號,輸入0退出學號查詢:");</p><p>  scanf("%d",&number);</p><p>  for(; number;)</p><p><b>  {</b></p><p>  for

121、(p=head->next; p!=NULL&&p->stunum!=number; p=p->next);</p><p><b>  if (!p)</b></p><p><b>  {</b></p><p>  printf("\n\n找不到你要查詢的學號,請重新輸入,

122、輸入0表示結束:");</p><p>  scanf("%d",&number);</p><p><b>  }</b></p><p>  else if (p->stunum==number)</p><p><b>  {</b></p&g

123、t;<p>  printf("\n學號為%d學生的數據為:\n",p->stunum);</p><p>  printf("學號\t姓名\t語文成績\t數學成績\t英語成績\t總分\t平均分\n");</p><p>  printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t%.

124、1f\n",</p><p>  p->stunum,p->stuname,p->score1,p->score2,p->score3,p->sum,(p->sum)/3);</p><p>  printf("\n\n請輸入你還要查詢的學生的學號,輸入0表示不按學號查詢了:");</p><p&g

125、t;  scanf("%d",&number);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (choose==2)</p>

126、<p><b>  {</b></p><p>  printf("\n請輸入你要查詢的學生的姓名,輸入0退出姓名查詢:");</p><p>  scanf("%s",tem);</p><p>  p=head->next;</p><p>  while(p

127、!=NULL)</p><p><b>  {</b></p><p>  if(strcmp(p->stuname,tem)==0)</p><p><b>  {</b></p><p>  printf("\n姓名為%s學生的數據為:\n",p->stuname

128、);</p><p>  printf("學號\t姓名\t語文成績\t數學成績\t英語成績\t總分\t平均分\n");</p><p>  printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t%.1f\n",</p><p>  p->stunum,p->stuname,p-

129、>score1,p->score2,p->score3,p->sum,(p->sum)/3);</p><p>  printf("\n\n請輸入你還要查詢的學生的姓名,輸入0表示不按姓名查詢了:");</p><p>  scanf("%s",tem);</p><p><b>  }

130、</b></p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (choose==0)</p><p><b>  {</b><

131、;/p><p>  printf("\n你選擇了不查詢!\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>

132、  {</b></p><p>  printf("\n你以其他方式選擇了不查詢!\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p>

133、<p><b>  }</b></p><p>  /*****按總成績排序*****/</p><p>  void Compositor()</p><p><b>  {</b></p><p>  StudentScore exchange,*p,*q,*r;</p>

134、<p>  if(p==NULL)</p><p><b>  {</b></p><p>  printf("現在還沒學生信息,請先輸入學生信息\n");</p><p><b>  return;</b></p><p><b>  }</b>

135、;</p><p>  for(p=head->next; p!=NULL; p=p->next) //用冒泡排序的方法,兩層for循環(huán)實現排序</p><p>  for(q=head->next; q->next!=NULL; q=q->next)</p><p><b>  {</b></p>

136、<p>  r=q->next;</p><p>  if((q->sum)<(r->sum)) //交換q結點和r結點中的信息</p><p><b>  {</b></p><p>  exchange.sum=r->sum; //先復制r

溫馨提示

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

評論

0/150

提交評論