數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(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>  課 程 設(shè) 計(jì) 報(bào) 告</p><p><b>  ]</b></p><p>  課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p>  課題名稱 學(xué)生成績(jī)管理系統(tǒng) </p><p>  專 業(yè) 通信工程

2、 </p><p>  2015年 7月 2日</p><p><b>  目 錄</b></p><p>  一、課程設(shè)計(jì)的分析4</p><p>  1.課程設(shè)計(jì)目的:4</p><p>  2.課程設(shè)計(jì)題目4</p><p><b>  3.

3、需求分析5</b></p><p><b>  二、概要設(shè)計(jì)5</b></p><p><b>  三、詳細(xì)設(shè)計(jì)6</b></p><p><b>  四、調(diào)試分析11</b></p><p>  (1)調(diào)試過程中遇到的問題11</p>&l

4、t;p>  (2)經(jīng)驗(yàn)和體會(huì)11</p><p>  五、用戶使用說明12</p><p><b>  六、測(cè)試結(jié)果13</b></p><p><b>  七、附錄18</b></p><p>  八、課程設(shè)計(jì)評(píng)分表37</p><p><b> 

5、 一、課程設(shè)計(jì)的分析</b></p><p><b>  1.課程設(shè)計(jì)目的:</b></p><p>  課程設(shè)計(jì)是對(duì)學(xué)生的一種全面綜合訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的必不可少的一個(gè)教學(xué)環(huán)節(jié)。通常,實(shí)習(xí)題中的問題比平時(shí)的習(xí)題復(fù)雜得多,也更接近實(shí)際。實(shí)習(xí)著眼于原理與應(yīng)用的結(jié)合點(diǎn),使讀者學(xué)會(huì)如何把書上學(xué)到的知識(shí)用于解決實(shí)際問題,培養(yǎng)軟件工作所需要的動(dòng)手

6、能力;另一方面,能使書上的知識(shí)變“活”,起到深化理解和靈活掌握教學(xué)內(nèi)容的目的。平時(shí)的練習(xí)較偏重于如何編寫功能單一的“小”算法,而實(shí)習(xí)題是軟件設(shè)計(jì)的綜合訓(xùn)練,包括問題分析、總體結(jié)構(gòu)設(shè)計(jì)、用戶界面設(shè)計(jì)、程序設(shè)計(jì)基本技能和技巧,多人合作,以至一整套軟件工作規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng)。</p><p><b>  2.課程設(shè)計(jì)題目</b></p><p><b> 

7、 【課題】</b></p><p><b>  學(xué)生成績(jī)管理系統(tǒng)</b></p><p><b>  【問題描述】</b></p><p>  根據(jù)自己這個(gè)學(xué)期的課程表,設(shè)計(jì)一個(gè)成績(jī)管理系統(tǒng)管理自己班的成績(jī);每個(gè)學(xué)生記錄包含學(xué)號(hào)、姓名、每門課程成績(jī)、總分以及加權(quán)平均分。</p><p>

8、<b>  【基本要求】</b></p><p>  一個(gè)完整的成績(jī)管理系統(tǒng)應(yīng)具有以下功能:</p><p>  (1)輸入:成績(jī)錄入;</p><p>  (2)輸出:輸出成績(jī)表;</p><p>  (3)插入:在成績(jī)表中適當(dāng)位置插入某個(gè)學(xué)生成績(jī);</p><p>  (4)刪除:在成績(jī)表中刪

9、除某個(gè)學(xué)生成績(jī);</p><p>  (5)查找:根據(jù)某個(gè)關(guān)鍵字查找某個(gè)學(xué)生成績(jī);</p><p>  (6)排序:根據(jù)某一個(gè)或某幾個(gè)關(guān)鍵字進(jìn)行排序;</p><p>  (7)篩選:根據(jù)某個(gè)關(guān)鍵字篩選出符合某些條件的數(shù)據(jù);</p><p><b>  【測(cè)試數(shù)據(jù)】</b></p><p>  用

10、本班的成績(jī)總表作為測(cè)試數(shù)據(jù)。</p><p><b>  3.需求分析</b></p><p>  本次課程設(shè)計(jì)的題目是學(xué)生成績(jī)管理系統(tǒng),要求可以存入學(xué)生,學(xué)生信息包括學(xué)生學(xué)號(hào)、姓名、每科成績(jī)和平均成績(jī)以及加權(quán)平均成績(jī)等。該系統(tǒng)主要有以下七個(gè)功能,即對(duì)學(xué)生信息進(jìn)行:輸入、輸出、插入、刪除、查找、排序、篩選等功能。</p><p>  對(duì)學(xué)生進(jìn)行

11、操作可以有很多思路,而我選用的是單鏈表村學(xué)生信息那一條思路,即設(shè)置一個(gè)單鏈表,其中節(jié)點(diǎn)數(shù)據(jù)域保存學(xué)生基本信息。由于我們學(xué)號(hào)比較長(zhǎng),用整型數(shù)據(jù)無(wú)法保存,所以我定義char型的字符串來保存學(xué)號(hào)和姓名。用一個(gè)數(shù)組來保存學(xué)生每一科的成績(jī),此外在定義一個(gè)總分和平均分變量。定義學(xué)生如下:typedef struct Student</p><p><b>  {</b></p><p

12、>  char mun[12]; //學(xué)號(hào)</p><p>  char name[20]; //姓名</p><p>  float score[8]; //成績(jī)</p><p>  float all_score; //總分</p><p>  float ave_score; //加權(quán)平均分</p>

13、<p>  struct Student *next;</p><p>  }LinkList;</p><p><b>  二、概要設(shè)計(jì)</b></p><p>  本程序采用鏈表的方法將每一個(gè)學(xué)生設(shè)置成為一個(gè)鏈表中的數(shù)據(jù)節(jié)點(diǎn),節(jié)點(diǎn)中有字符型mun[12](學(xué)號(hào))、name[20](姓名)、浮點(diǎn)型數(shù)據(jù)score[8](放置每一科成

14、績(jī)的數(shù)組)、all_score(總分)和ave_score(加權(quán)平均分)。</p><p>  主函數(shù)中在執(zhí)行成績(jī)管理系統(tǒng)之前會(huì)先創(chuàng)建一個(gè)鏈表,并調(diào)用void InitList (LinkList *&L)函數(shù)來初始化鏈表;而后進(jìn)入菜單選擇項(xiàng)選擇功能進(jìn)行操作,主程序流程圖如下:</p><p><b>  三、詳細(xì)設(shè)計(jì)</b></p><p

15、>  1、添加學(xué)生: 2、輸出學(xué)生:</p><p>  創(chuàng)建節(jié)點(diǎn)s LinkList *p=L->next;</p><p>  輸入學(xué)生信息,計(jì)算總分與加權(quán)分 for(m=1;m<=總?cè)藬?shù)&&p!=NULL;m++)</p><p&

16、gt;  r->next=s;r=s;(尾插法插入鏈表)輸出學(xué)生信息,p=p->nextcount=count+1;學(xué)生總數(shù)加1</p><p>  3、插入學(xué)生4、刪除學(xué)生</p><p>  輸入要插入的位置 數(shù)字選擇刪除方式</p><p>  scanf("

17、%d",&w); 按編號(hào)刪除和學(xué)號(hào)刪除</p><p>  調(diào)用插入函數(shù) 1編號(hào) 調(diào)用Delete_Student</p><p>  Insert_Student(h,w); 2學(xué)號(hào) 調(diào)用Locate_Student找到

18、</p><p>  學(xué)生位置,在用Delete_Student</p><p><b>  的流程圖如下:</b></p><p>  Insert_Student 函數(shù) Delete_Student的函數(shù)流程圖:</p><p>  Locate_Student函數(shù)的流程圖

19、與如下:Locate_Student1的流程圖類似,不再重復(fù)了</p><p>  5查找學(xué)生:調(diào)用Seek_Student函數(shù),分為按學(xué)號(hào)查找和按姓名查找</p><p>  1按編號(hào) 調(diào)用Locate_Student函數(shù)返回i在調(diào)用Out_one_Student輸出第i個(gè)學(xué)生</p><p>  2 按姓名調(diào)用Locate_Student1函數(shù)返回i在調(diào)用Out

20、_one_Student輸出第i個(gè)學(xué)生</p><p>  6排序函數(shù) 調(diào)用Queue_Student函數(shù):其中有按學(xué)號(hào),總分,各科成績(jī)排序</p><p>  我這里采用的是冒泡排序法進(jìn)行排序,分別定義了兩個(gè)節(jié)點(diǎn)指針q指向頭指針p指向q的下一個(gè)節(jié)點(diǎn),在進(jìn)入雙重循環(huán)進(jìn)行比較排序 流程圖如下:</p><p>  排序的方法都類似,知識(shí)比較數(shù)據(jù)不同,所以就沒有一一

21、畫出來了</p><p><b>  7 篩選</b></p><p>  創(chuàng)建另一個(gè)鏈表r用于存篩選出來的學(xué)生,并調(diào)用output_Student函數(shù)輸出</p><p>  篩選程序流程圖如下:</p><p>  篩選程序又分為1 按總分選 2 全部及格的人 3 按各科成績(jī)</p><p>

22、  1 而總分篩選主要是輸入一個(gè)數(shù)值,判斷數(shù)據(jù)是否大于輸入數(shù)據(jù),大于的都輸出</p><p>  2 去不幾個(gè)的人通過比較每一科成績(jī)是否都大于60分,大于的就選出插入新鏈表并輸出</p><p>  3 各科成績(jī)的話是只比較其中一科來創(chuàng)建鏈表并輸出</p><p>  其比較流程圖都如上圖所示,這里便不再一一畫出來了。</p><p><

23、;b>  四、調(diào)試分析</b></p><p>  (1)調(diào)試過程中遇到的問題是如何解決的以及對(duì)設(shè)計(jì)與實(shí)現(xiàn)的回顧討論和分析</p><p>  在調(diào)試過程中遇到的第一個(gè)問題是輸出學(xué)生的問題,因?yàn)檩敵龅膯栴},其中總是發(fā)現(xiàn)輸出亂碼,找了好久,后來終于發(fā)現(xiàn)是輸入時(shí)出了問題,因?yàn)樾彰叶x了字符串型,而字符串長(zhǎng)度我定義了20,在創(chuàng)建節(jié)點(diǎn)的時(shí)候我卻把name[20]給了學(xué)生節(jié)點(diǎn),導(dǎo)

24、致輸出時(shí)地址錯(cuò)誤而輸出亂碼。</p><p>  第二個(gè)問題是查找,我開始一直想不到怎么把查找到的學(xué)生輸出,后來想了很久,找到了方法,我先通過查找關(guān)鍵字去找到該學(xué)生是在鏈表的那個(gè)位置,在通過返回的位置的值來輸出想要輸出的那個(gè)學(xué)生,所以就定義了Locate_Student和Out_one_Student來完成查找功能。</p><p>  第三個(gè)問題是篩選功能的實(shí)現(xiàn),我本來想通過比較,將符合

25、關(guān)鍵字的學(xué)生篩選出來在輸出,結(jié)果發(fā)現(xiàn)輸出函數(shù)是已經(jīng)定義成一次性全部輸出的形式。導(dǎo)致我一直想不到好的方法來進(jìn)行這個(gè)功能的代碼編寫。后來經(jīng)過老師的指導(dǎo),我知道了一種新的方法來編寫,就是通過創(chuàng)建一個(gè)新的學(xué)生鏈表來存已經(jīng)篩選出來的學(xué)生。然后在通過輸出函數(shù)來將新鏈表進(jìn)行輸出,這樣就可以達(dá)到篩選的目的。</p><p>  改進(jìn)方法:現(xiàn)在想了一下,其實(shí)可以將輸出函數(shù)進(jìn)行改進(jìn),改成一個(gè)一個(gè)學(xué)生輸出的形式,在通過一個(gè)判斷語(yǔ)句進(jìn)行

26、選擇性輸出,用這個(gè)輸出的方法可以減少代碼的的量,而達(dá)到同樣的效果。</p><p>  第四個(gè)問題是主函數(shù)的問題,因?yàn)槲蚁胱屩骱瘮?shù)看起來簡(jiǎn)潔一點(diǎn),就把主函數(shù)分成兩部分,一部分用于選擇操作,另一部分用于進(jìn)行選擇好的操作,可是這樣一來卻出現(xiàn)了問題,就是輸出數(shù)據(jù)之后無(wú)法暫停在輸出界面,而是閃了一下就退出來進(jìn)入主界面了,這個(gè)問題我開始以為是輸出函數(shù)的問題,結(jié)果我去改了輸出函數(shù),結(jié)果還是無(wú)法停留。后來知道原因了,主函數(shù)退出

27、switch循環(huán)之后會(huì)立即回到主菜單界面,到時(shí)無(wú)法停在輸出界面。我在主函數(shù)最后加一個(gè)system(“pause”)之后才打到可以觀察到的地方。</p><p>  改進(jìn)方法:可以將主函數(shù)定義成一個(gè),不用分開,去掉for(;;)這個(gè)循環(huán)會(huì)好點(diǎn)。</p><p><b>  (2)經(jīng)驗(yàn)和體會(huì)</b></p><p>  本次課程設(shè)計(jì)的題目我一開始看

28、到的時(shí)候以為很容易就能做出來,所以只是大概想了一下思路,就直接開始了,其實(shí)這個(gè)實(shí)驗(yàn)可以用順序表做會(huì)思路更清晰一些,我沒有選擇順序表來做,因?yàn)槲以趩捂湵磉@一部分有點(diǎn)模糊,所以想挑戰(zhàn)一下用單鏈表來做。這個(gè)程序的每一個(gè)代碼都是我經(jīng)過一步一步分析寫出來的,在編寫的過程中遇到了很多的阻礙,很多自己無(wú)法預(yù)知的錯(cuò)誤,在不斷的找錯(cuò)過程中,我感覺到自己在c語(yǔ)言這一方面的不足,對(duì)算法的精髓還不是很了解, 對(duì)于單鏈表的操作也不是很熟練,尤其是在節(jié)點(diǎn)指針多

29、起來的時(shí)候會(huì)有點(diǎn)亂,甚至搞不清指針到底指向哪里了。</p><p>  然而,在編程過程中,一次次的測(cè)試失敗,再一次次修改正確卻讓我慢慢的熟悉了數(shù)據(jù)結(jié)構(gòu)一些用法,漸漸的知道要編寫一個(gè)系統(tǒng),需要各種功能協(xié)調(diào)才能算一個(gè)系統(tǒng),而每一個(gè)功能有需要很多函數(shù)之間的相互聯(lián)系來調(diào)用與支撐。同時(shí)要想將課程設(shè)計(jì)完成的好,就需要積極提問,遇到不懂的地方可以找老師或同學(xué)相互交流經(jīng)驗(yàn),這樣才會(huì)更加有效率的完成課設(shè)。</p>

30、<p>  經(jīng)過這一段時(shí)間的課設(shè),我學(xué)到的不僅僅是數(shù)據(jù)結(jié)構(gòu)的想關(guān)知識(shí),也懂得了團(tuán)隊(duì)協(xié)作的重要性,知道學(xué)習(xí)需要真正扎實(shí)去學(xué)習(xí),這樣才能真正學(xué)到知識(shí),并靈活運(yùn)用這些所學(xué)知識(shí)。</p><p><b>  五、用戶使用說明</b></p><p>  1、添加學(xué)生功能:進(jìn)入系統(tǒng)后先選擇1回車即可進(jìn)入輸入界面,然后按照提示輸入學(xué)生學(xué)號(hào)、姓名和數(shù)據(jù)結(jié)構(gòu)、數(shù)字信號(hào)處理、

31、數(shù)字電子技術(shù)基礎(chǔ)的分?jǐn)?shù)在按回車,如果還想再繼續(xù)添加就按1繼續(xù),否則可以按任何鍵退出。</p><p>  2、輸出學(xué)生:用戶在輸入完學(xué)生數(shù)據(jù)后既可以按2輸出所輸入的全部學(xué)生</p><p>  3、插入學(xué)生:用戶需在主界面按3即可以進(jìn)入插入界面,此時(shí)可以按數(shù)字鍵在選擇要插入的位置,如輸入1即可以將要插入的學(xué)生插入到第一個(gè)位置,可以在主界面輸入2進(jìn)行查看是否插入到指定位置。</p>

32、;<p>  4、刪除學(xué)生:用戶可以在主界面輸入4進(jìn)入刪除,在通過選擇編號(hào)來刪除要?jiǎng)h除的學(xué)生。</p><p>  5、查找:查找查找功能有按學(xué)號(hào)和姓名查找,如按一進(jìn)入學(xué)號(hào)查找,可以輸入要查找的學(xué)號(hào),回車即可以輸出要查找的學(xué)生。</p><p>  6、排序:排序可以通過學(xué)號(hào),總分,和各科成績(jī),輸入1可以按學(xué)號(hào)從小到大排序,輸入2可以按總分從小到大進(jìn)行排序,輸入3可以進(jìn)入科目

33、選擇,再按1進(jìn)行數(shù)據(jù)結(jié)構(gòu)排序,2進(jìn)行數(shù)字型號(hào)處理排序,3進(jìn)行數(shù)電的排序。</p><p>  7、篩選:可以按1進(jìn)入總分篩選,進(jìn)入之后輸入篩選多少分以上的人,輸入分?jǐn)?shù),如:200,即可輸出所有大于200分的學(xué)生;在篩選界面輸入2可以輸出全部及格的學(xué)生;按3可以進(jìn)入各科成績(jī)的篩選,再按1選出所有數(shù)據(jù)結(jié)構(gòu)及格的學(xué)生、再按2選出所有數(shù)字信號(hào)處理及格的學(xué)生、再按3選出所有數(shù)字電子技術(shù)基礎(chǔ)及格的學(xué)生。</p>

34、<p>  8、退出:退出程序只需要在主界面按0再回車即可以退出程序。</p><p><b>  六、測(cè)試結(jié)果</b></p><p><b>  1、添加學(xué)生:</b></p><p><b>  2、輸出學(xué)生:</b></p><p><b>  3

35、、 插入學(xué)生:</b></p><p><b>  4、刪除學(xué)生:</b></p><p><b>  5、查找學(xué)生:</b></p><p><b>  6、排序</b></p><p><b>  7、篩選</b></p>&

36、lt;p><b>  0、退出程序:</b></p><p><b>  七、附錄</b></p><p>  #include <stdio.h></p><p>  #include <malloc.h></p><p>  #include <string.

37、h></p><p>  #include <stdlib.h></p><p>  int count =0; //記錄學(xué)生人數(shù)</p><p>  typedef struct Student</p><p><b>  {</b></p><p>  char

38、mun[12]; //學(xué)號(hào)</p><p>  char name[20]; //姓名</p><p>  float score[8]; //成績(jī)</p><p>  float all_score; //總分</p><p>  float ave_score; //加權(quán)平均分</p><p> 

39、 struct Student *next;</p><p>  }LinkList;</p><p>  void InitList (LinkList *&L) //初始化鏈表</p><p><b>  {</b></p><p>  L=(LinkList *)malloc(sizeof(LinkL

40、ist));</p><p>  L->next=NULL;</p><p><b>  }</b></p><p>  void Creat_Student (LinkList *&L) //輸入學(xué)生并添加到鏈表里面</p><p><b>  {</b></

41、p><p>  LinkList *r=L,*s;</p><p>  int i=0,j=1;</p><p>  float all=0,ave,a[8];</p><p>  while(j==1)</p><p><b>  {</b></p><p>  while(

42、r->next!=NULL)</p><p>  r=r->next;</p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->next=NULL;</p><p>  printf("輸入學(xué)生學(xué)號(hào)、姓名、每科成績(jī)\n");</p

43、><p>  printf("學(xué)號(hào):");</p><p>  scanf("%s",&s->mun);</p><p>  printf("姓名:");</p><p>  scanf("%s",&s->name);/*數(shù)據(jù)結(jié)構(gòu)3.0、數(shù)

44、字信號(hào)處理4.0、數(shù)字電子技術(shù)基礎(chǔ)2.5 這里只輸入三門成績(jī)作為示范*/</p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p><b>  if(i==0)</b></p><p><b>  {</b><

45、/p><p>  printf("輸入數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù)\n");</p><p>  scanf("%f",&a[i]);</p><p>  s->score[i]=a[i];</p><p><b>  }</b></p><p><b>

46、;  if(i==1)</b></p><p><b>  {</b></p><p>  printf("輸入數(shù)字信號(hào)處理分?jǐn)?shù)\n");</p><p>  scanf("%f",&a[i]);</p><p>  s->score[i]=a[i];&l

47、t;/p><p><b>  }</b></p><p><b>  if(i==2)</b></p><p><b>  {</b></p><p>  printf("輸入數(shù)字電子技術(shù)基礎(chǔ)分?jǐn)?shù)\n");</p><p>  scanf

48、("%f",&a[i]);</p><p>  s->score[i]=a[i];</p><p><b>  }</b></p><p><b>  }</b></p><p>  all=a[0]+a[1]+a[2];</p><p&g

49、t;  s->all_score=all;</p><p>  ave=(a[0]*3.0+a[1]*4.0+a[2]*2.5)/9.5;</p><p>  s->ave_score=ave;</p><p>  r->next=s;</p><p><b>  r=s;</b></p>

50、<p>  count=count+1;</p><p>  printf("是否繼續(xù)?(按1繼續(xù),其他退出。)");</p><p>  scanf("%d",&j);</p><p><b>  }</b></p><p><b>  }</

51、b></p><p>  void output_Student (LinkList *&L,int n) //輸出全部學(xué)生</p><p><b>  {</b></p><p>  LinkList *p=L->next;</p><p>  if(p==NULL)</p&g

52、t;<p><b>  {</b></p><p>  printf("沒有學(xué)生成績(jī)!請(qǐng)?zhí)砑訉W(xué)生。。。\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  printf(&q

53、uot;\t\t 學(xué)生成績(jī)表 \n");</p><p>  printf("編號(hào) 學(xué)號(hào) 姓名 數(shù)據(jù)結(jié)構(gòu) 數(shù)字信號(hào) 數(shù)字電路 總分 加權(quán)平均分\n");</p><p><b>  int m;</b></p><p>  for(m=1;m<=n&&

54、amp;p!=NULL;m++)</p><p><b>  {</b></p><p>  printf("%-5d%-9s%-9s%-10.1f%-10.1f%-10.1f%-8.1f %-10.1f\n",m,p->mun,p->name,p->score[0],p->score[1],p->score[2],p

55、->all_score,p->ave_score);</p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Delete_Student(LinkList *&L,int i)

56、 //刪除第i個(gè)學(xué)生</p><p><b>  {</b></p><p><b>  int j=0;</b></p><p>  LinkList *p=L,*q;</p><p><b>  if (i<=0)</b></p><p&g

57、t;<b>  {</b></p><p>  printf("沒有找到該學(xué)生");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  while(j<i-1&&p!=NUL

58、L)</p><p><b>  {</b></p><p><b>  j++;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  if(p==NULL)</p><

59、p><b>  {</b></p><p>  printf("沒有找到該學(xué)生");</p><p><b>  return ;</b></p><p><b>  }</b></p><p><b>  else</b><

60、;/p><p><b>  {</b></p><p>  q=p->next;</p><p>  if(q==NULL)</p><p><b>  return ;</b></p><p>  p->next=q->next;</p><

61、;p><b>  free(q);</b></p><p>  count=count-1;</p><p>  printf("刪除成功!\n");</p><p><b>  return;</b></p><p><b>  }</b></

62、p><p><b>  }</b></p><p>  int Locate_Student(LinkList *L,char* mun) //按學(xué)號(hào)定位,返回第i個(gè)學(xué)生</p><p><b>  {</b></p><p><b>  int i=1;</b></p&

63、gt;<p>  LinkList *p=L->next;</p><p>  while(p!=NULL&&strcmp(p->mun,mun)!=0)</p><p><b>  {</b></p><p><b>  i++;</b></p><p>

64、  p=p->next;</p><p><b>  }</b></p><p>  if(p==NULL)</p><p>  return (0);</p><p><b>  else </b></p><p>  return (i);</p>&

65、lt;p><b>  }</b></p><p>  int Locate_Student1(LinkList *L,char* name) //按姓名定位,返回第i個(gè)學(xué)生</p><p><b>  {</b></p><p><b>  int i=1;</b></p>&

66、lt;p>  LinkList *p=L->next;</p><p>  while(p!=NULL&&strcmp(p->name,name)!=0)</p><p><b>  {</b></p><p><b>  i++;</b></p><p>  p=

67、p->next;</p><p><b>  }</b></p><p>  if(p==NULL)</p><p>  return (0);</p><p><b>  else </b></p><p>  return (i);</p><p

68、><b>  }</b></p><p>  void Queue_Subject(LinkList *&L) //不同科目排序</p><p><b>  {</b></p><p><b>  int i;</b></p><

69、;p>  LinkList *q,*p,*t1,*t2;</p><p>  printf("請(qǐng)輸入科目的代號(hào):1 數(shù)據(jù)結(jié)構(gòu) 2 數(shù)字信號(hào)處理 3 數(shù)電\n請(qǐng)輸入:");</p><p>  scanf("%d",&i);</p><p>  if(i>=1||i<=3)</p><

70、;p><b>  {</b></p><p>  for(q=L;q->next!=NULL;q=q->next)</p><p>  for(p=q->next;p->next!=NULL;p=p->next)</p><p><b>  {</b></p><p&

71、gt;  if(q->next->score[i-1]>p->next->score[i-1])</p><p><b>  {</b></p><p>  if(q->next==p)</p><p><b>  {</b></p><p>  t1=p->

72、;next;</p><p>  p->next=p->next->next;</p><p>  t1->next=q->next;</p><p>  q->next=t1;</p><p><b>  p=t1;</b></p><p><b>

73、  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  t1=p->next;</p><p>  t2=q->next;</p><p>  p->next=p->next

74、->next;</p><p>  q->next=q->next->next;</p><p>  t1->next=q->next;</p><p>  q->next=t1;</p><p>  t2->next=p->next;</p><p>  p-&g

75、t;next=t2;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else&l

76、t;/b></p><p><b>  {</b></p><p>  printf("沒有找到該科目!\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>&

77、lt;b>  }</b></p><p>  void Queue_Student(LinkList *&L) //排序函數(shù)</p><p><b>  {</b></p><p>  int i,j=1;</p><p>  printf("1、按照學(xué)號(hào) 2

78、、總分3、按各科分排序\n請(qǐng)輸入:");</p><p>  scanf("%d",&i);</p><p>  LinkList *q,*p,*t1,*t2;</p><p>  switch(i) </p><p><b>  {</b>&

79、lt;/p><p>  case 1: //學(xué)號(hào)排序</p><p>  for(q=L;q->next!=NULL;q=q->next)</p><p>  for(p=q->next;p->next!=NULL;p=p->next)</p><p><

80、;b>  {</b></p><p>  if(strcmp(q->next->mun,p->next->mun)==1)</p><p><b>  {</b></p><p>  if(q->next==p)</p><p><b>  {</b>

81、</p><p>  t1=p->next;</p><p>  p->next=p->next->next;</p><p>  t1->next=q->next;</p><p>  q->next=t1;</p><p><b>  p=t1;</b>

82、;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  t1=p->next;</p><p>  t2=q->next;</p>&

83、lt;p>  p->next=p->next->next;</p><p>  q->next=q->next->next;</p><p>  t1->next=q->next;</p><p>  q->next=t1;</p><p>  t2->next=p->n

84、ext;</p><p>  p->next=t2;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b>&

85、lt;/p><p>  case 2: //總分排序</p><p>  for(q=L;q->next!=NULL;q=q->next)</p><p>  for(p=q->next;p->next!=NULL;p=p->next)</p><p>&

86、lt;b>  {</b></p><p>  if(q->next->all_score>p->next->all_score)</p><p><b>  {</b></p><p>  if(q->next==p)</p><p><b>  {<

87、/b></p><p>  t1=p->next;</p><p>  p->next=p->next->next;</p><p>  t1->next=q->next;</p><p>  q->next=t1;</p><p><b>  p=t1;<

88、;/b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  t1=p->next;</p><p>  t2=q->next;</p&

89、gt;<p>  p->next=p->next->next;</p><p>  q->next=q->next->next;</p><p>  t1->next=q->next;</p><p>  q->next=t1;</p><p>  t2->next=p

90、->next;</p><p>  p->next=t2;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b

91、></p><p><b>  case 3:</b></p><p>  Queue_Subject(L); //科目排序</p><p><b>  break;</b></p><p><b>  }</b></p><p><b&

92、gt;  }</b></p><p>  void Out_one_Student(LinkList *L,int i) //輸出第i個(gè)學(xué)生</p><p><b>  {</b></p><p><b>  int j=0;</b></p><p>  LinkList *p=L

93、;</p><p>  while(j<i)</p><p><b>  {</b></p><p><b>  j++;</b></p><p>  p=p->next;</p><p><b>  }</b></p><

94、;p>  printf("%-9s%-9s%-10.1f%-10.1f%-10.1f%-8.1f %-10.1f\n",p->mun,p->name,p->score[0],p->score[1],p->score[2],p->all_score,p->ave_score);</p><p><b>  }</b></

95、p><p>  int Seek_Student(LinkList *L) //查找學(xué)生 1 按學(xué)號(hào)查找 2 按姓名查找</p><p><b>  {</b></p><p><b>  int m;</b></p><p>  printf("1 按學(xué)號(hào)查找 2 按姓名查找 3 退出\

96、n請(qǐng)輸入:");</p><p>  scanf("%d",&m);</p><p><b>  switch(m)</b></p><p><b>  {</b></p><p><b>  case 1:</b></p>

97、<p>  char a[12];</p><p>  printf("輸入學(xué)號(hào):");</p><p>  scanf("%s",&a);</p><p>  return (Locate_Student(L,a)); //返回學(xué)號(hào)查找到的值</p><p><b&

98、gt;  break;</b></p><p><b>  case 2:</b></p><p>  char b[20];</p><p>  printf("輸入姓名:");</p><p>  scanf("%s",&b);</p>&l

99、t;p>  return(Locate_Student1(L,b));</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p><b>  break;</b></p><p><b>  }<

100、/b></p><p><b>  }</b></p><p>  void Filter_Student(LinkList *&L) //篩選</p><p><b>  {</b></p><p>  LinkList *s,*p=L->next,*r,*q;<

101、;/p><p>  int y,count2=0;</p><p>  printf("1 按總分選 2 全部及格的人 3 按各科成績(jī) 4 退出\n請(qǐng)輸入:");</p><p>  scanf("%d",&y);</p><p><b>  switch(y)</b><

102、/p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p><b>  q=s;</b></p><p><

103、;b>  int i;</b></p><p>  float all;</p><p>  printf("您要總分多少分以上的人,請(qǐng)輸入:");</p><p>  scanf("%f",&all);</p><p>  for (i=0;i<count;i++,p=

104、p->next)</p><p><b>  {</b></p><p>  if (p==NULL)</p><p><b>  {</b></p><p>  printf("沒有");</p><p><b>  return;<

105、;/b></p><p><b>  }</b></p><p>  if(p->all_score>all)</p><p><b>  {</b></p><p>  r=(LinkList *)malloc(sizeof(LinkList));</p><

106、p>  strcpy(r->mun,p->mun);</p><p>  strcpy(r->name,p->name); </p><p>  r->score[1]=p->score[1];</p><p>  r->score[2]=p->score[2];</p><p>  r-

107、>score[0]=p->score[0];</p><p>  r->all_score=p->all_score;</p><p>  r->ave_score=p->ave_score;</p><p>  q->next=r;</p><p>  q=q->next;</p>

108、<p>  q->next=NULL;</p><p><b>  count2++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  output_Student(s,count2);</p

109、><p><b>  free(s);</b></p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p

110、><b>  q=s;</b></p><p><b>  int j;</b></p><p>  for (j=0;j<count;j++,p=p->next)</p><p><b>  {</b></p><p>  if (p==NULL)</

111、p><p><b>  {</b></p><p>  printf("沒有");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(p->score[0]>

112、59&&p->score[1]>59&&p->score[2]>59)</p><p><b>  {</b></p><p>  r=(LinkList *)malloc(sizeof(LinkList));</p><p>  strcpy(r->mun,p->mun);&

113、lt;/p><p>  strcpy(r->name,p->name); </p><p>  r->score[1]=p->score[1];</p><p>  r->score[2]=p->score[2];</p><p>  r->score[0]=p->score[0];</p&g

114、t;<p>  r->all_score=p->all_score;</p><p>  r->ave_score=p->ave_score;</p><p>  q->next=r;</p><p>  q=q->next;</p><p>  q->next=NULL;</p&

115、gt;<p><b>  count2++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  output_Student(s,count2);</p><p><b>  free(s);&l

116、t;/b></p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p><b>  q=s;</b></p&

117、gt;<p><b>  int k,x;</b></p><p>  printf("選擇 1 數(shù)據(jù)結(jié)構(gòu)及格的 2 數(shù)字信號(hào)處理及格的 3 數(shù)電及格的\n");</p><p>  printf("請(qǐng)輸入:");</p><p>  scanf("%d",&x)

118、;</p><p>  for (k=0;k<count;k++,p=p->next)</p><p><b>  {</b></p><p>  if (p==NULL)</p><p><b>  {</b></p><p>  printf("沒有

119、");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(p->score[x-1]>59)</p><p><b>  {</b></p><p>  r=(Li

120、nkList *)malloc(sizeof(LinkList));</p><p>  strcpy(r->mun,p->mun);</p><p>  strcpy(r->name,p->name); </p><p>  r->score[1]=p->score[1];</p><p>  r->

121、;score[2]=p->score[2];</p><p>  r->score[0]=p->score[0];</p><p>  r->all_score=p->all_score;</p><p>  r->ave_score=p->ave_score;</p><p>  q->nex

122、t=r;</p><p>  q=q->next;</p><p>  q->next=NULL;</p><p><b>  count2++;</b></p><p><b>  }</b></p><p><b>  }</b><

123、/p><p>  output_Student(s,count2);</p><p><b>  free(s);</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p><b>

124、;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  bool Insert_Student(LinkList *&L,int i) //插入學(xué)生</p><p><b>  {</

125、b></p><p><b>  int j=0;</b></p><p>  LinkList *p=L,*s;</p><p><b>  if (i<=0)</b></p><p><b>  {</b></p><p>  print

126、f("對(duì)不起,沒有該位置!\n");</p><p>  return false;</p><p><b>  }</b></p><p>  while(j<i-1&&p!=NULL)</p><p><b>  {</b></p><

127、;p><b>  j++;</b></p><p>  p=p->next;</p><p><b>  }</b></p><p>  if(p==NULL)</p><p><b>  {</b></p><p>  printf(&qu

128、ot;對(duì)不起,沒有該位置!\n");</p><p>  return false;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  s=(Lin

129、kList *)malloc(sizeof(LinkList));</p><p>  s->next=NULL;</p><p>  float all,ave,score;</p><p>  printf("輸入學(xué)生學(xué)號(hào)、姓名、每科成績(jī)\n");</p><p>  printf("學(xué)號(hào):"

130、);</p><p>  scanf("%s",&s->mun);</p><p>  printf("姓名:");</p><p>  scanf("%s",&s->name);</p><p>  for(i=0;i<3;i++)</p&g

131、t;<p><b>  {</b></p><p><b>  if(i==0)</b></p><p><b>  {</b></p><p>  printf("輸入數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù)\n");</p><p>  scanf("%f&

132、quot;,&score);</p><p>  s->score[i]=score;</p><p><b>  }</b></p><p><b>  if(i==1)</b></p><p><b>  {</b></p><p> 

133、 printf("輸入數(shù)字信號(hào)處理分?jǐn)?shù)\n");</p><p>  scanf("%f",&score);</p><p>  s->score[i]=score;</p><p><b>  }</b></p><p><b>  if(i==2)<

134、;/b></p><p><b>  {</b></p><p>  printf("輸入數(shù)字電子技術(shù)基礎(chǔ)分?jǐn)?shù)\n");</p><p>  scanf("%f",&score);</p><p>  s->score[i]=score;</p>

135、<p><b>  }</b></p><p><b>  }</b></p><p>  all=s->score[1]+s->score[2]+s->score[0];</p><p>  s->all_score=all;</p><p>  ave=(

136、s->score[0]*3.0+s->score[1]*4.0+s->score[2]*2.5)/9.5;</p><p>  s->ave_score=ave;</p><p>  s->next=p->next;</p><p>  p->next=s;</p><p><b>  co

137、unt++;</b></p><p>  printf("插入成功\n");</p><p>  return true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  int menu_

138、select() /*菜單選擇程序*/</p><p><b>  { </b></p><p><b>  int c; </b></p><p><b>  do{ </b></p><p>  system("cls"); <

139、/p><p>  printf("\n\t 歡迎使用學(xué)生成績(jī)管理系統(tǒng) \n");</p><p>  printf("\t 1. 添加學(xué)生 \n"); </p><p>  printf("\t 2. 輸出學(xué)生 \n"); </p><p>  pr

140、intf("\t 3. 插入學(xué)生 \n"); </p><p>  printf("\t 4. 刪除學(xué)生 \n"); </p><p>  printf("\t 5. 查找學(xué)生 \n"); </p><p>  printf("\t 6. 排序

141、 \n");</p><p>  printf("\t 7. 篩選 \n"); </p><p>  printf("\t 0. 退出程序 \n"); </p><p>  printf("\t **************************

142、\n"); </p><p>  printf("\t 請(qǐng)您選擇(0-7):"); </p><p>  scanf("%d",&c); </p><p><b>  }</b></p><p>  while(c<0||c>7); </p

143、><p>  return(c); </p><p><b>  } </b></p><p>  void main() </p><p><b>  { </b></p><p>  LinkLi

144、st *h; </p><p>  InitList(h); //初始化</p><p><b>  for(;;) </b></p><p><b>  { </b></p><p>  switch(menu_select()) </p>

145、<p><b>  { </b></p><p>  case 1: //添加學(xué)生</p><p>  Creat_Student(h); //添加學(xué)生</p><p><b>  break; </b></p><p>&

146、lt;b>  case 2: </b></p><p>  output_Student(h,count); //輸出全部學(xué)生</p><p><b>  break;</b></p><p>  case 3: //插入</p><p><b>

147、  int w;</b></p><p>  printf("輸入插入的位置,位置為大于或等于1的數(shù),(如1、2...)\n");</p><p>  printf("請(qǐng)輸入:");</p><p>  scanf("%d",&w);</p><p>  Inse

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論