每日打卡-19
一.问题描述
给出下面的人员基类框架:
class Person{
protected:
string name;
int age;
public:
Person(){};
Person (string p_name, int p_age):name(p_name),age(p_age){};
void display () {cout<<name<<“:”<<age<<endl;}
}
int ID;//学号
float cpp_score;//cpp上机成绩
float cpp_count;//cpp上机考勤
float cpp_grade;//cpp总评成绩
//总评成绩计算规则:cpp_grade = cpp_score * 0.9 + cpp_count * 2;
student类的无参构造函数
student类的参数化构造函数//注意cpp_grade为上机成绩和考勤的计算结果
void print()//输出当前student的信息
//其中cpp_grade输出保留一位小数
//输出格式为ID name cpp_grade
仍以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时输入结束。
二.设计思路
按照题目要求编写代码即可
三.流程图
四.伪代码
1
五.代码实现
1#include<iostream>
#include<iomanip>
using namespace std;
class Person {
protected:
string name;
int age = 0;
public:
Person() {};
Person(string p_name, int p_age) :name(p_name), age(p_age) {};
void display() { cout << name << ":" << age << endl; }
};
class student :public Person {
private:
int ID = 0;//学号
float cpp_score = 0;//cpp上机成绩
float cpp_count = 0;//cpp上机考勤
float cpp_grade = 0;//cpp总评成绩
public:
student() {}
student(string s, int a, int b, float c, float d) :Person(s, b), ID(a), cpp_score(c), cpp_count(d) { cpp_grade = c * 0.9 + d * 2; }
void print() {
cout << ID << " " << name << " ";
cout << fixed << setprecision(1) << cpp_grade << endl;
}
float grade() {
return cpp_grade;
}
};
class teacher :public Person {
private:
int ID;//教师工号
student stu[100];//学生数组
int count = 0;//学生数目,最多不超过100
float cpp_average;//班级cpp平均分
public:
teacher() {}
teacher(string ns, int na, int nb) :Person(ns, nb), ID(na) {}
void Add(student& stu1) {//在学生数组中增加一个学生记录
stu[count++] = stu1;
}
void average() {
float temp;
for (int i = 0; i < count; i++) {
temp = stu[i].grade();
// cout << temp << endl;
cpp_average += temp;
}
cpp_average /= count;
}//计算当前班级cpp平均成绩cpp_average
void print() {
average();
cout << ID << " " << name << " " << count << " " << cpp_average << endl;
for (int i = 0; i < count; i++) {
stu[i].print();
}
}
};
int main() {
string name, nname;
int age, nage, id, nid, count;
float cppscore, cppcount;
cin >> nname >> nid >> nage;
teacher tea(nname, nid, nage);
while (1) {
cin >> name;
if (name == "0") break;
cin >> id >> age >> cppscore >> cppcount;
student stu(name, id, age, cppscore, cppcount);
tea.Add(stu);
}
tea.print();
return 0;
}