研究生信息管理系统(C++实现)

研究生信息管理系统(C++实现)

设计一个研究生基本信息管理系统,实现对不同学制的研究生包括:学术硕士和工程硕士的信息管理。定义一个基本的研究生类,基本信息包括:学号、姓名、性别、年龄、课程成绩。派生出学术硕士类,增加的属性包括:专业,发表论文(名称与级别(1、2、3)),可以多篇,最多3篇),论文成绩,总成绩。工程硕士增加的属性包括:领域,参与项目(名称与级别(A,B,C)),项目成绩,总成绩。计算方式如下

  1. 学术硕士论文成绩计算:各个级别的论文得分为:级别10,每个学生论文最高90分。总成绩=课程成绩0.7+论文成绩*0.3。
  2. 工程硕士项目成绩计算:每个学生只参与一项项目,各个级别得分:A级90,B级75,C级60,不参与项目得分为0。总成绩=课程成绩0.5+项目成绩0.5。
    系统基本功能包括:
  3. 数据文件管理功能:利用输入输出流创建新文件、打开新文件、保存文件。
  4. 计算与统计功能:能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括:总数、平均值、分段信息),例如:按总成绩得分段统计学生人数,以及所占百分比。能够计算每个研究生的总成绩。
  5. 记录管理功能。(增减改查)

代码实现

#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;
}

猜你喜欢

转载自blog.csdn.net/hyl1181/article/details/107493696