研究生信息管理系統(C++實現)

研究生信息管理系統(C++實現)

設計一個研究生基本信息管理系統,實現對不一樣學制的研究生包括:學術碩士和工程碩士的信息管理。定義一個基本的研究生類,基本信息包括:學號、姓名、性別、年齡、課程成績。派生出學術碩士類,增長的屬性包括:專業,發表論文(名稱與級別(一、二、3)),能夠多篇,最多3篇),論文成績,總成績。工程碩士增長的屬性包括:領域,參與項目(名稱與級別(A,B,C)),項目成績,總成績。計算方式以下ios

  1. 學術碩士論文成績計算:各個級別的論文得分爲:級別10,每一個學生論文最高90分。總成績=課程成績0.7+論文成績*0.3。
  2. 工程碩士項目成績計算:每一個學生只參與一項項目,各個級別得分:A級90,B級75,C級60,不參與項目得分爲0。總成績=課程成績0.5+項目成績0.5。
    系統基本功能包括:
  3. 數據文件管理功能:利用輸入輸出流建立新文件、打開新文件、保存文件。
  4. 計算與統計功能:可以打開已存在的數據表文件,對數據表中與某關鍵字匹配的相關記錄進行數據統計(包括:總數、平均值、分段信息),例如:按總成績得分段統計學生人數,以及所佔百分比。可以計算每一個研究生的總成績。
  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

相關文章
相關標籤/搜索