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