《面向對象程序設計》課程設計學生成績管理系統_第1頁
《面向對象程序設計》課程設計學生成績管理系統_第2頁
《面向對象程序設計》課程設計學生成績管理系統_第3頁
《面向對象程序設計》課程設計學生成績管理系統_第4頁
《面向對象程序設計》課程設計學生成績管理系統_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向對象程序設計課程設計09計應1 09821122 謝燕清一 課題設計內容、具備的功能(一)設計內容1.性質 本課程是學生在學習完程序設計基礎、面向對象程序設計課程后,為提高學生使用面向對象的語言解決實際問題的能力設置的一門實踐性課程,是計算機科學與技術專業(yè)計算機應用方向的必修課。2.目的 本課程實驗教學的目的是:1) 使學生通過實踐環(huán)節(jié)深入理解和掌握課堂教學內容,進一步加深理解面向對象的基本理論,掌握基本方法、基本技術。2) 通過設計一個功能比較完整的,有實際應用價值的應用軟件,使學生了解采用面向對象技術開發(fā)軟件的全部過程,掌握采用面向對象技術開發(fā)軟件的方法。提高學生使用面向對象方法,和面

2、向對象的語言解決實際問題的能力。3) 通過本課程設計,為后續(xù)數據庫系統原理與應用數據結構編譯原理等課程打下扎實的專業(yè)基礎。3.任務 學生成績管理系統,系統存儲以下信息:1) 學生基本信息和成績;2) 學生的人數。4.要求1) 根據題目要求,對問題進行需求調查和分析,識別類和對象,合理設計類和對象;2) 合理設計程序結構,系統各項功能要求在函數中實現。在主函數中設計菜單,通過菜單調用這個函數;3) 輸入輸出要求由提取運算符和插入運算符的重載函數實現;公用過程盡可能設計成函數或函數模板;4) 設計過程中必須考慮程序的健壯性,在關鍵的地方必須要有容錯處理。(二)具備的功能系統功能:1.系統初始化 包

3、括上述文件的創(chuàng)建和讀取(二進制或ascii文件);2.增加學生 新增加學生信息和成績;3.刪除學生 根據學號刪除相應學生信息;4查詢 根據學號,查詢相應學生信息;5.排序 根據學生學號、姓名、成績對學生信息排序,并顯示;6.修改 修改指定學號的學生數據。二 模塊(函數)的劃分、各模塊(函數)的功能、采用的自定義的數據類型(一) 模塊(函數)的劃分1.類的定義:student.h1) 定義抽象類personprotected: int id; /學號char name10; /姓名public:virtual bool operator運算符重載virtual bool operator=(pe

4、rson &)=0; /=運算符重載2) 定義派生數據類student,基類為person類。private:int score4; /成績void swapdata(student *); /交換數據public:student(int =0,char* =null,int* =null); /構造函數bool operator運算符重載bool operator=(person &); /=運算符重載friend ofstream& operator(ofstream&,student*); /(ifstream&,student*); /運算符重載從文件輸入friend ostream_

5、withassign& operator(ostream_withassign&,student*);/(istream_withassign&,student*);/運算 符重載從鍵盤輸入friend class list; /list為友元類3) 定義設計結點類nodeprivate: student *stup; /指向學生對象指針node *prev,*next; /指向前后結點指針public:node(); /構造函數node(student *); /構造函數node(node &); /復制構造函數node(); /析構函數friend class list; /list為友元

6、類4)定義帶有頭結點鏈表類list,私有數據成員為node *head,*tail分別,指向鏈表頭尾:private:void initlist(); /初始化函數public:list(); /構造函數list(); /析構函數void clearlist(); /清空鏈表node *findid(int &); /根據學號尋找學生所在結點void insert(node *); /插入一個學生node *createnode(student *); /建立一個學生結點void add(); /增加一個學生void update(); /修改學生成績void delete(); /刪除一個學

7、生void query(); /查找一個學生void sortid(); /按學號排序void sortscore(); /按學生總成績排序void savebin(); /以二進制形式保存數據void printlist(); /顯示鏈表void printtitle(); /顯示標題void printone(student *); /顯示一個學生數據2.student類的實現:student.cpp3.node類的實現:node.cpp4.list類的實現:list.cpp5.主函數:main.cpp(二) 各模塊(函數)的功能1.實現類和函數聲明;2.實現派生類student的各函數;

8、3.實現結點類node的各函數;4.實現結點類list的各函數。程序結束運行前,調用savebin()函數以二進制形式保存學生數據到文件student.dat中;5. 設計主函數。主函數中顯示功能菜單,通過菜單調用類的成員函數實現系統各項功能。(三) 采用自定義的數據類型自定義的數據類型:student.h#ifndef studata_h#define studata_h#includeint getid();class list;class person /抽象類protected:int id;char name10;public:virtual bool operator=(perso

9、n &)=0;class student:public personint score4;void swapdata(student *);public:student(int =0,char* =null,int* =null);bool operator=(person &);friend ofstream& operator(ifstream&,student*);friend ostream_withassign& operator(istream_withassign&,student*);friend class list;class nodestudent *stup;node

10、*prev,*next;public:node();node(student *);node(node &);node();friend class list;class listnode *head,*tail;void initlist();public:list();list();void clearlist();node *findid(int &);void insert(node *);node *createnode(student *);void add();void update();void delete();void query();void sortid();void

11、sortscore();void savebin();void printlist();void printtitle();void printone(student *);#endif三 程序運行流程圖開始輸入選項輸入選項!=end保存數據savebin()增加學生、修改成績、刪除學生、查詢數據、顯示數據、按學號排序、按總成績排序注:在主函數中,輸入選項,判斷是否等于end,如等于end則保存數據;如不等于則實行switch中增加學生、修改成績、刪除學生、查詢數據、顯示數據、按學號排序、按總成績排序。開始增加學生學號是否相同拋出異常顯示鏈表保存數據結束注:增加學生,判斷學號是否有相同,有相同

12、是拋出異常,無相同則繼續(xù)增加,并顯示鏈表、保存數據。開始顯示鏈表修改數據是否存在拋出異常修改并顯示列表是否存在拋出異常是否刪除最后一個結點nodep-next-prev=nodep-prev;nodep-prev-next=nodep-next;nodep-prev-next=nodep-next;tail=nodep-prev刪除結點并顯示剩余鏈表刪除學生結束查詢學生是否存在拋出異常顯示列表按學號排序按總成績排序注:運行程序,先實現鏈表數據,再按執(zhí)行。修改成績:輸入學號,判斷是否存在,存在則對該學生的成績進行修改;不存在則拋出異常。刪除學生:輸入學號,判斷是否存在,存在則繼續(xù)判斷要求刪除的學

13、生的結點所在位置,根據學生的結點所在位置不同,做不同的操作;不存在則拋出異常。查詢數據:輸入學號,判斷是否存在,存在則顯示該學生信息;不存在則拋出異常。顯示數據:顯示鏈表中所有的數據。按學號排序:比較學號大小,學號小的在前,大的在后。按總成績排序:比較總成績大小,總成績大的在前,總成績小的在后。四 程序設計過程、調試過程中所用的測試用例、測試方法,程序運行的結果(一) 程序設計過程1. student.cpp中所要設計的程序:bool student:operator (person & per) return score3=(person & per) return score3=(stud

14、ent&)per).score3; /學生設計void student:swapdata(student * stup) /學生數據交換(學生設計) student t=*this; *this=*stup; *stup=t;ofstream & operator(ofstream & out,student * stup) /運算符重載輸出至文件 out.write(char *)stup,sizeof(student); /學生設計 return out;ostream_withassign & operator(ostream_withassign& out,student* stup)

15、 /運算符重載輸出至標準文件 int i; /學生設計 outidtname t; for(i=0;i4;i+) outscoreit; outstup-score3=0; for(i=0;i3;i+) coutscorenodep-stup-scorei; nodep-stup-score3+=nodep-stup-scorei; printtitle(); printone(nodep-stup);void list:delete() /刪除一個學生/ student * stup; /學生設計 node * nodep; int id=getid(); if(nodep=findid(i

16、d)=null) throw(1); if(tail!=nodep) nodep-next-prev=nodep-prev; /刪除中間的結點 nodep-prev-next=nodep-next; else nodep-prev-next=nodep-next; /刪除最后一個結點 tail=nodep-prev; delete nodep; printlist();void list:query() /查詢學生數據/ student * stup; /學生設計 node *nodep; int id=getid(); if(nodep=findid(id)=null) throw(1);

17、printtitle(); printone(nodep-stup);void list:insert(node * nodep) /在鏈表尾插入一個學生 tail-next =nodep; /學生設計 nodep-prev=tail; tail=nodep; void list:sortscore() /按總成績排序 node * nodef,*nodel=tail; /學生設計 if(head!=tail) while(head-next!=nodel) nodef=head-next; while(nodef!=nodel) if(*(nodef-stup)next-stup) node

18、f-stup-swapdata(nodef-next-stup); nodef=nodef-next; nodel=nodel-prev; printlist(); void list:savebin() /鏈表數據保存在二進制文件 node *nodep=head-next; /學生設計 ofstream outstudent; if(head!=tail) outstudent.open(student.dat,ios:binary); while(nodep) outstudentstup; nodep=nodep-next; outstudent.close();void list:p

19、rintlist() /顯示鏈表中數據 node* nodep=head-next; if(head!=tail) printtitle(); /學生設計 while(nodep!=null) printone(nodep-stup); nodep=nodep-next; else coutno studentendl; 4. main.cpp中要設計的程序:case update: /修改學生成績 try /學生設計 ls.update(); catch(int) coutwrong!this score is nullendl; break;case delete: /刪除一個學生 try

20、 /學生設計 ls.delete(); catch(int) coutwrong!this student is nullendl; break;case query: /查詢一個學生數據 try /學生設計 ls.query(); catch(int) coutwrong!this data is nullendl; break;case sortscore: /根據總成績排序 ls.sortscore(); /學生設計(二) 調試過程中所用的測試用例1. 自動生成測試函數:無須手工編輯測試代碼,建立、編輯測試用例在測試用例編輯器中進行。2. 測試用例可視化編輯: 使用測試用例編輯器建立、編

21、輯測試用例,vu自動生成代碼,通常只須填入輸入輸出的數值。3. 測試用例可用點操作符訪問成員變量,還可以用同樣的語法調用成員函數。 (三) 測試方法源程序編制完成后,首先由c+編譯程序build編譯成.obj文件,再由連接程序連接成可執(zhí)行文件。在編譯時,如果源程序存在語法錯誤(errors),則系統不允許連接,直到改正了所有的語法錯誤后,才能進行連接。另外,在編譯時還可能存在另一類錯誤,即警告性錯誤(warnings),這類錯誤一般不影響程序的連接。選擇編譯菜單(build)對編譯好的源程序進行編譯,若程序編譯沒有發(fā)現錯誤,則該窗口顯示“”,這是可以進行程序的連接;若編譯后存在語法錯誤或警告,

22、該窗口中則顯示兩類錯誤的個數,并列出相應的錯誤位置和原因。改正編譯期錯誤的方法和一般原則為:1. 改正錯誤是一般從第一個錯誤開始,然后依次高正后續(xù)的錯誤。因為前面錯誤的出現,往往會導致編譯系統在編譯時錯位,把本來正確的語句認為是錯的,也可能把某些語句的錯誤掩蓋掉。所以當改正當前的錯誤后,可能會使錯誤量減少很多,也可能增加很多;2. 根據情況,每改正一個或幾個錯誤后,應重新編譯一下,然后再從第一個錯誤進行改錯,知道所有錯誤都被 改正過來。實踐中發(fā)現,往往很小的程序在執(zhí)行時也會出現錯誤。當一個程序可以被連接成功,但執(zhí)行時卻存在不正常現象,如不能得到預期的運行結果或出現死機等,而一下子很難熬出出錯原

23、因時,可以采取單步跟蹤執(zhí)行命令。單步跟蹤執(zhí)行命令:單步跟蹤執(zhí)行程序,能夠清楚地看到程序的一步步執(zhí)行過程,從而判斷源程序的執(zhí)行流程是否與事先設計的流程一致,從中發(fā)現造成死循環(huán)或死機的原因所在。程序調試完畢,或想取消程序的調試狀態(tài)回到編輯狀態(tài),可以選擇集成環(huán)境調試(debug),即能夠達到目的。(四) 程序運行的結果程序運行后的菜單顯示“1:add student”界面“2:update student”界面“3:delete student”界面“4:query student”界面“5:display student”界面“6:sort student by no”界面“7:sort stud

24、ent by score”界面 “8:保存數據”界面五 在課程設計中遇到的問題和解決的方法,還沒有能解決的問題(一)遇到的問題:1. 設計刪除一個學生的程序后,在程序運行過程中,刪除了所有學生的信息,僅顯示標題,沒有其他學生的信息?同時在刪除學生時,若刪除最后一個學生,則出現提示終止程序?答:(1)刪除一個學生,不是指僅僅刪除這個學生,還包括刪除結點。(2)在設計刪除結點的同時,還要考慮刪除的是中間的結點還是最后一個結點,即ifelse對應,根據刪除結點位置的不同設計相應的程序才行。2. 在修改學生成績和查詢學生數據設計程序過程中,在編譯后顯示無錯誤,但有警告,但在繼續(xù)運行程序中,修改學生成績

25、和查詢學生數據不能執(zhí)行?答:編譯后無錯誤即可運行程序,但若想正確執(zhí)行程序,則需要修改源程序,直至源程序既無錯誤又無警告才能實現程序的正常運行及顯示結果。3. 數據交換如何設計?答:void student:swapdata(student * stup) /學生數據交換student t=*this;*this=*stup;*stup=t;要實現swap數據交換,一定要定義一個中間量。這里要求對*this指針的靈活使用。4總成績比較大小,為什么編譯后顯示score無定義?答:若直接寫per.score3,則顯示無定義。因為score在person類里沒定義,它是定義在student類中的,所以要寫成(student&)per).score3才能保證編譯無錯誤。5插入運算符重載輸出至標準文件的程序設計?答: ostream_withassign& operator(ostream_withassign& out,student* stup) /運算符重載輸出至標準文件 int i; outidtname t; for(i=0;i4;i+) outscoreit;outendl; return out; 使程序運行后顯示的標題是:id name score1 score2 score3 score(二)

溫馨提示

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

評論

0/150

提交評論