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; }
个人分享,欢迎指导,未经允许,请勿转载。谢谢!