学生信息系统操作类delete详解

#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[2]+score[1])/3);
    }
    Student()
    {
        score[0]=score[1]=score[2]=0;
        order=-1,average=0;
    }
    void setName(string name) {this->name=name;}
    string getName()  {return name;}
    int setN0(int n)  {no=n;}
    int getNO()   { return no;}
    int setscore0(int i)
    {
        score[0]=i;
     average=((score[0]+score[2]+score[1])/3);
    }
    int setscore1(int j)
    {
       score[1]=j;
     average=((score[0]+score[2]+score[1])/3);
    }
    int setscore2(int k)
    {
        score[2]=k;
     average=((score[0]+score[2]+score[1])/3);
    }
    int getscore0() {return score[0];}
    int getscore1() {return score[1];}
    int getscore2() {return score[2];}
    float getAverage() {return average;}
    void setAverage(int avg) {average=avg;}
    void setOrder(int x) {order=x;}
    int getOrder() {return order;}
    void display();
};
void Student::display()
{
    cout<<name<<"\t"<<no<<'\t'<<score[0]<<"\t"<<score[1]<<"\t"<<score[2]<<"\t";
    cout<<average<<"\t\t"<<order<<endl;
}
bool cmp1(Student stu1,Student stu2 )    //按照平均成绩降序排列;
{
    if((stu1.getAverage()-stu2.getAverage())>=1e-9)
    return 1;
    else
    return 0;
}
bool cmp2(Student stu1,Student stu2)
{
    return stu1.getNO()<stu2.getNO();      //按照学号升序排列;
}
class Operation     //定义操作类;
{
    Student list[90];   //学生类对象数组;
    int n;              //实际学生人数;
    public:
    Operation() {n=0;}  //或者也可写为Operation():n(0) {};
    void add();         //增加学生信息;
    void deletestu();   //删除学生信息;
    void query();       //查询
    void change();      //修改
    int search(int no);    //按照学号查找
    void sortlist();           //排序;
    void display(int flag);
};
void Operation::add()
{
    int no,x,y,z;
    string name;
    system("cls");   //清屏;
    cout<<"按学号、姓名、数学、英语、c++顺序输入学生信息,学号按-1表示结束"<<endl;
    while ((cin>>no)&&no!=-1)
    {
        cin>>name>>x>>y>>z;
        Student s(no,name,x,y,z);
        list[n++]=s;     //将创建的每一条学生信息存到数组里;
        sortlist();
    }
}
void Operation::sortlist()  //对改变的成绩表进行名次更新,所以成绩与名次绑定;
{
    sort(list,list+n,cmp1);  //按照成绩排序;
    for(int i=0;i<n;i++)
    list[i].setOrder(i+1);   //设置名次;(i+1)即第一名的名次为1,i从0开始;
}
void Operation::display(int flag)  //展示结果可以按名次排列也可以按学号排列;
{
    if(flag)   sort(list,list+n,cmp2);  //flag=1;按学号排列;
    else       sort(list,list+n,cmp1);  //flag=0;按名次排列;
    cout<<"姓名"<<"\t"<<"学号"<<"\t"<<"数学"<<"\t";
    cout<<"英语"<<'\t'<<"c++"<<"\t"<<"平均成绩"<<"\t"<<"名次"<<endl;
    for(int i=0;i<n;i++)
    list[i].display();
}
int Operation::search(int no)      //按照学号查找;
{
    int i;
    for(i=0;i<n;i++)
    if(list[i].getNO()==no)
       return i;    //找到就返回在成绩表中的位置;
    return -1;     //否则返回-1;
}
void Operation::deletestu()        //删除学生信息;
{
    int no,i,j;
    cout<<"请输入所要删除同学的学号,输入-1结束删除"<<endl;
     while(cin>>no&&no!=-1)
    {
        i=search(no);
        if(i!=-1)
        {
            for(j=i;j<n;j++)
            list[j]=list[j+1];
            n--;
        cout<<"姓名"<<"\t"<<"学号"<<"\t"<<"数学"<<"\t";
        cout<<"英语"<<'\t'<<"c++"<<"\t"<<"平均成绩"<<"\t"<<"名次"<<endl;
        list[i].display();
        cout<<"请输入所要删除同学的学号,输入-1结束删除";
        }
        else
        cout<<"学号输入有误,请重输,输入-1结束查询"<<endl;
    }
}
int main()
{
    Operation c;
    c.add();
    c.display(0);
    c.deletestu();
    c.display(0);
}

编译结果:

按学号、姓名、数学、英语、c++顺序输入学生信息,学号按-1表示结束
1111 ming 10 20 30
1112 xing 20 30 40
1113 tian 30 40 50 
-1                       //键盘输入;
姓名    学号    数学    英语    c++     平均成绩        名次
tian    1113    30      40      50      40              1
xing    1112    20      30      40      30              2
ming    1111    10      20      30      20              3     // c.display(0);
请输入所要删除同学的学号,输入-1结束删除
1111
姓名    学号    数学    英语    c++     平均成绩        名次
        6879680 0       0       0       0               -1
请输入所要删除同学的学号,输入-1结束删除-1
姓名    学号    数学    英语    c++     平均成绩        名次
tian    1113    30      40      50      40              1
xing    1112    20      30      40      30              2     //c.display(0);

Process returned 0 (0x0)   execution time : 20.206 s
Press any key to continue.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值