研究生信息管理系统(C++实现)
设计一个研究生基本信息管理系统,实现对不同学制的研究生包括:学术硕士和工程硕士的信息管理。定义一个基本的研究生类,基本信息包括:学号、姓名、性别、年龄、课程成绩。派生出学术硕士类,增加的属性包括:专业,发表论文(名称与级别(1、2、3)),可以多篇,最多3篇),论文成绩,总成绩。工程硕士增加的属性包括:领域,参与项目(名称与级别(A,B,C)),项目成绩,总成绩。计算方式如下
- 学术硕士论文成绩计算:各个级别的论文得分为:级别10,每个学生论文最高90分。总成绩=课程成绩0.7+论文成绩*0.3。
- 工程硕士项目成绩计算:每个学生只参与一项项目,各个级别得分:A级90,B级75,C级60,不参与项目得分为0。总成绩=课程成绩0.5+项目成绩0.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;
}