學(xué)生成績管理系統(tǒng)課程設(shè)計報告-C++實現(xiàn)_第1頁
學(xué)生成績管理系統(tǒng)課程設(shè)計報告-C++實現(xiàn)_第2頁
學(xué)生成績管理系統(tǒng)課程設(shè)計報告-C++實現(xiàn)_第3頁
學(xué)生成績管理系統(tǒng)課程設(shè)計報告-C++實現(xiàn)_第4頁
學(xué)生成績管理系統(tǒng)課程設(shè)計報告-C++實現(xiàn)_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)C+課程設(shè)計報告課程設(shè)計題目: 學(xué)生成績管理系統(tǒng) 學(xué) 生 姓 名 : 吳 深 深 學(xué) 號: 3 專 業(yè): 軟 件 工 程 班 級: 指 導(dǎo) 教 師 : 鄧 微 2015年 6 月 27 日目 錄 TOC o 1-4 h z u 學(xué)生成績管理系統(tǒng)課程設(shè)計報告1功能需求分析學(xué)生成績管理是一個學(xué)校必不可少的部分,隨著計算機和計算機知識的普及,學(xué)生成績管理系統(tǒng)得到了更大的發(fā)展空間,通過對學(xué)生成績管理系統(tǒng)的開發(fā),可以提高校務(wù)人員的工作效率。本系統(tǒng)具有以下基本功能:1、功能菜單實現(xiàn)

2、功能選擇; 2、輸入功能:輸入學(xué)生信息,并保存到文件中;3、計算每個學(xué)生的總分與平均分并排序4、能根據(jù)學(xué)號修改學(xué)生信息5、能根據(jù)學(xué)號刪除學(xué)生信息6、查詢功能:1)能夠根據(jù)學(xué)號查詢學(xué)生信息;2)能夠根據(jù)姓名、班級查詢學(xué)生信息3)統(tǒng)計學(xué)生成績,按照班級和科目計算平均分。2總體設(shè)計根據(jù)以上功能需求,本系統(tǒng)定義了一下函數(shù),來逐步實現(xiàn)。(1)void input_student( );該函數(shù)實現(xiàn)從鍵盤中錄入學(xué)生成績,并且保存給學(xué)生類數(shù)組。(2)void rank_down( );該函數(shù)以總分對學(xué)生降序排序,該函數(shù)會從每個學(xué)生的成員函數(shù)中調(diào)用int get_sum( )函數(shù),在調(diào)用函數(shù)時,被調(diào)函數(shù)根據(jù)輸入

3、數(shù)據(jù)計算出總分并且返回給主調(diào)函數(shù)。排序以冒泡法實現(xiàn),排序完成后,再依次給每個學(xué)生的數(shù)據(jù)成員rank(名次)賦值。(3)void save_student( );在有數(shù)據(jù)后,該函數(shù)可以實現(xiàn)數(shù)據(jù)以十進制的方式保存,保存時,可以自己輸入文件名以及保存地址。(4)void rwrite_student();該函數(shù)實現(xiàn)對學(xué)生成績等信息進行修改,修改前,以學(xué)號先查找到該學(xué)生,并且輸出其詳細(xì)信息,方便操作者進行修改。(5)void delete_student();該函數(shù)能夠以學(xué)號為依據(jù),實現(xiàn)對象的刪除,并且刪除后該位置會被寫一個數(shù)據(jù)填充。(6)void serch_menu();該函數(shù)被調(diào)用后系統(tǒng)會進入查

4、看菜單,可選擇以不同的方式查看學(xué)生的成績信息。按照不同的選擇,該函數(shù)會調(diào)用一下函數(shù)。 void surch_number();該函數(shù)以學(xué)號為依據(jù)實現(xiàn)精確查找。 void surch_CLASS();能夠根據(jù)姓名、班級查詢學(xué)生信息void detial_class();該函數(shù)能夠匯總您要查詢的班級詳細(xì)情況,功能包括人數(shù),每個人都詳細(xì)情況,班級平均分,和該班級的各個科目的平均分。void subject_ave();該函數(shù)能夠計算出所有科目的平均分。(7)void open_file();該函數(shù)可以打開已經(jīng)保存的學(xué)生信息,并且顯示到屏幕上,打開后可以進行上述的各種操作。除此之外,還寫了void m

5、ain_menu();主菜單,實現(xiàn)對上述各個功能的選擇。3數(shù)據(jù)結(jié)構(gòu)的設(shè)計UML類圖數(shù)據(jù)結(jié)構(gòu)的代碼設(shè)計如下:const int N = 5000;/student sNstatic int count=N;/控制學(xué)生的操作數(shù),默認(rèn)值為N,在main中會提示改變class student/定義學(xué)生類private:string name, sex, number, CLASS;int chinese, math, english, comprehensive, sum, ave, rank;public:string get_name()/外部接口,查詢信息時用到。return name;stri

6、ng get_number()/外部接口,查詢信息時用到。return number;int get_chinese()/外部接口,分班級處理時用到。return chinese;int get_math()/外部接口,分班級處理時用到。return math;int get_english()/外部接口,分班級處理時用到。return english;int get_comprehensive()/外部接口,分班級處理時用到。return comprehensive;int get_sum()/總分是排序的依據(jù),在輸出信息和排序時會產(chǎn)生sum = chinese + math + engli

7、sh + comprehensive; return sum;int get_ave()ave = (chinese + math + english + comprehensive) / 4;return ave;string get_CLASS()return CLASS;void set_rank(int rank)/對多個學(xué)生進行排序時產(chǎn)生產(chǎn)生名次this-rank = rank;void set_Rn(int nsum, int nave, int nrank)/我把總分、平均數(shù)和名次稱為余項。/這些數(shù)據(jù)在基本數(shù)據(jù)錄入后會產(chǎn)生。sum = nsum;/提供這個外部接口用于從文件中讀取

8、這些數(shù)據(jù)ave = nave;rank = nrank;friend istream & operator (istream & in, student &cs) /重載插入符,實現(xiàn)輸入基本數(shù)據(jù)in cs.CLASS cs.number cs.sex cs.chinese cs.math cs.english prehensive;return in;friend ostream & operator (ostream & out, student &cs) /重載提取符,實現(xiàn)格式輸出詳細(xì)信息out cs.CLASS t cs.number t t cs.sex t cs.chinese t

9、cs.matht cs.english t prehensivet cs.get_sum() t cs.get_ave() t cs.rank t)和提取符()。但是11個數(shù)據(jù)成員中只有8個是是從鍵盤輸入,所以重載插入符時僅僅實現(xiàn)了8個基本數(shù)據(jù)的輸入。另外3個數(shù)據(jù)有兩個是通過調(diào)用get_ave()和get_sum()時由基本數(shù)據(jù)自動算出并返回給調(diào)取位置,另外一個排名rank是在降序排序時產(chǎn)生。所以,在重載提取符時實現(xiàn)了11個數(shù)據(jù)的格式輸出。所以文件中,每個成員有11個數(shù)據(jù),通過重載的提取符只能提取8個,另外三個暫時保存在臨時定義的sum,ave,rank中,通過對象的成員函數(shù)void set_

10、Rn(int nsum, int nave, int nrank)把剩余的三個值對象的數(shù)據(jù)成員。從而避免從文件中讀取數(shù)據(jù)時出現(xiàn)讀取錯位的現(xiàn)象。5.程序代碼 請注意參考注釋#include#include#includeusing namespace std;const int N = 5000;/student sNstatic int count=N;/控制學(xué)生的操作數(shù),默認(rèn)值為N,在main中會提示改變void mima( );/函數(shù)的聲明void input_student();void rank_down();void save_student();void rwrite_studen

11、t();void delete_student();void serch_menu();void open_file();void surch_number();void surch_CLASS();void detial_class();void subject_ave();class student/定義學(xué)生類private:string name, sex, number, CLASS;int chinese, math, english, comprehensive, sum, ave, rank;public:string get_name()/外部接口,查詢信息時用到。return

12、 name;string get_number()/外部接口,查詢信息時用到。return number;int get_chinese()/外部接口,分班級處理時用到。return chinese;int get_math()/外部接口,分班級處理時用到。return math;int get_english()/外部接口,分班級處理時用到。return english;int get_comprehensive()/外部接口,分班級處理時用到。return comprehensive;int get_sum()/總分是排序的依據(jù),在輸出信息和排序時會產(chǎn)生sum = chinese + ma

13、th + english + comprehensive; return sum;int get_ave()ave = (chinese + math + english + comprehensive) / 4;return ave;string get_CLASS()return CLASS;void set_rank(int rank)/對多個學(xué)生進行排序時產(chǎn)生產(chǎn)生名次this-rank = rank;void set_Rn(int nsum, int nave, int nrank)/我把總分、平均數(shù)和名次稱為余項。/這些數(shù)據(jù)在基本數(shù)據(jù)錄入后會產(chǎn)生。sum = nsum;/提供這個外部

14、接口用于從文件中讀取這些數(shù)據(jù)ave = nave;rank = nrank;friend istream & operator (istream & in, student &cs) /重載插入符,實現(xiàn)輸入基本數(shù)據(jù)in cs.CLASS cs.number cs.sex cs.chinese cs.math cs.english prehensive;return in;friend ostream & operator (ostream & out, student &cs) /重載提取符,實現(xiàn)格式輸出詳細(xì)信息out cs.CLASS t cs.number t t cs.sex t cs.

15、chinese t cs.matht cs.english t prehensivet cs.get_sum() t cs.get_ave() t cs.rank t endl;return out;student();student sN;/N=5000,但是學(xué)生的操作數(shù)是由count控制void mima() /密碼設(shè)置與驗證模塊string mima, mima1;ifstream mimafile(mima.txt);if (mimafile.fail()/檢驗是否設(shè)置過密碼cout 您是第一次使用本系統(tǒng),請設(shè)置密碼: mima;cout 請再輸入一次: mima1;if (mima

16、= mima1)ofstream mimafile;mimafile.open(mima.txt);mimafile mima;cout 密碼設(shè)置成功! endl;/設(shè)置密碼成功,會生成密碼內(nèi)容的文件else/當(dāng)設(shè)置密碼兩次輸入不一致,重新設(shè)置docout 兩次輸入不一致,請重新輸入: mima;cout 請再輸入一次: mima1; while (mima != mima1);ofstream mimafile;mimafile.open(mima.txt);mimafile mima;cout 密碼設(shè)置成功! endl;else/若之前設(shè)置過密碼,可以直接進入密碼驗證模塊string mi

17、ma, mima1;cout 檢驗?zāi)霸O(shè)置過密碼,請輸入密碼: mima1;mimafile mima;if (mima != mima1)int i = 2;for (; i 0; i-)cout 密碼錯誤,請重新輸入(您還有 i 次機會): mima1;if (mima1 = mima) mimafile.close();break; if (i = 0)exit(0);mimafile.close();elsemimafile.close();return ;void input_student( )/輸入學(xué)生信息system(cls);cout 請按照下面格式輸入 endl 班級t學(xué)

18、號t姓名t性別t語文t數(shù)學(xué)t英語t綜合 endl;for (int i = 0; i si;void save_student( )/保存學(xué)生信息system(cls);string filename;cout 請輸入文件名字: filename;/getline(cin, filename, n);fstream studentfile(filename, ios:out);studentfilecount;/學(xué)生的個數(shù)也會被保存到文件中,目的是方便文件讀取studentfileendl;for (int i = 0; i count; i+)studentfile si;studentfi

19、le.close();cout 數(shù)據(jù)已經(jīng)成功保存為文件filenameendl;void rwrite_student( )/修改學(xué)生成績信息system(cls);char F;string number;do/用do循環(huán)實現(xiàn)持續(xù)的修改int i = 0;cout number;for (i = 0; i count; i+)if (number = si.get_number()cout 修改前,學(xué)生信息為: endl;cout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 endl;cout si;cout 請按照下面格式輸入 endl 班級t學(xué)號t姓名t性別t語文t

20、數(shù)學(xué)t英語t綜合 si;cout 數(shù)據(jù)修改成功! = count)cout 查無此人! endl;cout F; while (F != n);void delete_student( )/刪除學(xué)生信息system(cls);char F,P;string number;doint i = 0;cout number;for (i = 0; i count; i+)if (number = si.get_number()cout 要刪除的學(xué)生信息為: endl;cout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 endl;cout si;cout 是否刪除?(輸入任意鍵

21、繼續(xù),輸入n取消本次操作。) P;if (P != n)for (; i N - 1; i+)si = si + 1;/數(shù)據(jù)刪除過程cout 數(shù)據(jù)刪除成功! endl;count-;/數(shù)據(jù)刪除后,就少了一個,計數(shù)變量自減break;cout F; while (F != n);void surch_number( ) /按照學(xué)號查找學(xué)生成績信息system(cls);char F;string number;do /用do實現(xiàn)持續(xù)刪除int i = 0;cout number;for (i = 0; i count; i+)if (number = si.get_number()cout 該學(xué)

22、生詳細(xì)信息為: endl;cout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 endl;cout si;cout 查詢結(jié)束! = count)cout 查無此人! endl;cout F; while (F != n);void surch_CLASS( )/按照班級和姓名實現(xiàn)學(xué)生信息的查找system(cls);char F;string name,CLASS;do/用do循環(huán)實現(xiàn)持續(xù)的查找int i = 0;cout 請輸入要查詢的學(xué)生班級和姓名:;cout namet class endl;cout nameCLASS;for (i = 0; i count; i

23、+)if (name = si.get_name() & CLASS=si.get_CLASS()cout 該學(xué)生詳細(xì)信息為: endl;cout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 endl;cout si;cout 查詢結(jié)束! = count)cout 查無此人! endl;cout F; while (F != n);void detial_class( )/查看班級的詳細(xì)信息system(cls);char F;string CLASS;do/用do循環(huán)實現(xiàn)持續(xù)的查看int i = 0, count = 0, chinese = 0, math = 0,

24、english = 0, comprehensive=0,ave=0;cout CLASS;cout 該班級學(xué)生的詳細(xì)情況為: endl;cout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 endl;for (i = 0; i count; i+)if (CLASS = si.get_CLASS()cout si;count = count + 1;chinese = chinese + si.get_chinese();math = math + si.get_math();english = english + si.get_english();comprehens

25、ive = comprehensive + si.get_comprehensive();ave = ave + si.get_ave();cout 該班一共: count 人。 endl;cout 其中班級平均分為: ave / count endl;cout 語文平均分為: chinese/ count endl;cout 數(shù)學(xué)平均分為: math/ count endl;cout 英語平均分為: english/ count endl;cout 綜合能力平均分為: comprehensive / count endl;cout F; while (F != n);void subject

26、_ave( ) /科目平均數(shù)system(cls);int i = 0, chinese = 0, math = 0, english = 0, comprehensive = 0, ave = 0;for (i = 0; i count; i+)chinese = chinese + si.get_chinese();math = math + si.get_math();english = english + si.get_english();comprehensive = comprehensive + si.get_comprehensive();ave = ave + si.get_

27、ave();cout 語文平均分為: chinese / N endl;cout 數(shù)學(xué)平均分為: math / N endl;cout 英語平均分為: english / N endl;cout 綜合能力平均分為: comprehensive / N endl;cout 綜合平均分為: ave / N endl;void rank_down( ) /降序排序,用冒泡法實現(xiàn)。system(cls);student s1;char F;int i = 0, j = 0;for (i=0; i count; i+)/排序for (j=0; i + j count - 1; j+)if (sj.get

28、_sum() sj + 1.get_sum()s1 = sj;sj = sj + 1;sj + 1 = s1;for (i = 0; i count; i+) /給名次變量rank賦值si.set_rank(i + 1);cout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 endl;for(i=0; icount; i+)/排列后輸出coutsi;cout 輸入任意鍵返回主菜單,輸入n結(jié)束程序運行。 F;if (F = n)exit(0);void open_file()/打開已有的學(xué)生信息文件string filename;char F;coutfilename;if

29、stream myfile(filename);if (myfile.fail()cout 文件打開失敗,請檢查輸入是否有誤或者確認(rèn)文件是否存在! endl;elsecout 班級t學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t綜合t總分t平均t名次 count;/先讀取學(xué)生個數(shù),由count控制文件讀取for(int i=0; i時,只要輸入基本數(shù)據(jù)myfilesi;myfile sum ave rank;/把這些數(shù)據(jù)返還給相應(yīng)的對象si.set_Rn(sum, ave, rank); /通過著過類接口,實現(xiàn)賦值coutsi;myfile.close();cout 輸入任意鍵返回主菜單,輸入n結(jié)束程序

30、運行。 F;if (F = n)exit(0);void serch_menu()char F;dosystem(cls);int a;cout * endl;cout * * endl;cout * 1.按照學(xué)號查詢個人 * endl;cout * 2.按照姓名和班級查詢個人 * endl;cout * 3.查詢班級詳細(xì)情況 * endl;cout * 4.查詢科目平均分 * endl;cout * 5.取消本次操作 * endl;cout * * endl;cout * endl;cout a;switch (a)case 1:surch_number(); break;case 2:su

31、rch_CLASS(); break;case 3:detial_class(); break;case 4:subject_ave(); break;case 5:break;default:cout 輸入錯誤,請核對后重新輸入 endl; break;cout 是否繼續(xù)查看數(shù)據(jù)?(輸入任意鍵繼續(xù),輸入n取消本次操作。endl如果繼續(xù),您將返回到查詢菜單。): F; while (F != n);void main_menu()system(cls);int a;cout * endl;cout * * endl;cout * 1.錄入學(xué)生信息 * endl;cout * 2.降序排序 *

32、endl;cout * 3.保存學(xué)生信息 * endl;cout * 4.根據(jù)學(xué)號修改學(xué)生信息 * endl;cout * 5.根據(jù)學(xué)號刪除學(xué)生信息 * endl;cout * 6.查尋學(xué)生信息 * endl;cout * 7.打開已有學(xué)生文件 * endl;cout * 8.退出程序 * endl;cout * * endl;cout * endl;cout a;switch(a)case 1: input_student(); break;case 2: rank_down(); break;case 3: save_student();break;case 4: rwrite_stude

33、nt(); break;case 5: delete_student(); break;case 6: serch_menu(); break;case 7: open_file(); break;case 8: exit(0); break;default:cout 輸入有誤,請核對后輸入! endl; break;int main()mima();coutcount;/輸入學(xué)生的操作數(shù)char F;do /用do循環(huán)實現(xiàn)持續(xù)輸入main_menu();system(cls);cout 是否繼續(xù)對數(shù)據(jù)操作?(輸入任意鍵繼續(xù),輸入n退出。 endl F; while (F != n);return 0;6. 運行環(huán)境該程序代碼在Windows下的 Visual Studio 2010能夠成功編譯并正常運行。在Visual C+環(huán)境下編譯會出現(xiàn)錯誤,錯誤是由fstream studentfile(filename, ios:out);造成,原因是Visual C+不支持自定義文件名的文件保存。對計算機硬件要求較低。7.運行結(jié)果(1).密碼驗證模塊,第一次運行,設(shè)置密碼,設(shè)置密碼后

溫馨提示

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

最新文檔

評論

0/150

提交評論