类——学生信息

#include<bits/stdc++.h>
using namespace std;
class Student//定义一个学生信息类,存储学生信息
{
    string name;
    int no;
    int score[3];
    float average;
    int order;
public:
    Student(int id,string na,int x,int y,int z):name(na),no(id)
    {
        score[0]=x;score[1]=y;score[2]=z;
        order=-1;average=(score[0]+score[1]+score[2])/3.0;
    }
    Student()
    {
        score[0]=score[1]=score[2]=0;
        order=-1,average=0;
    }
    void display();
    string getName(){return name;}
    void setName(string name){this->name=name;}//注意返回类型是void,同时,因为修改名字时两个都是name,所以原来的要用this 指针
    int setNo(int b){no=b;}//将修改过的学号赋值给no
    int getNo(){return no;}
    int setAverage(int avg){average=avg;}
    int getAverage(){return average;}
    int setOrder(int a){order=a;}//将修改过的次序赋值给order
    int getOrder(){return order;}
};
void Student::display()
{
    cout<<name<<"\t"<<no<<"\t"<<score[0]<<"\t"<<score[1]<<"\t"<<score[2]<<"\t"<<average<<"\t"<<order<<endl;

}
bool comp1(Student stu1,Student stu2)//按成绩排序
{
    if(stu1.getAverage()-stu2.getAverage()>=1e-9)
        return 1;
    else
        return 0;
}
bool comp2(Student stu1,Student stu2)//按学号排序
{
    return stu1.getNo()<stu2.getNo();
}
class Student_List//定义一个操作类,主要对学生信息进行操作,如查询
{
    Student List[100];
    int n;
public:
    Student_List():n(0){}//构造函数名和类名一致,对数组成员初始化,不带参数的构造函数
    void ListSort()//排序,并对成绩序号更新
    {
        sort(List,List+n,comp1);
        for(int i=0;i<=n;i++)
        {
            List[i].setOrder(i+1);//建立序号
        }
    }
    void add()//添加一个或多个学生的信息函数
    {
        int no;
        string name;
        int x,y,z;
        system("cls");//清屏
        cout<<"请按照学号,姓名,数学,英语,c++,顺序输入学生信息,学号输入-1表示输入结束"<<endl;
        while(cin>>no&&no!=-1)
        {
            cin>>name;
            cin>>x>>y>>z;
            Student s(no,name,x,y,z);//调用学生信息类的构造函数给数据赋值
            List[n++]=s;//将学生信息存入数组中,每一个数组元素代表一个学生的信息
            ListSort();
        }
    }
    //按自己的意愿排序输出
    //flag=2,学号,flag=1,成绩,
    void display(int flag)
    {
        if(flag==1)
            sort(List,List+n,comp1);//按成绩排序输出
        else
            sort(List,List+n,comp2);//按学号大小排序
        system("cls");
        cout<<"姓名\t"<<"学号\t"<<"数学\t"<<"英语\t"<<"c++\t"<<"平均成绩\t"<<"名次\t"<<endl;
        for(int i=0;i<=n;i++)
        {
            List[i].display();
        }
    }
    int searchNo(int no)
    {
        for(int i=0;i<=n;i++)
        {
            if(List[i].getNo()==no)
                return i;
            else
                return -1;
        }
    }
    void query(int no)
    {
        int i;
        system("cls");
        cout<<"请输入要查询的学号,输入-1结束"<<endl;
        while(cin>>no&&no!=-1)
        {
            i=searchNo(no);
            if(i!=-1)
            {
                cout<<"姓名\t"<<"学号\t"<<"数学\t"<<"英语\t"<<"c++\t"<<"平均成绩\t"<<"名次\t"<<endl;
                List[i].display();
            }
            else
                cout<<"输入的学号有误,请重试,输入-1结束查询"<<endl;
        }
    }
    void changeNo(){}//修改学号
    void changeName(){}//修改姓名
    void changeScore(){}//修改成绩
};
int main()//
{
    Student s(1,"lily",66,77,88);
    s.display();
    cout<<s.getAverage()<<endl;
    system("pause");
    /*s.setName("zhang");
    s.getName();
    //s.display();
    s.setNo(2);
    s.getNo();
    //s.display();
    s.setAverage(90);
    s.getAverage();
    //s.display();
    s.setOrder(2);
    s.getOrder();
    s.display();*/
    Student_List c;//创建一个操作类的对象
    c.add();
    c.display(1);
    system("pause");
    c.query(2);
    return 0;

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值