學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 高級(jí)程序設(shè)計(jì)語(yǔ)言課程設(shè)計(jì)
河南工程學(xué)院高級(jí)程序設(shè)計(jì)語(yǔ)言課程設(shè)計(jì)成果報(bào)告學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)學(xué)生學(xué)號(hào): 學(xué)生姓名: 學(xué) 院: 計(jì)算機(jī)學(xué)院 專業(yè)班級(jí): 軟件工程 專業(yè)課程: 高級(jí)程序設(shè)計(jì)語(yǔ)言指導(dǎo)教師: 2014 年 6 月 27 日題 目學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)考核項(xiàng)目考核內(nèi)容得分平時(shí)考核(30分)出勤情況、態(tài)度、效率;知識(shí)掌握情況、基本操作技能、知識(shí)應(yīng)用能力、獲取知識(shí)能力系統(tǒng)設(shè)計(jì)(20分)分析系統(tǒng)的功能模塊編程調(diào)試(20分)實(shí)現(xiàn)系統(tǒng)的各個(gè)功能模塊,并完成調(diào)試回答問題(15分)回答老師針對(duì)課程設(shè)計(jì)提出的問題課程設(shè)計(jì)報(bào)告撰寫(10分)嚴(yán)格按照規(guī)范要求完成課程設(shè)計(jì)報(bào)告源代碼(5分)按照規(guī)范要求完成課程設(shè)計(jì)源代碼的排版總 評(píng) 成 績(jī)指導(dǎo)教師評(píng)語(yǔ): 日期: 年 月 日 目 錄第1章 系統(tǒng)設(shè)計(jì)目的11.1 課程設(shè)計(jì)目的11.2 系統(tǒng)設(shè)計(jì)要求1第2章 系統(tǒng)實(shí)現(xiàn)思路22.1 需求分析22.2 系統(tǒng)性能要求2第3章 系統(tǒng)詳細(xì)設(shè)計(jì)33.1 系統(tǒng)功能模塊33.2 模塊框架圖33.3 系統(tǒng)實(shí)現(xiàn)4第4章 系統(tǒng)調(diào)試運(yùn)行194.1系統(tǒng)運(yùn)行主界面194.2錄入功能194.3刪除功能204.4查詢功能204.5查詢不及格人數(shù)21課程設(shè)計(jì)體會(huì)22參考文獻(xiàn)23第1章 系統(tǒng)設(shè)計(jì)目的1.1 課程設(shè)計(jì)目的在計(jì)算機(jī)領(lǐng)域中,任何好的創(chuàng)意和設(shè)計(jì)最終都需要通過高水平的程序設(shè)計(jì)實(shí)現(xiàn),因此學(xué)習(xí)程序設(shè)計(jì)是計(jì)算機(jī)及相關(guān)專業(yè)學(xué)生必備的基本技能之一。為了使學(xué)生更好的學(xué)習(xí)和掌握這一基本技能,必須系統(tǒng)而全面地的安排程序設(shè)計(jì)課程設(shè)計(jì),目的是通過具體的課程設(shè)計(jì),不僅使學(xué)生能夠進(jìn)一步理解程序設(shè)計(jì)的基本概念,掌握基本的程序設(shè)計(jì)方法,培養(yǎng)良好的程序設(shè)計(jì)風(fēng)格,同時(shí)還可以借助程序設(shè)計(jì)技巧的訓(xùn)練,培養(yǎng)學(xué)生抽象思維、邏輯思維及統(tǒng)籌規(guī)劃的能力。1.2 系統(tǒng)設(shè)計(jì)要求(1)設(shè)計(jì)四個(gè)類,包括學(xué)生類(描述學(xué)生基本信息);成績(jī)類;班級(jí)類;課程類(描述課程信息:課程編號(hào),科目名稱,如高等數(shù)學(xué),大學(xué)英語(yǔ)等);(2)學(xué)生成績(jī)及課程信息用文件保存,程序執(zhí)行時(shí)從文件讀入;(3)能按學(xué)期,按班級(jí)完成對(duì)學(xué)生成績(jī)的錄入、修改,能按班級(jí)統(tǒng)計(jì)學(xué)生的成績(jī);(4)求學(xué)生的總分及平均分,并能根據(jù)學(xué)生的平均成績(jī)進(jìn)行排序,能查詢學(xué)生成績(jī),不及格科目及學(xué)生名單;能按班級(jí)輸出學(xué)生的成績(jī)單。 設(shè)置學(xué)生的成績(jī)信息:學(xué)生學(xué)號(hào)、姓名、所選課程名稱、平時(shí)成績(jī)、期末成績(jī)、平時(shí)成績(jī)所占百分比 計(jì)算學(xué)生總評(píng)成績(jī):總評(píng)成績(jī)=平時(shí)成績(jī)*平時(shí)成績(jī)所占百分比+期末成績(jī)*(1-平時(shí)成績(jī)所占百分比) 顯示學(xué)生的姓名、所選課程名稱以及平時(shí)成績(jī)、期末成績(jī)和總評(píng)成績(jī)信息。分單人顯示和以班輸出(班成績(jī)單格式輸出到文件) 注意,至少應(yīng)包含一個(gè)班、30人、三門課 第2章 系統(tǒng)實(shí)現(xiàn)思路2.1 需求分析學(xué)生成績(jī)查詢系統(tǒng)在生活中運(yùn)用廣泛,因此需要多種程序?qū)λM(jìn)行管理。該系統(tǒng)應(yīng)該能存儲(chǔ)學(xué)生的個(gè)人信息與考試成績(jī)。系統(tǒng)管理者能夠利用系統(tǒng)進(jìn)行信息錄入、修改、查詢、刪除、按照姓名、總分進(jìn)行查詢,能輸出所有的學(xué)生的成績(jī)。1系統(tǒng)類設(shè)計(jì)(1)學(xué)生類用于存放基本個(gè)人信息;(2)課程類用于存放課程信息;(3)班級(jí)類用于分類班級(jí);(4)成績(jī)類用于存放成績(jī)。2. 功能分析(1)能對(duì)學(xué)生各科成績(jī)進(jìn)行錄入;(2)能對(duì)學(xué)生的成績(jī)進(jìn)行增加;(3)能對(duì)學(xué)生的成績(jī)進(jìn)行刪除;(4)能對(duì)學(xué)生的成績(jī)進(jìn)行修改;(5)能對(duì)學(xué)生的成績(jī)按總成績(jī),姓名,進(jìn)行查詢;(6)能輸出學(xué)生的所有數(shù)據(jù);(7)能進(jìn)行成績(jī)統(tǒng)計(jì);(8)能進(jìn)行總分查詢排名。2.2 系統(tǒng)性能要求于管理者而言,該系統(tǒng)需要方便的操作,友好的界面。于學(xué)生而言,成績(jī)等屬于個(gè)人信息,因此要求系統(tǒng)有一定的安全性,能夠保護(hù)學(xué)生的基本信息。而隨 擴(kuò)充和修改。因此系統(tǒng)性能要求如下:(1)系統(tǒng)安全可靠;(2)功能齊全;(3)操作方便、界面友好;(4)易于維護(hù)和擴(kuò)充。第3章 系統(tǒng)詳細(xì)設(shè)計(jì)3.1 系統(tǒng)功能模塊學(xué)生成績(jī)查詢系統(tǒng)有:成績(jī)錄入、數(shù)據(jù)增加、修改、數(shù)據(jù)查詢,排序顯示構(gòu)成。3.2 模塊框架圖 1. 程序中包含類與主函數(shù),類構(gòu)成了程序的數(shù)據(jù)管理與存放區(qū)。在主函數(shù)中包括多種功能。以類為依托構(gòu)成程序框架,在主函數(shù)中實(shí)現(xiàn)每一個(gè)功能。類與功能共同構(gòu)成程序框架。學(xué)生類課程類成績(jī)類系統(tǒng)操作查詢成績(jī)統(tǒng)計(jì)排名錄入增加刪除修改總成績(jī)查詢姓名輸出所有學(xué)生的成績(jī)每個(gè)學(xué)生的平均成績(jī)各科不及格的人數(shù)圖1-1 模塊框架圖2程序用到的頭文件以及自己定義的函數(shù)(1)頭文件#include<iostream> /輸入輸出流函數(shù)#include<fstream> /文件操作函數(shù)#include<string> /字符串函數(shù)#include<sstream>#include<iomanip>(2)自己定義的函數(shù)float getsum();/綜合成績(jī)float getshu();/數(shù)學(xué)總評(píng)成績(jī)float getcpp();/c總評(píng)成績(jī)float geteng();/英語(yǔ)總評(píng)成績(jī)float getaver();/總平均成績(jī)3.3 系統(tǒng)實(shí)現(xiàn)1界面設(shè)計(jì)程序運(yùn)行后會(huì)出現(xiàn)一個(gè)間接地窗口,便于用戶查詢數(shù)據(jù)。主函數(shù)用循環(huán)體以及switch語(yǔ)句實(shí)現(xiàn)功能選擇。主界面展示*歡迎來到學(xué)生成績(jī)查詢系統(tǒng)*請(qǐng)選擇需要的操作?。?)數(shù)據(jù)錄入(2)增加學(xué)生(3)刪除學(xué)生(4)修改數(shù)據(jù) 查詢:(5)按總成績(jī)查詢(6)按姓名查詢(7)輸出所有學(xué)生的數(shù)據(jù) 成績(jī)統(tǒng)計(jì):(8)每個(gè)學(xué)生的平均成績(jī)(9)各個(gè)學(xué)科不及格人數(shù)排名:(10)按總分查詢排名(11)退出選擇相關(guān)操作請(qǐng)輸入相對(duì)的括號(hào)里的阿拉伯?dāng)?shù)字及字母!主程序代碼void main() /主函數(shù)system("color 07e"); /設(shè)置當(dāng)前窗口的背景色和前景色 0 = 黑色 8 = 灰色/ 1 = 藍(lán)色 9 = 淡藍(lán)色/ 2 = 綠色 A = 淡綠色/ 3 = 淺綠色 B = 淡淺綠色/ 4 = 紅色 C = 淡紅色/ 5 = 紫色 D = 淡紫色/ 6 = 黃色 E = 淡黃色/ 7 = 白色 F = 亮白色cout<<"*歡迎來到學(xué)生成績(jī)查詢系統(tǒng)*"<<endl;/主菜單cout<<"請(qǐng)選擇需要的操作!"<<endl;cout<<"(1)數(shù)據(jù)錄入"<<endl;cout<<"(2)增加學(xué)生"<<endl;cout<<"(3)刪除學(xué)生"<<endl;cout<<"(4)修改數(shù)據(jù)"<<endl;cout<<"查詢:"<<endl;cout<<"(5)按總成績(jī)查詢"<<endl;cout<<"(6)按姓名查詢"<<endl;cout<<"(7)輸出所有學(xué)生的數(shù)據(jù)"<<endl;cout<<"成績(jī)統(tǒng)計(jì):"<<endl;cout<<"(8)每個(gè)學(xué)生的平均成績(jī)"<<endl;cout<<"(9)各個(gè)學(xué)科不及格人數(shù)"<<endl;cout<<"排名"<<endl;cout<<"(10)按總分查詢排名"<<endl;cout<<"(11)退出"<<endl;cout<<"選擇相關(guān)操作請(qǐng)輸入相對(duì)的括號(hào)里的阿拉伯?dāng)?shù)字及字母!"<<endl;int p=0;char w;Chengji *s100;ofstream *file100;int i=0;int j=0;int chris1=0;float baif;/主函數(shù)利用循環(huán)體執(zhí)行,實(shí)現(xiàn)循環(huán)操作:docin>>p;if(p>=1&&p<=11)chris1=1;elsecout<<"指令錯(cuò)誤!請(qǐng)重新輸入:"<<endl;while(chris1=0);doswitch(p)case 1:. /錄入功能case 2:. /增加功能case 3:. /刪除功能case 4:. /修改數(shù)據(jù)功能case 5:. /按成績(jī)查詢功能case 6:. /按姓名查詢功能case 7:. /輸出所有的數(shù)據(jù)case 8:. /輸出學(xué)生的平均分case 9:. / /查詢不及格人數(shù) case 10:. /總成績(jī)排名while(w='y');/循環(huán)語(yǔ)句結(jié)束2具體功能設(shè)計(jì)通過主窗體調(diào)用其他窗體,實(shí)現(xiàn)其它功能。(1)錄入功能 使用cin輸入流輸入學(xué)生的相關(guān)信息,并創(chuàng)立文件,將所輸入的數(shù)據(jù)存入到文件中。程序代碼docout<<"請(qǐng)輸入姓名"<<endl;/信息輸入過程cin>>name;cout<<"請(qǐng)輸入學(xué)號(hào)"<<endl;cin>>number;cout<<"請(qǐng)輸入數(shù)學(xué)成績(jī)"<<endl;cin>>math;cout<<"請(qǐng)輸入c+成績(jī)"<<endl;cin>>cpp;cout<<"請(qǐng)輸入英語(yǔ)成績(jī)"<<endl;cin>>english;cout<<"請(qǐng)輸入數(shù)學(xué)平時(shí)成績(jī)"<<endl;cin>>mathp;cout<<"請(qǐng)輸入c+平時(shí)成績(jī)"<<endl;cin>>cppp;cout<<"請(qǐng)輸入英語(yǔ)平時(shí)成績(jī)"<<endl;cin>>englishp;cout<<"請(qǐng)輸入成績(jī)百分比"<<endl;cin>>baif;fstream outfile,infile;outfile.open("f1.txt",ios:out|ios:app);/打開文件if(!file)cout<<"f1.txt can not open.n"return ;outfile<<name<<" "<<"學(xué)號(hào):"<<number<<endl;outfile<<"數(shù)學(xué)成績(jī): "<<setw(2)<<math<<setw(20)<<"數(shù)學(xué)平時(shí)成績(jī): "<<setw(2)<<mathp<<setw(20)<<"數(shù)總成績(jī): "<<setw(2)<<math*baif+mathp*(1-baif)<<endl;outfile<<"外語(yǔ)成績(jī):"<<setw(2)<<english<<setw(20)<<"外語(yǔ)平時(shí)成績(jī): "<<setw(2)<<englishp<<setw(20)<<"外總成績(jī): "<<setw(2)<<english*baif+englishp*(1-baif)<<endl;outfile<<"c+成績(jī): "<<setw(2)<<cpp<<setw(20)<<"c+平時(shí)成績(jī): "<<setw(2)<<cppp<<setw(20)<<"c總成績(jī): "<<setw(2)<<cpp*baif+cppp*(1-baif)<<endl;outfile<<"總成績(jī): "<<math*baif+mathp*(1-baif)+cpp*baif+cppp*(1-baif)+english*baif+englishp*(1-baif)<<endl;outfile.close(); infile.open("f1.txt",ios:in);if(!file)cout<<"f1.txt can not open.n"return ;char ch;while(infile.get(ch)cout<<ch;cout<<endl;infile.close();j+;si=new Chengji(number,name,math,cpp,english,mathp,cppp,englishp,baif,mathz,cppz,engz); /將數(shù)據(jù)錄入文件i+;cout<<"數(shù)據(jù)錄入成功,想繼續(xù)嗎(y/n)"<<endl;cin>>c;chris1=0;doif(c!='y'&&c!='n')cout<<"指令錯(cuò)誤!請(qǐng)重新輸入!"<<endl;cin>>c;elsechris1=1;while(chris1=0);(2)增加功能與錄入功能程序操作與代碼大體相同 參考錄入功能。(3)刪除功能用對(duì)文件的操作,判斷所需刪除的數(shù)據(jù)與數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否相同,利用文件流操作刪除對(duì)應(yīng)數(shù)據(jù)。程序代碼char c;string xingming,line,str,name;doifstream fin("f1.txt");fstream outfile("f2.txt",ios:trunc|ios:out); /創(chuàng)建文件2cout<<"請(qǐng)輸入您要?jiǎng)h除的學(xué)生的姓名:"<<endl;cin>>xingming;while(!fin.eof() /執(zhí)行判斷并刪除數(shù)據(jù)getline(fin,line);istringstream stream(line);name=line.substr(0,line.find(" ",0);if(name!=xingming)outfile<<line<<endl;outfile.close();fin.close();fstream f("f1.txt",ios:trunc|ios:out);ifstream outf("f2.txt");f<<outf.rdbuf();outf.close();f.close();cout<<"數(shù)據(jù)刪除成功,想繼續(xù)刪除嗎(y/n)"<<endl;cin>>c;.(4)修改功能參考錄入功能,利用對(duì)文件的操作達(dá)到對(duì)數(shù)據(jù)的修改功能。(5)按總成績(jī)查詢 用if語(yǔ)句調(diào)用getsum()判斷輸入的總分?jǐn)?shù)與數(shù)據(jù)庫(kù)中的總分?jǐn)?shù)是否有相同的,并執(zhí)行輸出文件操作。程序代碼int j=0;float SUM;char c;int flag;if(i=0) /根據(jù)前面的疊加判斷文件中是否有數(shù)據(jù)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break;Do /輸入查找的成績(jī)利用函數(shù)查找符合條件的數(shù)據(jù)flag=0;cout<<"請(qǐng)輸入您要查詢的學(xué)生的總成績(jī):"<<endl;cin>>SUM;for(int j=0;j<i;j+)if(sj->getsum()=SUM) /將符合的數(shù)據(jù)輸出flag=1;cout<<"您要查詢的學(xué)生是:"<<(*sj).name<<endl;cout<<"該生的信息為:"<<endl;cout<<" 學(xué)號(hào):"<<(*sj).num<<" 數(shù)學(xué)分?jǐn)?shù):"<<(*sj).math*(*sj).baif+(*sj).mathp*(1-(*sj).baif)<<" c+分?jǐn)?shù)"<<(*sj).cpp*(*sj).baif+(*sj).cppp*(1-(*sj).baif)<<" 英語(yǔ)分?jǐn)?shù)"<<(*sj).english*(*sj).baif+(*sj).englishp*(1-(*sj).baif)<<endl;if(flag=0) /錯(cuò)誤操作返回繼續(xù)cout<<"對(duì)不起!您要查詢的學(xué)生不存在!"<<endl;cout<<"是否繼續(xù)查?(y/n);"cin>>c;.(6)按姓名查詢程序代碼與按總分功能類似,區(qū)別在于這個(gè)功能中利用指針訪問類中成員,并進(jìn)行判斷。(7)輸出所有數(shù)據(jù)通過打開文件,對(duì)文件中的所有數(shù)據(jù)進(jìn)行輸出。程序代碼cout<<"所有學(xué)生數(shù)據(jù)如下:"<<endl;ifstream file;file.open("f1.txt",ios:in); /以輸入方式打開文件cout<<file.rdbuf(); /以輸出文件的所有數(shù)據(jù)file.close();(8)輸出學(xué)生的平均分 利用指針訪問Chengji類中的成員,調(diào)用getaver ()函數(shù)求得平均分并執(zhí)行輸出操作。程序代碼if(i=0)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break;for(int m=0;m<i;m+)cout<<(*sm).name<<" 學(xué)號(hào)"<<(*sm).num <<" 總分 "<<(*sm).getsum()<<" 均分"<<(*sm).getaver ()<<endl;(9)查詢不及格人數(shù) 調(diào)用get函數(shù)求得三科平均成績(jī),并統(tǒng)計(jì)不及格人數(shù),并輸出查詢結(jié)果。程序代碼if(i=0)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break;int m,n,k,j;m=0;n=0;k=0;for(j=0;j<i;j+)if(sj->getshu()<60)m+;if(sj->getcpp()<60)n+;if(sj->geteng()<60)k+;cout<<"數(shù)學(xué)不及格人數(shù)為:"<<m<<endl;cout<<"c+不及格人數(shù)為:"<<n<<endl;cout<<"英語(yǔ)不及格人數(shù)為:"<<k<<endl;.(10)總成績(jī)排名通過for函數(shù)尋找最大值并進(jìn)行交換,交換得最大值與最大值對(duì)應(yīng)名字。程序代碼if(i=0)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break;int h,g,n;int j=0;float a100,temp;string k100,temp1;for(g=0;g<i;g+)aj=(*sg).getsum(); kj=(*sg).name;j+;for(h=0;h<i;h+)for(n=0;n<i-h;n+)if(an>an+1)temp=an; /交換得到最大值an=an+1;an+1=temp;temp1=kn; /交換名字kn=kn+1; kn+1=temp1;for(n=1;n<=i;n+)cout<<kn<<setw(5)<<an<<endl;.(11)程序類的構(gòu)造與繼承基類class student和class kecheng用來封裝學(xué)生的所有信息具體見代碼分析。派生類class chengji繼承了兩個(gè)類的所有數(shù)據(jù),同時(shí)增加了自己的成員,并添加了多個(gè)函數(shù)。Main()用來實(shí)現(xiàn)所有的操作以及對(duì)程序的整體控制;定義文件輸入流對(duì)象in和輸出流對(duì)象out,實(shí)現(xiàn)對(duì)外部文件的操作,使得數(shù)據(jù)得以保存。程序代碼class Student /聲明學(xué)生類public:Student(int n,char nu20) /構(gòu)造函數(shù)num=n;strcpy(name,nu);friend void main(); /聲明友元類protected:int num;/學(xué)號(hào)char name20;/姓名;class Kecheng /聲明課程類public: /構(gòu)造函數(shù)Kecheng(float ma,float cp,float eng)math=ma;cpp=cp;english=eng;friend void main(); /聲明友元protected:float math;/數(shù)學(xué)float english;/英語(yǔ)float cpp;/c+;class Chengji:public Student,public Kecheng /聲明成績(jī)類public:Chengji(int n,string nam,float ma,float cp,float eng,float map,float cpp,float engp,float,bf,float mz,float cz,float ez): /構(gòu)造函數(shù)Student(n,nam),Kecheng(ma,cp,eng),mathp(map),cppp(cpp),englishp(engp),baif(bf),mathz(mz),cppz(cz),englishz(ez)mathp=map;cppp=cpp;englishp=engp;baif=bf;mathz=mz;cppz=cz;englishz=ez;float getsum();/綜合函數(shù)float getshu();/數(shù)學(xué)最后成績(jī)float getcpp();/c最后成績(jī)float geteng();/英語(yǔ)最后成績(jī)friend void main();/聲明友元float getaver();/平均值函數(shù)protected:float mathp ;/數(shù)學(xué)平時(shí)成績(jī)float cppp;/c+平時(shí)成績(jī)float englishp;/英語(yǔ)平時(shí)成績(jī)float baif;/成績(jī)百分比float mathz ;/數(shù)學(xué)總成績(jī)float cppz;/c+總成績(jī)float englishz;/英語(yǔ)總成績(jī);3系統(tǒng)流程圖系統(tǒng)中綜合類與功能,程序的運(yùn)行框架圖,包含主界面顯示、選擇操作、具體的系統(tǒng)主函數(shù)操作,選擇1-11對(duì)應(yīng)相對(duì)的操作,系統(tǒng)自動(dòng)執(zhí)行操作,并返回主函數(shù)。流程圖如下圖所示:圖3-1 程序流程圖第4章 系統(tǒng)調(diào)試運(yùn)行4.1系統(tǒng)運(yùn)行主界面新建文件夾課程設(shè)計(jì),并在文件夾中設(shè)立相應(yīng)的工程,新建程序文件命名為成績(jī),編寫程序代碼,并調(diào)試運(yùn)行。系統(tǒng)調(diào)試運(yùn)行輸出主界面見圖4-1圖4-1系統(tǒng)主界面4.2錄入功能 需要輸入學(xué)生的相關(guān)信息,并保存到f1.txt中,如4-2圖4-2錄入功能界面4.3刪除功能輸入刪除名字,程序自動(dòng)尋找與名字相符數(shù)據(jù)并刪除,如圖4-3圖4-3刪除界面4.4查詢功能分為按總成績(jī)查詢和按姓名查詢兩種方式:如圖4-4圖4-4 查詢界面4.5查詢不及格人數(shù)調(diào)用get函數(shù)求三科平均成績(jī)并統(tǒng)計(jì)不及格人數(shù)并輸出查詢結(jié)果。如圖4-5圖4-5不及格人數(shù)界面課程設(shè)計(jì)體會(huì)這份學(xué)生管理系統(tǒng)作業(yè),使我感觸很多。在老師布置這份作業(yè)的時(shí)候,自己是抱著輕松的心態(tài)去做的,結(jié)果發(fā)現(xiàn)事與愿違,這份作業(yè)太難做了。然后就去網(wǎng)上找資料、找答案、和室友一起研究,最后幸運(yùn)的是完成了這份作業(yè)。這次的作業(yè)對(duì)我一個(gè)初學(xué)c+的學(xué)生來說還是比較難的,如果沒有其他方面的幫助,憑自己是做不出來的,所以我決定以后要更加的努力學(xué)習(xí)。參考文獻(xiàn)1 譚浩強(qiáng).C+面向?qū)ο蟪绦蛟O(shè)計(jì)(第二版).清華大學(xué)出版社2 譚浩強(qiáng).C+面向?qū)ο蟪绦蛟O(shè)計(jì)題解與上機(jī)指導(dǎo).清華大學(xué)出版社3 LippmanBarbara.C+ Primer.人民郵電出版社4 Bjarne Stroustrup.The C+ Programming Language.機(jī)械工業(yè)出版社5C+語(yǔ)言的設(shè)計(jì)和演化,機(jī)械工業(yè)出版社6 #include<iostream>#include<string>#include<fstream>#include<sstream>#include<iomanip>using namespace std;class Tstuchar name20;int number;float math,cpp,english,average,sum;public:Tstu();Tstu(char n20,int num,float ma,float cj,float eng); float getsum();float getaver(); friend void main(); ; Tstu:Tstu ( char n20, int num,float ma,float cj,float eng ) strcpy(name,n); number=num; math=ma; cpp=cj; english=eng; float Tstu:getsum() sum=cpp+english+math; return sum; float Tstu:getaver() average=getsum()/3; return average; void main() cout<<"*歡迎來到學(xué)生成績(jī)查詢系統(tǒng)*"<<endl; cout<<"請(qǐng)選擇您需要的操作!"<<endl;cout<<"操作:"<<endl; cout<<"(1)數(shù)據(jù)錄入"<<endl; cout<<"(2)增加學(xué)生"<<endl; cout<<"(3)刪除學(xué)生"<<endl; cout<<"(4)修改數(shù)據(jù)"<<endl; cout<<"查詢:"<<endl; cout<<"(5)按總成績(jī)查詢"<<endl; cout<<"(6)按姓名查詢"<<endl; cout<<"(7)輸出所有學(xué)生的數(shù)據(jù)"<<endl; cout<<"成績(jī)統(tǒng)計(jì):"<<endl; cout<<"(8)每個(gè)學(xué)生的平均成績(jī)"<<endl; cout<<"(9)各科不及格人數(shù)"<<endl; cout<<"排名:"<<endl; cout<<"(10)按總分查詢排名"<<endl; cout<<"(11)退出"<<endl; cout<<"選擇相關(guān)操作請(qǐng)輸入相對(duì)的括號(hào)里的阿拉伯?dāng)?shù)字及字母!"<<endl; int p=0; /全局變量,用于選擇菜單時(shí)的輸入 char w;/全局變量,用于在大項(xiàng)中選擇是否繼續(xù)操作 Tstu *s100; /類定義的指針將所錄入的數(shù)據(jù)按類中的形式分別存儲(chǔ) ofstream *file100; int i=0; /全局變量,用于做每個(gè)錄入數(shù)據(jù)的下標(biāo) int j=0; int chris1=0; /用于判斷dowhile語(yǔ)句 do /判斷輸入是否正確 cin>>p; if(p>=1&&p<=11) chris1=1; else cout<<"指令錯(cuò)誤!請(qǐng)重新輸入:"<<endl; while(chris1=0); do switch(p) case 1: /數(shù)據(jù)的錄入 char c; /用于在小項(xiàng)中選擇是否繼續(xù)操作 char name20; int number; float math,cpp,english; do cout<<"請(qǐng)輸入姓名:"<<endl; cin>>name; cout<<"請(qǐng)輸入學(xué)號(hào):"<<endl; cin>>number; cout<<"請(qǐng)輸入數(shù)學(xué)成績(jī):"<<endl; cin>>math; cout<<"請(qǐng)輸入C+成績(jī):"<<endl; cin>>cpp; cout<<"請(qǐng)輸入英語(yǔ)成績(jī):"<<endl; cin>>english; fstream outfile,infile; /作一個(gè)文本文檔在文件夾中用于顯示所錄入的數(shù)據(jù) outfile.open("f1.txt",ios:out|ios:app); if(!file) cout<<"f1.txt can not open.n" return; outfile<<name<<" "<<"學(xué)號(hào):"<<number<<" "<<"數(shù)學(xué)成績(jī):"<<math<<" "<<"C+成績(jī):"<<cpp<<" "<<"外語(yǔ)成績(jī):"<<english<<endl; outfile.close(); infile.open("f1.txt",ios:in); if(!file) /判斷文件是否打開 cout<<"f1.txt can not open.n" return; char ch; while(infile.get(ch) cout<<ch; cout<<endl; infile.close(); j+; si=new Tstu(name, number,math, cpp, english); i+; cout<<"數(shù)據(jù)錄入成功,想繼續(xù)錄入嗎(y/n)"<<endl; cin>>c; chris1=0; do if(c!='y'&&c!='n') cout<<"指令錯(cuò)誤!請(qǐng)重新輸入!"<<endl; cin>>c; else chris1=1; while(chris1=0); while(c='y'); /重復(fù)輸入 break; case 2: /增加學(xué)生數(shù)據(jù) char name20; int number; float math,cpp,english; char c; do cout<<"請(qǐng)輸入您要增加的學(xué)生的姓名:"<<endl; cin>>name; cout<<"請(qǐng)輸入你要增加的學(xué)生的學(xué)號(hào):"<<endl; cin>>number; cout<<"請(qǐng)輸入數(shù)學(xué)成績(jī):"<<endl; cin>>math; cout<<"請(qǐng)輸入C+成績(jī):"<<endl; cin>>cpp; cout<<"請(qǐng)輸入英語(yǔ)成績(jī):"<<endl; cin>>english; fstream outfile,infile; outfile.open("f1.txt",ios:out|ios:app); if(!file) cout<<"f1.txt can not open.n" return; outfile<<name<<" "<<"學(xué)號(hào):"<<number<<" "<<"數(shù)學(xué)成績(jī):"<<math<<" "<<"C+成績(jī):"<<cpp<<" "<<"外語(yǔ)成績(jī):"<<english<<endl; outfile.close(); infile.open("f1.txt",ios:in); if(!file) cout<<"f1.txt can not open.n" return; char h; while(infile.get(h) cout<<h; cout<<endl; infile.close(); j+; si=new Tstu(name,number, math, cpp, english); i+; cout<<"數(shù)據(jù)錄入成功,想繼續(xù)錄入嗎(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令錯(cuò)誤!請(qǐng)重新輸入!"<<endl; cin>>c; while(c='y'); break; case 3:/刪除學(xué)生信息 char c; string xingming,line,str,name; do ifstream fin("f1.txt"); fstream outfile("f2.txt",ios:trunc|ios:out); /作一個(gè)文本文檔在文件夾中用于顯示所錄入的數(shù)據(jù) cout<<"請(qǐng)輸入您要?jiǎng)h除的學(xué)生的姓名:"<<endl; cin>>xingming; while(!fin.eof() ) getline(fin,line); istringstream stream(line); name = line.substr(0,line.find(" ",0);/找到名字,判斷是否相等 if(name != xingming) outfile<<line<<endl; outfile.close(); fin.close(); fstream f("f1.txt",ios:trunc|ios:out); ifstream outf("f2.txt"); f<<outf.rdbuf(); outf.close(); f.close(); cout<<"數(shù)據(jù)刪除成功,想繼續(xù)刪除嗎(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令錯(cuò)誤!請(qǐng)重新輸入!"<<endl; cin>>c; while(c='y'); break; case 4:/修改數(shù)據(jù) string sname,line,str,name; int nu;float eng,ma,com;int flag;char c;if(i=0)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break;do flag=0; cout<<"請(qǐng)輸入您要修改的學(xué)生的姓名:" cin>>name; fstream fin("f1.txt",ios:in); ofstream outfile("f.txt",ios:trunc|ios:out); cout<<endl; while(!fin.eof() ) /在文件中查找 getline(fin,line); istringstream stream(line); sname = line.substr(0,line.find(" ",0);if(name!=sname)outfile<<line<<endl;else flag=1; fin.close(); if(flag=1) cout<<"請(qǐng)輸入修改學(xué)生姓名及其新學(xué)號(hào),數(shù)學(xué),c+和英語(yǔ)成績(jī):"cin>>name>>nu>>ma>>com>>eng;cout<<endl;outfile<<name<<" "<<"學(xué)號(hào):"<<nu<<" "<<"數(shù)學(xué)成績(jī):"<<ma<<" "<<"C+成績(jī):"<<com<<" "<<"外語(yǔ)成績(jī):"<<eng<<endl; outfile.close();fstream outf("f1.txt",ios:trunc|ios:out);fstream inf("f.txt",ios:in);outf<<inf.rdbuf()<<endl;outf.close();inf.close(); if(flag=0)cout<<"對(duì)不起,您要修改的學(xué)生不存在!請(qǐng)查證后輸入!"<<endl; cout<<"想繼續(xù)修改嗎(y/n):" cin>>c; cout<<endl; if(c!='y'&&c!='n') cout<<" 指令錯(cuò)誤!請(qǐng)重新輸入!"<<endl<<" "cin>>c; while(c='y');break; case 5:/按總分查詢 int j=0;float SUM;char c;int flag; if(i=0)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break; do flag=0; cout<<"請(qǐng)輸入您要查詢的學(xué)生的總成績(jī):"<<endl; cin>>SUM; for(int j=0;j<i;j+) if(sj->getsum()=SUM) flag=1;cout<<"您要查詢的學(xué)生是:"<<(*sj).name<<endl;cout<<"該生的信息為:"<<endl;cout<<" 學(xué)號(hào):"<<(*sj).number<<" 數(shù)學(xué)分?jǐn)?shù):"<<(*sj).math<<" c+分?jǐn)?shù):"<<(*sj).cpp<<" 英語(yǔ)分?jǐn)?shù)"<<(*sj).english<<endl; if(flag=0)cout<<"對(duì)不起!您要查詢的學(xué)生不存在!"<<endl;cout<<"是否繼續(xù)查?(y/n):"cin>>c;if(c!='y'&&c!='n')cout<<"指令錯(cuò)誤!請(qǐng)重新輸入!"<<endl; cin>>c; ; while(c='y'); break; case 6:/按姓名查詢 char n20;char c;int j=0;int flag; if(i=0)cout<<"系統(tǒng)中沒有輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)!"<<endl;break; do flag=0; cout<<"請(qǐng)輸入要查詢的名字: "<<endl; cin>>n; for(int j=0;j<i;j+) if(strcmp(n,(*sj).name)=0)flag=1;cout<<"您要查詢的學(xué)生是:"<<(*sj).name<<endl;cout<<"該生的信息是:學(xué)號(hào):"<<(*sj).number<<" 數(shù)學(xué)分?jǐn)?shù):"<<(*sj).math<<"c+分?jǐn)?shù):"<<(*sj).cpp<<"英語(yǔ)分?jǐn)?shù):"<<(*sj).english<<endl; if(flag=0)cout<<"對(duì)不起您要查詢的學(xué)生不存在,請(qǐng)查證后再輸入!"<<endl;cout<<"您想繼續(xù)查詢嗎?(y/n):"cin>>c;if(c!='y'&&c!='n')cout<<"指令錯(cuò)誤!請(qǐng)重新輸入:"<<endl;cin>>c; while(c='y'); break; case 7:/輸出所有學(xué)生數(shù)據(jù) cout<<"所有學(xué)生數(shù)據(jù)如下:"<<endl; ifstream file; file.open("f1.txt",ios:in); cout<<file.rdbuf(); file.close(); break; case 8:/統(tǒng)計(jì)每個(gè)學(xué)生的平均成績(jī)