c++課程設計(研究生成績管理系統(tǒng))_第1頁
已閱讀1頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  面向?qū)ο缶幊藽++</b></p><p><b>  課程設計報告</b></p><p>  題 目 研究生成績管理系統(tǒng) </p><p>  學生姓名

2、 </p><p>  指導教師 </p><p>  學 院 信息科學與工程學院_ </p><p>  專業(yè)班級 計算機科學與技術(shù)1604

3、 </p><p>  二○一七 年 十 月</p><p><b>  目 錄</b></p><p>  1.課程設計內(nèi)容3</p><p>  2.課程設計目的4</p><p>  3.背景知識 4</p><p>  4.工具/準備工作4&l

4、t;/p><p>  5.設計步驟、方法等4</p><p>  5.1.步驟1:相關類的定義,重載7</p><p>  5.2.步驟2:單鏈表相關函數(shù)13</p><p>  5.3.步驟3:文件操作函數(shù)的聲明與定義22</p><p>  5.4.步驟4:統(tǒng)計函數(shù)的聲明與定義26</p>

5、;<p>  5.5.步驟5:菜單函數(shù)的書寫28</p><p>  5.6.步驟6:登錄界面(密碼),歡迎界面的實現(xiàn)31</p><p>  6.設計結(jié)果及分析32</p><p>  7.設計結(jié)論與感想39</p><p>  8.對本設計過程及方法、手段的改進建議39</p><p&

6、gt;  9.參考文獻40</p><p>  程序設計基礎實踐報告</p><p><b>  課程設計內(nèi)容</b></p><p>  該課程是C++編程和數(shù)據(jù)結(jié)構(gòu)課程學習內(nèi)容的重要實踐環(huán)節(jié),其主要目的在于通過綜合程序課程設計,培養(yǎng)和提高學生的獨立分析問題、解決實際問題的能力和計算機語言編程能力。運用Visual C++環(huán)境,用數(shù)據(jù)結(jié)構(gòu)

7、、面向?qū)ο蟪绦蛟O計思想進行程序設計、功能模塊調(diào)試,完成相關設計題所規(guī)定的任務、撰寫課程設計報告。</p><p>  設計一個研究生基本信息管理,實現(xiàn)對不同學制的研究生包括:學術(shù)碩士和工程碩士的信息管理。定義一個基本的研究生類,基本信息包括:學號、姓名、性別、年齡、課程成績。派生出學術(shù)碩士類,增加的屬性包括:專業(yè),發(fā)表論文(名稱與級別(1、2、3)),可以多篇,最多3篇),論文成績,總成績;工程碩士增加的屬性包括

8、:領域,參與項目(名稱與級別(A,B,C,…)),項目成績,總成績。計算方式如下</p><p>  1) 學術(shù)碩士論文成績計算:各個級別的論文得分為:級別*10,每個學生論文最高90分;</p><p>  假設某研究生發(fā)表兩篇論文,級別分別為1、2,那么</p><p>  論文成績=(10/90+20/90)*100,</p><p>

9、  總成績=課程成績*0.7+論文成績*0.3;</p><p>  2) 工程碩士項目成績計算:每個學生只參與一項項目,各個級別得分:A級90,B級75,C級60,不參與項目得分為0;</p><p>  總成績=課程成績*0.5+項目成績*0.5</p><p>  基本功能與技術(shù)要求:</p><p>  數(shù)據(jù)文件管理功能:創(chuàng)建新文件、

10、打開文件、保存文件。</p><p>  2、計算與統(tǒng)計功能:完成記錄中相關數(shù)據(jù)的統(tǒng)計;</p><p>  1)能夠打開已存在的數(shù)據(jù)表文件,對數(shù)據(jù)表中與某關鍵字匹配的相關記錄進行數(shù)據(jù)統(tǒng)計(包括:總數(shù)、平均值、分段信息),例如:按總成績得分為100、90~99、80~89、70~79、60~69和不及格學生的人數(shù),以及所占百分比。</p><p>  2)計算每個研

11、究生的總成績。</p><p>  3、記錄管理功能:記錄的管理采用鏈表或者指針數(shù)組實現(xiàn)。</p><p>  1)輸入/添加/插入記錄,并保存到數(shù)據(jù)文件中。</p><p>  2)查詢、顯示記錄,根據(jù)用戶要求按所給記錄關鍵字查詢一個或多個相關聯(lián)記錄的各項信息。</p><p>  3)修改記錄:能夠打開已存在的數(shù)據(jù)表文件,并對確定的任意記

12、錄進行修改,在修改過程中,應顯示記錄信息,給出確認提示,并對更新的記錄信息進行文件保存。</p><p>  4)刪除記錄:能夠打開已存在的數(shù)據(jù)表文件,可以刪除數(shù)據(jù)表中的任一記錄,要求具備邏輯刪除(具有恢復功能)和物理刪除功能,并對新的數(shù)據(jù)表信息進行文件保存。</p><p><b>  課程設計目的</b></p><p>  課程設計是學習

13、過程的重要環(huán)節(jié)。通過課程設計,能夠進一步加深對C++語言基本知識的理解,提高C++語言綜合編程能力與程序調(diào)試技巧,為后續(xù)課程的學習以及實際問題的解決打下良好的基礎。更好的理解以下內(nèi)容:算法的基本概念;使用常量、變量、運算符與表達式、程序控制結(jié)構(gòu)、數(shù)組、函數(shù)、編譯預處理、指針、類和對象的特征、正確使用類和對象、運算符重載、繼承與派生、多態(tài)性與虛函數(shù)、輸入輸出流文件操作等C++語言要素進行程序設計;在一種C++語言開發(fā)環(huán)境下進行C++程序設

14、計的基本步驟。</p><p><b>  背景知識</b></p><p>  C++是近年來國內(nèi)外廣泛使用的現(xiàn)代計算機語言,它既支持基于過程的程序設計,也支持面向?qū)ο蟮某绦蛟O計,屬高級語言范疇。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統(tǒng)設計語言,編寫系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序,代碼清晰精簡,十分靈

15、活,作為計算機的基礎課程,我們應熟練掌握。</p><p><b>  工具/準備工作</b></p><p>  自主學習C++語言中輸入輸出流文件操作相關知識,溫習C++語言知識,操作軟件Visual Studio 2017。</p><p><b>  設計步驟、方法等</b></p><p>

16、;  思路:首先,仔細閱讀課程設計題目的具體要求(這點很關鍵),先寫出自己的思路,如何實現(xiàn)各個功能,然后就是分幾個大塊敲代碼,每完成一個函數(shù)功能,去調(diào)試運行,如果能運行的話說明這塊函數(shù)大體應該是沒有問題了,可以進入下一模塊的書寫,否則這段代碼沒有通過。</p><p><b>  第一次進入:</b></p><p><b>  之后進入:</b>

17、;</p><p>  模塊的書寫構(gòu)建順序:</p><p>  進行類的定義,基類研究生,派生類學術(shù)研究生和工程研究生,類中變量的聲明,進行重載<<,>>,使之能夠?qū)崿F(xiàn)cin cout 的輸入和輸出。</p><p>  進行單鏈表操作的函數(shù)的書寫,使之能夠?qū)深惻缮芯可M行鏈表的建立、輸出、插入、修改、刪除等基本操作。</p>

18、;<p>  進行相關文件的操作函數(shù)的聲明與定義,使程序能夠?qū)彺嬷械臄?shù)據(jù)讀到磁盤中,也可以將磁盤中的數(shù)據(jù)讀取到內(nèi)存中。</p><p>  統(tǒng)計函數(shù)的書寫,這部分用到了靜態(tài)變量和靜態(tài)函數(shù),程序可以實現(xiàn)基本的統(tǒng)計功能。</p><p>  菜單函數(shù)的書寫,這部分就是美觀,簡單大方,cout語句進行圖形繪制即可,比較容易。</p><p>  密碼,歡迎

19、界面的實現(xiàn):使程序更加美觀,也能夠填寫正確的用戶名和口令方可進入系統(tǒng)。</p><p>  1->2->3->4->5->6</p><p>  下面進行代碼的說明:</p><p>  步驟1:相關類的定義,重載</p><p>  這部分對于整個代碼來說相對比較簡單,運用c++對類的定義,類中數(shù)據(jù)成員的聲明,

20、重載函數(shù)的使用即可實現(xiàn),這里我著重說明一下重載部分,以學術(shù)碩士的>>重載為例(其他相似),重載的過程中輸出語句要盡可能的美觀,而輸入語句的話,我想要能夠?qū)τ脩舻恼`操作進行處理,因為學號為0是退出錄入,所以當用戶輸入0時,if判斷語句判斷是否為0,若為零,return input結(jié)束函數(shù),其他比如說成績,等級的輸入都有限定,同理,if語句判斷,若為真,配合goto語句回到輸入數(shù)據(jù)前,重新輸入,這么做的好處,用戶一旦輸入錯誤一個

21、數(shù)據(jù),馬上會令用戶重新輸入(個人認為,相對于一些作品,等待用戶將其全部數(shù)據(jù)輸入之后,每個數(shù)據(jù)進行判斷,若有一個不符和要求,即不錄入數(shù)據(jù)好一些),其中浮點型數(shù)據(jù)的判斷比較關鍵(不能準確的保存數(shù)據(jù),判斷浮點型數(shù)據(jù)是否==一個固定的值需要調(diào)用fabs函數(shù)實現(xiàn)),還有,在輸入的過程中有一些數(shù)據(jù)是通過計算得到,這樣的數(shù)據(jù)我在用戶輸入一些必要的數(shù)據(jù)后就會進行賦值,調(diào)用計算函數(shù)計算賦值,用戶一旦輸入完畢,相關值便賦值給該對象的數(shù)據(jù)域。但是也是有缺點的

22、,goto語句用的偏多,這點不利于程序的穩(wěn)定性,應努力</p><p><b>  源代碼(部分):</b></p><p>  //重載函數(shù)(派生類:學術(shù)碩士)</p><p>  istream& operator>>(istream &input, academicGraduateStudent &as

23、tu)</p><p><b>  {</b></p><p>  cout << "學號: ";</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 << "性別輸入有誤,請重新輸入!" << 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 << "課程成績輸入有誤,請重新輸入!"

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 << "級別(1,2,3):";</p><p>  input >> astu.apaper.paperLevel1;</p><p>  //判斷級別是否合法</p><p>  if (!(a

34、stu.apaper.paperLevel1 == 1 || astu.apaper.paperLevel1 == 2 || astu.apaper.paperLevel1 == 3))</p><p><b>  {</b></p><p>  cerr << "輸入的級別有誤(級別為1 2 3),請重新輸入!" << e

35、ndl;</p><p>  goto loopff;</p><p><b>  }</b></p><p><b>  loopf:</b></p><p>  cout << "分數(shù)一:";</p><p>  input >>

36、; astu.apaper.paper1Score;</p><p>  //判斷分數(shù)是否合法</p><p>  if (astu.apaper.paper1Score < 0 || astu.apaper.paper1Score > 90)</p><p><b>  {</b></p><p>  ce

37、rr << "輸入的分數(shù)一有誤,請重新輸入!" << 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 << "級別(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 << "輸入的級別有誤(級別為1 2 3),請重新輸入!" << endl;</p><p>  goto loopss;</p><p><b>  }</b&

41、gt;</p><p><b>  loops:</b></p><p>  cout << "分數(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 << "輸入的分數(shù)二有誤,請重新輸入!" << 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 << "級別(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 << "輸入的級別有誤(級別為1

46、 2 3),請重新輸入!" << endl;</p><p>  goto looptt;</p><p><b>  }</b></p><p><b>  loopt:</b></p><p>  cout << "分數(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;< "輸入的分數(shù)三有誤,請重新輸入!" << 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;//學號</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>  //學術(shù)碩士</b></p><p>  class academicGraduateStudent:public graduateStudent</p><p><b>  {</b></p><p><

54、;b>  public:</b></p><p>  academicGraduateStudent *paNext;//定義一個指針,鏈表操作</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; }//獲取學號</p><p> 

57、 string getName()const { return name; }//獲取姓名</p><p>  float calculatePaperScore();//計算論文分數(shù)</p><p>  float calculateSumScore();//計算總成績</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)計函數(shù)</b></p><p>  static void statisticalData(academicGraduateStudent*);</p><p>  protected:</p><p>  static float sumAcademicScore;//學術(shù)碩士全體總成績</p><p> 

60、 static int countAcademicNumber;//學術(shù)碩士總?cè)藬?shù)</p><p>  static float averageAcademicScore;//學術(shù)碩士平均成績</p><p>  static int a[6];//學術(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;//定義一個指針,鏈表操作</p><p>  engineeringGraduateStudent() {};//構(gòu)造函數(shù)</p><p>  ~engineeringGraduateStudent() {};//析構(gòu)函數(shù)</p><p>

66、  int getNum()const { return num; }//獲取學號</p><p>  string getName()const { return name; }//獲取姓名</p><p>  float calculateSumScore();//計算總分數(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)計函數(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];//學術(shù)碩士總分分段人數(shù)</p><p>  string field;//領

70、域</p><p>  struct project//參加項目</p><p><b>  {</b></p><p>  string pName;//項目名稱</p><p>  char pLevel;//項目等級A,B,C</p><p>  }eproject;</p>

71、<p>  float projectScore;//項目成績</p><p>  float sumScore;//總成績</p><p><b>  };</b></p><p>  步驟2:單鏈表相關函數(shù)</p><p>  這一塊代碼的書寫我的思路:因為有兩類派生研究生,而文件操作需要的是告訴計算機字節(jié)

72、數(shù)的讀取,所以,建立兩個單鏈表,分別對學術(shù),工程類的研究生進行操作,鏈表的優(yōu)勢確實比數(shù)組好,可以說,鏈表就是一個動態(tài)的數(shù)組,鏈表的書寫過程中是我又復習了一遍上學期學的知識,更加加深了頭結(jié)點的關鍵作用(頭結(jié)點中數(shù)據(jù)域是沒有用的,只有指針域有用),我將兩個頭結(jié)點均聲明為全局變量,方便函數(shù)的調(diào)用使用,下面展示學術(shù)類的源代碼,工程類的同理。</p><p><b>  源代碼(部分):</b><

73、;/p><p>  //學術(shù)類研究生普通函數(shù)的定義</p><p>  academicGraduateStudent* seekAcademicData(academicGraduateStudent *head)//查找某個學術(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 << "錯誤代碼:0x123458!" << endl;</p><p>  cerr << "異常錯誤?。ㄕ埳蠄蠊芾韱T處理)" <&

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 << "學號(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 << "輸入有誤,請重新輸入!" << 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 << "請輸入學號:" << 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 << "沒有這個數(shù)據(jù)!請重新輸入!" << 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 << "請輸入姓名:" << 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 << "沒有這個數(shù)據(jù)!請重新輸入!" << 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 << "錯誤代碼:0x123459!" << en

86、dl;</p><p>  cerr << "異常錯誤!(請上報管理員處理)" << 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)//錄入學術(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)//申請內(nèi)存失敗操作</p><p><b>  {</b></p><p>  cerr << "錯

89、誤代碼:0x123456!" << endl;</p><p>  cerr << "異常錯誤?。ㄕ埳蠄蠊芾韱T處理)" << endl;</p><p>  system("pause");</p><p><b>  exit(0);</b></p&g

90、t;<p><b>  }</b></p><p>  cout << "開始錄入數(shù)據(jù)(學號為零時結(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)//申請內(nèi)存失敗操作</p><p><b>  {</b>&l

94、t;/p><p>  cerr << "錯誤代碼:0x123457!" << endl;</p><p>  cerr << "異常錯誤?。ㄕ埳蠄蠊芾韱T處理)" << 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)//插入某個學術(shù)研究生數(shù)據(jù)<

99、;/p><p><b>  {</b></p><p>  if (head->paNext == NULL)//判斷緩存中是否有數(shù)據(jù)</p><p><b>  {</b></p><p>  cerr << "錯誤代碼:0x123458!" << e

100、ndl;</p><p>  cerr << "異常錯誤?。ㄕ埳蠄蠊芾韱T處理)" << endl;</p><p>  system("pause");</p><p><b>  exit(0);</b></p><p><b>  }</

101、b></p><p>  academicGraduateStudent *p, *q;</p><p>  cout << "請輸入一個新的數(shù)據(jù)(學術(shù)研究生)" << endl;</p><p>  p = new academicGraduateStudent;</p><p>  if

102、(p == NULL)</p><p><b>  {</b></p><p>  cerr << "錯誤代碼:0x123458!" << endl;</p><p>  cerr << "異常錯誤!(請上報管理員處理)" << 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 << "請輸入插入在哪個數(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)//刪除某個學術(shù)研究生數(shù)據(jù)</p><p><b>  {</b></p><p>  if (head->paNext == NULL)//判斷緩存中是否有數(shù)據(jù)</p><p><b>  {</b></p><p>  cerr <<

107、; "錯誤代碼:0x123458!" << endl;</p><p>  cerr << "異常錯誤?。ㄕ埳蠄蠊芾韱T處理)" << 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 << "學號(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;輸入有誤,請重新輸入!" << 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 << "請輸入學號:" << 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 << "沒有這個數(shù)據(jù)!請重新輸入!" << 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 << "請輸入姓名:" << 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 << "沒有這個數(shù)據(jù)!請重新輸入!" << endl;</p><p>  goto loopna;</p><p><b>

118、;  }</b></p><p><b>  break;</b></p><p><b>  default:</b></p><p>  cerr << "錯誤代碼:0x123459!" << endl;</p><p>  cerr &l

119、t;< "異常錯誤?。ㄕ埳蠄蠊芾韱T處理)" << 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 << "輸入有誤,請重新輸入!" << 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)//輸出學術(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 << "錯誤代碼:0x156456(鏈表中無數(shù)據(jù))" << endl;</p><p>  cerr << "請聯(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()//修改學術(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 << "錯誤代碼0x156112" << endl;</p><p>  cerr << "請聯(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 << "輸入有誤, 請重新輸入!" << 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>  文件操作是一個程序很關鍵的部分,數(shù)據(jù)是不可能長期的保存在緩存中的,所以需要對緩存中的數(shù)據(jù)存盤操作,需要注意的細節(jié)比較多(二進制文件,文本文件操作的不同,打開文件,關閉文件等等),但是只是一些細節(jié)需要注意,思維上的難度并不是很大,嚴格按照文件操作的步驟即

137、可,從內(nèi)存中將文件讀到磁盤問題相對簡單,而將磁盤中的數(shù)據(jù)讀到內(nèi)存,不光要讀,讀完還需操作,所以,建立一個單鏈表,這個鏈表不是用戶輸入數(shù)據(jù),而是讀取文件輸入數(shù)據(jù)(思想是一樣的),之后內(nèi)存中有了數(shù)據(jù),就可以進行相關的操作了,之后保存即可。</p><p><b>  源代碼(部分):</b></p><p><b>  //保存數(shù)據(jù)到磁盤</b>&l

138、t;/p><p>  void saveAcademicStudentData(academicGraduateStudent *head)//保存學術(shù)研究生數(shù)據(jù)到磁盤</p><p><b>  {</b></p><p>  //建立一個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 << "錯誤代碼0x125158" << endl;</p><p>  cerr << "請聯(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>  //建立一個dat二進制文件,方便以后讀取</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 << "錯誤代碼0x125158" << endl;</p><p>  cerr << "請聯(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論