研究生信息管理系統(C++實現)
設計一個研究生基本信息管理系統,實現對不一樣學制的研究生包括:學術碩士和工程碩士的信息管理。定義一個基本的研究生類,基本信息包括:學號、姓名、性別、年齡、課程成績。派生出學術碩士類,增長的屬性包括:專業,發表論文(名稱與級別(一、二、3)),能夠多篇,最多3篇),論文成績,總成績。工程碩士增長的屬性包括:領域,參與項目(名稱與級別(A,B,C)),項目成績,總成績。計算方式以下ios
- 學術碩士論文成績計算:各個級別的論文得分爲:級別10,每一個學生論文最高90分。總成績=課程成績0.7+論文成績*0.3。
- 工程碩士項目成績計算:每一個學生只參與一項項目,各個級別得分:A級90,B級75,C級60,不參與項目得分爲0。總成績=課程成績0.5+項目成績0.5。
系統基本功能包括: - 數據文件管理功能:利用輸入輸出流建立新文件、打開新文件、保存文件。
- 計算與統計功能:可以打開已存在的數據表文件,對數據表中與某關鍵字匹配的相關記錄進行數據統計(包括:總數、平均值、分段信息),例如:按總成績得分段統計學生人數,以及所佔百分比。可以計算每一個研究生的總成績。
- 記錄管理功能。(增減改查)
代碼實現web
#include<iostream> #include<string> #include "fstream" #include<cstdlib> #include<windows.h> using namespace std; void enter(); void add(); void deleter(); void display(); void change(); void find(); void statical(); void initsystem(); void menu(); class Graduate { protected: int number; string name; char sex; int age; float score; }; struct Lunwen { string l_name; float l_rank; }; class Sci_gra:public Graduate { public: void set_sci(); void display(); void change(); friend void enter(); friend void add(); friend void deleter(); friend void display(); friend void change(); friend void find(); friend void statical(); friend void exit(); friend void initsystem(); private: string profess; int l_num; Lunwen l[3]; int l_sco; float all_sco; }; void Sci_gra::set_sci() { cin>>number>>name>>sex>>age>>score>>profess>>l_num; l_sco=0; for(int i=0;i<l_num;i++) { cin>>l[i].l_name>>l[i].l_rank; l_sco+=l[i].l_rank*10; } all_sco=0.7*score+0.3*l_sco; } void Sci_gra::display() { cout<<"學號:"<<number <<"\n姓名:"<<name <<"\n性別:"<<sex <<"\n年齡:"<<age <<"\n課程成績:"<<score; for(int i=0;i<l_num;i++) { cout<<"\n論文"<<i <<"\n名稱:"<<l[i].l_name <<"\n級別:"<<l[i].l_rank; } cout<<"\n論文成績:"<<l_sco <<"\n總成績:"<<all_sco<<endl; } void Sci_gra::change() { cout<<"請依次輸入修改後該學術碩士的學號、姓名、性別、年齡、課程成績、專業、發表論文篇數(並分別輸入論文成績及級別<1,2,3>)\n"; cin>>number>>name>>sex>>age>>score>>profess>>l_num; l_sco=0; for(int i=0;i<l_num;i++) { cin>>l[i].l_name>>l[i].l_rank; l_sco+=l[i].l_rank*10; } all_sco=0.7*score+0.3*l_sco; } class Pro_gra:public Graduate { public: void set_pro(); void display(); void change(); friend void enter(); friend void add(); friend void deleter(); friend void display(); friend void change(); friend void find(); friend void statical(); friend void exit(); friend void initsystem(); private: string domain; string pro_name; char pro_rank; float pro_sco; float all_scor; }; void Pro_gra::set_pro() { cin>>number>>name>>sex>>age>>score>>domain>>pro_name>>pro_rank; if(pro_rank=='A') pro_sco=90; else if(pro_rank=='B') pro_sco=75; else pro_sco=60; all_scor=0.5*score+0.5*pro_sco; } void Pro_gra::display() { cout<<"學號:"<<number <<"\n姓名:"<<name <<"\n性別:"<<sex <<"\n年齡:"<<age <<"\n課程成績:"<<score <<"\n領域:"<<domain <<"\n參與項目名稱:"<<pro_name <<"\n項目級別:"<<pro_rank <<"\n項目成績:"<<pro_sco <<"\n總成績:"<<all_scor<<endl; } void Pro_gra::change() { cout<<"請依次輸入修改後該工程碩士的學號、姓名、性別、年齡、課程成績、領域、參與項目(名稱及級別<A,B,C>)\n"; cin>>number>>name>>sex>>age>>score>>domain>>pro_name>>pro_rank; if(pro_rank=='A') pro_sco=90; else if(pro_rank=='B') pro_sco=75; else pro_sco=60; all_scor=0.5*score+0.5*pro_sco; } int k; int m,n; Sci_gra s[10]; Pro_gra p[10]; void enter() { Sci_gra sci; Pro_gra pro; cout<<"請輸入分別將要錄入的學術碩士及工程碩士人數:\n"; cin>>m>>n; ofstream outfile1("研究生信息管理檔案-學術碩士.txt",ios::app); ofstream outfile2("研究生信息管理檔案-工程碩士.txt",ios::app); if(!outfile1) { cerr<<"open 研究生信息管理檔案-學術碩士.txt error!\n"; exit(0); } if(!outfile2) { cerr<<"open 研究生信息管理檔案-工程碩士.txt error!\n"; exit(0); } for(int i=0;i<m;i++) { cout<<"請依次輸入這些學術碩士的學號、姓名、性別、年齡、課程成績、專業、發表論文篇數(並分別輸入論文成績及級別<1,2,3>)\n"; s[i].set_sci(); outfile1<<"學號:"<<s[i].number <<"\n姓名:"<<s[i].name <<"\n性別:"<<s[i].sex <<"\n年齡:"<<s[i].age <<"\n課程成績:"<<s[i].score; for(int j=0;j<s[i].l_num;j++) { outfile1<<"\n論文"<<j+1 <<"\n名稱:"<<s[i].l[j].l_name <<"\n級別:"<<s[i].l[j].l_rank; } outfile1<<"\n論文成績:"<<s[i].l_sco <<"\n總成績:"<<s[i].all_sco<<endl; } for(int i=0;i<n;i++) { cout<<"請依次輸入這些工程碩士的學號、姓名、性別、年齡、課程成績、領域、參與項目(名稱及級別<A,B,C>)\n"; p[i].set_pro(); outfile2<<"學號:"<<p[i].number <<"\n姓名:"<<p[i].name <<"\n性別:"<<p[i].sex <<"\n年齡:"<<p[i].age <<"\n課程成績:"<<p[i].score <<"\n領域:"<<p[i].domain <<"\n參與項目名稱:"<<p[i].pro_name <<"\n項目級別:"<<p[i].pro_rank <<"\n項目成績:"<<p[i].pro_sco <<"\n總成績:"<<p[i].all_scor<<endl; } outfile1.close(); outfile2.close(); system("cls"); cout<<"錄入成功請選擇:\n" <<"1.繼續錄入\n" <<"2.返回菜單\n" <<"3.退出系統\n"; cin>>k; system("cls"); switch(k) { case 1: enter();break; case 2: menu();break; case 3: exit(1);break; default: cout<<"error\n";break; } } void add() { int r=0,q=0; cout<<"請選擇要增長的研究生類型:\n" <<"1.學術碩士\n" <<"2.工程碩士\n" <<"3.返回菜單\n"; cin>>k; system("cls"); switch(k) { case 1: { cout<<"請依次輸入該學術碩士的學號、姓名、性別、年齡、課程成績、專業、發表論文篇數(並分別輸入論文成績及級別<1,2,3>)\n"; s[m].set_sci(); ofstream outfile1("研究生信息管理檔案-學術碩士.txt",ios::app); if(!outfile1) { cerr<<"open 研究生信息管理檔案-學術碩士.txt error!\n"; exit(0); } outfile1<<"學號:"<<s[m].number <<"\n姓名:"<<s[m].name <<"\n性別:"<<s[m].sex <<"\n年齡:"<<s[m].age <<"\n課程成績:"<<s[m].score; for(int j=0;j<s[m].l_num;j++) { outfile1<<"\n論文"<<j+1 <<"\n名稱:"<<s[m].l[j].l_name <<"\n級別:"<<s[m].l[j].l_rank; } outfile1<<"\n論文成績:"<<s[m].l_sco <<"\n總成績:"<<s[m].all_sco<<endl; outfile1.close(); m++; break; } case 2: { cout<<"請依次輸入該工程碩士的學號、姓名、性別、年齡、課程成績、領域、參與項目(名稱及級別<A,B,C>)\n"; ofstream outfile2("研究生信息管理檔案-工程碩士.txt",ios::app); if(!outfile2) { cerr<<"open 研究生信息管理檔案-工程碩士.txt error!\n"; exit(0); } p[n].set_pro(); outfile2<<"學號:"<<p[n].number <<"\n姓名:"<<p[n].name <<"\n性別:"<<p[n].sex <<"\n年齡:"<<p[n].age <<"\n課程成績:"<<p[n].score <<"\n領域:"<<p[n].domain <<"\n參與項目名稱:"<<p[n].pro_name <<"\n項目級別:"<<p[n].pro_rank <<"\n項目成績:"<<p[n].pro_sco <<"\n總成績:"<<p[n].all_scor<<endl; outfile2.close(); n++; break; } case 3: menu();break; default: cout<<"error\n";break; } cout<<"增長成功請選擇:\n" <<"1.繼續增長\n" <<"2.返回菜單\n" <<"3.退出系統\n"; cin>>k; system("cls"); switch(k) { case 1: add();break; case 2: menu();break; case 3: exit(1);break; default: cout<<"error\n";break; } } void deleter() { cout<<"請選擇要刪除的研究生類型:\n" <<"1.學術碩士\n" <<"2.工程碩士\n" <<"3.返回菜單\n"; cin>>k; system("cls"); int x=0; string str; switch(k) { case 1: { cout<<"請輸入要刪除的研究生名字:\n" ; cin>>str; for(int i=0;i<m;i++) if(s[i].name==str) { x=i; break; } if(x==-1) { cout<<"error 無此人\n"; break; } for(int i=x;i<m-1;i++) s[i]=s[i+1]; m--; break; } case 2: { cout<<"請輸入要刪除的研究生名字:\n" ; cin>>str; for(int i=0;i<m;i++) if(p[i].name==str) { x=i; break; } if(x==-1) { cout<<"error 無此人\n"; break; } for(int i=x;i<n-1;i++) p[i]=p[i+1]; n--; break; } default: cout<<"error\n";break; } system("cls"); cout<<"刪除成功請選擇:\n" <<"1.繼續刪除\n" <<"2.返回菜單\n" <<"3.退出系統\n"; cin>>k; system("cls"); switch(k) { case 1: deleter();break; case 2: menu();break; case 3: exit(1);break; default: cout<<"error\n";break; } } void display() { cout<<"學術碩士:\n"; for(int i=0;i<m;i++) s[i].display(); cout<<"工程碩士:\n"; for(int i=0;i<n;i++) p[i].display(); } void change() { cout<<"請選擇要修改的研究生類型:\n" <<"1.學術碩士\n" <<"2.工程碩士\n" <<"3.返回菜單\n"; cin>>k; system("cls"); int x=-1; string str; switch(k) { case 1: { cout<<"請輸入要修改的研究生名字:\n" ; cin>>str; for(int i=0;i<m;i++) if(s[i].name==str) { x=i; break; } if(x==-1) { cout<<"error 無此人\n"; break; } s[x].change(); } case 2: { cout<<"請輸入要修改的研究生名字:\n" ; cin>>str; for(int i=0;i<m;i++) if(p[i].name==str) { x=i; break; } if(x==-1) { cout<<"error 無此人\n"; break; } p[x].change(); break; } default: cout<<"error\n";break; } system("cls"); cout<<"修改爲功請選擇:\n" <<"1.繼續修改\n" <<"2.返回菜單\n" <<"3.退出系統\n"; cin>>k; system("cls"); switch(k) { case 1: change();break; case 2: menu();break; case 3: exit(1);break; default: cout<<"error\n";break; } } void find() { cout<<"請選擇要查找的研究生類型:\n" <<"1.學術碩士\n" <<"2.工程碩士\n" <<"3.返回菜單\n"; cin>>k; system("cls"); int x=-1; string str; switch(k) { case 1: { cout<<"請輸入要查找的研究生名字:\n" ; cin>>str; for(int i=0;i<m;i++) if(s[i].name==str) { x=i; break; } if(x==-1) { cout<<"無此人\n"; break; } s[x].display(); } case 2: { cout<<"請輸入要查找的研究生名字:\n" ; cin>>str; for(int i=0;i<m;i++) if(p[i].name==str) { x=i; break; } if(x==-1) { cout<<"無此人\n"; break; } p[x].display(); break; } default: cout<<"error\n";break; } cout<<"查找成功請選擇:\n" <<"1.繼續查找\n" <<"2.返回菜單\n" <<"3.退出系統\n"; cin>>k; system("cls"); switch(k) { case 1: find();break; case 2: menu();break; case 3: exit(1);break; default: cout<<"error\n";break; } } void statical() { float sum; for(int i=0;i<m;i++) sum+=s[i].all_sco; cout<<"學術碩士共"<<m<<"人,平均分爲"<<sum*1.0/m<<endl; for(int i=0;i<n;i++) sum+=p[i].all_scor; cout<<"工程碩士共"<<n<<"人,平均分爲"<<sum*1.0/n<<endl; cout<<"已統計、請選擇:\n" <<"1.返回菜單\n" <<"2.退出系統\n"; cin>>k; system("cls"); switch(k) { case 1: menu();break; case 2: exit(1);break; default: cout<<"error\n";break; } } void initsystem() { m=0; n=0; menu(); } void menu() { cout<<"***************************************************"<<endl; cout<<"*"<<" ****研究生管理系統**** "<<"*"<<endl; cout<<"*"<<" 1.研究生信息錄入 "<<"*"<<endl; cout<<"*"<<" 2.研究生信息增長 "<<"*"<<endl; cout<<"*"<<" 3.研究生信息刪除 "<<"*"<<endl; cout<<"*"<<" 4.研究生信息輸出 "<<"*"<<endl; cout<<"*"<<" 5.研究生信息修改 "<<"*"<<endl; cout<<"*"<<" 6.研究生信息查找 "<<"*"<<endl; cout<<"*"<<" 7.研究生信息統計 "<<"*"<<endl; cout<<"*"<<" 8.退出系統 "<<"*"<<endl; cout<<"*"<<" 9.初始化該系統 "<<"*"<<endl; cout<<"***************************************************"<<endl; cout<<"請選擇:"<<endl; cin>>k; system("cls"); switch(k) { case 1: enter();break; case 2: add();break; case 3: deleter();break; case 4: display();break; case 5: change();break; case 6: find();break; case 7: statical();break; case 8: exit(1);break; case 9: initsystem();break; default: cout<<"error\n";break; } } int main() { menu(); return 0; }
本文同步分享在 博客「使君杭千秋」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。windows