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