2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論