5-7 学生cpp成绩统计

完成“学生cpp成绩计算”之后,修改Person和Student类,各自增加两个无参构造函数。

仍以Person类为基础,建立一个派生类Teacher,增加以下成员数据:

   int ID;//教师工号
   Student stu[100];//学生数组
   int count;//学生数目,最多不超过100
   float cpp_average;//班级cpp平均分

增加以下成员函数:

  Teacher类的参数化构造函数
  void Add (Student & stu1)//在学生数组中增加一个学生记录
  void average();//计算当前班级cpp平均成绩cpp_average
  void print()//输出当前班级学生的信息
           //其中学生记录中cpp_score和cpp_grade输出保留一位小数
                  //当前班级cpp_average输出保留一位小数;
                  //输出格式如下:
             //第一行:教师工号 教师姓名 班级学生数 cpp_average
       //第二行至第count+1行每一行输出一个学生的信息,每一行格式
      // 学生学号 学生姓名 cpp_grade
     //cpp_grade保留一位小数

生成上述类并编写主函数,根据输入的教师基本信息,建立一个教师对象,根据输入的每一条学生基本信息,建立一个学生对象,计算学生cpp总评成绩并且加入学生数组中,由教师对象计算班级cpp平均成绩,并输出班级学生的全部信息。

输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入教师的基本信息(教师姓名 教师工号 年龄),第二行开始输入班级内学生信息,每个学生基本信息占一行(学生姓名 学号 年龄 cpp成绩 cpp考勤),最多不超过100行,当读入0时输入结束。

输入样例:

Mike 901 30

Bob 10001 18 75.9 4

Anna 10003 19 87.0 5

0

输出样例:

901 Michale 2 82.3

10001 Bob 76.3

10003 Anna 88.3

 

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;

class Person {
protected:
     string name;//姓名
     int age;//年龄
public:
     Person(){};                  
     Person (string a, int b) : name(a), age (b){};
     void display () {cout<<name<<":"<<age<<endl;}
};
//学生类
class Student : public Person{
    int ID;//学号
    float cpp_score;//cpp上机成绩
    float cpp_count;//cpp上机考勤
    float cpp_grade;//cpp总评成绩
public:
    void operator = (Student &a){
    name = a.name;
    age = a.age;
    ID = a.ID;
    cpp_score = a.cpp_score;
    cpp_count = a.cpp_count;
    cpp_grade = a.cpp_grade;
                                                                                    //cout<<name<<ID<<cpp_grade<<"hello ";
    }
    float getGrade(){return cpp_grade;}
    Student():Person(){};
    void display(){cout<<ID<<" "<<name<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<cpp_grade<<endl;}
    Student(string a, int b , int c ,float d ,float e) : 
    Person(a,b), ID(c) , cpp_score(d) , cpp_count(e) {cpp_grade = cpp_score * 0.9 + cpp_count * 2;}
};
//教师类
class Teacher : public Person{
    int ID;//教师工号
    Student stu[100];
    int count;
    float cpp_average;
public:
    Teacher(string a, int b, int c) : Person(a,b), ID(c){};
    void setCount(int a){count= a;}
    void Add (Student & stu1){
        stu[count-1] = stu1;
    };
    void average(){
        float ans=0;
        for(int i=0;i<count;i++)
        {
            ans += stu[i].getGrade();
        }
        cpp_average = ans/count;
    };
    void print(){
        cout<<ID<<" "
            <<name<<" "
            <<count<<" "
            <<setiosflags(ios::fixed)<<setprecision(1)
            <<cpp_average<<endl;
        for(int i=0;i<count;i++)
        {
            stu[i].display();
        }
    };
};
int main()
{
    
    string name;
    int age, num,count;
    float score;
    //教师
    cin>>name>>num>>age;
    Teacher ok(name , age, num);
    int sum=0;
    //学生
    cin>>name;
    while(name[0]!='0')
    {
        sum++;
        cin>> num>> age>> score >> count; 
        Student hello(name, age, num, score, count);
        ok.setCount(sum);
        ok.Add( hello );
        cin>>name;
    }
    ok.average();
    ok.print();

    return 0;
}

 

posted @ 2017-06-15 21:56  hello_OK  阅读(1351)  评论(0编辑  收藏  举报