




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上精選優(yōu)質文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質文檔-傾情為你奉上專心-專注-專業(yè)C+課程設計報告課程設計題目: 學生成績管理系統(tǒng) 學 生 姓 名 : 吳 深 深 學 號: 3 專 業(yè): 軟 件 工 程 班 級: 指 導 教 師 : 鄧 微 2015年 6 月 27 日目 錄 TOC o 1-4 h z u 學生成績管理系統(tǒng)課程設計報告1功能需求分析學生成績管理是一個學校必不可少的部分,隨著計算機和計算機知識的普及,學生成績管理系統(tǒng)得到了更大的發(fā)展空間,通過對學生成績管理系統(tǒng)的開發(fā),可以提高校務人員的工作效率。本系統(tǒng)具有以下基本功能:1、功能菜單實現(xiàn)
2、功能選擇; 2、輸入功能:輸入學生信息,并保存到文件中;3、計算每個學生的總分與平均分并排序4、能根據(jù)學號修改學生信息5、能根據(jù)學號刪除學生信息6、查詢功能:1)能夠根據(jù)學號查詢學生信息;2)能夠根據(jù)姓名、班級查詢學生信息3)統(tǒng)計學生成績,按照班級和科目計算平均分。2總體設計根據(jù)以上功能需求,本系統(tǒng)定義了一下函數(shù),來逐步實現(xiàn)。(1)void input_student( );該函數(shù)實現(xiàn)從鍵盤中錄入學生成績,并且保存給學生類數(shù)組。(2)void rank_down( );該函數(shù)以總分對學生降序排序,該函數(shù)會從每個學生的成員函數(shù)中調用int get_sum( )函數(shù),在調用函數(shù)時,被調函數(shù)根據(jù)輸入
3、數(shù)據(jù)計算出總分并且返回給主調函數(shù)。排序以冒泡法實現(xiàn),排序完成后,再依次給每個學生的數(shù)據(jù)成員rank(名次)賦值。(3)void save_student( );在有數(shù)據(jù)后,該函數(shù)可以實現(xiàn)數(shù)據(jù)以十進制的方式保存,保存時,可以自己輸入文件名以及保存地址。(4)void rwrite_student();該函數(shù)實現(xiàn)對學生成績等信息進行修改,修改前,以學號先查找到該學生,并且輸出其詳細信息,方便操作者進行修改。(5)void delete_student();該函數(shù)能夠以學號為依據(jù),實現(xiàn)對象的刪除,并且刪除后該位置會被寫一個數(shù)據(jù)填充。(6)void serch_menu();該函數(shù)被調用后系統(tǒng)會進入查
4、看菜單,可選擇以不同的方式查看學生的成績信息。按照不同的選擇,該函數(shù)會調用一下函數(shù)。 void surch_number();該函數(shù)以學號為依據(jù)實現(xiàn)精確查找。 void surch_CLASS();能夠根據(jù)姓名、班級查詢學生信息void detial_class();該函數(shù)能夠匯總您要查詢的班級詳細情況,功能包括人數(shù),每個人都詳細情況,班級平均分,和該班級的各個科目的平均分。void subject_ave();該函數(shù)能夠計算出所有科目的平均分。(7)void open_file();該函數(shù)可以打開已經(jīng)保存的學生信息,并且顯示到屏幕上,打開后可以進行上述的各種操作。除此之外,還寫了void m
5、ain_menu();主菜單,實現(xiàn)對上述各個功能的選擇。3數(shù)據(jù)結構的設計UML類圖數(shù)據(jù)結構的代碼設計如下:const int N = 5000;/student sNstatic int count=N;/控制學生的操作數(shù),默認值為N,在main中會提示改變class student/定義學生類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)/對多個學生進行排序時產(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)格式輸出詳細信息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ù)有兩個是通過調用get_ave()和get_sum()時由基本數(shù)據(jù)自動算出并返回給調取位置,另外一個排名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;/控制學生的操作數(shù),默認值為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/定義學生類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)/對多個學生進行排序時產(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)格式輸出詳細信息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,但是學生的操作數(shù)是由count控制void mima() /密碼設置與驗證模塊string mima, mima1;ifstream mimafile(mima.txt);if (mimafile.fail()/檢驗是否設置過密碼cout 您是第一次使用本系統(tǒng),請設置密碼: mima;cout 請再輸入一次: mima1;if (mima
16、= mima1)ofstream mimafile;mimafile.open(mima.txt);mimafile mima;cout 密碼設置成功! endl;/設置密碼成功,會生成密碼內容的文件else/當設置密碼兩次輸入不一致,重新設置docout 兩次輸入不一致,請重新輸入: mima;cout 請再輸入一次: mima1; while (mima != mima1);ofstream mimafile;mimafile.open(mima.txt);mimafile mima;cout 密碼設置成功! endl;else/若之前設置過密碼,可以直接進入密碼驗證模塊string mi
17、ma, mima1;cout 檢驗您之前設置過密碼,請輸入密碼: 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( )/輸入學生信息system(cls);cout 請按照下面格式輸入 endl 班級t學
18、號t姓名t性別t語文t數(shù)學t英語t綜合 endl;for (int i = 0; i si;void save_student( )/保存學生信息system(cls);string filename;cout 請輸入文件名字: filename;/getline(cin, filename, n);fstream studentfile(filename, ios:out);studentfilecount;/學生的個數(shù)也會被保存到文件中,目的是方便文件讀取studentfileendl;for (int i = 0; i count; i+)studentfile si;studentfi
19、le.close();cout 數(shù)據(jù)已經(jīng)成功保存為文件filenameendl;void rwrite_student( )/修改學生成績信息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 修改前,學生信息為: endl;cout 班級t學號t姓名t性別t語文t數(shù)學t英語t綜合t總分t平均t名次 endl;cout si;cout 請按照下面格式輸入 endl 班級t學號t姓名t性別t語文t
20、數(shù)學t英語t綜合 si;cout 數(shù)據(jù)修改成功! = count)cout 查無此人! endl;cout F; while (F != n);void delete_student( )/刪除學生信息system(cls);char F,P;string number;doint i = 0;cout number;for (i = 0; i count; i+)if (number = si.get_number()cout 要刪除的學生信息為: endl;cout 班級t學號t姓名t性別t語文t數(shù)學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( ) /按照學號查找學生成績信息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 該學
22、生詳細信息為: endl;cout 班級t學號t姓名t性別t語文t數(shù)學t英語t綜合t總分t平均t名次 endl;cout si;cout 查詢結束! = count)cout 查無此人! endl;cout F; while (F != n);void surch_CLASS( )/按照班級和姓名實現(xiàn)學生信息的查找system(cls);char F;string name,CLASS;do/用do循環(huán)實現(xiàn)持續(xù)的查找int i = 0;cout 請輸入要查詢的學生班級和姓名:;cout namet class endl;cout nameCLASS;for (i = 0; i count; i
23、+)if (name = si.get_name() & CLASS=si.get_CLASS()cout 該學生詳細信息為: endl;cout 班級t學號t姓名t性別t語文t數(shù)學t英語t綜合t總分t平均t名次 endl;cout si;cout 查詢結束! = count)cout 查無此人! endl;cout F; while (F != n);void detial_class( )/查看班級的詳細信息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 該班級學生的詳細情況為: endl;cout 班級t學號t姓名t性別t語文t數(shù)學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ù)學平均分為: 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ù)學平均分為: 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學號t姓名t性別t語文t數(shù)學t英語t綜合t總分t平均t名次 endl;for(i=0; icount; i+)/排列后輸出coutsi;cout 輸入任意鍵返回主菜單,輸入n結束程序運行。 F;if (F = n)exit(0);void open_file()/打開已有的學生信息文件string filename;char F;coutfilename;if
29、stream myfile(filename);if (myfile.fail()cout 文件打開失敗,請檢查輸入是否有誤或者確認文件是否存在! endl;elsecout 班級t學號t姓名t性別t語文t數(shù)學t英語t綜合t總分t平均t名次 count;/先讀取學生個數(shù),由count控制文件讀取for(int i=0; i時,只要輸入基本數(shù)據(jù)myfilesi;myfile sum ave rank;/把這些數(shù)據(jù)返還給相應的對象si.set_Rn(sum, ave, rank); /通過著過類接口,實現(xiàn)賦值coutsi;myfile.close();cout 輸入任意鍵返回主菜單,輸入n結束程序
30、運行。 F;if (F = n)exit(0);void serch_menu()char F;dosystem(cls);int a;cout * endl;cout * * endl;cout * 1.按照學號查詢個人 * endl;cout * 2.按照姓名和班級查詢個人 * endl;cout * 3.查詢班級詳細情況 * 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.錄入學生信息 * endl;cout * 2.降序排序 *
32、endl;cout * 3.保存學生信息 * endl;cout * 4.根據(jù)學號修改學生信息 * endl;cout * 5.根據(jù)學號刪除學生信息 * endl;cout * 6.查尋學生信息 * endl;cout * 7.打開已有學生文件 * 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;/輸入學生的操作數(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.運行結果(1).密碼驗證模塊,第一次運行,設置密碼,設置密碼后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度燒烤店品牌合作及店鋪轉讓合同
- 2025年度借條補充協(xié)議:個人創(chuàng)業(yè)貸款與政府補貼銜接
- 2025農(nóng)村住房安全責任追究及賠償合同
- 2025年商務、清洗服務項目建議書
- 2025年運維軟件項目建議書
- 液體制劑機械項目績效評估報告
- 環(huán)境規(guī)制對企業(yè)綠色技術創(chuàng)新影響的研究
- H-CEUS聯(lián)合SWE對轉移性淋巴結的診斷效能分析
- 冷庫排管攀爬機器人自主運動規(guī)劃方法研究
- 高效率濾波功率放大器的研究與設計
- 真空滅弧室基本知識課件
- 工程EPC總承包項目安全生產(chǎn)管理辦法
- 川教版四年級(上、下冊)生命生態(tài)與安全教案及教學計劃附安全知識
- 05臨水臨電臨時設施安全監(jiān)理細則
- 工齡認定文件
- “小學品德與生活教學關鍵問題實踐研究”課題研究中期報告
- 采購入庫單模板
- 教師招聘考試歷年真題(物理)及答案
- GB/T 36800.2-2018塑料熱機械分析法(TMA)第2部分:線性熱膨脹系數(shù)和玻璃化轉變溫度的測定
- GB/T 31989-2015高壓電力用戶用電安全
- GB/T 15566.6-2007公共信息導向系統(tǒng)設置原則與要求第6部分:醫(yī)療場所
評論
0/150
提交評論