課程設(shè)計(jì)小型學(xué)生成績(jī)管理系統(tǒng)C_第1頁(yè)
課程設(shè)計(jì)小型學(xué)生成績(jī)管理系統(tǒng)C_第2頁(yè)
課程設(shè)計(jì)小型學(xué)生成績(jī)管理系統(tǒng)C_第3頁(yè)
課程設(shè)計(jì)小型學(xué)生成績(jī)管理系統(tǒng)C_第4頁(yè)
課程設(shè)計(jì)小型學(xué)生成績(jī)管理系統(tǒng)C_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高級(jí)程序設(shè)計(jì)實(shí)踐 (C+)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)內(nèi)容: 小型學(xué)生成績(jī)管理系統(tǒng)_專業(yè)班級(jí): _學(xué) 號(hào): _姓 名: XXXXXXX_日 期: _Preface 目 錄一、 系統(tǒng)描述對(duì)程序的總體分析和描述系統(tǒng)的基本功能,為用戶提供程序使用指南。二、 功能模塊結(jié)構(gòu)詳細(xì)解析模塊的劃分以及各模塊之間的相互關(guān)系。三、 主要模塊算法說(shuō)明解析復(fù)雜模塊的算法實(shí)現(xiàn)思路,并為算法提供偽代碼及示意圖。四、 運(yùn)行結(jié)果用戶界面的設(shè)計(jì)以及輸入輸出數(shù)據(jù)的詳細(xì)描述以及分析,以及各功能模塊下的屏幕截圖。五、 課程設(shè)計(jì)總結(jié)課程設(shè)計(jì)中遇到的問(wèn)題,解決問(wèn)題的過(guò)程與體會(huì)、課程設(shè)計(jì)的收獲、對(duì)程序開(kāi)打的認(rèn)識(shí)與思考六、 參考文獻(xiàn)主要參考文獻(xiàn)附錄

2、 程序源代碼Chapter 1系統(tǒng)描述此程序?yàn)樾⌒蛯W(xué)生成績(jī)管理系統(tǒng),能夠?qū)崿F(xiàn)對(duì)學(xué)生的管理、成績(jī)錄入增刪以及對(duì)學(xué)生成績(jī)的總體分析,并且支持文件管理系統(tǒng),能夠?qū)W(xué)生信息保存在文件之中。具體課題要求以下為具體的課程要求以及該程序所實(shí)現(xiàn)的功能的詳細(xì)描述,從而方便用戶選擇最適合自己的系統(tǒng):小型學(xué)生成績(jī)管理系統(tǒng)1、需要處理的基礎(chǔ)數(shù)據(jù)² 學(xué)生基本信息:如班級(jí)、學(xué)號(hào)、姓名、性別、年齡、宿舍號(hào)碼、電話號(hào)碼等。² 學(xué)生選修課程的基本信息:課程編號(hào)、課程名稱、考試成績(jī)、平時(shí)成績(jī)、綜合成績(jī)、學(xué)分、重修否等。2、系統(tǒng)的基本功能² 數(shù)據(jù)的錄入:如錄入學(xué)生的基本信息,以及該學(xué)生選修課程的基本信

3、息;² 數(shù)據(jù)的修改:如修改指定學(xué)號(hào)、或者指定姓名的學(xué)生信息,或者修改其選修課程信息;² 數(shù)據(jù)的插入:插入某個(gè)學(xué)生信息;² 數(shù)據(jù)的查詢:如按學(xué)號(hào)查詢、按姓名查詢等;² 數(shù)據(jù)的刪除:如刪除指定學(xué)號(hào)、或者指定姓名的學(xué)生及其選修課程信息;² 平均成績(jī)的計(jì)算:計(jì)算每個(gè)學(xué)生各門功課的平均成績(jī),并按平均成績(jī)從高到低的次序輸出學(xué)生信息;² 列出不及格學(xué)生清單(學(xué)號(hào)、姓名、不及格的課程和成績(jī))。² 考慮用文件把數(shù)據(jù)保存起來(lái)(可選)。具體來(lái)說(shuō),此程序提供了以下功能:1. 添加學(xué)生,并輸入其基本信息及其成績(jī)信息。(此程序可以區(qū)分不同學(xué)生信息,防止

4、學(xué)生學(xué)號(hào)沖突)。2. 修改學(xué)生信息,包括修改學(xué)生基本信息以及課程信息,為學(xué)生添加或刪減、修改課程成績(jī)信息,方便統(tǒng)計(jì)學(xué)生成績(jī)。3. 刪除學(xué)生,能夠?qū)W(xué)生從數(shù)據(jù)庫(kù)中刪除,方便管理。4. 瀏覽學(xué)生信息,提供專門模塊對(duì)學(xué)生信息進(jìn)行具體瀏覽從而方便修改信息。5. 搜索學(xué)生,能夠從學(xué)生的基本信息出發(fā)對(duì)學(xué)生進(jìn)行搜索,并找出所有符合條件的學(xué)生。6. 學(xué)生成績(jī)分析,能夠單獨(dú)對(duì)學(xué)生成績(jī)進(jìn)行分析,也可以對(duì)整體水平進(jìn)行分析,從而得到學(xué)生排名或者不及格學(xué)生列表。7. 支持文件操作,能夠?qū)W(xué)生信息保存在文件之中,從而實(shí)現(xiàn)不同文件保存不同班級(jí)、年級(jí)、院系的需求。用戶使用指南本節(jié)提供用戶使用指南,程序中也有足夠的用戶使用說(shuō)明

5、,本節(jié)只是總結(jié)性的介紹并附加一些細(xì)節(jié)解釋:一、 打開(kāi)文件打開(kāi)程序后會(huì)出現(xiàn)以下界面,提醒用戶輸入正確的數(shù)據(jù)庫(kù)文件名以打開(kāi)學(xué)生數(shù)據(jù)庫(kù),在范例中我們的數(shù)據(jù)庫(kù)名為l.dat,程序名為design.exe。只需要在FILE NAME: 后面輸入l.dat就可以打開(kāi)此數(shù)據(jù)庫(kù)文件。如果還沒(méi)有數(shù)據(jù)庫(kù)文件,可以直接輸入一個(gè)不重復(fù)的文件名,程序會(huì)詢問(wèn)您是否創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)文件,此時(shí)輸入大寫(xiě)或者小寫(xiě)的Y即可創(chuàng)建新的數(shù)據(jù)庫(kù)文件,您可以在根目錄中看到此文件。二、 主界面打開(kāi)文件成功后,進(jìn)入本程序的主界面。主界面為所有功能的窗口,一共有八個(gè)選項(xiàng),對(duì)應(yīng)程序的八個(gè)主要功能1. Insert插入學(xué)生2. Modify修改學(xué)生

6、信息3. Delete刪除學(xué)生4. Display查看學(xué)生信息5. Search搜索學(xué)生6. Grade Analysis學(xué)生成績(jī)分析7. About.關(guān)于8. Exit退出系統(tǒng)用戶可通過(guò)輸入1-8的數(shù)字進(jìn)入相應(yīng)的功能之中,以下將對(duì)這些功能進(jìn)行一一介紹。三、 插入學(xué)生輸入1并回車,進(jìn)入插入學(xué)生功能模塊根據(jù)提示輸入學(xué)生的基本信息:班級(jí)、學(xué)號(hào)、姓名、年齡、性別、宿舍號(hào)、電話、課程信息等。注意,不能輸入學(xué)號(hào)相同的學(xué)生的信息,如果出現(xiàn)學(xué)號(hào)相同的現(xiàn)象,程序會(huì)輸出錯(cuò)誤提示:從而添加失敗,并顯示相沖突的學(xué)生的基本信息,以方便用戶核對(duì)相關(guān)數(shù)據(jù)的輸入。四、 修改學(xué)生信息回到主界面后,輸入2并回車進(jìn)入修改學(xué)生信息

7、模塊:程序顯示已存在于數(shù)據(jù)庫(kù)中的學(xué)生的學(xué)號(hào)與姓名信息以方便用戶輸入正確的學(xué)生學(xué)號(hào)以方便修改。當(dāng)輸入正確的學(xué)號(hào)并回車后,程序?qū)@示此學(xué)生信息并詢問(wèn)是否修改,輸入大寫(xiě)或小寫(xiě)的Y后程序進(jìn)入修改界面:在此處數(shù)據(jù)輸入中,輸入-1可表示不修改相關(guān)數(shù)據(jù),使用原有數(shù)據(jù),如:此處的班級(jí)、學(xué)號(hào)、年齡、寢室號(hào)、電話都未修改,而姓名被改為PPT、性別被改為男性。(注意:在年齡處輸入U(xiǎn)表示不修改)。程序還可以修改、刪除或添加課程數(shù)據(jù):此處程序?qū)⑦x修課信息一一列出并詢問(wèn)是否修改、刪除該信息,輸入Y修改此項(xiàng)課程,輸入D將刪除此課程信息,輸入N將保留此課程信息并不作任何修改。在課程修改時(shí),同樣輸入-1表示使用默認(rèn)值,不對(duì)數(shù)據(jù)

8、進(jìn)行任何修改。當(dāng)程序詢問(wèn):時(shí),輸入Y可以添加課程信息。五、 刪除學(xué)生在主界面,輸入3并回車,進(jìn)入刪除學(xué)生模塊:輸入正確的學(xué)號(hào)即可(否則程序提示錯(cuò)誤),然后程序會(huì)主動(dòng)詢問(wèn)您是否刪除此學(xué)生信息,并列出此學(xué)生全部信息,輸入Y從而確認(rèn)刪除此學(xué)生。當(dāng)輸入的學(xué)號(hào)有誤時(shí),程序會(huì)如下提示您:按下任意鍵可以返回主界面。六、 查看學(xué)生信息在主界面輸入4并回車,可以進(jìn)入查看學(xué)生信息模塊。輸入正確的學(xué)號(hào)可以查詢學(xué)生信息,程序會(huì)打印此學(xué)生全部信息。七、 查找學(xué)生在主菜單輸入5并回車進(jìn)入查找學(xué)生模塊:此模塊類似于插入學(xué)生信息模塊,在此輸入基本信息,也可通過(guò)輸入-1來(lái)表明不確認(rèn)此關(guān)鍵字從而進(jìn)行模糊查找(性別處應(yīng)輸入U(xiǎn)來(lái)表示

9、未知性別)。當(dāng)查找到了符合條件的人時(shí),程序會(huì)立即顯示出來(lái):按下任意鍵程序會(huì)繼續(xù)查找下一個(gè)符合條件的人,直到出現(xiàn)此界面:當(dāng)程序未查找到符合條件的人時(shí)也會(huì)出現(xiàn)以上界面。八、 學(xué)生成績(jī)分析主界面輸入6并回車進(jìn)入學(xué)生成績(jī)分析模塊。輸入相應(yīng)的學(xué)號(hào)可進(jìn)行單獨(dú)學(xué)生成績(jī)分析。輸入_sort命令,可以對(duì)所有學(xué)生的平均成績(jī)進(jìn)行排序:輸入_analysis命令,可以對(duì)整體成績(jī)進(jìn)行分析,列出各門用戶輸入分?jǐn)?shù)段內(nèi)的所有學(xué)生信息:九、 關(guān)于關(guān)于界面顯示程序設(shè)計(jì)時(shí)的相關(guān)信息:十、 退出程序選擇8并回車以退出程序,程序會(huì)詢問(wèn)您是否保存相關(guān)數(shù)據(jù)到文件之中,輸入Y保存,N放棄。Chapter 2功能模塊結(jié)構(gòu)本節(jié)介紹此程序的功能模

10、塊介紹,并提供詳細(xì)的解析。本程序涉及三個(gè)類:1. cCurriculum類 管理并記錄學(xué)生課程信息2. cStudent類管理學(xué)生信息,其中包括學(xué)生的所有課程信息以及學(xué)生的基本資料信息等等3. cFile類管理文件的開(kāi)關(guān)、輸入以及輸出。另外,程序還包括以下全局變量、全局常量與全局函數(shù)為程序提供必要的支持:Chapter 3主要模塊算法說(shuō)明本程序采用數(shù)組來(lái)存儲(chǔ)數(shù)據(jù),每個(gè)學(xué)生的數(shù)據(jù)存儲(chǔ)在studentsMAX_LENGTH 的數(shù)組之中,studentsMAX_LENGTH 數(shù)組是一個(gè)cStudent類的數(shù)組,每個(gè)cStudent類中都包括一個(gè)bool型的flag標(biāo)記,以表明這個(gè)數(shù)據(jù)是否已經(jīng)被刪除,

11、也就是說(shuō),在此程序中刪除一個(gè)學(xué)生數(shù)據(jù)的實(shí)質(zhì)是將此數(shù)據(jù)所在的類中的flag變量置為false;而添加一個(gè)學(xué)生數(shù)據(jù)的實(shí)質(zhì)是將學(xué)生放在studentsMAX_LENGTH數(shù)組中尚未利用的空間中的最前一個(gè)坐標(biāo)位置之中,即studentstot中。程序用tot記錄studentsMAX_LENGTH中最后一個(gè)被利用的位置的下一個(gè)位置坐標(biāo),而count記錄實(shí)際存儲(chǔ)學(xué)生的人數(shù)。在進(jìn)行學(xué)生平均成績(jī)排序時(shí),程序使用的是選擇排序,它對(duì)數(shù)據(jù)比較少時(shí)是非常有效的,以下是選擇排序的偽代碼:for i=1 to A.length-1max=i;for j=i+1 to A.lengthif Amax<Ajmax=j

12、;swap Amax with Ai本程序采用標(biāo)記法來(lái)記錄數(shù)據(jù)有一個(gè)好處,用戶可以很方便的找回誤刪的數(shù)據(jù),另一方面也可以減低刪除時(shí)移動(dòng)所帶來(lái)的運(yùn)行時(shí)間。程序的查找功能采用全部匹配,對(duì)于用戶輸入-1(即使用默認(rèn)值)的數(shù)據(jù)程序直接跳過(guò),而其他數(shù)據(jù),程序?qū)⑼暾ヅ?,?duì)于不一致的數(shù)據(jù),程序?qū)⒅苯犹^(guò),這些功能在SearchStudents()函數(shù)中實(shí)現(xiàn)。該函數(shù)接受四個(gè)參數(shù),第一個(gè)參數(shù)為一個(gè)cStudents類數(shù)據(jù),其中包括了需要匹配的數(shù)據(jù),第二個(gè)數(shù)據(jù)為引用傳遞,返回查找到的學(xué)生的坐標(biāo),最后兩個(gè)數(shù)據(jù)為查找范圍,從beg查找到end坐標(biāo)。Chapter 4運(yùn)行結(jié)果此程序在Visual Studio 200

13、5 以及 Dev-C+ 4.992 上通過(guò)編譯并能在 Windows 7 以及 Windows XP 上正常運(yùn)行。Chapter 5課程設(shè)計(jì)總結(jié)通過(guò)這一次課程設(shè)計(jì),我熟練了如何編寫(xiě)大型的應(yīng)用程序,這一個(gè)程序超過(guò)了1000行,面向?qū)ο蟪绦蛟O(shè)計(jì)的思想對(duì)編寫(xiě)這種大型程序非常有效,能夠減少隨著程序代碼的一行一行增長(zhǎng)所帶來(lái)的混亂與錯(cuò)誤。在這一次課程設(shè)計(jì)中,我學(xué)會(huì)了如何調(diào)試程序,隨著程序的行數(shù)增加,各種錯(cuò)誤也會(huì)隨之出現(xiàn),所以要掌握一定的DEBUG技巧,我使用打印相關(guān)數(shù)據(jù)的靜態(tài)分析技術(shù)發(fā)現(xiàn)了一些錯(cuò)誤,并且修改了它們。另一方面,我在這一次課程設(shè)計(jì)中也遇到了一些不解的問(wèn)題,在之前創(chuàng)建的項(xiàng)目中出現(xiàn)運(yùn)行時(shí)錯(cuò)誤,但是

14、代碼并沒(méi)有問(wèn)題,而且使用其他編譯器編譯也沒(méi)有出現(xiàn)類似錯(cuò)誤,于是我重新創(chuàng)建項(xiàng)目,將代碼直接復(fù)制從而解決了此問(wèn)題,但是最終的原因還是令我不解。Chapter 6參考文獻(xiàn)1. The C+ Programming Language2. The C Programming Language (2nd Edition)3. The C+ Primer (4th Edition)4. Introduction to Algorithms (3rd Edition)5. Algorithms in C6. The Art of Computer Programming (Volume 2.)附 錄程序源代碼

15、#include <iostream>#include <cstdlib>using std:cin;using std:cout;using std:endl;const int MAX_LENGTH = 50;const char UNDEFSTRMAX_LENGTH = "-1"const int UNDEF=-1;int tot=0;int count=0;enum eGender MALE, FEMALE, UNDEFINED;class cCurriculumprivate:char curriIDMAX_LENGTH;char curr

16、iNameMAX_LENGTH;int examGrade; /考試成績(jī)int classGrade; /平時(shí)成績(jī)int finalGrade; /綜合成績(jī)intcredit;/學(xué)分bool retake;/是否重修public:bool flag;cCurriculum();cCurriculum();inline void SetCurriID(const char dataMAX_LENGTH)strcpy(curriID, data);inline void GetCurriID (char dataMAX_LENGTH) conststrcpy(data, curriID);inli

17、ne void SetCurriName(const char dataMAX_LENGTH)strcpy(curriName, data);inline void GetCurriName(char dataMAX_LENGTH) conststrcpy(data, curriName);inline void SetExamGrade(const int data)examGrade=data;CalculateFinalGrade();inline int GetExamGrade() constreturn examGrade;inline void SetClassGrade(con

18、st int data)classGrade=data;CalculateFinalGrade();inline int GetClassGrade() constreturn classGrade;inline void SetFinalGrade(const int data)finalGrade=data;inline int GetFinalGrade() constreturn finalGrade;inline void SetCredit(const int data)credit=data;inline int GetCredit() constreturn credit;in

19、line void SetRetake(const bool data)retake=data;inline int GetRetake() constreturn retake;inline bool DidNotPass() const return (finalGrade<60 ? true : false);inline int CalculateFinalGrade()finalGrade=(int) (examGrade * 0.7 + classGrade * 0.3);return finalGrade;void InputCurriculumsData();void O

20、utputCurriculumsData() const;cCurriculum:cCurriculum()SetCurriID(UNDEFSTR);SetCurriName(UNDEFSTR);SetExamGrade(UNDEF);SetClassGrade(UNDEF);SetFinalGrade(UNDEF);SetCredit(UNDEF);SetRetake(false);cCurriculum:cCurriculum()SetCurriID(UNDEFSTR);SetCurriName(UNDEFSTR);SetExamGrade(UNDEF);SetClassGrade(UND

21、EF);SetFinalGrade(UNDEF);SetCredit(UNDEF);SetRetake(false);void cCurriculum:InputCurriculumsData()cout << "Curriculum ID: "char tmp1MAX_LENGTH;cin >> tmp1;SetCurriID(tmp1);cout << endl;cin.clear();cout << "Curriculum Name: "cin >> tmp1;SetCurriName(t

22、mp1);cout << endl;cin.clear();cout << "Exam Grade: "int tmp2;cin >> tmp2;SetExamGrade(tmp2);cout << endl;cin.clear();cout << "Class Grade: "cin >> tmp2;SetClassGrade(tmp2);cout << endl;cin.clear();/*cout << "Final Grade: "

23、 << CalculateFinalGrade() << endl << endl;*/CalculateFinalGrade();cout << "Credits: "cin >> tmp2;SetCredit(tmp2);cout << endl;cin.clear();cout << "Retake? (Y or N)" << endl << ": "char tmp3;cin >> tmp3;if(tmp3=

24、'Y' | tmp3='y')SetRetake(true);elseSetRetake(false);cin.clear();cout <<endl;void cCurriculum:OutputCurriculumsData() constchar tmp1MAX_LENGTH;GetCurriID(tmp1);cout << "Curriculum ID: " << tmp1 << endl;GetCurriName(tmp1);cout << "Curriculum

25、 Name: " << tmp1 << endl;/cout << "DEBUG"<<endl;cout << "Exam Grade: " << GetExamGrade() << endl;cout << "Class Grade: " << GetClassGrade() << endl;cout << "Final Grade: " << GetFinal

26、Grade() << endl;cout << "Credits: " << GetCredit() << endl;cout << "Retake: " << (GetRetake() ? "Yes" : "No") << endl;cout <<endl;class cStudentprivate:int classNum;/班級(jí)char stuNumMAX_LENGTH;/學(xué)號(hào)char nameMAX_LENGTH

27、;/姓名eGender gender;/性別int age;/年齡int dorm;/宿舍號(hào)char telephoneMAX_LENGTH;/電話號(hào)cCurriculum curriculumMAX_LENGTH; /選修課程int curriNum;public:bool flag;inline void SetClassNum(const int data)classNum=data;inline int GetClassNum() constreturn classNum;inline void SetStuNum(const char dataMAX_LENGTH)strcpy(st

28、uNum, data);inline void GetStuNum(char dataMAX_LENGTH) conststrcpy(data, stuNum);inline void SetName(const char dataMAX_LENGTH)strcpy(name, data);inline void GetName(char dataMAX_LENGTH) conststrcpy(data, name);inline void SetGender(const eGender data)gender=data;inline eGender GetGender() const ret

29、urn gender;inline void SetAge(const int data)age=data;inline int GetAge() const return age;inline void SetDorm(const int data)dorm=data;inline int GetDorm() const return dorm;inline void SetTelephone(const char dataMAX_LENGTH)strcpy(telephone, data);inline void GetTelephone(char dataMAX_LENGTH) cons

30、t strcpy(data, telephone);void InputStudentsData(bool NoCurriInput=false);void OutputStudentsData() const;void AddCurriculum(const cCurriculum &data);void DeleteCurriculum(const int index);inline cCurriculum GetCurriculum(const int index, bool &state) constif(index>=1 && index<

31、=GetCurriNum() && curriculumindex.flag=true)state=true;return curriculumindex; else state=false;return curriculumindex;inline void SetCurriculum(const int index, cCurriculum &data)curriculumindex=data;inline void SetCurriNum(const int data)curriNum=data;inline int GetCurriNum() constretu

32、rn curriNum;int AverageScore() const;cStudent();cStudent();void CopyInfo(cStudent &data); studentsMAX_LENGTH;cStudent:cStudent()flag=false;classNum=UNDEF;strcpy(stuNum, UNDEFSTR);strcpy(name, UNDEFSTR);gender=UNDEFINED;age=UNDEF;dorm=UNDEF;strcpy(telephone, UNDEFSTR);curriNum=0;cStudent:cStudent

33、()flag=false;classNum=UNDEF;strcpy(stuNum, UNDEFSTR);strcpy(name, UNDEFSTR);gender=UNDEFINED;age=UNDEF;dorm=UNDEF;strcpy(telephone, UNDEFSTR);curriNum=0;void cStudent:InputStudentsData(bool NoCurriInput)cout << endl << "Class Number: "cin >> classNum;cin.clear();cout <

34、< endl << "Student ID: "cin >> stuNum;cin.clear();cout << endl << "Name: "cin >> name;cin.clear();loop:cout << endl << "Gender (M or F or U): "char selection;cin >> selection;if(selection='M' | selection='m&

35、#39;)gender=MALE;else if(selection='F' | selection='f')gender=FEMALE;else cout << endl << "Gender is unknown!" << endl;gender=UNDEFINED;cin.clear();cout << endl << "Age: "cin >> age;cin.clear();cout << endl << "

36、Dormitory Number: "cin >> dorm;cin.clear();cout << endl << "Telephone Number: "cin >> telephone;cin.clear();if(NoCurriInput=false)cout << endl << "How many curriculum does the student take? " << endl << ": "int sum=0;

37、cin >> sum;cin.clear();for(int i=1; i<=sum; +i)cout << endl << "Input curriculum " << i << "'s information" << endl;/*curriculumi.InputCurriculumsData();curriculumi.flag=true;*/cCurriculum tt;tt.InputCurriculumsData();this->AddCurricu

38、lum(tt);cout << "Here is the basic information of the " << i << " curriculum:" << endl;curriculumi.OutputCurriculumsData();cout << endl;this->curriNum=sum;void cStudent:OutputStudentsData() constcout << endl << "Class Number: &quo

39、t; << classNum;cout << endl << "Student ID: "<< stuNum;cout << endl << "Name: " << name;cout << endl << "Gender: " << (gender=MALE ? "MALE" : (gender=FEMALE ? "FEMALE" : "UNKNOWN")

40、;cout << endl << "Age: " << age;cout << endl << "Dormitory Number: " <<dorm;cout << endl << "Telephone Number: " << telephone << endl; char tstrMAX_LENGTH;for(int i=1; i<=GetCurriNum(); +i)/cout <<&quo

41、t;DEBUG i="<<i <<endl;if(curriculumi.flag=false) continue;curriculumi.GetCurriID(tstr);cout << endl << "The curriculum " << tstr << "'s information" << endl;curriculumi.OutputCurriculumsData();cout << endl;cout <<endl

42、 << endl;void cStudent:CopyInfo(cStudent &data)char tmp1MAX_LENGTH, tmp2MAX_LENGTH;this->flag = true;if(data.GetClassNum()!=UNDEF)this->SetClassNum(data.GetClassNum();/*this->GetStuNum(tmp1);data.GetStuNum(tmp2);if(strcmp(tmp2, UNDEFSTR)!=0)this->SetStuNum(tmp2);*/User cannot c

43、opy ID numberthis->GetName(tmp1);data.GetName(tmp2);if(strcmp(tmp2, UNDEFSTR)!=0)this->SetName(tmp2);if(data.GetGender()!=UNDEFINED)this->SetGender(data.GetGender();if(data.GetAge()!=UNDEF)this->SetAge(data.GetAge();if(data.GetDorm()!=UNDEF)this->SetDorm(data.GetDorm();this->GetTel

44、ephone(tmp1);data.GetTelephone(tmp2);if(strcmp(tmp2, UNDEFSTR)!=0)this->SetTelephone(tmp2);/CurriculumSetCurriNum(data.GetCurriNum();for(int i=1; i<=GetCurriNum(); +i)bool state;curriculumi=data.GetCurriculum(i, state);void cStudent:AddCurriculum(const cCurriculum &data)+curriNum;curriculu

45、mcurriNum=data;curriculumcurriNum.flag=true;void cStudent:DeleteCurriculum(const int index)if(index>=1 && index<=curriNum)curriculumindex.flag=false;int cStudent:AverageScore() constint totCredit=0, totScore=0;for(int i=1; i<=GetCurriNum(); +i)totCredit += curriculumi.GetCredit();to

46、tScore +=(curriculumi.GetCredit() * curriculumi.GetFinalGrade();return (int)(totScore / totCredit);class cFileprivate:char fileNameMAX_LENGTH;public:FILE *hFile;void SetFileName(const char dataMAX_LENGTH);void GetFileName(char dataMAX_LENGTH) const;void ReadFile();void WriteFile();FILE *fileOpen(con

47、st char *path, const char *mode);cFile();cFile();void cFile:SetFileName(const char data)strcpy(fileName, data);void cFile:GetFileName(char dataMAX_LENGTH) const strcpy(data, fileName);void cFile:ReadFile()fread(&tot, sizeof(int), 1, hFile);fread(&count, sizeof(int), 1, hFile);for(int i=1; i&

48、lt;=tot; +i)fread(&(studentsi.flag), sizeof(bool), 1, hFile);int tmp;fread(&tmp, sizeof(int), 1, hFile);studentsi.SetClassNum(tmp);char tstrMAX_LENGTH;fread(tstr, sizeof(char), MAX_LENGTH, hFile);studentsi.SetStuNum(tstr);fread(tstr, sizeof(char), MAX_LENGTH, hFile);studentsi.SetName(tstr);e

49、Gender etmp;fread(&etmp, sizeof(eGender), 1, hFile);studentsi.SetGender(etmp);fread(&tmp, sizeof(int), 1, hFile);studentsi.SetAge(tmp);fread(&tmp, sizeof(int), 1, hFile);studentsi.SetDorm(tmp);fread(tstr, sizeof(char), MAX_LENGTH, hFile);studentsi.SetTelephone(tstr);fread(&tmp, sizeo

50、f(int), 1, hFile);studentsi.SetCurriNum(tmp);for(int j=1; j<=studentsi.GetCurriNum(); +j)bool state;cCurriculum cct;fread(&state, sizeof(bool), 1, hFile);cct.flag=state;fread(tstr, sizeof(char), MAX_LENGTH, hFile);cct.SetCurriID(tstr);fread(tstr, sizeof(char), MAX_LENGTH, hFile);cct.SetCurriN

51、ame(tstr);fread(&tmp, sizeof(int), 1, hFile);cct.SetExamGrade(tmp);fread(&tmp, sizeof(int), 1, hFile);cct.SetClassGrade(tmp);fread(&tmp, sizeof(int), 1, hFile);cct.SetFinalGrade(tmp);fread(&tmp, sizeof(int), 1, hFile);cct.SetCredit(tmp);fread(&state, sizeof(bool), 1, hFile);cct.S

52、etRetake(state);studentsi.SetCurriculum(j, cct);/cout << studentsi.flag << " " << studentsi.GetClassNum() << " " << tstr << " " << etmp << endl; system("pause");/*/fread(&tot, sizeof(tot), 1, hFile);fread(&am

53、p;tot, sizeof(tot), 1, hFile);fread(&count, sizeof(count), 1, hFile);fread(students, sizeof(cStudent), tot+1, hFile);cout << tot << " " << count<< endl;system("pause");students1.OutputStudentsData();system("pause");cout <<endl <<

54、students1.flag << " " <<students1.GetCurriNum() << endl; system("pause");*/void cFile:WriteFile()/*cout << tot << " " << count<< endl;system("pause");students1.OutputStudentsData();system("pause");cout <<endl << students1.flag << " " <<students1.GetCurriNum() << endl; system("pause");fwrite(&tot, sizeof(tot)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論