2023.5.11编程一小时打卡

一、问题描述:

完成“学生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 }
复制代码

 

posted @   信2211-8李欣垚  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示