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

下載本文檔

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

文檔簡介

1、<p>  C++課程設計報告書</p><p>  題目:學生成績管理系統(tǒng)</p><p>  專 業(yè):信息與計算科學</p><p><b>  班 級: </b></p><p><b>  學 號: </b></p><p>  學生成績管

2、理系統(tǒng)課程設計報告</p><p><b>  摘要:</b></p><p>  本系統(tǒng)主要用于對學生的成績進行管理。通過本系統(tǒng),可以將各個學生的成績記錄輸入到系統(tǒng)中,保存到文件,便于查閱和相關管理。此外,該系統(tǒng)還能實現(xiàn)對學生成績記錄的顯示,查詢以及插入或刪除學生的成績記錄等功能。</p><p><b>  問題描述</b&

3、gt;</p><p>  編寫一個簡單的學生成績管理系統(tǒng)。學生成績管理系統(tǒng)有若干學生成績記錄組成,每個記錄由學號、姓名、性別和成績四部分組成,學號不超過11個字符,姓名不超過21個字符,性別為’m’(male)或’f’(female),成績?yōu)閐ouble型數(shù)據(jù)。該系統(tǒng)具有以下功能:</p><p>  程序開始執(zhí)行時顯示如下版權信息和主菜單:</p><p>  

4、*******學生成績管理系統(tǒng)*************</p><p>  *1.添加學生成績記錄 </p><p>  *2.顯示學生成績記錄 </p><p>  *3.查找學生成績記錄</p><p>  * 4.刪除學生成績記錄 </p><p>  * 5.保存學生成績記錄</p>

5、<p>  * 6.加載學生成績記錄</p><p>  * 7.退出學生成績管理系統(tǒng)</p><p>  ************************************</p><p><b>  請輸入(1~7):</b></p><p>  通過鍵盤輸入數(shù)字1~7后,程序能夠執(zhí)行相應的功能,

6、執(zhí)行完后回到上述主菜單繼續(xù)等待用戶輸入,輸入數(shù)字7后退出程序。</p><p>  選擇“添加學生成績記錄”后,輸入要插入記錄的位置。按程序提示依次輸入學號,姓名,性別,成績,插入記錄成功。</p><p>  選擇“顯示學生成績記錄”,顯示學生成績表中已有的學生記錄的個數(shù),并顯示出各個學生記錄的相關信息。</p><p>  選擇“查找學生成績記錄”,按提示輸入要

7、查找的學生的學號,輸入學號,若該學號存在,則輸出相應的學生記錄,如該學號不存在,則按任意鍵返回主菜單。</p><p>  選擇“刪除學生成績記錄”,按提示輸入要刪除的學生的學號,輸入學號,若改學號存在,則刪除相應的學生記錄,如果該學號不存在,則按任意鍵返回主菜單。</p><p>  選擇“保存學生成績記錄”,系統(tǒng)會將已有的學生記錄保存在默認的文件名為fname.txt的文件中。<

8、/p><p>  選擇“加載學生成績記錄”,系統(tǒng)會提示輸入文件名,輸入默認的文件名為fname.txt,則可將文件中的相關信息導出。</p><p>  選擇“退出學生成績管理系統(tǒng)”,按任意鍵退出系統(tǒng)。</p><p><b>  解決方案</b></p><p>  這是一個很實際的編程實例。編程要求很詳細,內容也比較多,

9、有一定難度。首先,學生成績記錄是一個復雜的數(shù)據(jù)結構,至少應包括學號,姓名,性別和成績。所以,必須建立一個類student,用來記錄學號,姓名,性別和成績。此外還得建立一個類stuscore,用來記錄多個學生的成績記錄。</p><p>  建立類學生類student,它至少包括學號number,姓名name,性別sex,成績chengji。具體如下:</p><p>  class stu

10、dent</p><p><b>  {</b></p><p><b>  public:</b></p><p>  char name[21]; //姓名</p><p>  char number[11]; //學號</p><p>  char

11、sex; //性別</p><p>  double chengji; //成績</p><p>  student *next; //類指針,用來指向下一個記錄</p><p>  student();</p><p>  void init(string &Name,string &Number,char Sex,d

12、ouble Chengji); //輸入學生成績記錄</p><p>  virtual ~student();</p><p><b>  };</b></p><p>  函數(shù)init(string &Name,string &Number,char Sex,double Chengji)用于輸入學生記錄,相當于一個注冊。

13、其具體實現(xiàn)如下:</p><p>  void student::init(string &Name,string &Number,char Sex,double Chengji)</p><p><b>  {</b></p><p><b>  int len;</b></p><p

14、>  len=Name.length();</p><p>  if(len>20)len=20;</p><p>  Name.copy(name,len,0);</p><p>  name[len]=0;</p><p>  len=Number.length();</p><p>  if(len&

15、gt;10)len=10;</p><p>  Number.copy(number,len,0);</p><p>  number[len]=0;</p><p>  sex=((sex=='m')?'m':'f');</p><p>  chengji=Chengji;</p>

16、<p><b>  }</b></p><p>  建立學生成績記錄類stuscore,該類是學生成績記錄的集合。其成員函數(shù)則是問題中要求的添加、顯示、查找、刪除、保存、導出等各種操作。改類具體如下:</p><p>  class stuscore </p><p><b>  {</b></p&g

17、t;<p>  student* head;</p><p><b>  public:</b></p><p>  bool add_record();//添加學生成績記錄</p><p>  void display_record();//顯示學生成績記錄</p><p>  int length();

18、//學生成績記錄個數(shù)</p><p>  bool delete_record();//刪除學生成績記錄</p><p>  void save_record();//保存學生成績記錄</p><p>  void load_record();//加載學生成績記錄</p><p>  bool find_record();//查找學生成績記錄

19、</p><p>  stuscore();</p><p>  virtual ~stuscore();</p><p><b>  };</b></p><p>  現(xiàn)在就要編寫各個功能的函數(shù)實體了:</p><p>  添加學生成績記錄add_record(),建立一個鏈表:</p&g

20、t;<p>  bool stuscore::add_record()</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  int j=1;</b></p><p>  string Name;&l

21、t;/p><p>  string Number;</p><p><b>  char Sex;</b></p><p>  double Chengji;</p><p>  student *newnode,*current,*previous;</p><p>  current=previo

22、us=head;</p><p>  cout<<"請輸入插入的位置:";</p><p><b>  cin>>i;</b></p><p>  if(i<=0||i>length()+1)</p><p><b>  {</b></p

23、><p>  cout<<"輸入的位置不正確!";</p><p>  return false;</p><p><b>  }</b></p><p>  cout<<"請輸入學號:";</p><p>  cin>>Nu

24、mber;</p><p>  cout<<"請輸入姓名:";</p><p>  cin>>Name;</p><p>  cout<<"請輸入性別:";</p><p><b>  cin>>Sex;</b></p>

25、<p>  cout<<"請輸入成績:";</p><p>  cin>>Chengji;</p><p>  newnode=new student();</p><p>  newnode->init(Name,Number,Sex,Chengji);</p><p>  ne

26、wnode->next=null;</p><p>  if(!newnode)</p><p><b>  {</b></p><p>  cout<<"內存已滿!";</p><p>  return false;</p><p><b>  }

27、</b></p><p><b>  if(i==1)</b></p><p><b>  { </b></p><p>  newnode->next=head;</p><p>  head=newnode;</p><p>  return true

28、;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while(current&&j<i)</p><p><b>  {&

29、lt;/b></p><p>  previous=current;</p><p>  current=current->next;</p><p><b>  j++;</b></p><p><b>  }</b></p><p>  newnode->

30、;next=current;</p><p>  previous->next=newnode;</p><p>  return true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  顯示學生成績記錄displ

31、ay_record(),具體實現(xiàn)如下:</p><p>  void stuscore::display_record()</p><p><b>  {</b></p><p>  student*current;</p><p>  current=head;</p><p>  cout&l

32、t;<"表中有"<<length()<<"條記錄!\n";</p><p>  if(length())</p><p><b>  {</b></p><p>  cout<<setiosflags(ios::left)<<setw(15)<&

33、lt;"學號"<<setw(15)<<"姓名"<<setw(12)<<"性別"<<setw(5)<<"成績"<<endl;</p><p>  while(current)</p><p><b>  {</b&

34、gt;</p><p>  cout<<current;</p><p>  current=current->next;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b&

35、gt;</p><p>  另外,對<<運算符進行了重載,這樣就可以直接用cout輸出學生成績記錄,函數(shù)重載如下:</p><p>  ostream&operator<<(ostream&output,const student *addr)</p><p><b>  {</b></p>

36、<p>  output<<setiosflags(ios::left)<<setw(15)<<addr->number<<setw(15)<<addr->name<<setw(12)<<addr->sex<<setw(5)<<addr->chengji<<endl;</p&g

37、t;<p>  return output;</p><p><b>  }</b></p><p>  查找學生成績記錄find_record(),具體實現(xiàn)如下:</p><p>  bool stuscore::find_record()</p><p>  {student *current,*pr

38、evious;</p><p>  string Number;</p><p>  cout<<"請輸入要查找的學生的學號:";</p><p>  cin>>Number;</p><p>  current=previous=head;</p><p>  while(

39、current)</p><p><b>  {</b></p><p>  if(current->number==Number)</p><p><b>  {</b></p><p>  cout<<setiosflags(ios::left)<<setw(15)

40、<<"學號"<<setw(15)<<"姓名"<<setw(12)<<"性別"<<setw(5)<<"成績"<<endl;</p><p>  cout<<current;</p><p>  return

41、 true;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  previous=current;</p><p>  current=current->

42、;next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(!current)</p><p><b>  {</b></p><p>  cout<<"沒有找到該學生!&

43、quot;;</p><p>  return false;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  刪除學生記錄delete_record(),具體實現(xiàn)如下:</

44、p><p>  bool stuscore::delete_record()</p><p><b>  {</b></p><p><b>  string s;</b></p><p>  student*current,*previous;</p><p>  curren

45、t=previous=head;</p><p>  cout<<"成績表中有"<<length()<<"個學生成績記錄"<<endl;</p><p>  if(!length())</p><p><b>  {</b></p><p

46、>  cout<<"學生成績表已空!\n";</p><p>  return false;</p><p><b>  }</b></p><p><b>  else{</b></p><p>  cout<<"請輸入要刪除的學生記錄的

47、學號:";</p><p><b>  cin>>s;</b></p><p>  while(current)</p><p><b>  {</b></p><p>  if(current->number==s)</p><p><b&

48、gt;  {</b></p><p>  if(current==head)</p><p><b>  {</b></p><p>  head=head->next;</p><p>  delete current;</p><p>  cout<<"

49、刪除成功!";</p><p>  return true;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  previous->next=

50、current->next;</p><p>  delete current;</p><p>  cout<<"刪除成功!";</p><p>  return true;</p><p><b>  }</b></p><p><b>  }&

51、lt;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  previous=current;</p><p>  current=current->next;</p><p><b>  }&

52、lt;/b></p><p><b>  }</b></p><p>  if(!current)</p><p><b>  {</b></p><p>  cout<<"沒有找到該學號所對應的學生記錄!";</p><p>  ret

53、urn false; </p><p><b>  }</b></p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  保存學生成績記錄save_record(),

54、具體實現(xiàn)如下:</p><p>  void stuscore::save_record()</p><p><b>  {</b></p><p>  ofstream file;</p><p>  student*current=head;</p><p>  file.open("

55、;./fname.txt",ios::out);</p><p><b>  if(!file)</b></p><p><b>  {</b></p><p>  cout<<"打開文件失敗!";</p><p>  cin.get();</p>

56、;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while(current)</p><p><b>  {</b></p><p

57、>  if(file&&!file.eof())</p><p>  file.write((char*)current,sizeof(*current));</p><p>  current=current->next;</p><p><b>  }</b></p><p>  cout

58、<<"保存完成!";</p><p>  file.close();</p><p><b>  }</b></p><p><b>  }</b></p><p>  加載學生成績記錄load_record(),具體實現(xiàn)如下:</p><p>

59、;  void stuscore::load_record()</p><p><b>  {</b></p><p>  ifstream file;</p><p>  char fname[20];</p><p>  student *n;</p><p>  n=new student(

60、);</p><p>  cout<<"請輸入要打開的文件名(fname.txt):";</p><p>  cin>>fname;</p><p>  file.open(fname,ios::in);</p><p><b>  if(!file)</b></p>

61、;<p><b>  {</b></p><p>  cout<<"文件打開失敗!";</p><p>  cin.get();</p><p><b>  }</b></p><p><b>  else</b></p>

62、;<p><b>  {</b></p><p>  cout<<setiosflags(ios::left)<<setw(21)<<"姓名"<<setw(11)<<"學號"<<setw(5)<<"性別"<<setw(5)&

63、lt;<"成績"<<endl;</p><p>  while(file&&file.peek()!=EOF)</p><p><b>  {</b></p><p>  file.read((char*)n,sizeof(*n));</p><p>  cout&l

64、t;<n<<endl;</p><p><b>  }</b></p><p>  file.close();</p><p><b>  }</b></p><p><b>  }</b></p><p>  計算學生成績記錄的個數(shù)l

65、ength(),具體實現(xiàn)如下:</p><p>  int stuscore::length()</p><p><b>  {</b></p><p><b>  int j=0;</b></p><p>  student*current;</p><p>  curre

66、nt=head;</p><p>  while(current)</p><p>  {current=current->next;</p><p><b>  j++;</b></p><p><b>  }</b></p><p><b>  retur

67、n j;</b></p><p><b>  }</b></p><p><b>  程序運行結果:</b></p><p><b>  主菜單界面 :</b></p><p><b>  添加學生成績記錄:</b></p>&l

68、t;p><b>  顯示學生成績記錄:</b></p><p>  按照①所示再添加幾個學生成績記錄,顯示結果為:</p><p><b>  查找學生成績記錄:</b></p><p><b>  刪除學生成績記錄:</b></p><p>  刪除記錄后再顯示學生成績

69、記錄:</p><p><b>  保存學生成績記錄:</b></p><p><b>  加載學生成績記錄:</b></p><p><b>  退出學生成績系統(tǒng):</b></p><p><b>  課程設計總結</b></p><

70、p>  這是一個綜合性較強,很實際的一個編程實例。剛學C++時候,感覺類和對象還挺有意思的,剛接觸到這個題目時,覺得應該沒什么大問題吧,因為,我自認為一些基本知識點都已經掌握了。可是,真的當我動手編程的時候,才發(fā)現(xiàn)并沒有想象中的那么簡單。單個知識點是弄清了,但是,將所有的知識點綜合起來運用時,就碰到了各種各樣的問題了。有時候,一個錯誤得找好久,才能發(fā)現(xiàn)。</p><p>  本系統(tǒng)的重點就是要會建立兩個類。

71、一個是學生類student,用來存放一個學生的成績記錄,相當于一個結構體的功能吧。另一個類是學生成績記錄系統(tǒng)類stuscore,該類用來存放多個學生的成績記錄。難點就是stuscore類里的各個功能的實現(xiàn)??偟膩碚f,添加,顯示,查找,這三個功能比較容易,但是,刪除,保存,加載這三個功能就需要花點心思了,可能是平時用的比較少吧,生疏了??梢娭挥型ㄟ^平時多加練習,才能有助于自己鞏固知識點。</p><p>  最后想

72、說的是,調試程序真的很關鍵。調試程序需要較大的耐心??赡苷{試程序的時間比自己編寫整個程序的時間還要長,下的工夫還要深,但這是一個程序員必須了解,也必須接受的事實。有好幾次,幾個錯誤讓我很是頭疼啊,很想刪了,重新來過,可是最后發(fā)現(xiàn),還是得有耐心去調試程序。</p><p>  通過這個實驗的練習,我也學到了很多東西,特別是加深了對類和對象理解和應用方面,也很謝謝老師給我的幫助。</p><p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論