版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 面向?qū)ο缶幊藽++</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題 目 研究生成績管理系統(tǒng) </p><p> 學(xué)生姓名
2、 </p><p> 指導(dǎo)教師 </p><p> 學(xué) 院 信息科學(xué)與工程學(xué)院_ </p><p> 專業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)1604
3、 </p><p> 二○一七 年 十 月</p><p><b> 目 錄</b></p><p> 1.課程設(shè)計(jì)內(nèi)容3</p><p> 2.課程設(shè)計(jì)目的4</p><p> 3.背景知識(shí) 4</p><p> 4.工具/準(zhǔn)備工作4&l
4、t;/p><p> 5.設(shè)計(jì)步驟、方法等4</p><p> 5.1.步驟1:相關(guān)類的定義,重載7</p><p> 5.2.步驟2:單鏈表相關(guān)函數(shù)13</p><p> 5.3.步驟3:文件操作函數(shù)的聲明與定義22</p><p> 5.4.步驟4:統(tǒng)計(jì)函數(shù)的聲明與定義26</p>
5、;<p> 5.5.步驟5:菜單函數(shù)的書寫28</p><p> 5.6.步驟6:登錄界面(密碼),歡迎界面的實(shí)現(xiàn)31</p><p> 6.設(shè)計(jì)結(jié)果及分析32</p><p> 7.設(shè)計(jì)結(jié)論與感想39</p><p> 8.對(duì)本設(shè)計(jì)過程及方法、手段的改進(jìn)建議39</p><p&
6、gt; 9.參考文獻(xiàn)40</p><p> 程序設(shè)計(jì)基礎(chǔ)實(shí)踐報(bào)告</p><p><b> 課程設(shè)計(jì)內(nèi)容</b></p><p> 該課程是C++編程和數(shù)據(jù)結(jié)構(gòu)課程學(xué)習(xí)內(nèi)容的重要實(shí)踐環(huán)節(jié),其主要目的在于通過綜合程序課程設(shè)計(jì),培養(yǎng)和提高學(xué)生的獨(dú)立分析問題、解決實(shí)際問題的能力和計(jì)算機(jī)語言編程能力。運(yùn)用Visual C++環(huán)境,用數(shù)據(jù)結(jié)構(gòu)
7、、面向?qū)ο蟪绦蛟O(shè)計(jì)思想進(jìn)行程序設(shè)計(jì)、功能模塊調(diào)試,完成相關(guān)設(shè)計(jì)題所規(guī)定的任務(wù)、撰寫課程設(shè)計(jì)報(bào)告。</p><p> 設(shè)計(jì)一個(gè)研究生基本信息管理,實(shí)現(xiàn)對(duì)不同學(xué)制的研究生包括:學(xué)術(shù)碩士和工程碩士的信息管理。定義一個(gè)基本的研究生類,基本信息包括:學(xué)號(hào)、姓名、性別、年齡、課程成績。派生出學(xué)術(shù)碩士類,增加的屬性包括:專業(yè),發(fā)表論文(名稱與級(jí)別(1、2、3)),可以多篇,最多3篇),論文成績,總成績;工程碩士增加的屬性包括
8、:領(lǐng)域,參與項(xiàng)目(名稱與級(jí)別(A,B,C,…)),項(xiàng)目成績,總成績。計(jì)算方式如下</p><p> 1) 學(xué)術(shù)碩士論文成績計(jì)算:各個(gè)級(jí)別的論文得分為:級(jí)別*10,每個(gè)學(xué)生論文最高90分;</p><p> 假設(shè)某研究生發(fā)表兩篇論文,級(jí)別分別為1、2,那么</p><p> 論文成績=(10/90+20/90)*100,</p><p>
9、 總成績=課程成績*0.7+論文成績*0.3;</p><p> 2) 工程碩士項(xiàng)目成績計(jì)算:每個(gè)學(xué)生只參與一項(xiàng)項(xiàng)目,各個(gè)級(jí)別得分:A級(jí)90,B級(jí)75,C級(jí)60,不參與項(xiàng)目得分為0;</p><p> 總成績=課程成績*0.5+項(xiàng)目成績*0.5</p><p> 基本功能與技術(shù)要求:</p><p> 數(shù)據(jù)文件管理功能:創(chuàng)建新文件、
10、打開文件、保存文件。</p><p> 2、計(jì)算與統(tǒng)計(jì)功能:完成記錄中相關(guān)數(shù)據(jù)的統(tǒng)計(jì);</p><p> 1)能夠打開已存在的數(shù)據(jù)表文件,對(duì)數(shù)據(jù)表中與某關(guān)鍵字匹配的相關(guān)記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì)(包括:總數(shù)、平均值、分段信息),例如:按總成績得分為100、90~99、80~89、70~79、60~69和不及格學(xué)生的人數(shù),以及所占百分比。</p><p> 2)計(jì)算每個(gè)研
11、究生的總成績。</p><p> 3、記錄管理功能:記錄的管理采用鏈表或者指針數(shù)組實(shí)現(xiàn)。</p><p> 1)輸入/添加/插入記錄,并保存到數(shù)據(jù)文件中。</p><p> 2)查詢、顯示記錄,根據(jù)用戶要求按所給記錄關(guān)鍵字查詢一個(gè)或多個(gè)相關(guān)聯(lián)記錄的各項(xiàng)信息。</p><p> 3)修改記錄:能夠打開已存在的數(shù)據(jù)表文件,并對(duì)確定的任意記
12、錄進(jìn)行修改,在修改過程中,應(yīng)顯示記錄信息,給出確認(rèn)提示,并對(duì)更新的記錄信息進(jìn)行文件保存。</p><p> 4)刪除記錄:能夠打開已存在的數(shù)據(jù)表文件,可以刪除數(shù)據(jù)表中的任一記錄,要求具備邏輯刪除(具有恢復(fù)功能)和物理刪除功能,并對(duì)新的數(shù)據(jù)表信息進(jìn)行文件保存。</p><p><b> 課程設(shè)計(jì)目的</b></p><p> 課程設(shè)計(jì)是學(xué)習(xí)
13、過程的重要環(huán)節(jié)。通過課程設(shè)計(jì),能夠進(jìn)一步加深對(duì)C++語言基本知識(shí)的理解,提高C++語言綜合編程能力與程序調(diào)試技巧,為后續(xù)課程的學(xué)習(xí)以及實(shí)際問題的解決打下良好的基礎(chǔ)。更好的理解以下內(nèi)容:算法的基本概念;使用常量、變量、運(yùn)算符與表達(dá)式、程序控制結(jié)構(gòu)、數(shù)組、函數(shù)、編譯預(yù)處理、指針、類和對(duì)象的特征、正確使用類和對(duì)象、運(yùn)算符重載、繼承與派生、多態(tài)性與虛函數(shù)、輸入輸出流文件操作等C++語言要素進(jìn)行程序設(shè)計(jì);在一種C++語言開發(fā)環(huán)境下進(jìn)行C++程序設(shè)
14、計(jì)的基本步驟。</p><p><b> 背景知識(shí)</b></p><p> C++是近年來國內(nèi)外廣泛使用的現(xiàn)代計(jì)算機(jī)語言,它既支持基于過程的程序設(shè)計(jì),也支持面向?qū)ο蟮某绦蛟O(shè)計(jì),屬高級(jí)語言范疇。它既具有高級(jí)語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序,代碼清晰精簡,十分靈
15、活,作為計(jì)算機(jī)的基礎(chǔ)課程,我們應(yīng)熟練掌握。</p><p><b> 工具/準(zhǔn)備工作</b></p><p> 自主學(xué)習(xí)C++語言中輸入輸出流文件操作相關(guān)知識(shí),溫習(xí)C++語言知識(shí),操作軟件Visual Studio 2017。</p><p><b> 設(shè)計(jì)步驟、方法等</b></p><p>
16、; 思路:首先,仔細(xì)閱讀課程設(shè)計(jì)題目的具體要求(這點(diǎn)很關(guān)鍵),先寫出自己的思路,如何實(shí)現(xiàn)各個(gè)功能,然后就是分幾個(gè)大塊敲代碼,每完成一個(gè)函數(shù)功能,去調(diào)試運(yùn)行,如果能運(yùn)行的話說明這塊函數(shù)大體應(yīng)該是沒有問題了,可以進(jìn)入下一模塊的書寫,否則這段代碼沒有通過。</p><p><b> 第一次進(jìn)入:</b></p><p><b> 之后進(jìn)入:</b>
17、;</p><p> 模塊的書寫構(gòu)建順序:</p><p> 進(jìn)行類的定義,基類研究生,派生類學(xué)術(shù)研究生和工程研究生,類中變量的聲明,進(jìn)行重載<<,>>,使之能夠?qū)崿F(xiàn)cin cout 的輸入和輸出。</p><p> 進(jìn)行單鏈表操作的函數(shù)的書寫,使之能夠?qū)深惻缮芯可M(jìn)行鏈表的建立、輸出、插入、修改、刪除等基本操作。</p>
18、;<p> 進(jìn)行相關(guān)文件的操作函數(shù)的聲明與定義,使程序能夠?qū)彺嬷械臄?shù)據(jù)讀到磁盤中,也可以將磁盤中的數(shù)據(jù)讀取到內(nèi)存中。</p><p> 統(tǒng)計(jì)函數(shù)的書寫,這部分用到了靜態(tài)變量和靜態(tài)函數(shù),程序可以實(shí)現(xiàn)基本的統(tǒng)計(jì)功能。</p><p> 菜單函數(shù)的書寫,這部分就是美觀,簡單大方,cout語句進(jìn)行圖形繪制即可,比較容易。</p><p> 密碼,歡迎
19、界面的實(shí)現(xiàn):使程序更加美觀,也能夠填寫正確的用戶名和口令方可進(jìn)入系統(tǒng)。</p><p> 1->2->3->4->5->6</p><p> 下面進(jìn)行代碼的說明:</p><p> 步驟1:相關(guān)類的定義,重載</p><p> 這部分對(duì)于整個(gè)代碼來說相對(duì)比較簡單,運(yùn)用c++對(duì)類的定義,類中數(shù)據(jù)成員的聲明,
20、重載函數(shù)的使用即可實(shí)現(xiàn),這里我著重說明一下重載部分,以學(xué)術(shù)碩士的>>重載為例(其他相似),重載的過程中輸出語句要盡可能的美觀,而輸入語句的話,我想要能夠?qū)τ脩舻恼`操作進(jìn)行處理,因?yàn)閷W(xué)號(hào)為0是退出錄入,所以當(dāng)用戶輸入0時(shí),if判斷語句判斷是否為0,若為零,return input結(jié)束函數(shù),其他比如說成績,等級(jí)的輸入都有限定,同理,if語句判斷,若為真,配合goto語句回到輸入數(shù)據(jù)前,重新輸入,這么做的好處,用戶一旦輸入錯(cuò)誤一個(gè)
21、數(shù)據(jù),馬上會(huì)令用戶重新輸入(個(gè)人認(rèn)為,相對(duì)于一些作品,等待用戶將其全部數(shù)據(jù)輸入之后,每個(gè)數(shù)據(jù)進(jìn)行判斷,若有一個(gè)不符和要求,即不錄入數(shù)據(jù)好一些),其中浮點(diǎn)型數(shù)據(jù)的判斷比較關(guān)鍵(不能準(zhǔn)確的保存數(shù)據(jù),判斷浮點(diǎn)型數(shù)據(jù)是否==一個(gè)固定的值需要調(diào)用fabs函數(shù)實(shí)現(xiàn)),還有,在輸入的過程中有一些數(shù)據(jù)是通過計(jì)算得到,這樣的數(shù)據(jù)我在用戶輸入一些必要的數(shù)據(jù)后就會(huì)進(jìn)行賦值,調(diào)用計(jì)算函數(shù)計(jì)算賦值,用戶一旦輸入完畢,相關(guān)值便賦值給該對(duì)象的數(shù)據(jù)域。但是也是有缺點(diǎn)的
22、,goto語句用的偏多,這點(diǎn)不利于程序的穩(wěn)定性,應(yīng)努力</p><p><b> 源代碼(部分):</b></p><p> //重載函數(shù)(派生類:學(xué)術(shù)碩士)</p><p> istream& operator>>(istream &input, academicGraduateStudent &as
23、tu)</p><p><b> {</b></p><p> cout << "學(xué)號(hào): ";</p><p> input >> astu.num;</p><p> if (astu.num == 0)</p><p><b>
24、{</b></p><p> return input;</p><p><b> }</b></p><p> cout << "姓名:";</p><p> input >> astu.name;</p><p><b>
25、; loopse:</b></p><p> cout << "性別:";</p><p> input >> astu.sex;</p><p> //判斷性別是否合法</p><p> if (!(astu.sex == "男" || astu.sex
26、== "女"))</p><p><b> {</b></p><p> cerr << "性別輸入有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loopse;</p><p><b> }</b><
27、/p><p> cout << "年齡: ";</p><p> input >> astu.age;</p><p><b> loopc:</b></p><p> cout << "課程成績: ";</p><p&g
28、t; input >> astu.courseScore;</p><p> if (astu.courseScore < 0 || astu.courseScore>100)</p><p><b> {</b></p><p> cerr << "課程成績輸入有誤,請(qǐng)重新輸入!"
29、; << endl;</p><p> goto loopc;</p><p><b> }</b></p><p> cout << "專業(yè): ";</p><p> input >> astu.major;</p><p><
30、;b> looppn:</b></p><p> cout << "發(fā)表論文篇數(shù):" << endl;</p><p> input >> astu.paperNumber;</p><p> if (!(astu.paperNumber <= 3 && astu
31、.paperNumber>0))</p><p><b> {</b></p><p> cerr << "輸入有誤,論文篇數(shù)范圍1 - 3" << endl;</p><p> goto looppn;</p><p><b> }</b>
32、</p><p> if (astu.paperNumber >= 1)</p><p><b> {</b></p><p> cout << "論文一:";</p><p> input >> astu.apaper.paper1;</p>&l
33、t;p><b> loopff:</b></p><p> cout << "級(jí)別(1,2,3):";</p><p> input >> astu.apaper.paperLevel1;</p><p> //判斷級(jí)別是否合法</p><p> if (!(a
34、stu.apaper.paperLevel1 == 1 || astu.apaper.paperLevel1 == 2 || astu.apaper.paperLevel1 == 3))</p><p><b> {</b></p><p> cerr << "輸入的級(jí)別有誤(級(jí)別為1 2 3),請(qǐng)重新輸入!" << e
35、ndl;</p><p> goto loopff;</p><p><b> }</b></p><p><b> loopf:</b></p><p> cout << "分?jǐn)?shù)一:";</p><p> input >>
36、; astu.apaper.paper1Score;</p><p> //判斷分?jǐn)?shù)是否合法</p><p> if (astu.apaper.paper1Score < 0 || astu.apaper.paper1Score > 90)</p><p><b> {</b></p><p> ce
37、rr << "輸入的分?jǐn)?shù)一有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loopf;</p><p><b> }</b></p><p><b> }</b></p><p> if (astu.paperNumber &g
38、t;= 2)</p><p><b> {</b></p><p> cout << "論文二:";</p><p> input >> astu.apaper.paper2;</p><p><b> loopss:</b></p>
39、<p> cout << "級(jí)別(1,2,3):";</p><p> input >> astu.apaper.paperLevel2;</p><p> if (!(astu.apaper.paperLevel2 == 1 || astu.apaper.paperLevel2 == 2 || astu.apaper.pape
40、rLevel2 == 3))</p><p><b> {</b></p><p> cerr << "輸入的級(jí)別有誤(級(jí)別為1 2 3),請(qǐng)重新輸入!" << endl;</p><p> goto loopss;</p><p><b> }</b&
41、gt;</p><p><b> loops:</b></p><p> cout << "分?jǐn)?shù)二:";</p><p> input >> astu.apaper.paper2Score;</p><p> if (astu.apaper.paper2Score &l
42、t; 0 || astu.apaper.paper2Score > 90)</p><p><b> {</b></p><p> cerr << "輸入的分?jǐn)?shù)二有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loops;</p><p><
43、;b> }</b></p><p><b> }</b></p><p> if (astu.paperNumber >= 3)</p><p><b> {</b></p><p> cout << "論文三:";</p>
44、;<p> input >> astu.apaper.paper3;</p><p><b> looptt:</b></p><p> cout << "級(jí)別(1,2,3):";</p><p> input >> astu.apaper.paperLevel3;&
45、lt;/p><p> if (!(astu.apaper.paperLevel3 == 1 || astu.apaper.paperLevel3 == 2 || astu.apaper.paperLevel3 == 3))</p><p><b> {</b></p><p> cerr << "輸入的級(jí)別有誤(級(jí)別為1
46、 2 3),請(qǐng)重新輸入!" << endl;</p><p> goto looptt;</p><p><b> }</b></p><p><b> loopt:</b></p><p> cout << "分?jǐn)?shù)三:";</p&
47、gt;<p> input >> astu.apaper.paper3Score;</p><p> if (astu.apaper.paper3Score < 0 || astu.apaper.paper3Score > 90)</p><p><b> {</b></p><p> cerr &
48、lt;< "輸入的分?jǐn)?shù)三有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loopt;</p><p><b> }</b></p><p><b> }</b></p><p> cout << "論文成績:&q
49、uot;;</p><p> astu.paperScore = astu.calculatePaperScore();</p><p> cout << astu.paperScore << endl;</p><p> cout << "總成績:";</p><p> ast
50、u.sumScore = astu.calculateSumScore();</p><p> cout << astu.sumScore << endl;</p><p> return input;</p><p><b> }</b></p><p> class graduateS
51、tudent</p><p><b> {</b></p><p><b> public:</b></p><p> graduateStudent() {};//構(gòu)造函數(shù)</p><p> ~graduateStudent() {};//析構(gòu)函數(shù)</p><p>
52、 protected:</p><p> int num;//學(xué)號(hào)</p><p> string name;//姓名</p><p> string sex;//性別</p><p> int age;//年齡</p><p> float courseScore;//課程成績</p>&l
53、t;p><b> };</b></p><p><b> //學(xué)術(shù)碩士</b></p><p> class academicGraduateStudent:public graduateStudent</p><p><b> {</b></p><p><
54、;b> public:</b></p><p> academicGraduateStudent *paNext;//定義一個(gè)指針,鏈表操作</p><p> academicGraduateStudent() </p><p><b> {</b></p><p> apaper.paper
55、1Score = 0.0;</p><p> apaper.paper2Score = 0.0;</p><p> apaper.paper3Score = 0.0;</p><p> apaper.paperLevel1 = 0;</p><p> apaper.paperLevel2 = 0;</p><p&g
56、t; apaper.paperLevel3 = 0;</p><p><b> };//構(gòu)造函數(shù)</b></p><p> ~academicGraduateStudent() {};//析構(gòu)函數(shù)</p><p> int getNum()const { return num; }//獲取學(xué)號(hào)</p><p>
57、 string getName()const { return name; }//獲取姓名</p><p> float calculatePaperScore();//計(jì)算論文分?jǐn)?shù)</p><p> float calculateSumScore();//計(jì)算總成績</p><p><b> //重載函數(shù)</b></p>
58、<p> friend ostream& operator<<(ostream&, academicGraduateStudent&);</p><p> friend istream& operator>>(istream&, academicGraduateStudent&);</p><p><
59、;b> //統(tǒng)計(jì)函數(shù)</b></p><p> static void statisticalData(academicGraduateStudent*);</p><p> protected:</p><p> static float sumAcademicScore;//學(xué)術(shù)碩士全體總成績</p><p>
60、 static int countAcademicNumber;//學(xué)術(shù)碩士總?cè)藬?shù)</p><p> static float averageAcademicScore;//學(xué)術(shù)碩士平均成績</p><p> static int a[6];//學(xué)術(shù)碩士總分分段人數(shù)</p><p> string major;//專業(yè)</p><p>
61、 struct paper//發(fā)表論文</p><p><b> {</b></p><p> string paper1;</p><p> float paper1Score;</p><p> int paperLevel1;</p><p> string paper2;<
62、;/p><p> float paper2Score;</p><p> int paperLevel2;</p><p> string paper3;</p><p> float paper3Score;</p><p> int paperLevel3;</p><p> }ap
63、aper;//apaper代表的是academicGraduateStudent的paper</p><p> int paperNumber;//發(fā)表的論文數(shù)</p><p> float paperScore;//論文成績</p><p> float sumScore;//總成績</p><p><b> };<
64、/b></p><p><b> //工程碩士</b></p><p> class engineeringGraduateStudent :public graduateStudent</p><p><b> {</b></p><p><b> public:</
65、b></p><p> engineeringGraduateStudent *peNext;//定義一個(gè)指針,鏈表操作</p><p> engineeringGraduateStudent() {};//構(gòu)造函數(shù)</p><p> ~engineeringGraduateStudent() {};//析構(gòu)函數(shù)</p><p>
66、 int getNum()const { return num; }//獲取學(xué)號(hào)</p><p> string getName()const { return name; }//獲取姓名</p><p> float calculateSumScore();//計(jì)算總分?jǐn)?shù)</p><p><b> //重載函數(shù)</b></p&g
67、t;<p> friend ostream& operator<<(ostream&, engineeringGraduateStudent&);</p><p> friend istream& operator>>(istream&, engineeringGraduateStudent&);</p>&l
68、t;p><b> //統(tǒng)計(jì)函數(shù)</b></p><p> static void statisticalData(engineeringGraduateStudent*);</p><p> protected:</p><p> static float sumEngineeringScore;//工程碩士全體總成績</p
69、><p> static int countEngineeringNumber;//工程碩士總?cè)藬?shù)</p><p> static float averageEngineeringScore;//工程碩士平均成績</p><p> static int e[6];//學(xué)術(shù)碩士總分分段人數(shù)</p><p> string field;//領(lǐng)
70、域</p><p> struct project//參加項(xiàng)目</p><p><b> {</b></p><p> string pName;//項(xiàng)目名稱</p><p> char pLevel;//項(xiàng)目等級(jí)A,B,C</p><p> }eproject;</p>
71、<p> float projectScore;//項(xiàng)目成績</p><p> float sumScore;//總成績</p><p><b> };</b></p><p> 步驟2:單鏈表相關(guān)函數(shù)</p><p> 這一塊代碼的書寫我的思路:因?yàn)橛袃深惻缮芯可?,而文件操作需要的是告訴計(jì)算機(jī)字節(jié)
72、數(shù)的讀取,所以,建立兩個(gè)單鏈表,分別對(duì)學(xué)術(shù),工程類的研究生進(jìn)行操作,鏈表的優(yōu)勢(shì)確實(shí)比數(shù)組好,可以說,鏈表就是一個(gè)動(dòng)態(tài)的數(shù)組,鏈表的書寫過程中是我又復(fù)習(xí)了一遍上學(xué)期學(xué)的知識(shí),更加加深了頭結(jié)點(diǎn)的關(guān)鍵作用(頭結(jié)點(diǎn)中數(shù)據(jù)域是沒有用的,只有指針域有用),我將兩個(gè)頭結(jié)點(diǎn)均聲明為全局變量,方便函數(shù)的調(diào)用使用,下面展示學(xué)術(shù)類的源代碼,工程類的同理。</p><p><b> 源代碼(部分):</b><
73、;/p><p> //學(xué)術(shù)類研究生普通函數(shù)的定義</p><p> academicGraduateStudent* seekAcademicData(academicGraduateStudent *head)//查找某個(gè)學(xué)術(shù)研究生數(shù)據(jù)</p><p><b> {</b></p><p> if (head-&g
74、t;paNext == NULL)//判斷緩存中是否有數(shù)據(jù)</p><p><b> {</b></p><p> cerr << "錯(cuò)誤代碼:0x123458!" << endl;</p><p> cerr << "異常錯(cuò)誤!(請(qǐng)上報(bào)管理員處理)" <&
75、lt; endl;</p><p> system("pause");</p><p><b> exit(0);</b></p><p><b> }</b></p><p><b> loop:</b></p><p>
76、 cout << "學(xué)號(hào)(1), 姓名(2)?" << endl;</p><p> int i = 0;</p><p><b> cin >> i;</b></p><p> if (!(i == 1 || i == 2))</p><p><b&g
77、t; {</b></p><p> cerr << "輸入有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loop;</p><p><b> }</b></p><p> academicGraduateStudent *p = he
78、ad->paNext;</p><p> int targetNum;</p><p> string targetName;</p><p> switch (i)</p><p><b> {</b></p><p><b> case 1:</b><
79、;/p><p><b> loopnu:</b></p><p> cout << "請(qǐng)輸入學(xué)號(hào):" << endl;</p><p> cin >> targetNum;</p><p> while (p->getNum() != targetNum)
80、</p><p><b> {</b></p><p> p = p->paNext;</p><p><b> }</b></p><p> if (p == NULL)</p><p><b> {</b></p>&l
81、t;p> cerr << "沒有這個(gè)數(shù)據(jù)!請(qǐng)重新輸入!" << endl;</p><p> goto loopnu;</p><p><b> }</b></p><p><b> return p;</b></p><p><b&g
82、t; break;</b></p><p><b> case 2:</b></p><p><b> loopna:</b></p><p> cout << "請(qǐng)輸入姓名:" << endl;</p><p> cin >&
83、gt; targetName;</p><p> while (p->getName() != targetName)</p><p><b> {</b></p><p> p = p->paNext;</p><p><b> }</b></p><p&g
84、t; if (p == NULL)</p><p><b> {</b></p><p> cerr << "沒有這個(gè)數(shù)據(jù)!請(qǐng)重新輸入!" << endl;</p><p> goto loopna;</p><p><b> }</b><
85、/p><p><b> return p;</b></p><p><b> break;</b></p><p><b> default:</b></p><p> cerr << "錯(cuò)誤代碼:0x123459!" << en
86、dl;</p><p> cerr << "異常錯(cuò)誤?。ㄕ?qǐng)上報(bào)管理員處理)" << endl;</p><p> system("pause");</p><p> exit(0);</p><p><b> }</b></p>&
87、lt;p><b> }</b></p><p> academicGraduateStudent* inputAcademicData(academicGraduateStudent *head)//錄入學(xué)術(shù)研究生數(shù)據(jù)</p><p><b> {</b></p><p> academicGraduateS
88、tudent *p, *q;</p><p> p = q = new academicGraduateStudent;</p><p> if (p == NULL || q == NULL)//申請(qǐng)內(nèi)存失敗操作</p><p><b> {</b></p><p> cerr << "錯(cuò)
89、誤代碼:0x123456!" << endl;</p><p> cerr << "異常錯(cuò)誤?。ㄕ?qǐng)上報(bào)管理員處理)" << endl;</p><p> system("pause");</p><p><b> exit(0);</b></p&g
90、t;<p><b> }</b></p><p> cout << "開始錄入數(shù)據(jù)(學(xué)號(hào)為零時(shí)結(jié)束)" << endl;</p><p> cin >> *p;</p><p> cout << "錄入成功!" << end
91、l;</p><p> int i = 1;</p><p> while ( p->getNum() != 0 )</p><p><b> {</b></p><p> if (i == 1)</p><p><b> {</b></p>&
92、lt;p> head->paNext = p;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> q->paNext = p;</p><p&
93、gt;<b> }</b></p><p><b> q = p;</b></p><p> p = new academicGraduateStudent;</p><p> if (p == NULL)//申請(qǐng)內(nèi)存失敗操作</p><p><b> {</b>&l
94、t;/p><p> cerr << "錯(cuò)誤代碼:0x123457!" << endl;</p><p> cerr << "異常錯(cuò)誤?。ㄕ?qǐng)上報(bào)管理員處理)" << endl;</p><p> system("pause");</p><
95、p><b> exit(0);</b></p><p><b> }</b></p><p> cin >> *p;</p><p> p->getNum();</p><p> if (p->getNum() != 0)</p><p&g
96、t;<b> {</b></p><p> cout << "錄入成功!" << endl;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</
97、b></p><p> cout << "錄入結(jié)束!" << endl;</p><p><b> }</b></p><p><b> i++;</b></p><p><b> }</b></p>&l
98、t;p> q->paNext = NULL;</p><p> return head;</p><p><b> }</b></p><p> academicGraduateStudent* insertAcademicData(academicGraduateStudent *head)//插入某個(gè)學(xué)術(shù)研究生數(shù)據(jù)<
99、;/p><p><b> {</b></p><p> if (head->paNext == NULL)//判斷緩存中是否有數(shù)據(jù)</p><p><b> {</b></p><p> cerr << "錯(cuò)誤代碼:0x123458!" << e
100、ndl;</p><p> cerr << "異常錯(cuò)誤!(請(qǐng)上報(bào)管理員處理)" << endl;</p><p> system("pause");</p><p><b> exit(0);</b></p><p><b> }</
101、b></p><p> academicGraduateStudent *p, *q;</p><p> cout << "請(qǐng)輸入一個(gè)新的數(shù)據(jù)(學(xué)術(shù)研究生)" << endl;</p><p> p = new academicGraduateStudent;</p><p> if
102、(p == NULL)</p><p><b> {</b></p><p> cerr << "錯(cuò)誤代碼:0x123458!" << endl;</p><p> cerr << "異常錯(cuò)誤?。ㄕ?qǐng)上報(bào)管理員處理)" << endl;</p>
103、;<p> system("pause");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> cin >> *p;</p><p> cout << "錄入成功!
104、" << endl;</p><p> cout << "請(qǐng)輸入插入在哪個(gè)數(shù)據(jù)之后?" << endl;</p><p><b> //找到要插入的人</b></p><p> q = seekAcademicData(aHead);</p><p>
105、; p->paNext = q->paNext;</p><p> q->paNext = p;</p><p> return head;</p><p><b> }</b></p><p> academicGraduateStudent* delAcademicData(academi
106、cGraduateStudent *head)//刪除某個(gè)學(xué)術(shù)研究生數(shù)據(jù)</p><p><b> {</b></p><p> if (head->paNext == NULL)//判斷緩存中是否有數(shù)據(jù)</p><p><b> {</b></p><p> cerr <<
107、; "錯(cuò)誤代碼:0x123458!" << endl;</p><p> cerr << "異常錯(cuò)誤?。ㄕ?qǐng)上報(bào)管理員處理)" << endl;</p><p> system("pause");</p><p><b> exit(0);</b>
108、;</p><p><b> }</b></p><p> academicGraduateStudent *p, *q;</p><p><b> loop:</b></p><p> cout << "學(xué)號(hào)(1), 姓名(2)?" << end
109、l;</p><p> int i = 0;</p><p><b> cin >> i;</b></p><p> if (!(i == 1 || i == 2))</p><p><b> {</b></p><p> cerr << &
110、quot;輸入有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loop;</p><p><b> }</b></p><p> p = head->paNext;</p><p><b> q = head;</b></p>&
111、lt;p> int targetNum;</p><p> string targetName;</p><p> switch (i)</p><p><b> {</b></p><p><b> case 1:</b></p><p><b>
112、 loopnu:</b></p><p> cout << "請(qǐng)輸入學(xué)號(hào):" << endl;</p><p> cin >> targetNum;</p><p> while (p->getNum() != targetNum)</p><p><b&
113、gt; {</b></p><p><b> q = p;</b></p><p> p = p->paNext;</p><p><b> }</b></p><p> if (p == NULL)</p><p><b> {<
114、;/b></p><p> cerr << "沒有這個(gè)數(shù)據(jù)!請(qǐng)重新輸入!" << endl;</p><p> goto loopnu;</p><p><b> }</b></p><p><b> break;</b></p>
115、<p><b> case 2:</b></p><p><b> loopna:</b></p><p> cout << "請(qǐng)輸入姓名:" << endl;</p><p> cin >> targetName;</p><
116、;p> while (p->getName() != targetName)</p><p><b> {</b></p><p><b> q = p;</b></p><p> p = p->paNext;</p><p><b> }</b>&
117、lt;/p><p> if (p == NULL)</p><p><b> {</b></p><p> cerr << "沒有這個(gè)數(shù)據(jù)!請(qǐng)重新輸入!" << endl;</p><p> goto loopna;</p><p><b>
118、; }</b></p><p><b> break;</b></p><p><b> default:</b></p><p> cerr << "錯(cuò)誤代碼:0x123459!" << endl;</p><p> cerr &l
119、t;< "異常錯(cuò)誤?。ㄕ?qǐng)上報(bào)管理員處理)" << endl;</p><p> system("pause");</p><p><b> exit(0);</b></p><p><b> }</b></p><p><b>
120、; i = 0;</b></p><p><b> loopq:</b></p><p> cout << "是否確定刪除?是(1), 否(2)" << endl;</p><p><b> cin >> i;</b></p><
121、;p> if (i == 1)</p><p><b> {</b></p><p> q->paNext = p->paNext;</p><p><b> }</b></p><p> else if (i == 2)</p><p><
122、b> {</b></p><p> cerr << "取消成功!" << endl;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>&
123、lt;/p><p> cout << "輸入有誤,請(qǐng)重新輸入!" << endl;</p><p> goto loopq;</p><p><b> }</b></p><p> return head;</p><p><b> }&
124、lt;/b></p><p> void printAcademicData(academicGraduateStudent *head)//輸出學(xué)術(shù)研究生數(shù)據(jù)</p><p><b> {</b></p><p> academicGraduateStudent *p = head->paNext;</p>&
125、lt;p> if (head->paNext == NULL)</p><p><b> {</b></p><p> cerr << "錯(cuò)誤代碼:0x156456(鏈表中無數(shù)據(jù))" << endl;</p><p> cerr << "請(qǐng)聯(lián)系管理員處理!&q
126、uot; << endl;</p><p> system("pause");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> while (p != NULL)</p><p&g
127、t;<b> {</b></p><p> cout << *p << endl;</p><p> p = p->paNext;</p><p><b> }</b></p><p><b> return;</b></p>
128、<p><b> }</b></p><p> void modifyAcademicData()//修改學(xué)術(shù)研究生的數(shù)據(jù)</p><p><b> {</b></p><p> academicGraduateStudent *p, *q;</p><p> p = see
129、kAcademicData(aHead);</p><p> q = new academicGraduateStudent;</p><p> q->paNext = p->paNext;</p><p> if (q == NULL)</p><p><b> {</b></p>&
130、lt;p> cerr << "錯(cuò)誤代碼0x156112" << endl;</p><p> cerr << "請(qǐng)聯(lián)系管理員解決!" << endl;</p><p> system("pause");</p><p><b> exi
131、t(0);</b></p><p><b> }</b></p><p> cin >> *q;</p><p> int i = 0;</p><p><b> loop:</b></p><p> cout << "
132、是否確定修改 是(1), 否(2)?" << endl;</p><p><b> cin >> i;</b></p><p> if (i == 1)</p><p><b> {</b></p><p><b> *p = *q;</b&
133、gt;</p><p> cout << "修改成功" << endl;</p><p><b> }</b></p><p> else if (i == 2)</p><p><b> {</b></p><p> c
134、out << "取消成功!" << endl;</p><p><b> delete q;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {&l
135、t;/b></p><p> cerr << "輸入有誤, 請(qǐng)重新輸入!" << endl;</p><p> goto loop;</p><p><b> }</b></p><p><b> return;</b></p>
136、<p><b> }</b></p><p> 步驟3:文件操作函數(shù)的聲明與定義</p><p> 文件操作是一個(gè)程序很關(guān)鍵的部分,數(shù)據(jù)是不可能長期的保存在緩存中的,所以需要對(duì)緩存中的數(shù)據(jù)存盤操作,需要注意的細(xì)節(jié)比較多(二進(jìn)制文件,文本文件操作的不同,打開文件,關(guān)閉文件等等),但是只是一些細(xì)節(jié)需要注意,思維上的難度并不是很大,嚴(yán)格按照文件操作的步驟即
137、可,從內(nèi)存中將文件讀到磁盤問題相對(duì)簡單,而將磁盤中的數(shù)據(jù)讀到內(nèi)存,不光要讀,讀完還需操作,所以,建立一個(gè)單鏈表,這個(gè)鏈表不是用戶輸入數(shù)據(jù),而是讀取文件輸入數(shù)據(jù)(思想是一樣的),之后內(nèi)存中有了數(shù)據(jù),就可以進(jìn)行相關(guān)的操作了,之后保存即可。</p><p><b> 源代碼(部分):</b></p><p><b> //保存數(shù)據(jù)到磁盤</b>&l
138、t;/p><p> void saveAcademicStudentData(academicGraduateStudent *head)//保存學(xué)術(shù)研究生數(shù)據(jù)到磁盤</p><p><b> {</b></p><p> //建立一個(gè)txt文本文件</p><p> academicGraduateStudent
139、*p = head->paNext;</p><p> ofstream outfile("AcademicStudentData.txt", ios::out);</p><p> if ( !outfile )</p><p><b> {</b></p><p> cerr <
140、;< "文件打開失敗!" << endl;</p><p> cerr << "錯(cuò)誤代碼0x125158" << endl;</p><p> cerr << "請(qǐng)聯(lián)系管理員處理" << endl;</p><p> system(&q
141、uot;pause");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> while (p != NULL)</p><p><b> {</b></p><p> outf
142、ile << *p;</p><p> p = p->paNext;</p><p><b> }</b></p><p> outfile.close();</p><p> //建立一個(gè)dat二進(jìn)制文件,方便以后讀取</p><p> p = head->pa
143、Next;//重新賦值</p><p> ofstream outfiled("AcademicStudentData.dat", ios::out|ios::binary);</p><p> if (!outfiled)</p><p><b> {</b></p><p> cerr &
144、lt;< "文件打開失敗!" << endl;</p><p> cerr << "錯(cuò)誤代碼0x125158" << endl;</p><p> cerr << "請(qǐng)聯(lián)系管理員處理" << endl;</p><p> system(
145、"pause");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> while (p != NULL)</p><p><b> {</b></p><p> ou
146、tfiled.write((char*)p, sizeof(*p));</p><p> p = p->paNext;</p><p><b> }</b></p><p> outfiled.close();</p><p><b> return;</b></p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計(jì)----學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)----學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)c++課程設(shè)計(jì)
- c++課程設(shè)計(jì)-學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)——學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- c++學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- c++課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)--- 學(xué)生成績管理系統(tǒng)設(shè)計(jì)
- c++課程設(shè)計(jì)--學(xué)生成績管理
- c++學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- c++學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)--學(xué)生成績管理
- c++學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)報(bào)告--學(xué)生成績管理系統(tǒng)
- c&c++課程設(shè)計(jì)-學(xué)生成績管理系統(tǒng)
- c++課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)設(shè)計(jì)與管理
- c++程序課程設(shè)計(jì)報(bào)告—學(xué)生成績管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論