C++课程设计:学生成绩管理系统

大一的课程设计,出题老师非常狡猾地避开了网上的所有类似题目,要为三种不同类型的学生分别设计管理代码,写了大概有一个星期多一点,中途遇到大量的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;
}

学生成绩管理系统设计” A.问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。 中学生除了包括小学生所有信息外,还包括地理、历史成绩。 大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。 B.功能要求 (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (9)排序功能:可按总分和单科成绩排名次。
实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。 实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值