一、问题描述:
完成“学生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时输入结束。
二、解题思路:
首先,定义一个Person的新的子类Teacher类,其含有数据ID,带班的学生成绩和学生人数,然后定义其含参的构造函数对其进行初始化,再去定义其的成员函数,add函数去增加学生的数据,还有学生的数量的成员函数,还有一个输出该类的数据的展示函数,在主函数中,定义所需的成员数据,利用输入成员数据的特点用while及进行调控循环,最后进行代码得到调试运行,观测结果。
三、代码实现:
1 #include<iostream> 2 #include<string> 3 #include<iomanip> 4 using namespace std; 5 class Person { 6 protected: 7 string name; 8 int age; 9 public: 10 Person(){}; 11 Person (string a, int b) : name(a), age (b){}; 12 void display () {cout<<name<<":"<<age<<endl;} 13 }; 14 class Student : public Person{ 15 int ID; 16 float cpp_score; 17 float cpp_count; 18 float cpp_grade; 19 public: 20 void operator = (Student &a){ 21 name = a.name; 22 age = a.age; 23 ID = a.ID; 24 cpp_score = a.cpp_score; 25 cpp_count = a.cpp_count; 26 cpp_grade = a.cpp_grade; 27 } 28 float getGrade(){return cpp_grade;} 29 Student():Person(){}; 30 void display(){cout<<ID<<" "<<name<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<cpp_grade<<endl;} 31 Student(string a, int b , int c ,float d ,float e) : 32 Person(a,b), ID(c) , cpp_score(d) , cpp_count(e) {cpp_grade = cpp_score * 0.9 + cpp_count * 2;} 33 }; 34 class Teacher : public Person{ 35 int ID; 36 Student stu[100]; 37 int count; 38 float cpp_average; 39 public: 40 Teacher(string a, int b, int c) : Person(a,b), ID(c){}; 41 void setCount(int a){count= a;} 42 void Add (Student & stu1){ 43 stu[count-1] = stu1; 44 }; 45 void average(){ 46 float ans=0; 47 for(int i=0;i<count;i++) 48 { 49 ans += stu[i].getGrade(); 50 } 51 cpp_average = ans/count; 52 }; 53 void print(){ 54 cout<<ID<<" " 55 <<name<<" " 56 <<count<<" " 57 <<setiosflags(ios::fixed)<<setprecision(1) 58 <<cpp_average<<endl; 59 for(int i=0;i<count;i++) 60 { 61 stu[i].display(); 62 } 63 }; 64 }; 65 int main() 66 { 67 string name; 68 int age, num,count; 69 float score; 70 cin>>name>>num>>age; 71 Teacher ok(name , age, num); 72 int sum=0; 73 cin>>name; 74 while(name[0]!='0') 75 { 76 sum++; 77 cin>> num>> age>> score >> count; 78 Student hello(name, age, num, score, count); 79 ok.setCount(sum); 80 ok.Add( hello ); 81 cin>>name; 82 } 83 ok.average(); 84 ok.print(); 85 return 0; 86 }
标签:11,班级,name,age,学生,Person,2023.5,cpp,打卡 From: https://www.cnblogs.com/lixinyao20223933/p/17384436.html