频道栏目
首页 > 资讯 > 其他综合 > 正文

定义一个学生信息类,存储学生信息

18-04-26        来源:[db:作者]  
收藏   我要投稿

定义一个学生信息类,存储学生信息

#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;

}
相关TAG标签
上一篇:网络安全没有银弹,最好的应对方式是抓住当下、脚踏实地
下一篇:17岁男生自己开发黑客程序 盗取760万余条网络数据
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站