每日打卡-19

leapssisbird / 2023-05-10 / 原文

一.问题描述

给出下面的人员基类框架:

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;}
}
 建立一个派生类student,增加以下成员数据:
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;
}