《C++程序課程設(shè)計(jì)報(bào)告-學(xué)生成績管理系統(tǒng).doc》由會員分享,可在線閱讀,更多相關(guān)《C++程序課程設(shè)計(jì)報(bào)告-學(xué)生成績管理系統(tǒng).doc(20頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、C+程序課程設(shè)計(jì)報(bào)告 成績查詢管理系統(tǒng)C+程序課程設(shè)計(jì)報(bào)告學(xué)院:資源與安全工程學(xué)院專業(yè)班級:采礦1401班課題:學(xué)生成績管理系統(tǒng)姓名:指導(dǎo)教師:設(shè)計(jì)時(shí)間:2015年 7月6日至7月17日目錄一、程序設(shè)計(jì)目的2二、程序功能介紹2三、程序設(shè)計(jì)21)程序結(jié)構(gòu)22)主函數(shù)流程圖43)系統(tǒng)功能流程圖5四、調(diào)試與分析61)程序調(diào)試過程72)程序的不足7五、執(zhí)行結(jié)果8六、課程設(shè)計(jì)總結(jié)8附錄:源程序代碼919一、程序設(shè)計(jì)目的將理論教學(xué)中涉及到的知識點(diǎn)貫穿起來,對不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計(jì)題目進(jìn)行綜合性應(yīng)用,對所學(xué)知識達(dá)到融會貫通的程度。通過課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)
2、該得到鍛煉:(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程C+程序設(shè)計(jì)語言的基本理論知識,理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。(2)全面考核學(xué)生所掌握的基本理論知識及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。(3)利用所學(xué)知識,開發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用C+語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。(4)對于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。(5)掌握結(jié)構(gòu)化程序設(shè)計(jì)方法,熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)方法。(6)熟練掌握C+語言的基本語法,靈活運(yùn)用各種數(shù)據(jù)類型。(7)進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。二、程序功能介
3、紹(1)數(shù)據(jù)輸入:添加學(xué)生姓名,系統(tǒng)自動(dòng)生成學(xué)號,并輸入學(xué)生成績;(2)查詢成績:通過姓名查詢成績,輸入待查學(xué)生姓名可輸出該學(xué)生成績;通過學(xué)號查詢,輸入待查學(xué)生學(xué)號,輸出該學(xué)生成績;(3)修改成績:輸入需要修改成績學(xué)生姓名,并輸入新成績;(4)輸出所有學(xué)生成績:可以將所有學(xué)生的姓名,學(xué)號,成績輸出;(5)統(tǒng)計(jì)及格及優(yōu)秀人數(shù);(6)儲存學(xué)生數(shù)據(jù);(7)清屏。三、程序設(shè)計(jì)1、程序結(jié)構(gòu)student類:定義公有成員姓名,學(xué)號,成績,和成績等級。Function類:(1)定義私有成員stu數(shù)組和計(jì)數(shù)n(2)成員函數(shù): Function ()學(xué)號計(jì)數(shù)器重置 Input()添加學(xué)生和成績并排列成績等級 Q
4、ueryByID()按學(xué)號查詢學(xué)生信息 QueryByName()按姓名查詢成績 ModifyScore()修改成績 Output()輸出所有學(xué)生成績 Tongji()統(tǒng)計(jì)及格和優(yōu)秀人士 loadin(char *filename)導(dǎo)入學(xué)生成績 saveout(char *filename)導(dǎo)出到stu.txt文件void welcome()界面函數(shù)void welcome1()輸入子界面函數(shù)void welcome2()查詢子界面函數(shù)void welcome4()輸出子界面函數(shù)int main()主函數(shù)2、主函數(shù)流程圖!(cinxuanze)YN開始Cin.clear()Cin.sync()
5、Welcome()主界面YhiSwith(choose)Case2f.loadin(tmp)NYhiSwitch(xuanze1)Case1Case1f.input()YhiNCase2Yhif.QueryByID()Case2Switch(xuanze1)YhiNf.QueryByNname()Case1Case3NYhif.ModifyScore()YhiCase2F.saveout(tmp)NYhiCase4Switch(xuanze1)NYhireturn 0NYhiYhiYhiNsystem(cls)Case0Case6return 0Case1f.output()f.tongji(
6、)Case5NNbreak3、系統(tǒng)功能流程圖輸入統(tǒng)計(jì)修改菜單程序查找顯示主程序退出初始化程序四、調(diào)試與分析1、程序調(diào)試過程初始界面輸入數(shù)據(jù):直接輸入或文件輸入查詢學(xué)生信息:按姓名查詢或?qū)W號查詢修改成績輸出所有學(xué)生成績:直接輸出或文件輸出統(tǒng)計(jì)優(yōu)秀及格人數(shù)退出系統(tǒng)清屏2、程序的不足(1)無法按照班級,年級進(jìn)行分類統(tǒng)計(jì)學(xué)生信息;(2)只適合統(tǒng)計(jì)人數(shù)較少的信息,數(shù)據(jù)太多時(shí)不易統(tǒng)計(jì)數(shù)據(jù);(3)無法對成績實(shí)現(xiàn)升序和降序排列;(4)信息不夠完善,當(dāng)有兩個(gè)人同名時(shí),我們便無法區(qū)分兩個(gè)人的信息,所以還應(yīng)該統(tǒng)計(jì)除姓名,學(xué)號之外的其它信息。五、執(zhí)行結(jié)果1、隨時(shí)添加學(xué)生姓名,系統(tǒng)自動(dòng)生成學(xué)號,并輸入學(xué)生成績;2、能夠
7、統(tǒng)計(jì)不及格、及格、優(yōu)秀人數(shù),便于管理學(xué)生信息;3、能夠輸出所有學(xué)生成績;4、隨時(shí)添加學(xué)生信息,系統(tǒng)自動(dòng)生成學(xué)號,并輸入學(xué)生成績。六、課程設(shè)計(jì)總結(jié)結(jié)束了這個(gè)盡管不夠完美的課程設(shè)計(jì)報(bào)告,我著實(shí)有很多感想和體會。首先,雖然學(xué)到了課本知識,但是到實(shí)際操作時(shí),卻不知道從何做起。然后我們上網(wǎng)查資料,問老師,問同學(xué),終于有了思路,然后我們就根據(jù)這個(gè)思路進(jìn)行下去。在一個(gè)周之后,當(dāng)們我把源代碼修改正確使之能夠正常運(yùn)行時(shí),當(dāng)意料之中的運(yùn)行結(jié)果出現(xiàn)在眼前的屏幕上時(shí),我們感到很有成就感。然而,我們在測試過程中不斷的發(fā)現(xiàn)新的問題,不斷有新的挑戰(zhàn),但是我們?nèi)匀荒托牡囊槐橐槐榈男薷?,一遍一遍的測試,最終能夠?qū)崿F(xiàn)老師布置的所
8、有要求。今天便是答辯的日期,回想起來,這次課程設(shè)計(jì)已經(jīng)接近兩個(gè)周,也許做的不完美,但這里有我們的付出和努力。在這個(gè)過程中,學(xué)到了很多。首先,要不懂就問,這樣可能事半功倍。再者,一個(gè)團(tuán)隊(duì)的團(tuán)結(jié)協(xié)作很重要,一個(gè)人可能很難做成功,但是大家團(tuán)結(jié)起來,每個(gè)人負(fù)責(zé)一個(gè)版塊,便取得了最后的成功。還有就是需要耐心,我們需要將源代碼一句一句的修改,一遍一遍的調(diào)試,直到結(jié)果正確。附錄:源程序代碼#include #include #include #include using namespace std;class studentpublic:int id;/學(xué)號string name;/姓名double che
9、ngji;/成績int lv;/及格和優(yōu)秀的標(biāo)志,優(yōu)秀的話lv=1,及格的話lv=2,不及格的話lv=3;class Function /功能類private:student stu1000;/存放學(xué)生的類數(shù)組int n;/計(jì)數(shù)器public: Function()n=0;/學(xué)號計(jì)數(shù)器重置void input()/添加學(xué)生和成績char c;while(1)char chengjifilter40;/輸入的數(shù)字轉(zhuǎn)成字符串,檢查是否合法cout正在添加學(xué)生信息.endl;coutstun.name;coutchengjifilter;stun.chengji=atoi(chengjifilter
10、);/atoi,系統(tǒng)函數(shù),字符串轉(zhuǎn)數(shù)字,如果是字母自動(dòng)按0處理cout該同學(xué)姓名為:stun.name 成績?yōu)?stun.chengjiendl;cout系統(tǒng)自動(dòng)分配學(xué)號,該同學(xué)的學(xué)號為:n+1=80 & stun.chengji=60 & stun.chengji80)stun.lv=2;else if(stun.chengji=0)stun.lv=3;elsestun.lv=4;/出現(xiàn)4就說明成績出錯(cuò)了n+;cout該同學(xué)成績輸入完畢,還需要繼續(xù)輸入嗎?(y/n)c;if(c=Y |c=y)continue;elsebreak; void QueryByID()/按學(xué)號查詢學(xué)生信息int
11、t; int isfind=0;/是否找到coutt; for(int i=0;in;i+)if(stui.id=t) /查找cout找到學(xué)號為t的同學(xué),姓名為:stui.name,成績?yōu)?stui.chengjiendl;isfind=1;if(isfind=0)cout沒有找到相應(yīng)的同學(xué),請重新查詢.endl;void QueryByName()/按姓名查詢成績string t;int isfind=0;/是否找到coutt;for(int j=0;jn;j+)/開始查找if(stuj.name=t)cout找到姓名為t的同學(xué),學(xué)號為:stuj.id,成績?yōu)?stuj.chengjiend
12、l;isfind=1;if(isfind=0)cout沒有找到相應(yīng)的同學(xué),請重新查詢.endl;void ModifyScore()/修改成績string t;int isfind=0;/是否找到coutt;for(int j=0;jn;j+)/開始查找if(stuj.name=t)/修改cout找到姓名為t的同學(xué),學(xué)號為:stuj.id,成績?yōu)?stuj.chengjiendl;cout請輸入新的姓名:;cinstuj.name;coutstuj.chengji;if(stuj.chengji=80 & stuj.chengji=60 & stuj.chengji80)stuj.lv=2;e
13、lse if(stuj.chengji=0)stuj.lv=3;elsestuj.lv=4;isfind=1;if(isfind=0)cout沒有找到相應(yīng)的同學(xué),請重新查詢.endl;void output()/輸出所有學(xué)生成績cout共有n名學(xué)生.endl;/下標(biāo)從0開始,所以要加1cout學(xué)號姓名成績endl;for(int i=0;in;i+)cout stui.id stui.name stui.chengjiendl;void tongji()/統(tǒng)計(jì)及格和優(yōu)秀人士int jige=0,youxiu=0,bujige=0;/統(tǒng)計(jì)for(int i=0;in;i+)if(stui.lv=
14、1)youxiu+;else if(stui.lv=2)jige+;else if(stui.lv=3)bujige+;cout統(tǒng)計(jì)結(jié)果:endl;cout優(yōu)秀人數(shù):youxiu 及格人數(shù):jige 不及格人數(shù):bujigeendl;void loadin(char *filename)/導(dǎo)入學(xué)生成績的函數(shù),參數(shù)為導(dǎo)入的文件名稱ifstream in;/文件輸入流in.open(filename);/打開if(in.fail()=1)/如果打開失敗coutfilename文件打開失敗!stun.idstun.namestun.chengji; /按行讀入學(xué)生信息stun.id=n+1;/判斷該
15、學(xué)生屬于哪一段if(stun.chengji=80 & stun.chengji=60 & stun.chengji80)stun.lv=2;else if(stun.chengji=0)stun.lv=3;elsestun.lv=4;/出現(xiàn)4就說明成績出錯(cuò)了in.get();/吃掉導(dǎo)入文件的最后一個(gè)回車符,否則會多讀取一行無效信息if(in.peek()=n)break;n+;cout導(dǎo)入成功!endl;in.close();void saveout(char *filename)/導(dǎo)出到stu.txt文件ofstream out;out.open(filename,ios:trunc);/
16、trunc:覆蓋方式寫入文件for(int i=0;in;i+)/導(dǎo)出outstui.id stui.name stui.chengjiendl;cout導(dǎo)出文件成功endl;void welcome()/界面函數(shù) cout*endl;cout 學(xué)生成績管理系統(tǒng) endl;cout*endl;cout*1-輸入數(shù)據(jù)*endl;cout*2-查詢學(xué)生信息*endl;cout*3-修改成績*endl;cout*4-輸出所有學(xué)生成績*endl;cout*5-統(tǒng)計(jì)及格和優(yōu)秀人數(shù)*endl;cout*6-退出系統(tǒng)*endl;cout*0-清屏*endl;void welcome1()/輸入子界面cout
17、*1-直接輸入*endl;cout*2-文件輸入*endl;void welcome2()/查詢子界面cout*1-按學(xué)號查詢*endl;cout*2-按姓名查詢*endl;void welcome4()/輸出cout*1-直接輸出*endl;cout*2-文件輸出*choose)cin.clear();cin.sync();welcome(); switch(choose) case 1:welcome1();cinchoose1;switch(choose1)case 1:f.input();break;case 2:char tmp50;cout-注意-endl;cout請保證導(dǎo)入的tx
18、t文件格式為: 姓名成績,中間空一個(gè)格,每行一個(gè)學(xué)生信息.endl;couttmp;f.loadin(tmp);/執(zhí)行導(dǎo)入break;break;case 2:welcome2();cinchoose1;switch(choose1)case 1: f.QueryByID();break;case 2: f.QueryByName();break;break;case 3:f.ModifyScore();break;case 4:welcome4();cinchoose1;switch(choose1)case 1:f.output();break;case 2:char tmp50;couttmp;f.saveout(tmp);break;case 5:f.tongji();break;case 6:return 0;break;case 0:system(cls);break;/清除屏幕指令,可以上網(wǎng)查到 return 0;