《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)_第1頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)_第2頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)_第3頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)_第4頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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、面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)報(bào)告專 業(yè): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 二o一一 年 九 月 日一、課程設(shè)計(jì)問題描述設(shè)計(jì)完成一套學(xué)生成績(jī)管理系統(tǒng),要求能夠?qū)崿F(xiàn)學(xué)生成績(jī)管理的基本功能,包括:學(xué)生成績(jī)的鍵盤錄入、學(xué)生成績(jī)的條件輸出、學(xué)生成績(jī)的條件抽取、學(xué)生成績(jī)的條件排序、條件修改。其中具體設(shè)計(jì)內(nèi)容如下:(1)從鍵盤輸入學(xué)生基本信息(學(xué)號(hào)、姓名、英語(yǔ)成績(jī)、高數(shù)成績(jī)),計(jì)算每個(gè)學(xué)生的平均成績(jī),并將數(shù)據(jù)存入文件student.txt文件中。(2)按如下格式輸出大于等于平均成績(jī)的學(xué)生信息: 學(xué)號(hào) 姓名 英語(yǔ) 高數(shù) 平均成績(jī)(3)將兩門可課都不及格的學(xué)生信息抽取出來,另存入文件bat.txt中。(4)提供按學(xué)

2、號(hào)進(jìn)行查詢的功能。(5)盡可能使用運(yùn)算符重載以簡(jiǎn)化操作。(6)使用多文件結(jié)構(gòu)和菜單操作,并考慮相應(yīng)的操作權(quán)限。二、課程設(shè)計(jì)目的和要求:經(jīng)過一學(xué)期對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的初步學(xué)習(xí),對(duì)于面向?qū)ο蟪绦蛟O(shè)計(jì)有了一定的編程基礎(chǔ),為更好地理解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì),將通過為期一周的上機(jī)實(shí)踐編程,運(yùn)用面向?qū)ο蟪绦蛟O(shè)計(jì)完成課程設(shè)計(jì)編程任務(wù)的同時(shí),補(bǔ)充和完善面向?qū)ο蟪绦蛟O(shè)計(jì)的相關(guān)知識(shí)。三、系統(tǒng)環(huán)境(包括硬件環(huán)境和軟件環(huán)境)無(wú)。四、程序設(shè)計(jì)思想描述首先明確這是一個(gè)學(xué)生成績(jī)管理系統(tǒng),那么這個(gè)系統(tǒng)應(yīng)該具備管理學(xué)生成績(jī)的基本功能。同時(shí)考慮到使用對(duì)象的不同,應(yīng)考慮到權(quán)限方面的相應(yīng)開放,為簡(jiǎn)便用戶操作以及個(gè)人能力限制將采用文字

3、菜單模式。1、成績(jī)管理系統(tǒng)成績(jī)(中心)學(xué)生(以學(xué)生為管理對(duì)象)學(xué)生屬性和方法。*學(xué)生類 屬性包括:學(xué)號(hào)、姓名、英語(yǔ)成績(jī)、高數(shù)成績(jī)、平均成績(jī)、名次(以鏈表的當(dāng)前位置為計(jì))。*學(xué)生類 方法包括:構(gòu)造函數(shù)、析構(gòu)函數(shù)、設(shè)置函數(shù)、修改函數(shù)以及獲取相應(yīng)屬性的函數(shù)。2、操作權(quán)限教師教師特權(quán)。*教師特權(quán) 包括:成績(jī)錄入、條件抽取、條件修改、排序以及刪除。操作權(quán)限學(xué)生普通權(quán)限。*教師與學(xué)生共同權(quán)限 包括:條件查詢。3、操作菜單:(一級(jí)菜單)1、教師(需要帳號(hào)驗(yàn)證),2、學(xué)生,0、退出系統(tǒng)(二級(jí)菜單)1.1、成績(jī)錄入,1.2、查詢,1.3、成績(jī)修改,1.4排序,1.5、查看數(shù)據(jù),1.6、刪除1.0、返回上一層菜單

4、(三級(jí)菜單)1.1.1、單個(gè)錄入,1.1.2、批量錄入,1.1.0、返回上一層菜單(三級(jí)菜單)1.2.1、學(xué)號(hào)查詢,1.2.2、范圍查詢、1.2.3、不及格查詢(兩門都低于60分)(包含保存功能),1.2.0、返回上一層菜單(三級(jí)菜單)1.3.1、英語(yǔ)成績(jī)修改,1.3.2、高數(shù)成績(jī)修改,1.3.0、返回上一層菜單(三級(jí)菜單)1.4.1、平均分成績(jī)排序,1.4.2、英語(yǔ)成績(jī)排序,1.4.3、高數(shù)成績(jī)排序,1.4.4、學(xué)號(hào)排序,1.4.0、返回上一層菜單(三級(jí)菜單)1.6.1、按學(xué)號(hào)刪除,1.6.2、按姓名刪除,1.6.0、返回上一層菜單(二級(jí)菜單)2.1、個(gè)人查詢,2.2、相近查詢,2.0、返回

5、上一層菜單(三級(jí)菜單)2.2.1、平均分相近查詢,2.2.2、英語(yǔ)相近查詢,2.2.3、高數(shù)相近查詢,2.2.0、返回上一層菜單幾點(diǎn)說明:1、在進(jìn)入二級(jí)菜單時(shí)先從文件中讀取數(shù)據(jù),若沒有數(shù)據(jù)則只能允許選擇教師工作模式。2、進(jìn)入教師工作模式需要驗(yàn)證碼,設(shè)置密碼為123456,目前不支持密碼修改。3、將所有功能函數(shù)設(shè)計(jì)模塊化,提高代碼利用率。4、利用模塊化的功能函數(shù),可以實(shí)現(xiàn)函數(shù)間的相互調(diào)用,實(shí)現(xiàn)菜單工作模式,大大降低編程難度,同時(shí)因?yàn)槟壳敖^大多數(shù)電腦的cpu、內(nèi)存等資源的性能比早期的計(jì)算機(jī)有了很大地提高,完全可以滿足合理的函數(shù)調(diào)用。5、為實(shí)現(xiàn)學(xué)生成績(jī)的排序功能,將采取鏈表的工作方式,同時(shí)利用此模式

6、實(shí)現(xiàn)其他功能。6、學(xué)生屬性中的學(xué)號(hào)與姓名將采用字符竄變量來標(biāo)記以應(yīng)對(duì)不同的學(xué)號(hào)和姓名模式。五、程序結(jié)構(gòu)(包括類設(shè)計(jì)、主程序設(shè)計(jì)及流程圖)學(xué)生類的設(shè)計(jì):屬性:學(xué)號(hào)、姓名、英語(yǔ)成績(jī)、高數(shù)成績(jī)、平均成績(jī)、排名、指針域方法:學(xué)號(hào)、姓名、英語(yǔ)成績(jī)、高數(shù)成績(jī)相應(yīng)的修改函數(shù),獲取屬性的相關(guān)函數(shù),構(gòu)造及析構(gòu)函數(shù)。鏈表類的設(shè)計(jì):屬性:鏈表頭、鏈表長(zhǎng)度、鏈表是否排序、當(dāng)前結(jié)點(diǎn)在鏈表中的排名。方法:增加結(jié)點(diǎn)的函數(shù),按學(xué)號(hào)、英語(yǔ)成績(jī)、高數(shù)成績(jī)排序、查詢的函數(shù),保存鏈表的函數(shù),讀取數(shù)據(jù)的函數(shù),以學(xué)號(hào)、姓名刪除結(jié)點(diǎn)的函數(shù),獲取排名的函數(shù),獲取屬性值的相關(guān)函數(shù)。幾點(diǎn)說明:1、 將鏈表類作為學(xué)生類的友元類可以實(shí)現(xiàn)在鏈表方法中

7、操作學(xué)生類,降低編程難度。2、 關(guān)于主程序的設(shè)計(jì),由于采用的是菜單操作模式,關(guān)鍵在于功能的模塊化,也就是類相關(guān)功能的實(shí)現(xiàn),故主程序的設(shè)計(jì)將會(huì)相對(duì)簡(jiǎn)單,只要安排好相應(yīng)函數(shù)之間的調(diào)用即可實(shí)現(xiàn)相應(yīng)的功能。3、 關(guān)于流程圖,采用上述菜單功能即可實(shí)現(xiàn)所有流程的切換,以下將給出工作時(shí)的菜單流程。六、程序測(cè)試案例一級(jí)菜單教師二級(jí)菜單(有數(shù)據(jù))教師二級(jí)菜單(無(wú)數(shù)據(jù))學(xué)生二級(jí)菜單增加結(jié)點(diǎn)菜單查詢菜單排序菜單修改菜單刪除菜單相近查詢菜單七、設(shè)計(jì)中遇到的問題及解決方案1、為了解決菜單的返回及流程的銜接,我采用了函數(shù)調(diào)用的方法。2、為了解決由于學(xué)號(hào)和姓名不同形式造成的影響,我采用了字符串變量的方法來記錄相關(guān)的信息,同

8、時(shí)借用字符串中的方法find_first_of()來檢查菜單選擇的輸入是否正確,這點(diǎn)也可以應(yīng)用到輸入姓名和學(xué)號(hào)時(shí)進(jìn)行檢查。3、在進(jìn)行不及格同學(xué)的信息收集的時(shí)候,為了避免影響到鏈表,同時(shí)又需要利用現(xiàn)成的鏈表方法來操作,所以采用重新定義一個(gè)鏈表對(duì)象來裝載收集到的信息。4、在對(duì)鏈表的結(jié)點(diǎn)進(jìn)行排序的時(shí)候,為簡(jiǎn)化操作,定義一個(gè)空白結(jié)點(diǎn),插入鏈表頭部,在操作完畢后對(duì)空白結(jié)點(diǎn)給予刪除。5、為了達(dá)到權(quán)限的控制問題,采用了密碼驗(yàn)證的簡(jiǎn)單方法,而為了實(shí)現(xiàn)密碼驗(yàn)證則是采用了字符串變量的比較。八、程序源代碼見附錄。九、總結(jié)和體會(huì)經(jīng)過一周的課程設(shè)計(jì)訓(xùn)練,個(gè)人的編程能力得到了很好的考驗(yàn),同時(shí)也對(duì)軟件開發(fā)的過程有了一個(gè)大致

9、的了解。一周的設(shè)計(jì)學(xué)習(xí),我發(fā)現(xiàn),軟件開發(fā)前的需求分析是至關(guān)重要的,需求分析的深淺往往能決定一個(gè)軟件的好壞。盡管在開始編程之前,本人花了一個(gè)早上的時(shí)間來構(gòu)思分析,但在后期的開發(fā)設(shè)計(jì)中,仍然發(fā)現(xiàn)功能缺陷,為此還是花費(fèi)了不少功夫來修修補(bǔ)補(bǔ),而在此工程中,往往會(huì)出現(xiàn)一些貫穿整個(gè)程序的問題,而這種缺陷往往是致命的,除了盡可能修補(bǔ)之外,有時(shí)候往往需要重新構(gòu)思,不論是前者還是后者,這都無(wú)異于重新編寫程序,而這往往容易削弱個(gè)人的編程興致,而這也是一個(gè)十分負(fù)面的影響,由此可見,軟件開發(fā)前的需求分析不論是對(duì)自己還是對(duì)程序都是至關(guān)重要的,這點(diǎn)在團(tuán)隊(duì)協(xié)作中尤其得到體現(xiàn)?;蛟S個(gè)人開發(fā)軟件的時(shí)候容易產(chǎn)生邊寫邊想,便想邊寫

10、的習(xí)慣,而這也是受需求分析好壞的影響。同時(shí),在完成課程設(shè)計(jì)的基本要求,但為了提升自己的能力,磨練自己,對(duì)自己提出了相對(duì)較高的要求,要求自己開發(fā)出功能較完善的程序,而這次的課程設(shè)計(jì)也基本達(dá)到了自己的要求,相對(duì)而言還是比較滿意的。以此同時(shí),我強(qiáng)烈感覺到所學(xué)的知識(shí)實(shí)在是有限,而此次的課程設(shè)計(jì)無(wú)非是把有限的知識(shí)加以利用罷了。十、參考文獻(xiàn)(按“作者,書名,出版社,出版時(shí)間”格式逐一列出,如下:)1 、陳波 吉根林c語(yǔ)言程序設(shè)計(jì)教程 中國(guó)鐵道出版社 2010年2 、譚浩強(qiáng) c+程序設(shè)計(jì) 清華大學(xué)出版社 2010附錄stdafx.h#include#include#include#includeiomani

11、pusing namespace std;extern class link; /引用性聲明/定義一個(gè)學(xué)生類class studentpublic:friend link;student();student(string cnum,string cname,float cenglish,float cmath);int changenum(); /修改學(xué)號(hào),修改成功返回1int changename(); /修改姓名,修改成功返回1int changeenglish(); /修改英語(yǔ),修改成功返回1int changemath(); /修改高數(shù),修改成功返回1int changedouble(

12、); /同時(shí)修改英語(yǔ),高數(shù),修改成功返回1int getrank(); /獲取當(dāng)前排名,失敗返回0student * getnext(); /獲取下一個(gè)對(duì)象地址string getnum(); /獲取當(dāng)前對(duì)象學(xué)號(hào)string getname(); /獲取當(dāng)前對(duì)象姓名float getaverage(); /獲取當(dāng)前對(duì)象平均分float getenglish(); /獲取當(dāng)前對(duì)象英語(yǔ)成績(jī)float getmath(); /獲取當(dāng)前對(duì)象高數(shù)成績(jī)student(); /創(chuàng)建析構(gòu)函數(shù)private:string num; /學(xué)號(hào)string name; /姓名float english; /英語(yǔ)成績(jī)f

13、loat math; /高數(shù)成績(jī)float average; /平均成績(jī)int rank; /排名(以平均分為準(zhǔn))student* next; /結(jié)點(diǎn)指針域;/定義一個(gè)鏈表類class linkpublic:link();int addone(); /增加一個(gè)結(jié)點(diǎn),頭部插入法int addmore(int n); /增加多個(gè)結(jié)點(diǎn)int sortbyaverage(); /排序結(jié)點(diǎn)(平均分),降序?yàn)闇?zhǔn)(冒泡排序)int sortbyenglish(); /排序結(jié)點(diǎn)(英語(yǔ))int sortbymath(); /排序結(jié)點(diǎn)(高數(shù))int sortbynum(); /排序結(jié)點(diǎn)(學(xué)號(hào)),以升序排列stud

14、ent * searchbynum(); /查找結(jié)點(diǎn)(學(xué)號(hào)),查找成功返回查找對(duì)象student * searchbyname(); /查找結(jié)點(diǎn)(姓名),查找成功返回查找對(duì)象,采用鏈表遍歷查找int savelink(); /保存鏈表,成功返回1int savebat(); /保存不及格學(xué)生信息int readlink(); /讀取鏈表int getlen(); /計(jì)算鏈表長(zhǎng)度int delbynum(); /刪除結(jié)點(diǎn),通過學(xué)號(hào),刪除成功返回1int delbyname(); /刪除結(jié)點(diǎn),通過姓名,刪除成功返回1void showone(student* p); /顯示結(jié)點(diǎn),此處用運(yùn)算符重載v

15、oid showlink(student* p); /顯示鏈表int getrankbyaverage(); /經(jīng)排序后獲取平均分排名,排名成功返回1int getrankbyenglish(); /經(jīng)排序后獲取英語(yǔ)排名,排名成功返回1int getrankbymath(); /經(jīng)排序后獲取高數(shù)排名,排名成功返回1void searchbat(); /搜索兩門都不及格學(xué)生float getallaverage(); /計(jì)算獲取平均分的平均分float getenglishaverage(); /計(jì)算獲取英語(yǔ)平均分float getmathaverage(); /計(jì)算獲取高數(shù)平均分link();

16、 /創(chuàng)建析構(gòu)函數(shù)student* head; /定義一個(gè)鏈表頭private:int flag; /標(biāo)記當(dāng)前結(jié)點(diǎn)的位置int len; /當(dāng)前鏈表長(zhǎng)度int sortflag; /檢查是否已經(jīng)排序,0表示未排序;/定義菜單選項(xiàng)void thirdmenu(); /三級(jí)菜單void secondmenu_t(); /教師二級(jí)菜單void secondmenu_s(); /學(xué)生二級(jí)菜單void firstmenu( link &link ); /一級(jí)菜單void menu( link &link );/操作菜單界面void greet(); /問候界面void checkid( link &lin

17、k); /驗(yàn)證身份,默認(rèn)密碼123456void thirdmenu_add( link &link ); /教師三級(jí)菜單void thirdmenu_sort( link &link );void thirdmenu_change( link &link );void thirdmenu_changebynum( link &link );void thirdmenu_changebyname( link &link );void thirdmenu_changebymath( link &link );void thirdmenu_changebyenglish( link &link )

18、;void thirdmenu_sortbynum( link &link );void thirdmenu_sortbymath( link &link );void thirdmenu_sortbyenglish( link &link );void thirdmenu_sortbyaverage( link &link );void thirdmenu_search( link &link );void thirdmenu_addone( link &link ); /三級(jí)菜單,單個(gè)錄入void thirdmenu_addmore( link &link ); /三級(jí)菜單,批量錄入voi

19、d thirdmenu_searchbynum( link &link ); /三級(jí)菜單,學(xué)號(hào)查詢void thirdmenu_searchbyrank( link &link );void thirdmenu_searchbad( link &link );void secondmenu_t( link &link ); /教師二級(jí)菜單void secondmenu_ssearchone( link &link );void secondmenu_ssearchnear( link &link );void thirdmenu_searchmathnear( link &link );voi

20、d thirdmenu_searchenglishnear( link &link );void thirdmenu_searchaveragenear( link &link );void secondmenu_s( link &link ); /學(xué)生二級(jí)菜單void thirdmenu_searchbat( link &link );void thirdmenu_changebydouble( link &link );void fourthmenu_rankofaverage( link &link );void fourthmenu_rankofenglish( link &link

21、);void fourthmenu_rankofmath( link &link );void thirdmenu_del( link &link );void thirdmenu_delbynum( link &link );void thirdmenu_delbyname( link &link );stdafx.cpp#include stdafx.hstatic int id=0; /定義一個(gè)全局變量來記錄是否經(jīng)過身份驗(yàn)證static int read=0; /定義一個(gè)全巨變量來記錄是否讀取過student.txt中的數(shù)據(jù)/student 類的實(shí)現(xiàn)student:student() e

22、nglish=0; math=0; average=0; rank=0; next=null; student:student(string cnum,string cname,float cenglish,float cmath):num(cnum),name(cname),english(cenglish),math(cmath)average=(english+math)/2; /平均數(shù)在輸出時(shí)注意格式rank=0;next=null;int student:changenum() /修改學(xué)號(hào),修改成功返回1string cnum;coutcnum;if( num = cnum )ret

23、urn 0;num=cnum;return 1;int student:changename() /修改姓名,修改成功返回1string cname;coutcname;if( name = cname )return 0;name=cname;return 1;int student:changeenglish() /修改英語(yǔ),修改成功返回1float cenglish;coutcenglish;if( english = cenglish )return 0;english=cenglish;return 1;int student:changemath() /修改高數(shù),修改成功返回1fl

24、oat cmath;coutcmath;if( math = cmath )return 0;math=cmath;return 1;int student:changedouble() /同時(shí)修改英語(yǔ),高數(shù),修改成功返回1if( changeenglish() & changemath() )return 1;return 0;int student:getrank() /獲取當(dāng)前排名,失敗返回0return rank;student * student:getnext() /獲取下一個(gè)對(duì)象地址return next;float student:getaverage() /獲取當(dāng)前對(duì)象平均分

25、return average;float student:getenglish() /獲取當(dāng)前對(duì)象英語(yǔ)成績(jī)r(jià)eturn english;float student:getmath() /獲取當(dāng)前對(duì)象高數(shù)成績(jī)r(jià)eturn math;string student:getnum() /獲取當(dāng)前對(duì)象學(xué)號(hào)return num;string student:getname() /獲取當(dāng)前對(duì)象姓名return name;student:student() /創(chuàng)建析構(gòu)函數(shù)/link 類的實(shí)現(xiàn)link:link() head=null; flag=0; len=0; sortflag=1; int link:a

26、ddone() /增加一個(gè)結(jié)點(diǎn),頭部插入法float cenglish=0,cmath=0;string cnum,cname;student* p;coutcnum;cincname;cincenglish;cincmath;p=new student(cnum,cname,cenglish,cmath);p-next=head;head=p;sortflag=0; /鏈表被改動(dòng),未排序getlen();cout數(shù)據(jù)錄入成功!endl;return len;int link:addmore(int n) /增加多個(gè)結(jié)點(diǎn)for(int i=0;in;i+)cout第i+1個(gè)n;addone()

27、;sortflag=0; /鏈表被改動(dòng),未排序getlen();cout成功錄入n個(gè)學(xué)生數(shù)據(jù)!next=head;head=p;student *pcurrent,*pbefore,*pafter;for(int i=1,n=0;inext;pafter=pcurrent-next;while( n!=0 ) /用n 來判斷比較停止位置if( pcurrent-average average )pbefore-next=pcurrent-next;pcurrent-next=pafter-next;pafter-next=pcurrent;pbefore=pbefore-next;/交換完后會(huì)

28、出現(xiàn)pcurrent 與 pafter 位置倒換pafter=pcurrent-next;/此時(shí)應(yīng)該糾正elsepbefore=pbefore-next;/沒有交換則平行遷移指針pcurrent=pcurrent-next;pafter=pafter-next;n-;head=head-next;/delete p; /此結(jié)點(diǎn)如何刪除?sortflag=1; /鏈表被排序return len;int link:sortbyenglish() /排序結(jié)點(diǎn)(英語(yǔ))getlen();student *p=new student(); /定義一個(gè)空白結(jié)點(diǎn),插入鏈表以簡(jiǎn)化排序操作,此結(jié)點(diǎn)不計(jì)入 len

29、中。p-next=head;head=p;student *pcurrent,*pbefore,*pafter;for(int i=1,n=0;inext;pafter=pcurrent-next;while( n!=0 )/用n 來判斷比較停止位置if( pcurrent-english english )pbefore-next=pcurrent-next;pcurrent-next=pafter-next;pafter-next=pcurrent;pbefore=pbefore-next;/交換完后會(huì)出現(xiàn)pcurrent 與 pafter 位置倒換pafter=pcurrent-next

30、;/此時(shí)應(yīng)該糾正elsepbefore=pbefore-next;/沒有交換則平行遷移指針pcurrent=pcurrent-next;pafter=pafter-next;n-;head=head-next;/delete p; /此結(jié)點(diǎn)如何刪除?sortflag=1; /鏈表被排序return len;int link:sortbymath() /排序結(jié)點(diǎn)(高數(shù))getlen();student *p=new student(); /定義一個(gè)空白結(jié)點(diǎn),插入鏈表以簡(jiǎn)化排序操作,此結(jié)點(diǎn)不計(jì)入 len 中。p-next=head;head=p;student *pcurrent,*pbefore

31、,*pafter;for(int i=1,n=0;inext;pafter=pcurrent-next;while( n!=0 ) /用n 來判斷比較停止位置if( pcurrent-math math )pbefore-next=pcurrent-next;pcurrent-next=pafter-next;pafter-next=pcurrent;pbefore=pbefore-next;/交換完后會(huì)出現(xiàn)pcurrent 與 pafter 位置倒換pafter=pcurrent-next;/此時(shí)應(yīng)該糾正elsepbefore=pbefore-next;/沒有交換則平行遷移指針pcurren

32、t=pcurrent-next;pafter=pafter-next;n-;head=head-next;/delete p; /此結(jié)點(diǎn)如何刪除?sortflag=1; /鏈表被排序return len;int link:sortbynum() /排序結(jié)點(diǎn)(學(xué)號(hào)),以升序排列g(shù)etlen();student *p=new student(); /定義一個(gè)空白結(jié)點(diǎn),插入鏈表以簡(jiǎn)化排序操作,此結(jié)點(diǎn)不計(jì)入 len 中。p-next=head;head=p;student *pcurrent,*pbefore,*pafter;for(int i=1,n=0;inext;pafter=pcurrent-

33、next;while( n!=0 )/用n 來判斷比較停止位置if( pcurrent-num pafter-num )pbefore-next=pcurrent-next;pcurrent-next=pafter-next;pafter-next=pcurrent;pbefore=pbefore-next;/交換完后會(huì)出現(xiàn)pcurrent 與 pafter 位置倒換pafter=pcurrent-next;/此時(shí)應(yīng)該糾正elsepbefore=pbefore-next;/沒有交換則平行遷移指針pcurrent=pcurrent-next;pafter=pafter-next;n-;head=

34、head-next;/delete p; /此結(jié)點(diǎn)如何刪除?sortflag=1; /鏈表被排序return len;student * link:searchbynum() /查找結(jié)點(diǎn)(學(xué)號(hào)),查找成功返回查找對(duì)象string cnum;coutcnum;student *p=head;while( p-num != cnum )p=p-next;if( p = null )cout未找到!endl;return null;cout成功找到!endl;showone(p);return p;student * link:searchbyname() /查找結(jié)點(diǎn)(姓名),查找成功返回查找對(duì)象,

35、采用鏈表遍歷查找string cname;coutcname;student *p=head;while( p-name != cname )p=p-next;if( p=null )cout未找到!endl;return null;cout成功找到!endl;showone(p);return p;int link:savelink() /保存鏈表,成功返回1ofstream outfile(student.txt,ios:out);if( ! outfile ) cout無(wú)法打開student.txt文件或不存在該文件,系統(tǒng)退出!endl;system( pause );exit( 0 )

36、;student *p=head;while( p != null )outfilenum name english mathnext;outfile.close();cout數(shù)據(jù)成功保持!endl;return 1;int link:savebat() /保存鏈表,成功返回1ofstream outfile(bat.txt,ios:out);if( ! outfile ) cout無(wú)法打開student.txt文件或不存在該文件,系統(tǒng)退出!endl;system( pause );exit( 0 );student *p=head;while( p != null )outfilenum n

37、ame english math averagenext;outfile.close();return 1;int link:readlink() /讀取鏈表ifstream infile(student.txt,ios:in);if( ! infile ) cout無(wú)法打開student.txt文件或無(wú)法建立該文件,系統(tǒng)退出!cnum;infilecname;infilecenglish;infilecmath;if( cnum.length() = 0 & cname.length() = 0)break;p=new student(cnum,cname,cenglish,cmath);p

38、-next=head;head=p;cenglish=0,cmath=0; /讀完后初始化,避免影響下一次閱讀infile.close();if( head = null ) /沒有讀取數(shù)據(jù)時(shí),head 指向 nullcout沒有數(shù)據(jù)可導(dǎo)入endl;/沒有數(shù)據(jù)導(dǎo)入,read可以不標(biāo)記為1return 0;elsecout成功導(dǎo)入數(shù)據(jù)next;return len;int link:delbynum() /刪除結(jié)點(diǎn),通過學(xué)號(hào),刪除成功返回1student *p=searchbynum(),*help;if( p = null )cout刪除失??!next = null ) /空結(jié)點(diǎn)特殊處理hel

39、p=head;while( help-next-next != null)help=help-next;help-next=null;delete p;cout成功刪除!next;*help=*p;help-next=p-next;delete p;cout成功刪除!endl;getlen();return 1;int link:delbyname() /刪除結(jié)點(diǎn),通過姓名,刪除成功返回1student *p=searchbyname(),*help;if( p = null )cout刪除失?。ext = null ) /空結(jié)點(diǎn)特殊處理help=head;while( help-next-

40、next != null)help=help-next;help-next=null;delete p;cout成功刪除!next;*help=*p;help-next=p-next;delete p;cout成功刪除!endl;getlen();return 1;void link:showone(student* p) /顯示結(jié)點(diǎn),此處用運(yùn)算符重載if( p != null )coutrank != 0 )cout 排名endl;elsecoutendl;coutsetiosflags( ios:left ); /格式化輸出coutsetw( 10 )numsetw( 10 )namesetw( 10 )englishsetw( 10 )mathsetw( 10 )average;if( p-rank=0 )coutendl;elsecoutsetw( 10 )rankendl;elsecout沒有數(shù)據(jù)可供輸出!endl;void link:showlink(student* p) /顯示鏈表if( p

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論