大一的课程设计,出题老师非常狡猾地避开了网上的所有类似题目,要为三种不同类型的学生分别设计管理代码,写了大概有一个星期多一点,中途遇到大量的bug和暗病,真的是血压升高的同时又气又急,不过好在最后还是坚持住成功写完了,一共差不多是是1800行代码,这里把代码分享一下,希望能够帮助到那些像我曾经一样这么痛苦的人。
题目16 “学生成绩管理系统设计”
1、问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。 中学生除了包括小学生所有信息外,还包括地理、历史成绩。 大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类(学生类,含有纯虚函数showshow)、虚函数、虚基类(小学生和大学生使用虚基类继承Student类)、多态和文件的输入/输出(保存、读取学生信息)等内容。
2、功能要求
(1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
(9)排序功能:可按总分和单科成绩排名次。
下面是代码,注释写的非常详细了,如果还是有不太明白的可以留言,我如果看到了一定会回复的。
#include<iostream>
#include<fstream>//文件输入/输出操作
#include<cstring>//字符串string
#include<iomanip>//输出操作
using namespace std;
void Create_Student(); //新增学生信息
void Delete_Student(); //删除学生信息
void Print_Student(); //显示学生信息
void Statistics_Student();//统计学生信息
void Search_Student(); //按姓名查找学生成绩
void Find_Student(); //按学号查找学生信息
void Modify_Student(); //修改学生信息
void Out_File(); //保存学生信息
void In_File(); //导入学生信息
void Sort_Student(); //排序学生信息
void Print_Student1();//显示小学生信息,为排序学生信息的函数服务
void Print_Student2();//显示中学生信息,为排序学生信息的函数服务
void Print_Student3();//显示大学生信息,为排序学生信息的函数服务
//定义抽象类学生类student(含有纯虚函数showshow())
class student
{
protected:
string num;//学号
string name;//姓名
string gender;//性别
float age;//年龄
string classes;//班级
public:
void set_num(string Num) {this->num=Num;} //设置学号
void set_name(string Name) {this->name=Name;} //设置姓名
void set_gender(string Gender) {this->gender=Gender;} //设置性别
void set_age(int Age) {this->age=Age;} //设置年龄
void set_classes(string Classes) {this->classes=Classes;}//设置班级
//以下为友元类
friend void Create_Student(); //新增学生信息
friend void Delete_Student(); //删除学生信息
friend void Print_Student(); //显示学生信息
friend void Statistics_Student();//统计学生信息
friend void Search_Student(); //按姓名查找学生成绩
friend void Find_Student(); //按学号查找学生信息
friend void Modify_Student(); //修改学生信息
friend void Sort_Student(); //排序学生信息
friend void Out_File(); //保存学生信息
friend void In_File(); //导入学生信息
int show_gender()//用于统计学生信息的函数Statistics()来读取男女生数量
{
if(this->gender=="男") return 1;
else if(this->gender=="女") return 2;
}
virtual void showshow()=0;//显示学生基础信息的纯虚函数,其具体实现在各个子类中
};
//从student类派生出小学生类shougaku
class shougaku:virtual public student//小学生和大学生使用虚基类
{
protected:
float english;//英语
float maths;//数学
float chinese;//语文
float total;//总分
public:
friend void Out_File();
friend void In_File();
friend void Statistics_Student(); //声明为友元函数,以便可以直接对学生的成绩进行统计
friend void Print_Student(); //打印学生数据需要对数据成员进行访问
friend void Print_Student1(); //打印学生数据需要对数据成员进行访问
friend void Create_Student(); //声明为友元函数,以便可以直接计算学生总成绩total
friend void Modify_Student();
void showshow()//用于查找学生信息的函数,在找到学生后对其信息进行输出
{
cout<<"姓名:"<<name<<endl;
cout<<"学号:"<<num<<endl;
cout<<"性别:"<<gender<<endl;
cout<<"班级:"<<classes<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"英语成绩:"<<english<<endl<<"数学成绩:"<<maths<<endl<<"语文成绩:"<<chinese<<endl<<"总分:"<<total<<endl;
}
void set_english(float English) {this->english=English;}//设置英语成绩
void set_maths(float Maths) {this->maths=Maths;} //设置数学成绩
void set_chinese(float Chinese) {this->chinese=Chinese;}//设置语文成绩
void set_total(float Total) {this->total=Total;} //设置总分
//以下show函数用于排序时读取各科成绩来比较分数高低
float show_total() {return this->total;} //读取总分
float show_english() {return this->english;}//读取英语成绩
float show_maths() {return this->maths;} //读取数学成绩
float show_chinese() {return this->chinese;}//读取语文成绩
}shou[100];//定义一个容量为100的小学生对象数组shou[]
//从小学生类shougaku中派生出中学生类chuugaku,因为中学生需要包括小学生所有的信息(已包含总分total)
class chuugaku:public shougaku
{
protected:
float geography;//地理
float history; //历史
public:
friend void Out_File();
friend void In_File();
friend void Statistics_Student();//声明为友元函数,以便可以直接对学生的成绩进行统计
friend void Print_Student(); //打印学生数据需要对数据成员进行访问
friend void Print_Student2(); //打印学生数据需要对数据成员进行访问
friend void Create_Student(); //声明为友元函数,以便可以直接计算学生总成绩total
friend void Modify_Student();
void showshow()//用于查找学生信息的函数,在找到学生后对其信息进行输出
{
cout<<"姓名:"<<name<<endl;
cout<<"学号:"<<num<<endl;
cout<<"性别:"<<gender<<endl;
cout<<"班级:"<<classes<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"英语成绩:"<<english<<endl<<"数学成绩:"<<maths<<endl<<"语文成绩:"<<chinese<<endl;
cout<<"地理成绩:"<<geography<<endl<<"历史成绩:"<<history<<endl<<"总分:"<<total<<endl;
}
void set_geography(float Geography) {this->geography=Geography;}//设置地理成绩
void set_history(float History) {this->history=History;} //设置历史成绩
//以下show函数用于排序时读取各科成绩来比较分数高低
float show_geography() {return this->geography;}//读取地理成绩
float show_history() {return this->history;} //读取历史成绩
}chuu[100];//定义一个容量为100的中学生对象数组chuu[]
//从student类派生出大学生类daigaku
class daigaku:virtual public student//小学生和大学生使用虚基类
{
protected:
string major; //专业
float adenglish;//大学英语
float program; //程序设计
float admaths; //高等数学
float total; //总分
public:
friend void Out_File();
friend void In_File();
friend void Statistics_Student();//声明为友元函数,以便可以直接对学生的成绩进行统计
friend void Print_Student(); //打印学生数据需要对数据成员进行访问
friend void Print_Student3(); //打印学生数据需要对数据成员进行访问
friend void Create_Student(); //声明为友元函数,以便可以直接计算学生总成绩total
friend void Modify_Student();
void showshow()//用于查找学生信息的函数,在找到学生后对其信息进行输出
{
cout<<"姓名:"<<name<<endl;
cout<<"学号:"<<num<<endl;
cout<<"性别:"<<gender<<endl;
cout<<"班级:"<<classes<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"专业:"<<major<<endl<<"大学英语成绩:"<<adenglish<<endl;
cout<<"程序设计成绩:"<<program<<endl<<"高等数学成绩:"<<admaths<<endl<<"总分:"<<total<<endl;
}
void set_major(string Major) {this->major=Major;} //设置专业
void set_adenglish(float Adenglish) {this->adenglish=Adenglish;}//设置大学英语成绩
void set_program(float Program) {this->program=Program;} //设置程序设计成绩
void set_admaths(float Admaths) {this->admaths=Admaths;} //设置高等数学成绩
void set_total(float Total) {this->total=Total;} //设置总分
//以下show函数用于排序时读取各科成绩来比较分数高低
float show_total() {return this->total;} //读取总分
float show_adenglish() {return this->adenglish;}//读取大学英语成绩
float show_program() {return this->program;} //读取程序设计成绩
float show_admaths() {return this->admaths;} //读取高等数学成绩
}dai[100];//定义一个容量为100的学生对象数组dai[]
/**************************************************************************************
***************************************************************************************
********************************以上为类的定义部分*************************************
*******************************以下为类的函数实现部分**********************************
***************************************************************************************
**************************************************************************************/
int mark1=0;//小学生数量
int mark2=0;//中学生数量
int mark3=0;//大学生数量
void Create_Student()//新增学生信息
{
system("cls");//清屏
cout<<"请选择要添加的学生类型:1.小学生 2.中学生 3.大学生"<<endl;
int a; cin>>a;//输入1或2或3进行选择
//根据输入的数字判断是小学生、中学生还是大学生
if(a==1)//如果是小学生
{
string name1,num1,gender1,classes1;//定义姓名、学号、性别、班级
float age1,english1,maths1,chinese1;//定义年龄以及语数外成绩
cout<<"请输入要添加的学生数量:"<<endl;
float v; cin>>v;//输入要添加的小学生数量
for(int i=mark1;i<mark1+v;i++)
{
cout<<"请输入第"<<i+1<<"位学生的姓名:";
cin>>name1;
shou[i].set_name(name1);
loop1:
cout<<"请输入第"<<i+1<<"位学生的学号:";
cin>>num1;
//检测学号是否重复
for(int j=0;j<i;j++)
{
if(shou[j].num==num1)
{
cout<<"您输入的学号已存在,请重新输入!"<<endl;
goto loop1;//重新导向,重新输入学号
}
}
//检测完毕,程序继续进行
shou[i].set_num(num1);
cout<<"请输入第"<<i+1<<"位学生的性别:";
cin>>gender1;
shou[i].set_gender(gender1);
cout<<"请输入第"<<i+1<<"位学生的年龄:";
cin>>age1;
shou[i].set_age(age1);
cout<<"请输入第"<<i+1<<"位学生的班级:";
cin>>classes1;
shou[i].set_classes(classes1);
cout<<"请输入第"<<i+1<<"位学生的英语成绩:";
cin>>english1;
shou[i].set_english(english1);
cout<<"请输入第"<<i+1<<"位学生的语文成绩:";
cin>>chinese1;
shou[i].set_chinese(chinese1);
cout<<"请输入第"<<i+1<<"位学生的数学成绩:";
cin>>maths1;
shou[i].set_maths(maths1);
//设置总分
float total1=shou[i].english+shou[i].chinese+shou[i].maths;
shou[i].set_total(total1);
cout<<"------------------------------------------------------------"<<endl;//分割线
}
mark1=mark1+v;//mark1+=v;//增加了v个小学生,小学生总数为mark1
}
//小学生信息录入完毕
if(a==2)//如果是中学生
{
string name1,num1,gender1,classes1;
float age1,english1,maths1,chinese1,geography1,history1;
cout<<"请输入要添加的中学生数量:"<<endl;
float v; cin>>v;//输入要添加的中学生数量
for(int i=mark2;i<v+mark2;i++)
{
cout<<"请输入第"<<i+1<<"位学生的姓名:";
cin>>name1;
chuu[i].set_name(name1);
loop2:
cout<<"请输入第"<<i+1<<"位学生的学号:";
cin>>num1;
//检测学号是否重复
for(int j=0;j<i;j++)
{
if(chuu[j].num==num1)
{
cout<<"您输入的学号已存在,请重新输入!"<<endl;
goto loop2;//重新导向,重新输入学号
}
}
//检测完毕,程序继续进行
chuu[i].set_num(num1);
cout<<"请输入第"<<i+1<<"位学生的性别:";
cin>>gender1;
chuu[i].set_gender(gender1);
cout<<"请输入第"<<i+1<<"位学生的年龄:";
cin>>age1;
chuu[i].set_age(age1);
cout<<"请输入第"<<i+1<<"位学生的班级:";
cin>>classes1;
chuu[i].set_classes(classes1);
cout<<"请输入第"<<i+1<<"位学生的英语成绩:";
cin>>english1;
chuu[i].set_english(english1);
cout<<"请输入第"<<i+1<<"位学生的语文成绩:";
cin>>chinese1;
chuu[i].set_chinese(chinese1);
cout<<"请输入第"<<i+1<<"位学生的数学成绩:";
cin>>maths1;
chuu[i].set_maths(maths1);
cout<<"请输入第"<<i+1<<"位学生的地理成绩:";
cin>>geography1;
chuu[i].set_geography(geography1);
cout<<"请输入第"<<i+1<<"位学生的历史成绩:";
cin>>history1;
chuu[i].set_history(history1);
//设置总分
float total2=chuu[i].english+chuu[i].chinese+chuu[i].maths+chuu[i].geography+chuu[i].history;
chuu[i].set_total(total2);
cout<<"------------------------------------------------------------"<<endl;
}
mark2=mark2+v;//mark2+=v;//增加了v个中学生,中学生总数为mark2
}
//中学生信息录入完毕
if(a==3)//如果是大学生
{
string name1,num1,gender1,classes1,major1;
float age1,adenglish1,program1,admaths1;
cout<<"请输入要添加的大学生数量:"<<endl;
float v; cin>>v;//输入要添加的大学生数量
for(int i=mark3;i<v+mark3;i++)
{
cout<<"请输入第"<<i+1<<"位学生的姓名:";
cin>>name1;
dai[i].set_name(name1);
loop3:
cout<<"请输入第"<<i+1<<"位学生的学号:";
cin>>num1;
//检测学号是否重复
for(int j=0;j<i;j++)
{
if(dai[j].num==num1)
{
cout<<"您输入的学号已存在,请重新输入!"<<endl;
goto loop3;//重新导向,重新输入学号
}
}
//检测完毕,程序继续进行
dai[i].set_num(num1);
cout<<"请输入第"<<i+1<<"位学生的性别:";
cin>>gender1;
dai[i].set_gender(gender1);
cout<<"请输入第"<<i+1<<"位学生的年龄:";
cin>>age1;
dai[i].set_age(age1);
cout<<"请输入第"<<i+1<<"位学生的班级:";
cin>>classes1;
dai[i].set_classes(classes1);
cout<<"请输入第"<<i+1<<"位学生的专业:";
cin>>major1;
dai[i].set_major(major1);
cout<<"请输入第"<<i+1<<"位学生的大学英语成绩:";
cin>>adenglish1;
dai[i].set_adenglish(adenglish1);
cout<<"请输入第"<<i+1<<"位学生的程序设计成绩:";
cin>>program1;
dai[i].set_program(program1);
cout<<"请输入第"<<i+1<<"位学生的高等数学成绩:";
cin>>admaths1;
dai[i].set_admaths(admaths1);
//设置总分
float total3=dai[i].adenglish+dai[i].program+dai[i].admaths;
dai[i].set_total(total3);
cout<<"------------------------------------------------------------"<<endl;
}
mark3=mark3+v;//mark3+=v;//增加了v个大学生,大学生总数为mark3
}
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Delete_Student()//删除学生信息
{
system("cls");//清屏
cout<<"请输入要删除的学生类型:1.小学生 2.中学生 3.大学生"<<endl;
int aa; cin>>aa;//输入1或2或3进行选择
//根据输入的数字判断是小学生、中学生还是大学生
if(aa==1)//如果是小学生
{
cout<<"请输入要删除的小学生的学号:"<<endl;
string id; cin>>id;
bool x=1;
for(int i=0;i<100;i++)
{
if(shou[i].num==id)
{
x=0;
//仅删除学号和姓名这两个重要信息,由于缺失了这两个信息,便无法通过任何手段查找到该学生的所有信息
shou[i].num="\0";
shou[i].name="\0";
cout<<"删除成功!"<<endl;
}
}
if(x==1) cout<<"此学号不存在"<<endl;
}
else if(aa==2)//如果是中学生
{
cout<<"请输入要删除的中学生的学号:"<<endl;
string id; cin>>id;
bool x=1;
for(int i=0;i<100;i++)
{
if(chuu[i].num==id)
{
//仅删除学号和姓名这两个重要信息,由于缺失了这两个信息,便无法通过任何手段查找到该学生的所有信息
chuu[i].num="\0";
chuu[i].name="\0";
x=0;
cout<<"删除成功!"<<endl;
}
}
if(x==1) cout<<"此学号不存在"<<endl;
}
else if(aa==3)//如果是大学生
{
cout<<"请输入要删除的大学生的学号:"<<endl;
string id; cin>>id;
bool x=1;
for(int i=0;i<100;i++)
{
if(dai[i].num==id)
{
//仅删除学号和姓名这两个重要信息,由于缺失了这两个信息,便无法通过任何手段查找到该学生的所有信息
dai[i].num="\0";
dai[i].name="\0";
cout<<"删除成功!"<<endl;
x=0;
}
}
if(x==1) cout<<"此学号不存在"<<endl;
}
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Print_Student()//显示学生信息
{
system("cls");//清屏
bool x=1;
cout<<"小学生信息:"<<endl;
cout << "---------------------------------------------------------------------------------------" << endl;
cout << setiosflags(ios::left)<< setw(10)//设置左对齐输出
<< "学号" << setw(10) << "姓名" << setw(10) << "性别" << setw(10)
<< "年龄" << setw(10) << "班级" << setw(10) << "英语" << setw(10)
<< "数学" << setw(10) << "语文" << setw(10) << "总分" << endl;
cout << "---------------------------------------------------------------------------------------" << endl;
for(int i=0;i<100;i++)
{
if(shou[i].num!="\0")
{
x=0;
cout <<setiosflags(ios::left)<<setw(10)
<<shou[i].num <<setw(10) <<shou[i].name <<setw(10) <<shou[i].gender<<setw(10) <<shou[i].age <<setw(10)
<<shou[i].classes<<setw(10) <<shou[i].english<<setw(10) <<shou[i].maths <<setw(10) <<shou[i].chinese<<setw(10)<<shou[i].total<<endl;
cout << "---------------------------------------------------------------------------------------" << endl;
}
}
if(x==1) cout<<"暂无小学生信息"<<endl;
cout<<endl;//空两行分隔
cout<<endl;
bool y=1;
cout<<"中学生信息:"<<endl;
cout << "-----------------------------------------------------------------------------------------------------------" << endl;
cout << setiosflags(ios::left)<< setw(10)//设置左对齐输出
<< "学号" << setw(10) << "姓名" << setw(10) << "性别" << setw(10)
<< "年龄" << setw(10) << "班级" << setw(10) << "英语" << setw(10)
<< "数学" << setw(10) << "语文" << setw(10) << "地理" << setw(10)<< "历史"<< setw(10)<< "总分"<<endl;//制表符
cout << "-----------------------------------------------------------------------------------------------------------" << endl;
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
y=0;
cout <<setiosflags(ios::left)<<setw(10)
<<chuu[i].num <<setw(10) <<chuu[i].name <<setw(10)<<chuu[i].gender<<setw(10)<<chuu[i].age <<setw(10)
<<chuu[i].classes <<setw(10) <<chuu[i].english<<setw(10)<<chuu[i].maths <<setw(10)<<chuu[i].chinese<<setw(10)
<<chuu[i].geography<<setw(10) <<chuu[i].history<<setw(10)<<chuu[i].total <<endl;
cout << "-----------------------------------------------------------------------------------------------------------" << endl;
}
}
if(y==1) cout<<"暂无中学生信息"<<endl;
cout<<endl;//空两行分隔
cout<<endl;
bool z=1;
cout<<"大学生信息:"<<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout <<setiosflags(ios::left)<<setw(15)//因为大学生专业名较长,为防止信息错位,故单信息长度增大到20个字符长度
<< "学号" << setw(10) << "姓名" << setw(10) << "性别" << setw(10)
<< "年龄" << setw(15) << "班级" << setw(20) << "专业" << setw(10)
<< "大学英语" << setw(10) << "程序设计" << setw(10) << "高等数学" << setw(10)<<"总分"<<endl;//制表符
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
for(int i=0;i<100;i++)
{
if(dai[i].num!="\0")
{
z=0;
cout <<setiosflags(ios::left)<<setw(15)
<<dai[i].num <<setw(10) <<dai[i].name <<setw(10) <<dai[i].gender <<setw(10) <<dai[i].age <<setw(15)
<<dai[i].classes<<setw(20) <<dai[i].major <<setw(10) <<dai[i].adenglish<<setw(10) <<dai[i].program <<setw(10) <<dai[i].admaths<<setw(10)<<dai[i].total<<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
}
}
if(z==1) cout<<"暂无大学生信息"<<endl;
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Statistics_Student()//统计学生信息
{
system("cls");//清屏
cout<<"请输入统计方式:1.统计学生人数 2.学生总分 3.单科的平均分"<<endl;
int www; cin>>www;
if(www==1)//统计学生人数
{
int sum1=0;//男生人数
int sum2=0;//女生人数
for(int i=0;i<100;i++)
{
if(shou[i].show_gender()==1) sum1++;
if(shou[i].show_gender()==2) sum2++;
}
cout<<"共有小学生"<<sum1+sum2<<"人,其中男学生有"<<sum1<<"人,女生有"<<sum2<<"人"<<endl;
//
int sum11=0;//男num
int sum22=0;//女
for(int i=0;i<100;i++)
{
if(chuu[i].show_gender()==1) sum11++;
if(chuu[i].show_gender()==2) sum22++;
}
cout<<"共有中学生"<<sum11+sum22<<"人,其中男学生有"<<sum11<<"人,女生有"<<sum22<<"人"<<endl;
//
int sum111=0;//男num
int sum222=0;//女
for(int i=0;i<100;i++)
{
if(dai[i].show_gender()==1) sum111++;
if(dai[i].show_gender()==2) sum222++;
}
cout<<"共有大学生"<<sum111+sum222<<"人,其中男学生有"<<sum111<<"人,女生有"<<sum222<<"人"<<endl;
}
else if(www==2)//学生总分
{
cout<<"请输入要统计总分的学生学号:"<<endl;
string bangou; cin>>bangou;
bool x=1;
for(int i=0;i<100;i++)
{
if(shou[i].num==bangou)
{
x=0;
float total1=shou[i].english+shou[i].maths+shou[i].chinese;
cout<<shou[i].num<<"号小学生"<<shou[i].name<<"的总分为:"<<total1<<endl;
}
if(chuu[i].num==bangou)
{
x=0;
float total2=chuu[i].english+chuu[i].maths+chuu[i].chinese+chuu[i].geography+chuu[i].history;
cout<<chuu[i].num<<"号中学生"<<chuu[i].name<<"的总分为:"<<total2<<endl;
}
if(dai[i].num==bangou)
{
x=0;
float total3=dai[i].adenglish+dai[i].program+dai[i].admaths;
cout<<dai[i].num<<"号大学生"<<dai[i].name<<"的总分为:"<<total3<<endl;
}
}
if(x==1) cout<<"对不起,没有此学生!"<<endl;
}
else if(www==3)//单科的平均分
{
cout<<"请输入要统计的学生类型:1.小学生 2.中学生 3.大学生" <<endl;
int zxc; cin>>zxc;
if(zxc==1)//如果是小学生
{
cout<<"请输入要统计的小学生的单科平均分:1.语文 2.英语 3.数学"<<endl;
int zxc1; cin>>zxc1;
switch(zxc1)
{
case 1:
{float count1=0;//记录小学生人数的临时变量
float sum1=0;//总分
float average1=0;//语文平均分
for(int i=0;i<100;i++)
{
if(shou[i].num!="\0")
{
count1++;
sum1=sum1+shou[i].chinese;
}
}
average1=sum1/count1;
cout<<"语文平均分为:"<<average1<<endl;
break;}
case 2:
{float count2=0;//记录小学生人数的临时变量
float sum2=0;//总分
float average2=0;//英语平均分
for(int i=0;i<100;i++)
{
if(shou[i].num!="\0")
{
count2++;
sum2=sum2+shou[i].english;
}
}
average2=sum2/count2;
cout<<"英语平均分为:"<<average2<<endl;
break;}
case 3:
{float count3=0;//记录小学生人数的临时变量
float sum3=0;//总分
float average3=0;//数学平均分
for(int i=0;i<100;i++)
{
if(shou[i].num!="\0")
{
count3++;
sum3=sum3+shou[i].maths;
}
}
average3=sum3/count3;
cout<<"数学平均分为:"<<average3<<endl;
break;}
}
}
if(zxc==2)//如果是中学生
{
cout<<"请输入要统计的中学生的单科平均分:1.语文 2.英语 3.数学 4.地理 5.历史"<<endl;
int zxc2; cin>>zxc2;
switch(zxc2)
{
case 1:
{float count1=0;//记录中学生人数的临时变量
float sum1=0;//总分
float average1=0;//语文平均分
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
count1++;
sum1=sum1+chuu[i].chinese;
}
}
average1=sum1/count1;
cout<<"语文平均分为:"<<average1<<endl;
break;}
case 2:
{float count2=0;//记录中学生人数的临时变量
float sum2=0;//总分
float average2=0;//英语平均分
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
count2++;
sum2=sum2+chuu[i].english;
}
}
average2=sum2/count2;
cout<<"英语平均分为:"<<average2<<endl;
break;}
case 3:
{float count3=0;//记录中学生人数的临时变量
float sum3=0;//总分
float average3=0;//数学平均分
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
count3++;
sum3=sum3+chuu[i].maths;
}
}
average3=sum3/count3;
cout<<"数学平均分为:"<<average3<<endl;
break;}
case 4:
{float count4=0;//记录中学生人数的临时变量
float sum4=0;//总分
float average4=0;//地理平均分
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
count4++;
sum4=sum4+chuu[i].geography;
}
}
average4=sum4/count4;
cout<<"地理平均分为:"<<average4<<endl;
break;}
case 5:
{float count5=0;//记录中学生人数的临时变量
float sum5=0;//总分
float average5=0;//历史平均分
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
count5++;
sum5=sum5+chuu[i].history;
}
}
average5=sum5/count5;
cout<<"历史平均分为:"<<average5<<endl;
break;}
}
}
if(zxc==3)//如果是大学生
{
cout<<"请输入要统计的中学生的单科平均分:1.大学英语 2.程序设计 3.高等数学"<<endl;
int zxc3; cin>>zxc3;
switch(zxc3)
{
case 1:
{float count1=0;//记录大学生人数的临时变量
float sum1=0;//总分
float average1=0;//大学英语平均分
for(int i=0;i<100;i++)
{
if(dai[i].num!="\0")
{
count1++;
sum1=sum1+dai[i].adenglish;
}
}
average1=sum1/count1;
cout<<"大学英语平均分为:"<<average1<<endl;
break;}
case 2:
{float count2=0;//记录大学生人数的临时变量
float sum2=0;//总分
float average2=0;//大学英语平均分
for(int i=0;i<100;i++)
{
if(dai[i].num!="\0")
{
count2++;
sum2=sum2+dai[i].program;
}
}
average2=sum2/count2;
cout<<"程序设计平均分为:"<<average2<<endl;
break;}
case 3:
{float count3=0;//记录大学生人数的临时变量
float sum3=0;//总分
float average3=0;//大学英语平均分
for(int i=0;i<100;i++)
{
if(dai[i].num!="\0")
{
count3++;
sum3=sum3+dai[i].admaths;
}
}
average3=sum3/count3;
cout<<"高等数学平均分为:"<<average3<<endl;
break;}
}
}
}
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Search_Student()//按姓名查找学生成绩
{
system("cls");//清屏
cout<<"请输入要查找的学生姓名:"<<endl;
string namae; cin>>namae;
bool x=1;
for(int i=0;i<100;i++)
{
if(shou[i].name==namae) x=0,shou[i].showshow();
if(chuu[i].name==namae) x=0,chuu[i].showshow();
if(dai[i].name==namae) x=0,dai[i].showshow();
}
if(x==1) cout<<"对不起,没有此学生!"<<endl;
}
void Find_Student()//按学号查找学生成绩
{
system("cls");//清屏
cout<<"请输入要查找的学生类型:1.小学生 2.中学生 3.大学生"<<endl;
int cha; cin>>cha;
switch(cha)
{
case 1://如果是小学生
{
cout<<"请输入要查询的小学生学号:"<<endl;
string bangou1; cin>>bangou1;
bool x=1;
for(int i=0;i<100;i++)
{
if(shou[i].num==bangou1) x=0,shou[i].showshow();
}
if(x==1) cout<<"对不起,没有此学生!";
break;
}
case 2://如果是中学生
{
cout<<"请输入要查询的中学生学号:"<<endl;
string bangou2; cin>>bangou2;
bool y=1;
for(int i=0;i<100;i++)
{
if(chuu[i].num==bangou2) y=0,chuu[i].showshow();
}
if(y==1) cout<<"对不起,没有此学生!";
break;
}
case 3://如果是大学生
{
cout<<"请输入要查询的大学生学号:"<<endl;
string bangou3; cin>>bangou3;
bool z=1;
for(int i=0;i<100;i++)
{
if(dai[i].num==bangou3) z=0,dai[i].showshow();
}
if(z==1) cout<<"对不起,没有此学生!";
break;
}
}
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Modify_Student()//修改学生信息
{
system("cls");//清屏
cout<<"请输入要修改的学生类型:1.小学生 2.中学生 3.大学生"<<endl;
int n;
cin>>n;
cout<<"请输入要修改的学生的学号:"<<endl;
string kk;
cin>>kk;
if(n==1)//如果是小学生
{
bool x=1;
for(int i=0;i<100;i++)
{
if(shou[i].num==kk)
{
x=0;
string name1,num1,gender1,classes1;
float age1,english1,maths1,chinese1;
//改姓名
cout<<"原姓名:"<<shou[i].name;
cout<<" ,是否修改? 1.是 2.否 ";
int x1; cin>>x1;
if(x1==1)
{
cout<<"请输入更改后的姓名:";
cin>>name1;
shou[i].set_name(name1);
}
if(x1==2) {}
//改学号
cout<<"原学号:"<<shou[i].num;
cout<<" ,是否修改? 1.是 2.否 ";
int x2; cin>>x2;
if(x2==1)
{
loopa:
cout<<"请输入更改后的学号:";
cin>>num1;
//检测学号是否重复
for(int j=0;j<100;j++)
{
if(shou[j].num==num1)
{
cout<<"您输入的学号已存在,请重新输入!"<<endl;
goto loopa;//重新导向,重新输入学号
}
}
shou[i].set_num(num1);
}
if(x2==2) {}
//检测完毕,程序继续进行
//改性别
cout<<"原性别:"<<shou[i].gender;
cout<<" ,是否修改? 1.是 2.否 ";
int x3; cin>>x3;
if(x3==1)
{
cout<<"请输入更改后的性别:";
cin>>gender1;
shou[i].set_gender(gender1);
}
if(x3==2) {}
//改年龄
cout<<"原年龄:"<<shou[i].age;
cout<<" ,是否修改? 1.是 2.否 ";
int x4; cin>>x4;
if(x4==1)
{
cout<<"请输入更改后的年龄:";
cin>>age1;
shou[i].set_age(age1);
}
if(x4==2) {}
//改班级
cout<<"原班级:"<<shou[i].classes;
cout<<" ,是否修改? 1.是 2.否 ";
int x5; cin>>x5;
if(x5==1)
{
cout<<"请输入更改后的班级:";
cin>>classes1;
shou[i].set_classes(classes1);
}
if(x5==2) {}
//改英语成绩
cout<<"原英语成绩:"<<shou[i].english;
cout<<" ,是否修改? 1.是 2.否 ";
int x6; cin>>x6;
if(x6==1)
{
cout<<"请输入更改后的英语成绩:";
cin>>english1;
shou[i].set_english(english1);
}
if(x6==2) {}
//改语文成绩
cout<<"原语文成绩:"<<shou[i].chinese;
cout<<" ,是否修改? 1.是 2.否 ";
int x7; cin>>x7;
if(x7==1)
{
cout<<"请输入更改后的语文成绩:";
cin>>chinese1;
shou[i].set_chinese(chinese1);
}
if(x7==2) {}
//改数学成绩
cout<<"原数学成绩:"<<shou[i].maths;
cout<<" ,是否修改? 1.是 2.否 ";
int x8; cin>>x8;
if(x8==1)
{
cout<<"请输入更改后的数学成绩:";
cin>>maths1;
shou[i].set_maths(maths1);
}
if(x8==2) {}
//信息变更后重新设置总分
float total1=shou[i].english+shou[i].chinese+shou[i].maths;
shou[i].set_total(total1);
break;
}
}
if(x==1) cout<<"记录为空!"<<endl;
}
else if(n==2)//如果是中学生
{
bool x=1;
for(int i=0;i<100;i++)
{
if(chuu[i].num==kk)
{
x=0;
string name1,num1,gender1,classes1;
float age1,english1,maths1,chinese1,geography1,history1;
//改姓名
cout<<"原姓名:"<<chuu[i].name;
cout<<" ,是否修改? 1.是 2.否 ";
int x1; cin>>x1;
if(x1==1)
{
cout<<"请输入更改后的姓名:";
cin>>name1;
chuu[i].set_name(name1);
}
if(x1==2) {}
//改学号
cout<<"原学号:"<<chuu[i].num;
cout<<" ,是否修改? 1.是 2.否 ";
int x2; cin>>x2;
if(x2==1)
{
loopb:
cout<<"请输入更改后的学号:";
cin>>num1;
//检测学号是否重复
for(int j=0;j<100;j++)
{
if(chuu[j].num==num1)
{
cout<<"您输入的学号已存在,请重新输入!"<<endl;
goto loopb;//重新导向,重新输入学号
}
}
chuu[i].set_num(num1);
}
if(x2==2) {}
//检测完毕,程序继续进行
//改性别
cout<<"原性别:"<<chuu[i].gender;
cout<<" ,是否修改? 1.是 2.否 ";
int x3; cin>>x3;
if(x3==1)
{
cout<<"请输入更改后的性别:";
cin>>gender1;
chuu[i].set_gender(gender1);
}
if(x3==2) {}
//改年龄
cout<<"原年龄:"<<chuu[i].age;
cout<<" ,是否修改? 1.是 2.否 ";
int x4; cin>>x4;
if(x4==1)
{
cout<<"请输入更改后的年龄:";
cin>>age1;
chuu[i].set_age(age1);
}
if(x4==2) {}
//改班级
cout<<"原班级:"<<chuu[i].classes;
cout<<" ,是否修改? 1.是 2.否 ";
int x5; cin>>x5;
if(x5==1)
{
cout<<"请输入更改后的班级:";
cin>>classes1;
chuu[i].set_classes(classes1);
}
if(x5==2) {}
//改英语成绩
cout<<"原英语成绩:"<<chuu[i].english;
cout<<" ,是否修改? 1.是 2.否 ";
int x6; cin>>x6;
if(x6==1)
{
cout<<"请输入更改后的英语成绩:";
cin>>english1;
chuu[i].set_english(english1);
}
if(x6==2) {}
//改语文成绩
cout<<"原语文成绩:"<<chuu[i].chinese;
cout<<" ,是否修改? 1.是 2.否 ";
int x7; cin>>x7;
if(x7==1)
{
cout<<"请输入更改后的语文成绩:";
cin>>chinese1;
chuu[i].set_chinese(chinese1);
}
if(x7==2) {}
//改数学成绩
cout<<"原数学成绩:"<<chuu[i].maths;
cout<<" ,是否修改? 1.是 2.否 ";
int x8; cin>>x8;
if(x8==1)
{
cout<<"请输入更改后的数学成绩:";
cin>>maths1;
chuu[i].set_maths(maths1);
}
if(x8==2) {}
//改地理成绩
cout<<"原地理成绩:"<<chuu[i].geography;
cout<<" ,是否修改? 1.是 2.否 ";
int x9; cin>>x9;
if(x9==1)
{
cout<<"请输入更改后的地理成绩:";
cin>>geography1;
chuu[i].set_geography(geography1);
}
if(x9==2) {}
//改历史成绩
cout<<"原历史成绩:"<<chuu[i].history;
cout<<" ,是否修改? 1.是 2.否 ";
int x10; cin>>x10;
if(x10==1)
{
cout<<"请输入更改后的数学成绩:";
cin>>history1;
chuu[i].set_history(history1);
}
if(x10==2) {}
//设置总分
float total2=chuu[i].english+chuu[i].chinese+chuu[i].maths+chuu[i].geography+chuu[i].history;
chuu[i].set_total(total2);
break;
}
}
if(x==1) cout<<"记录为空!"<<endl;
}
else if(n==3)//如果是大学生
{
bool x=1;
for(int i=0;i<100;i++)
{
if(dai[i].num==kk)
{
x=0;
string name1,num1,gender1,classes1,major1;
float age1,adenglish1,program1,admaths1;
//改姓名
cout<<"原姓名:"<<dai[i].name;
cout<<" ,是否修改? 1.是 2.否 ";
int x1; cin>>x1;
if(x1==1)
{
cout<<"请输入更改后的姓名:";
cin>>name1;
dai[i].set_name(name1);
}
if(x1==2) {}
//改学号
cout<<"原学号:"<<dai[i].num;
cout<<" ,是否修改? 1.是 2.否 ";
int x2; cin>>x2;
if(x2==1)
{
loopc:
cout<<"请输入更改后的学号:";
cin>>num1;
//检测学号是否重复
for(int j=0;j<100;j++)
{
if(dai[j].num==num1)
{
cout<<"您输入的学号已存在,请重新输入!"<<endl;
goto loopc;//重新导向,重新输入学号
}
}
dai[i].set_num(num1);
}
if(x2==2) {}
//检测完毕,程序继续进行
//改性别
cout<<"原性别:"<<dai[i].gender;
cout<<" ,是否修改? 1.是 2.否 ";
int x3; cin>>x3;
if(x3==1)
{
cout<<"请输入更改后的性别:";
cin>>gender1;
dai[i].set_gender(gender1);
}
if(x3==2) {}
//改年龄
cout<<"原年龄:"<<dai[i].age;
cout<<" ,是否修改? 1.是 2.否 ";
int x4; cin>>x4;
if(x4==1)
{
cout<<"请输入更改后的年龄:";
cin>>age1;
dai[i].set_age(age1);
}
if(x4==2) {}
//改班级
cout<<"原班级:"<<dai[i].classes;
cout<<" ,是否修改? 1.是 2.否 ";
int x5; cin>>x5;
if(x5==1)
{
cout<<"请输入更改后的班级:";
cin>>classes1;
dai[i].set_classes(classes1);
}
if(x5==2) {}
//改专业
cout<<"原专业:"<<dai[i].major;
cout<<" ,是否修改? 1.是 2.否 ";
int x6; cin>>x6;
if(x6==1)
{
cout<<"请输入更改后的专业:";
cin>>major1;
dai[i].set_major(major1);
}
if(x6==2) {}
//改大学英语成绩
cout<<"原大学英语成绩:"<<dai[i].adenglish;
cout<<" ,是否修改? 1.是 2.否 ";
int x7; cin>>x7;
if(x7==1)
{
cout<<"请输入更改后的大学英语成绩:";
cin>>adenglish1;
dai[i].set_adenglish(adenglish1);
}
if(x7==2) {}
//改程序设计成绩
cout<<"原程序设计成绩:"<<dai[i].program;
cout<<" ,是否修改? 1.是 2.否 ";
int x8; cin>>x8;
if(x8==1)
{
cout<<"请输入更改后的程序设计成绩:";
cin>>program1;
dai[i].set_program(program1);
}
if(x8==2) {}
//改高等数学成绩
cout<<"原高等数学成绩:"<<dai[i].admaths;
cout<<" ,是否修改? 1.是 2.否 ";
int x9; cin>>x9;
if(x9==1)
{
cout<<"请输入更改后的高等数学成绩:";
cin>>admaths1;
dai[i].set_admaths(admaths1);
}
if(x9==2) {}
//设置总分
float total3=dai[i].adenglish+dai[i].program+dai[i].admaths;
dai[i].set_total(total3);
break;
}
}
if(x==1) cout<<"记录为空!"<<endl;
}
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Out_File()//保存学生信息
{
system("cls");//清屏
//保存小学生信息
ofstream saveinf1("shougaku_out.txt",ios::out);
for(int i=0;i<100;i++)
{
if(shou[i].num!="\0")//如果学号存在则进行信息保存
saveinf1<<shou[i].num<<" "<<shou[i].name<<" "<<shou[i].age<<" "<<shou[i].classes<<" "<<shou[i].gender
<<" "<<shou[i].chinese<<" "<<shou[i].english<<" "<<shou[i].maths<<" "<<shou[i].total;
saveinf1 << '\n';//换行,学生信息一人一行保存
}
saveinf1.close();//调用close函数关闭文件
//保存中学生信息
ofstream saveinf2("chuugaku_out.txt",ios::out);
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")//如果学号存在则进行信息保存
saveinf2<<chuu[i].num<<" "<<chuu[i].name<<" "<<chuu[i].age<<" "<<chuu[i].classes<<" "<<chuu[i].gender
<<" "<<chuu[i].chinese <<" "<<chuu[i].english<<" "<<chuu[i].maths
<<" "<<chuu[i].geography<<" "<<chuu[i].history<<" "<<chuu[i].total;
saveinf2 << '\n';//换行,学生信息一人一行保存
}
saveinf2.close();//调用close函数关闭文件
//保存大学生信息
ofstream saveinf3("daigaku_out.txt",ios::out);
for(int i=0;i<100;i++)
{
if(dai[i].num!="\0")//如果学号存在则进行信息保存
saveinf3<<dai[i].num<<" "<<dai[i].name<<" "<<dai[i].age<<" "<<dai[i].classes<<" "<<dai[i].gender
<<" "<<dai[i].major<<" "<<dai[i].adenglish<<" "<<dai[i].program<<" "<<dai[i].admaths<<" "<<dai[i].total;
saveinf3 << '\n';//换行,学生信息一人一行保存
}
saveinf3.close();//调用close函数关闭文件
cout<<"保存成功!"<<endl;
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void In_File()//导入学生信息
//注意:导入学生信息所用的.txt文本文件应当使用ASNI编码方式,否则会乱码,具体操作为:编辑完txt文件后在左上角文件菜单栏选择“另存为”,然后在另存为选项中修改字符编码方式为ASNI并保存
{
system("cls");//清屏
//导入小学生信息
ifstream in1("shougaku_in.txt",ios::in);
if(!in1)//如果打开文件失败
{
cout<<"打开小学生.txt文件失败!\n";
}
else
{
int i=0;
while(!in1.eof())//如果没有到达文件末尾则一直循环导入学生信息
{
in1>>shou[i].num>> shou[i].name>> shou[i].age>> shou[i].classes>> shou[i].gender>> shou[i].chinese>> shou[i].english>> shou[i].maths>>shou[i].total;
i++;
}
cout<<"导入小学生信息成功!"<<endl;
}
in1.close();//调用close函数关闭文件
//导入中学生信息
ifstream in2("chuugaku_in.txt",ios::in);
if(!in2)//如果打开文件失败
{
cout<<"打开中学生.txt文件失败!\n";
}
else
{
int i=0;
while(!in2.eof())//如果没有到达文件末尾则一直循环导入学生信息
{
in2>>chuu[i].num>> chuu[i].name>> chuu[i].age>> chuu[i].classes>> chuu[i].gender>> chuu[i].chinese>> chuu[i].english>> chuu[i].maths>> chuu[i].geography>> chuu[i].history>> chuu[i].total;
i++;
}
cout<<"导入中学生信息成功!"<<endl;
}
in2.close();//调用close函数关闭文件
//导入大学生信息
ifstream in3("daigaku_in.txt",ios::in);
if(!in3)//如果打开文件失败
{
cout<<"打开大学生.txt文件失败!\n";
}
else
{
int i=0;
while(!in3.eof())//如果没有到达文件末尾则一直循环导入学生信息
{
in3>>dai[i].num>> dai[i].name>> dai[i].age>> dai[i].classes>> dai[i].gender>> dai[i].major>> dai[i].adenglish>> dai[i].program>> dai[i].admaths>> dai[i].total;
i++;
}
cout<<"导入大学生信息成功!"<<endl;
}
in3.close();//调用close函数关闭文件
}
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
##################################################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
void Print_Student1() //显示小学生信息
{
system("cls");//清屏
bool x=1;
cout<<"小学生信息:"<<endl;
cout << "---------------------------------------------------------------------------------------" << endl;
cout << setiosflags(ios::left)<< setw(10)//setiosflags设置左对齐输出,setw设置宽度
<< "学号" << setw(10) << "姓名" << setw(10) << "性别" << setw(10)
<< "年龄" << setw(10) << "班级" << setw(10) << "英语" << setw(10)
<< "数学" << setw(10) << "语文" << setw(10) << "总分" << endl;
cout << "---------------------------------------------------------------------------------------" << endl;
for(int i=0;i<100;i++)
{
if(shou[i].num!="\0")
{
x=0;
cout <<setiosflags(ios::left)<<setw(10)
<<shou[i].num <<setw(10) <<shou[i].name <<setw(10) <<shou[i].gender<<setw(10) <<shou[i].age <<setw(10)
<<shou[i].classes<<setw(10) <<shou[i].english<<setw(10) <<shou[i].maths <<setw(10) <<shou[i].chinese<<setw(10)<<shou[i].total<<endl;
cout << "---------------------------------------------------------------------------------------" << endl;
}
}
if(x==1) cout<<"暂无小学生信息"<<endl;
cout<<endl;//空两行分隔
}
/*-------------------------------------------------------------------------------------------------------------------*/
void Print_Student2() //显示中学生信息
{
system("cls");//清屏
bool y=1;
cout<<"中学生信息:"<<endl;
cout << "-----------------------------------------------------------------------------------------------------------" << endl;
cout << setiosflags(ios::left)<< setw(10)//设置左对齐输出
<< "学号" << setw(10) << "姓名" << setw(10) << "性别" << setw(10)
<< "年龄" << setw(10) << "班级" << setw(10) << "英语" << setw(10)
<< "数学" << setw(10) << "语文" << setw(10) << "地理" << setw(10)<< "历史"<<setw(10)<< "总分"<<endl;//制表符
cout << "-----------------------------------------------------------------------------------------------------------" << endl;
for(int i=0;i<100;i++)
{
if(chuu[i].num!="\0")
{
y=0;
cout <<setiosflags(ios::left)<<setw(10)
<<chuu[i].num <<setw(10) <<chuu[i].name <<setw(10)<<chuu[i].gender<<setw(10)<<chuu[i].age <<setw(10)
<<chuu[i].classes <<setw(10) <<chuu[i].english<<setw(10)<<chuu[i].maths <<setw(10)<<chuu[i].chinese<<setw(10)
<<chuu[i].geography<<setw(10) <<chuu[i].history<<setw(10)<<chuu[i].total <<endl;
cout << "-----------------------------------------------------------------------------------------------------------" << endl;
}
}
if(y==1) cout<<"暂无中学生信息"<<endl;
cout<<endl;//空两行分隔
}
/*-------------------------------------------------------------------------------------------------------------------*/
void Print_Student3() //显示大学生信息
{
system("cls");//清屏
bool z=1;
cout<<"大学生信息:"<<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
cout <<setiosflags(ios::left)<<setw(15)//因为大学生专业名较长,为防止信息错位,故单信息长度增大到20个字符长度
<< "学号" << setw(10) << "姓名" << setw(10) << "性别" << setw(10)
<< "年龄" << setw(15) << "班级" << setw(20) << "专业" << setw(10)
<< "大学英语" << setw(10) << "程序设计" << setw(10) << "高等数学" << setw(10)<< "总分"<< endl;//制表符
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
for(int i=0;i<100;i++)
{
if(dai[i].num!="\0")
{
z=0;
cout <<setiosflags(ios::left)<<setw(15)
<<dai[i].num <<setw(10) <<dai[i].name <<setw(10) <<dai[i].gender <<setw(10) <<dai[i].age <<setw(15)
<<dai[i].classes<<setw(20) <<dai[i].major <<setw(10) <<dai[i].adenglish<<setw(10) <<dai[i].program <<setw(10) <<dai[i].admaths <<setw(10) <<dai[i].total<<endl;
cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
}
}
if(z==1) cout<<"暂无大学生信息"<<endl;
cout<<endl;//空两行分隔
}
/*-------------------------------------------------------------------------------------------------------------------*/
void Sort_Student()//排序学生信息
{
int fs;//总分or单科成绩
system("cls");//清屏
cout<<"请选择要排序的学生类型:1.小学生 2.中学生 3.大学生"<<endl;
int asd; cin>>asd;
if(asd==1)//如果是小学生
{
cout<<"请选择排序方式:1.按总分排名 2.按单科排名"<<endl;
cin>>fs;
if(fs==1)//按总分排名
{
int i;
shougaku temp;//中间变量
//冒泡排序
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (shou[j].show_total()<shou[j+1].show_total())
{
temp = shou[j];
shou[j] = shou[j+1];
shou[j+1] =temp;
}
}
system("cls");//清屏
Print_Student1();//输出学生成绩
}
if(fs==2)//按单科排名
{
cout<<"请选择排序方式:1.语文 2.数学 3.英语"<<endl;
int ka;
cin>>ka;
if(ka==1)//语文
{
int i;
shougaku temp;
for ( i = 0; i<100 - 1; i++)//冒泡排序
{
for (int j = 0; j<100-1-i; j++)
if (shou[j].show_chinese()<shou[j+1].show_chinese())
{
temp = shou[j];
shou[j] = shou[j+1];
shou[j+1] =temp;
}
}
system("cls");//清屏
Print_Student1();//输出学生成绩
}
if(ka==2)//数学
{
int i;
shougaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (shou[j].show_maths()<shou[j+1].show_maths())
{
temp = shou[j];
shou[j] = shou[j+1];
shou[j+1] =temp;
}
}
system("cls");//清屏
Print_Student1();
}
if(ka==3)//英语
{
int i;
shougaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (shou[j].show_english()<shou[j+1].show_english())
{
temp = shou[j];
shou[j] = shou[j+1];
shou[j+1] =temp;
}
}
system("cls");//清屏
Print_Student1();
}
}
}
/*--------------------------------------------------------------*/
if(asd==2)//如果是中学生
{
cout<<"请选择排序方式:1.按总分排名 2.按单科排名"<<endl;
cin>>fs;
if(fs==1)//按总分排名
{
int i;
chuugaku temp;
//冒泡排序
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (chuu[j].show_total()<chuu[j+1].show_total())
{
temp = chuu[j];
chuu[j] = chuu[j+1];
chuu[j+1] =temp;
}
}
system("cls");//清屏
Print_Student2();//输出学生成绩
}
if(fs==2)//按单科排名
{
cout<<"请选择排序方式:1.语文 2.数学 3.英语 4.地理 5.历史"<<endl;
int kb;
cin>>kb;
if(kb==1)//语文
{
int i;
chuugaku temp;
for ( i = 0; i<100 - 1; i++)//冒泡排序
{
for (int j = 0; j<100-1-i; j++)
if (chuu[j].show_chinese()<chuu[j+1].show_chinese())
{
temp = chuu[j];
chuu[j] = chuu[j+1];
chuu[j+1] =temp;
}
}
system("cls");//清屏
Print_Student1();//输出学生成绩
}
if(kb==2)//数学
{
int i;
chuugaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (chuu[j].show_maths()<chuu[j+1].show_maths())
{
temp = chuu[j];
chuu[j] = chuu[j+1];
chuu[j+1] =temp;
}
}
system("cls");//清屏
Print_Student2();
}
if(kb==3)//英语
{
int i;
chuugaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (chuu[j].show_english()<chuu[j+1].show_english())
{
temp = chuu[j];
chuu[j] = chuu[j+1];
chuu[j+1] =temp;
}
}
system("cls");//清屏
Print_Student2();
}
if(kb==4)//地理
{
int i;
chuugaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (chuu[j].show_geography()<chuu[j+1].show_geography())
{
temp = chuu[j];
chuu[j] = chuu[j+1];
chuu[j+1] =temp;
}
}
system("cls");//清屏
Print_Student2();
}
if(kb==5)//历史
{
int i;
chuugaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (chuu[j].show_history()<chuu[j+1].show_history())
{
temp = chuu[j];
chuu[j] = chuu[j+1];
chuu[j+1] =temp;
}
}
system("cls");//清屏
Print_Student2();
}
}
}
/*--------------------------------------------------------------*/
if(asd==3)//如果是大学生
{
cout<<"请选择排序方式:1.按总分排名 2.按单科排名"<<endl;
cin>>fs;
if(fs==1)//按总分排名
{
int i;
daigaku temp;
//冒泡排序
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (dai[j].show_total()<dai[j+1].show_total())
{
temp = dai[j];
dai[j] = dai[j+1];
dai[j+1] =temp;
}
}
system("cls");//清屏
Print_Student3();//输出学生成绩
}
if(fs==2)//按单科排名
{
cout<<"请选择排序方式:1.大学英语 2.程序设计 3.高等数学"<<endl;
int kc;
cin>>kc;
if(kc==1)//大学英语
{
int i;
daigaku temp;
for ( i = 0; i<100 - 1; i++)//冒泡排序
{
for (int j = 0; j<100-1-i; j++)
if (dai[j].show_adenglish()<dai[j+1].show_adenglish())
{
temp = dai[j];
dai[j] = dai[j+1];
dai[j+1] =temp;
}
}
system("cls");//清屏
Print_Student3();//输出学生成绩
}
if(kc==2)//程序设计
{
int i;
daigaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (dai[j].show_program()<dai[j+1].show_program())
{
temp = dai[j];
dai[j] = dai[j+1];
dai[j+1] =temp;
}
}
system("cls");//清屏
Print_Student3();
}
if(kc==3)//高等数学
{
int i;
daigaku temp;
for ( i = 0; i<100 - 1; i++)
{
for (int j = 0; j<100-1-i; j++)
if (dai[j].show_admaths()<dai[j+1].show_admaths())
{
temp = dai[j];
dai[j] = dai[j+1];
dai[j+1] =temp;
}
}
system("cls");//清屏
Print_Student3();
}
}
}
}
/**************************************************************************************
***************************************************************************************
********************************以上为类函数实现部分***********************************
********************************以下为主函数实现部分***********************************
***************************************************************************************
**************************************************************************************/
int menu()
{
int c;//定义操作指令c
do {
system("cls");
cout << "*******************************************************" << endl;
cout << "----------------欢迎使用学生成绩管理系统---------------" << endl;
cout << " Author:王卓然" << 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 << " * 【10】排序学生信息 * " << endl;
cout << " * 【0】退出管理系统 * " << endl;
cout << "*******************************************************" << endl;
cout << " Copyright WangChoJan. All Rights Reserved " << endl;
cout << "*******************************************************" << endl;
cout << "请选择您的操作 (0-10):" << endl;
cin>>c;//输入操作指令(0到10之间)
} while (c < 0 || c > 10);//当用户输入的操作指令不在0-10的范围内时,重新循环,直到用户输入了0-10范围内的操作数
return c;//返回操作数,用于main函数中的switch选择
}
int main()
{
system("color 4E");//界面颜色设置
while(1)//一直无限循环switch选择,直到用户输入操作数0来让系统退出
{
switch (menu())
{
case 1:
Create_Student();
system("pause");//程序暂停一下,避免界面一闪而过导致看不到结果;此代码会让系统会暂停界面然后提示“请按任意键继续”
break;
case 2:
Delete_Student();
system("pause");
break;
case 3:
In_File();
system("pause");
break;
case 4:
Search_Student();
system("pause");
break;
case 5:
Statistics_Student();
system("pause");
break;
case 6:
Find_Student();
system("pause");
break;
case 7:
Out_File();
system("pause");
break;
case 8:
Print_Student();
system("pause");
break;
case 9:
Modify_Student();
system("pause");
break;
case 10:
Sort_Student();
system("pause");
break;
case 0:
cout << endl << "================感谢您使用学生成绩管理系统==============\n" << endl;
exit(0);//退出程序
}
}
return 0;
}