




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中南民族大學計算機科學學院課程設計報告課 程 面向對象程序設計語言題 目 成績統計系統年 級 2014級 專 業 軟件工程 學 生 學 號 指導教師 2015年6 月 8日中南民族大學計算機科學學院本科課程設計任 務 書設計名稱: 成績統計系統 指導教師: 下達時間: 2015-5-8學生姓名: 學 號: 專 業: 軟件工程一、 課程設計的基本要求根據所學知識,編寫指定題目的C+語言程序,并規范地完成課程設計報告。通過課程設計,加深對C+面向對象程序設計課程所學知識的理解,熟練掌握和鞏固C+語言的基本知識和語法規范,掌握C+語言的基礎知識,理解面向對象系統的封裝性、繼承性和多態性;熟練使用C語
2、言中的函數、數組、指針、鏈表和字符串等基本知識;掌握類的定義、標準String類和向量; 理解掌握友元函數和重載操作符,動態數組;理解掌握繼承和多態性;掌握模版的使用;能夠進行程序調試過程中的異常處理;進一步掌握利用C+進行類的定義和操作方法;進一步掌握類的繼承和派生方法;進一步理解虛函數和多態;綜合利用上述知識,學習設計并編寫面向對象的C+簡單應用程序;培養解決復雜任務功能分解方法(自頂向下逐步求精、模塊化設計、信息隱藏等)。學會編制結構清晰、風格良好、數據結構適當的C+語言程序,從而具備利用計算機編程分析解決綜合性實際問題的初步能力。具體要求如下:1、 采取模塊化方式進行程序設計,要求程序
3、的功能設計、數據結構設計及整體結構設計合理。學生也可根據自己對題目的理解增加新的功能模塊(視情況可另外加分)。2、 系統以菜單界面方式(至少采用文本菜單界面,如能采用圖形菜單界面更好)工作,運行界面友好,演示程序以用戶和計算機的對話方式進行。3、 程序算法說明清晰,理論分析與計算正確,運行情況良好,實驗測試數據無誤,容錯性強(能對錯誤輸入進行判斷控制)。4、 編程風格良好(包括縮進、空行、適當注釋、變量名和函數名見名知意,程序容易閱讀等);5、 寫出規范的課程設計報告,具體要求見相關說明文檔。二、 課程設計的主要內容用面向對象的方法設計成績管理系統。建立一個成績類管理所有成績信息,其中應包含如
4、下一些功能:求最高分、最低分、平均分、總分、按分數段統計等。要求能夠從文件中讀取成績信息進行初始化。三、 課程設計的進程安排12015年5月8日(第9周):布置并下達課程設計題目。22015年5月15日(第10周)之前:聯系指導教師,理解課程設計題目及相關要求,查閱相關資料,進行課程設計。32015年5月15日至6月5日(第1013周):課程設計源程序的調試、修改與檢查,書寫設計報告。地點:學院實驗機房9-202、203、204、205、206。42015年6月5日之前(第13周):上交、檢查設計報告。地點:計算機科學學院實驗機房。指導教師: 杜小坤2015年5月8日成績統計系統一 目的用面向
5、對象的方法設計一個成績管理系統。建立一個成績類管理所有成績信息,其中包括以下功能:查詢各科及總分最高分,查詢各科及總分最低分,查詢各科及總分平均分,以及查詢總分按分數段統計信息。相應成績信息從文件中讀取并進行初始化,保留初始化的學生成績信息于文件中,并且可以向文件中添加學生成績信息。二 需求分析1、查詢學生各科及總分最高分、最低分和平均分由于學生成績信息繁多,為便于使用者較快得到相應信息,其中查詢學生各科及總分最高分和最低分是一個重要的查詢需求。2、查詢學生總分分數段統計信息為了快速了解學生成績的整體情況,其中查詢學生總分分數段的統計信息是一個便捷的查詢方式,能夠為使用者快速達到其需求信息。三
6、 概要設計1、建立一個Student類,用于存取學生的成績信息類中成員包括學生的姓名、學號、數學成績、英語成績、C+成績;成員函數包括構造函數、求取總分成績函數。2、定義相關函數用于求取最高分、最低分、平均分以及總分排序在類外分別求取最高分、最低分、平均分和總分成績排序函數,利用這幾個函數來實現成績管理系統相應功能。3、定義菜單函數 定義菜單界面函數,提示使用者使用相應功能以及要進行的操作步驟。四 詳細設計1、Student類和主要功能函數偽代碼class Student /建立一個學生類 public: /類成員 string name; /姓名long sno; /學號int Math;
7、/數學成績int English; /英語成績int Cjj; /C+成績/類主要函數int Totalscore()return Math+English+Cjj; /計算學生總分成績void input(); /輸入學生信息; /主要功能函數int FindMaxscore(定義一個數組為形參) /求最高分函數for(i=0;i<n; int i+) if(數組某成員大于定義的最大值) 定義的最大值=數組某成員; return 定義的最大值;int FindMinscore(定義一個數組為形參) /求最低分 for(i=0;i<n;i+) if(數組某成員小于定義的最小值) 定
8、義的最小值=數組某成員; return 定義的最小值;int Averagescore(定義一個數組為形參) /求平均分 for(i=1;i<n;i+) 累加求數組成員的總和; return 平均分;void Datasort(定義一個數組為形參) /分數由最高到最低排序 采用交換排序法,依次比較數組相鄰成員的大小,較大的成員排在前面,較小的成員排在后面; 2、main()函數中主要功能偽代碼int main()cout<<"請輸入添加的學生人數n(無學生信息添加請輸入0):"<<endl;cin>>n;Student stuN;
9、/定義一個Student類數組 for(int m=0;m<n;m+)stum.input();/調用Student類添加學生信息函數,添加學生信息ofstream out("f1.text",ios:out|ios:app); /定義輸出文件流對象out,打開輸出文件f1.text并添加學生信息 for(int s=0;s<n;s+) out<<<<" "<<stus.sno<<" "<<stus.Math<<" &quo
10、t;<<stus.English<<" "<<stus.Cjj; /向文件中寫入添加的學生具體信息out.close();ifstream in("f1.text",ios:in); /定義輸入文件流對象in,打開輸入文件f1.textint j=0;while(!in.eof()/直到文件末尾跳出循環 in>>>>stu2j.sno>>stu2j.Math>>stu2j.English>>stu2j.Cjj;/依次讀入學生信息 score
11、1j=stu2j.getMath(); score2j=stu2j.getEnglish(); score3j=stu2j.getCjj(); score4j=stu2j.Totalscore();/分別將學生數學成績、英語成績、C+成績、總分成績放入一個數組中 j+;int t;docout<<"請輸入菜單相應功能數字:"cin>>t;if(t等于1) 調用求取最高分函數,顯示學生各科及總分最高分;if(t等于2) 調用求取最低分函數,輸出學生各科及總分最低分;if(t等于3) 調用求取平均分函數,輸出學生各科及總分平均分;if(t等于4) 調用排
12、序函數并輸出學生成績總分排名及全體成員各科信息;if(t等于5) cout<<"*學生成績總分分數段統計情況*"<<endl;int Total1N=0,Total2N=0,Total3N=0; /定義三個數組,數組成員并初始化為零,存放各個分數段學生總分成績for(j=0;j<N;j+) if(某學生總分大于290分) Total1j=某學生總分; else if(某學生總分大于280分) Total2j=某學生總分; else if(某學生總分大于等于270分) Total3j=某學生總分;cout<<setw(25)<&
13、lt;"290<總分<=300分數段:n"for(j=0;j<N;j+) if(Total1j)/如果Total1j不為零則執行if內語句 cout<< <Total1j<<endl; cout<<setw(25)<<"280<總分<=290分數段:n"for(j=0;j<N;j+) if(Total2j)/如果Total2j不為零則執行if內語句 cout<< Total2j<<endl;cout<<setw(25)<&l
14、t;"270<=總分<=280分數段:n"for(j=0;j<N;j+) if(Total3j) /如果Total3j不為零則執行if內語句 cout<<Total3j<<endl;if(t等于6)cout<<"歡迎使用成績統計系統!"<<endl;break;if(t!=1&&t!=2&&t!=3&&t!=4&&t!=5&&t!=6) /錯誤判斷cout<<"輸入錯誤!"<
15、;<endl;while(t);in.close();/關閉文件f1.textreturn 0;五 調試分析在調試過程中,令我印象最深刻的是在定義Student類對象并初始化時,其中部分輸入使用了中文字符,導致在調試檢查時花了很長時間才發現這個錯誤。其次,在調用求取最高分、最低分、平均分函數時,由于一個學生有多個信息,在使用相應學生信息作為實參來調用函數時,我用類似stu2.getMath()這樣的形式作為數組名,結果一直顯示錯誤,最后通過score1j=stu2j.getMath();這一語句來轉換,成功解決了這一錯誤。其中,在實現總分排名這一功能時,我是使用了一個排序函數,然后取用在
16、數組中相應位置數作為排名成績,在操作調試過程中因為排序函數定義成void或者int型錯誤以及在使用for循環邏輯錯誤,使得結果一直無法輸出學生總分成績以及排名信息。不過,經過耐心的調試和修改,最后成功解決了這一問題。最后,最重要的是文件操作部分的內容,這是本次課程設計中的難點。當時,我是依據課本上的一個例子仿照編寫的,直接在main函數里定義文件,向文件里編寫數據,然后讀取。后面功能函數實現所調用的實參均是按照文件讀取中格式輸入,結果導致每次運行添加的學生信息在下一次運行時無法保留。我自己在百度上參考了一些例子,也參照了班里同學的例子。由于在編寫程序初設計程序整體功能結構框架沒有重視文件操作這
17、一功能,導致在修改源程序達到永久保存添加學生信息功能時,修改時有點繁瑣。不過,經過和同學討論和書本上相關例子,最終解決了文件添加學生信息的功能。六 測試結果以下是我編寫成績統計系統過程中使用的初步學生成績信息,其中總分、最高分、最低分、平均分均是經過實際驗證得到的數據。姓名學號數學成績英語成績C+成績總分王2011909192273李2012959294281趙2013959899292柳2014969798291洪2015949596285梁2016979899294最高分979899294最低分909192273平均分94.595.1796.33286圖一:上圖一是文件f1.text中原本
18、保留的學生成績信息截圖顯示。圖二:圖三:上圖二、三是查詢各科及總分最高分運行結果。圖四:上圖四是查詢各科及總分最低分運行結果。圖五:上圖五是查詢各科及總分平均分結果顯示。圖六:上圖六是查詢學生成績總分排名及各科信息結果顯示。圖七:上圖七是查詢學生總分分數段信息結果及退出功能顯示。圖八:上圖八是結束第一次運行,第二次運行向文件f1.text中添加三位學生信息。圖九:上圖九是添加完三位學生信息后,文件f1.text中學生信息顯示截圖。圖十:上圖十是第二次重新運行向文件中添加三位學生信息后運行功能四結果顯示。七 用戶使用說明 在添加完學生信息后,會有以下提示:(一) 進入界面后會有以下提示:1、查詢
19、各科及總分最高分(請輸入1);2、查詢各科及總分最低分(請輸入2);3、查詢各科及總分平均分(請輸入3);4、查詢總分排名及全體成員各科信息(請輸入4);5、查詢總分分數段統計情況(請輸入5);6、 退出(請輸入6)。(二) 在用戶輸入1后會有以下提示: 1.1、查詢數學最高分請輸入11; 1.2、查詢英語最高分請輸入12;1.3、查詢C+最高分請輸入13; 1.4、查詢總分最高分請輸入14; 1.5、返回菜單請輸入15。(三) 在用戶輸入2后會有以下提示:2.1、查詢數學最低分請輸入21;2.2、查詢英語最低分請輸入22;2.3、查詢C+最低分請輸入23;2.4、查詢總分最低分請輸入24;2
20、.5、返回菜單請輸入25 。(四) 在用戶輸入3后會有以下提示: 3.1、查詢數學平均分請輸入31; 3.2、查詢英語平均分請輸入32; 3.3、查詢C+平均分請輸入33; 3.4、查詢總分平均分請輸入34;3.5、返回菜單請輸入35。 八 課程設計總結在編寫這次課程設計之前,我所編寫的程序大部分都是提供了詳細的設計信息,以及設計的框架,只需要向里面填寫相應代碼即可,這讓我感覺所學的知識一直沒有用到實際應用過程中去。通過這一次課程設計,從理解任務書題意,到具體框架設計,到具體功能代碼的實現,以及到最后正確結果的輸出讓我體會到了這一年來所學知識的真正應用。在此過程中,也讓我對C語言和C+兩本書中
21、不熟悉的知識點更加熟悉了解,從中也提高了我對專業課學習的興趣。本次課程設計,其中比較難得地方是做好文件操作處理這一功能,由于起初在理解任務書及設計程序整體結構框架時沒有考慮到位,導致最后添加功能時很繁瑣,不過最后還是成功解決了這一問題。從中也讓我明白了,一個優秀的程序要建立在一個優秀的需求分析的基礎上,并要結合良好的詳細設計,才能在后續修改過程中變得更加簡單。附具體源碼:#include<iostream>#include<fstream>#include<iomanip>#include<string>using namespace std;#
22、define N 40class Student /建立一個學生類 public: string name; /姓名long sno; /學號int Math; /數學成績int English; /英語成績int Cjj; /C+成績Student();Student(string name1,long sno1,int Math1,int English1,int Cjj1); /構造函數string getname()return name; /取姓名long getsno()return sno; /取學號int getMath()return Math; /取數學成績int getE
23、nglish()return English; /取英語成績int getCjj()return Cjj; /取C+成績int Totalscore()return Math+English+Cjj; /計算學生總分成績void input(); /輸入學生信息;Student:Student() name=" " sno=0; Math=0; English=0; Cjj=0;Student:Student(string name1,long sno1,int Math1,int English1,int Cjj1) name=name1; sno=sno1; Math=
24、Math1; English=English1; Cjj=Cjj1;void Student:input()cout<<"請依次輸入學生姓名,學號,數學成績,英語成績,C+成績"<<endl;cout<<"姓名:"cin>>name;cout<<"學號:"cin>>sno;cout<<"數學成績:"cin>>Math;cout<<"英語成績:"cin>>English;cout
25、<<"C+成績:"cin>>Cjj;/Student類結束void menu() /總菜單界面cout<<"*"<<endl;cout<<" * "<<endl;cout<<" 歡迎進入成績統計系統 "<<endl;cout<<" 1、查詢各科及總分最高分(請輸入1) "<<endl;cout<<" 2、查詢各科及總分最低分(請輸入2) "<
26、;<endl;cout<<" 3、查詢各科及總分平均分(請輸入3) "<<endl;cout<<" 4、查詢總分排名及全體成員各科信息(請輸入4)"<<endl;cout<<" 5、查詢總分分數段統計情況(請輸入5) "<<endl;cout<<" 6、退出(請輸入6) "<<endl; cout<<" * "<<endl;cout<<"*"
27、;<<endl;cout<<endl<<endl;void menu1() /菜單1界面cout<<"*"<<endl;cout<<" 1.1、查詢數學最高分請輸入11 "<<endl;cout<<" 1.2、查詢英語最高分請輸入12 "<<endl;cout<<" 1.3、查詢C+最高分請輸入13 "<<endl;cout<<" 1.4、查詢總分最高分請輸入14
28、 "<<endl;cout<<" 1.5、返回菜單請輸入15 "<<endl; cout<<"*"<<endl;cout<<endl;void menu2() /菜單2界面cout<<"*"<<endl;cout<<" 2.1、查詢數學最低分請輸入21 "<<endl;cout<<" 2.2、查詢英語最低分請輸入22 "<<endl;cout&
29、lt;<" 2.3、查詢C+最低分請輸入23 "<<endl;cout<<" 2.4、查詢總分最低分請輸入24 "<<endl;cout<<" 2.5、返回菜單請輸入25 "<<endl;cout<<"*"<<endl;cout<<endl;void menu3() /菜單3界面cout<<"*"<<endl;cout<<" 3.1、查詢數學平均分請
30、輸入31 "<<endl;cout<<" 3.2、查詢英語平均分請輸入32 "<<endl;cout<<" 3.3、查詢C+平均分請輸入33 "<<endl;cout<<" 3.4、查詢總分平均分請輸入34 "<<endl;cout<<" 3.5、返回菜單請輸入35 "<<endl;cout<<"*"<<endl;cout<<endl;int
31、FindMaxscore(int score,int n) /求最高分 int i,pMaxScore; pMaxScore=score0; for(i=0;i<n;i+) if(scorei>pMaxScore) pMaxScore=scorei; return pMaxScore;int FindMinscore(int score,int n) /求最低分 int i,pMinScore; pMinScore=score0; for(i=0;i<n;i+) if(scorei<pMinScore) pMinScore=scorei; return pMinScor
32、e;int Averagescore(int score,int n) /求平均分 int i; float aver; aver=score0; for(i=1;i<n;i+) aver=aver+scorei; return aver/n;void Datasort(int score,int n) /分數由最高到最低排序 int i,j,temp; for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if(scorej>scorei) temp=scorej; scorej=scorei; scorei=temp; int main()int
33、n=0;cout<<"請輸入添加的學生人數n(無學生信息添加請輸入0):"<<endl;cin>>n;Student stuN; for(int m=0;m<n;m+)stum.input();ofstream out("f1.text",ios:out|ios:app); /定義輸出文件流對象out,打開輸出文件f1.text并添加學生信息 if(!out) /如果文件打開失敗,out返回0值 cout<<"cannot open output file.n" abort();
34、/退出程序for(int s=0;s<n;s+) out<<<<" "<<stus.sno<<" "<<stus.Math<<" "<<stus.English<<" "<<stus.Cjj;out.close();Student stu2N;int score1N,score2N,score3N,score4N; ifstream in("f1.text",ios
35、:in); /定義輸入文件流對象in,打開輸入文件f1.textif(!in) /如果文件打開失敗,in返回0值 cout<<"cannot open input file.n" abort();int j=0;while(!in.eof() in>>>>stu2j.sno>>stu2j.Math>>stu2j.English>>stu2j.Cjj; score1j=stu2j.getMath(); score2j=stu2j.getEnglish(); score3j=stu2j.
36、getCjj(); score4j=stu2j.Totalscore(); j+;Datasort(score4,j); /總分由高到低排序menu(); /菜單界面函數int t;docout<<"請輸入菜單相應功能數字:"cin>>t;cout<<endl;if(t=1) int e;menu1();cout<<"*學生成績各科及總分最高分*"<<endl;do cout<<"請輸入功能1相應數字:" cin>>e; cout<<end
37、l; if(e=11) cout<<setw(20)<<"數學最高分:"<<setw(6)<<FindMaxscore(score1,j)<<endl; if(e=12) cout<<setw(20)<<"英語最高分:"<<setw(6)<<FindMaxscore(score2,j)<<endl; if(e=13) cout<<setw(20)<<"C+最高分:"<<setw(6
38、)<<FindMaxscore(score3,j)<<endl; if(e=14) cout<<setw(20)<<"總分最高分:"<<setw(6)<<FindMaxscore(score4,j)<<endl; if(e=15)break; if(e!=11&&e!=12&&e!=13&&e!=14&&e!=15) /錯誤判斷 cout<<"輸入錯誤!"<<endl;while(e)
39、;if(t=2) int f;menu2();cout<<"*學生成績各科及總分最低分*"<<endl;docout<<"請輸入功能2相應數字:"cin>>f;cout<<endl;if(f=21) cout<<setw(20)<<"數學最低分:"<<setw(6)<<FindMinscore(score1,j)<<endl;if(f=22) cout<<setw(20)<<"英語最
40、低分:"<<setw(6)<<FindMinscore(score2,j)<<endl;if(f=23) cout<<setw(20)<<"C+最低分:"<<setw(6)<<FindMinscore(score3,j)<<endl;if(f=24) cout<<setw(20)<<"總分最低分:"<<setw(6)<<FindMinscore(score4,j)<<endl;if(f=25
41、)break;if(f!=21&&f!=22&&f!=23&&f!=24&&f!=25) cout<<"輸入錯誤!"<<endl;while(f);if(t=3)int g;menu3();cout<<"*學生成績各科及總分平均分*"<<endl;docout<<"請輸入功能3相應數字:"cin>>g;cout<<endl;if(g=31) cout<<setw(20)<
42、<"數學學科平均分:"<<setw(6)<<Averagescore(score1,j)<<endl;if(g=32) cout<<setw(20)<<"英語學科平均分:"<<setw(6)<<Averagescore(score2,j)<<endl;if(g=33) cout<<setw(20)<<"C+學科平均分:"<<setw(6)<<Averagescore(score3,j)&
43、lt;<endl;if(g=34) cout<<setw(20)<<"總分平均分:"<<setw(6)<<Averagescore(score4,j)<<endl;if(g=35)break;if(g!=31&&g!=32&&g!=33&&g!=34&&g!=35) cout<<"輸入錯誤!"<<endl;while(g);if(t=4) cout<<"*學生成績總分排名及全體成員
44、各科信息*"<<endl;cout<<setw(10)<<"姓名"<<setw(10)<<"學號"<<setw(10)<<"數學"<<setw(10)<<"英語"<<setw(10)<<"C+"<<setw(10)<<"總分"<<setw(10)<<"總分名次"<
45、<endl;for(int j=0;j<N;j+) for(int a=0;a<N;a+) if(stu2j.Totalscore()=score4a) cout<<setw(10)<<stu2j. getname()<<setw(10)<<stu2j.getsno()<<setw(10)<<stu2j.getMath() /輸出學生各科成績及總分信息 <<setw(10)<<stu2j.getEnglish()<<setw(10)<<stu2j.getCjj()<<setw(10)<<stu2j.Totalscore()<<setw(10)<<a+1<<endl; if(t=5) cout<<"*學生成績總分分數段統計情況*"<<endl;int Total1N=0,Tot
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 噴槍及類似器具行業技術創新與研發考核試卷
- 電池失效分析與故障排除考核試卷
- 描寫陽光的初三語文作文
- 電影制作與特效出版考核試卷
- 纖維板制造中的原材料質量檢驗與控制考核試卷
- 廈門市高三上學期期末語文卷作文
- 紙容器行業人才培養與技能培訓考核試卷
- 粘土原料化學成分分析考核試卷
- 急救藥品知識 2
- 7-7 數字系統設計實例1-數字乘法器系統級設計
- 2025-2030中國機電安裝工程行業市場現狀供需分析及市場深度研究發展前景及規劃可行性分析研究報告
- 2025年高考歷史總復習高中歷史必修二八大專題知識復習提綱
- 2025事業單位考試題庫及答案200題
- 臨床執業醫師考試健康教育技能試題及答案
- 常見內科疾病護理要點試題及答案
- 機車車輛試題及答案
- 地理澳大利亞課件-2024-2025學年人教版(2024)初中地理七年級下冊
- 2025-2030中國冷軋鋼板行業市場發展現狀及發展趨勢與投資前景研究報告
- 礦山雨季生產安全知識培訓
- 數學-湖南省2025屆高三下學期“一起考”大聯考(模擬二)試題+答案
- 封神榜講解課件
評論
0/150
提交評論