注册 登录
编程论坛 C++教室

学生成绩管理系统,排序这个功能模块求修改

q0224100404 发布于 2015-12-21 23:22, 2137 次点击
程序代码:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<iomanip>
#include<list>

using namespace std;

class person
{
public:
    string name;
    string tel;
    string adr;
    string ID;
public:
    person(){};
//    person(string,string,string,string);
    ~person(){};
};


class student:public person
{
public:
    string code;
    double math;
    double chinese;
    double english;
public:
    student(){};
    //student(string,string,string,string,string,double,double,double);
    double getsum()
    {
        return math+chinese+english;
    }
    double getaver()
    {
        return (math+chinese+english)/3;
    }
};

class control
{
public:
//    void find(std::vector<student>&ver);
    void edit(vector<student>&ver);
    void del(vector<student>&ver);
    void insert(vector<student>&ver);
    void st(vector<student>&ver);
    void list(vector<student>&ver);
    void jiemian();
};

void control::jiemian()
{
    cout<<endl;
    cout<<"*****************************************"<<endl;
    cout<<"*          请选择您需要的操作:         *"<<endl;
    cout<<"*              1 增加学生               *"<<endl;
    cout<<"*              2 删除学生               *"<<endl;
    cout<<"*              3 修改数据               *"<<endl;
    cout<<"*              4 查询数据               *"<<endl;
    cout<<"*              5 输出所有数据           *"<<endl;
    cout<<"*              6 按成绩排序             *"<<endl;
    cout<<"*              0 退出                   *"<<endl;
    cout<<"*            请输入对应数字             *"<<endl;
    cout<<"*****************************************"<<endl;
    cout<<endl;
   
    return;
};


void control::insert(vector<student>&ver)
{
    student stu;
    string stucode;
    string stuname;
    string stuadr;
    string stutel;
    string stuID;
    double math,chinese,english;
    cout<<"请输入学号:";
    cin>>stucode;
    cout<<"请输入姓名:";
    cin>>stuname;
    cout<<"请输入地址:";
    cin>>stuadr;
    cout<<"请输入电话:";
    cin>>stutel;
    cout<<"请输入身份证号:";
    cin>>stuID;
    cout<<"请输入数学成绩:";
    cin>>math;
    cout<<"请输入语文成绩:";
    cin>>chinese;
    cout<<"请输入英语成绩:";
    cin>>english;
    stu.code=stucode;
    stu.name=stuname;
    stu.adr=stuadr;
    stu.tel=stutel;
    stu.ID=stuID;
    stu.math=math;
    stu.chinese=chinese;
    stu.english=english;
    stu.getsum();
    stu.getaver();
    ver.push_back(stu);
    return;
}


void control::del(vector<student>&ver)
{
    string stucode;
    string stuname;
    cout<<"请输入学号:";
    cin>>stucode;
    cout<<"请输入姓名:";
    cin>>stuname;
    vector<student>::iterator i;
    for(i=ver.begin();i!=ver.end();++i)
    {
        if(((*i).code==stucode)&&((*i).name==stuname))
        {
            ver.erase(i);
            return;
        }
    }
    return;
}
void control::list(vector<student>&ver)
{
    vector<student>::iterator i;
    for(i=ver.begin();i!=ver.end();i++)
    {
        cout<<"学员清单如下:"<<endl;
        cout<<"学号  姓名  电话  地址  身份证号  数学成绩   语文成绩  英语成绩  总分  平均分"<<endl;
        cout<<(*i).code<<setw(4)<<(*i).name<<setw(4)<<(*i).tel<<setw(4)<<(*i).adr<<setw(4)<<(*i).ID<<setw(4)<<(*i).math<<setw(4)<<(*i).chinese<<setw(4)<<(*i).english<<setw(4)<<(*i).getsum()<<setw(4)<<(*i).getaver()<<endl;

    }
}

void control::edit(vector<student>&ver)
{
    string stucode;
    string stuname;
    cout<<"请输入学号:";
    cin>>stucode;
    cout<<"请输入姓名:";
    cin>>stuname;
    vector<student>::iterator i;
    for(i=ver.begin();i!=ver.end();++i)
    {
        if(((*i).code==stucode)&&((*i).name==stuname))
        {
            cout<<"原来的数据:"<<endl;
            cout<<"学号:"<<(*i).code<<endl;
            cout<<"姓名:"<<(*i).name<<endl;
            cout<<"电话:"<<(*i).tel<<endl;
            cout<<"地址:"<<(*i).adr<<endl;
            cout<<"身份证号码:"<<(*i).ID<<endl;
            cout<<"数学成绩:"<<(*i).math<<endl;
            cout<<"语文成绩:"<<(*i).chinese<<endl;
            cout<<"英语成绩:"<<(*i).english<<endl;
            cout<<"请输入新的数据:"<<endl;
            cout<<"请输入姓名:";
            cin>>(*i).name;
            cout<<"请输入地址:";
            cin>>(*i).adr;
            cout<<"请输入电话:";
            cin>>(*i).tel;
            cout<<"请输入身份证号:";
            cin>>(*i).ID;
            cout<<"请输入数学成绩:";
            cin>>(*i).math;
            cout<<"请输入语文成绩:";
            cin>>(*i).chinese;
            cout<<"请输入英语成绩:";
            cin>>(*i).english;
            (*i).getsum();
            (*i).getaver();
            return;
        }
    }
}



void control::st(vector<student>&ver)
{
    char fg;
    cout<<"*****************************"<<endl;
    cout<<"*        1 按总分排序       *"<<endl;
    cout<<"*        2 按语文排序       *"<<endl;
    cout<<"*        3 按数学排序       *"<<endl;
    cout<<"*        4 按英语排序       *"<<endl;
    cout<<"*        5 按平均分排序     *"<<endl;
    cout<<"*        0 退出             *"<<endl;
    cout<<"*****************************"<<endl;
    cin>>fg;
    switch(fg)
    {
    case '0':
        return;
    case '1':
        std::sort(ver.begin(),ver.end(),greategetsum());
        
        break;
    case '2':
        std::sort(ver.begin(),ver.end(),greatechinese);
        
        break;
    case '3':
        std::sort(ver.begin(),ver.end(),greatemath);
        
        break;
    case '4':
        std::sort(ver.begin(),ver.end(),greateenglish);
        
        break;
    case '5':
        std::sort(ver.begin(),ver.end(),greategetaver());
        
        break;
    }
    return;
}

void main()
{
    char key;
    vector<student>ver;
    control c1;
    do{
    c1.jiemian();
    cin>>key;
    switch(key)
    {
    case '1':
        c1.insert(ver);
        break;
    case '2':
        c1.del(ver);
        break;
    case '3':
        c1.edit(ver);
        break;
    case '4':
    //    c1.find(ver);
        break;
    case '5':
        c1.list(ver);
        break;
    case '6':
        c1.st(ver);
        break;
    }
    }while(key!='0');

}
3 回复
#2
wengbin2015-12-22 09:00
把要改的加红或标出来呗,否则谁有功夫一点点读代码呀
#3
newdos2015-12-22 09:46
自己定义排序函数
bool sort_by_chinese(const Student &a, const Student &b)
{
    return a.ch < b.ch;
}

std::sort(vec.begin(), vec.end(), sort_by_chinese);
#4
evenio2019-06-30 14:35
回复 3楼 newdos
我把你写的函数放到类里面了 但是不管用啊
1