一、题目描述
定义Person类具有姓名、年龄等属性,具有输出基本信息的display函数。
选修《面向对象程序设计》课程的学生在Person类的基础上,派生出子类:免听生和非免听生。子类继承父类成员,新增其他成员、改写display函数。
非免听生具有平时成绩、考试成绩和总评成绩三个属性,总评成绩根据(平时成绩40%+考试成绩60%)计算的结果,85分(包含)以上为A,75分(包含)-85分(不包含)为B,65分(包含)-75分(不包含)为C,60分(包含)-65分(不包含)为D,60分(不包含)以下为F。
免听生只有考试成绩和总评成绩两个属性,总评成绩100%根据考试成绩对应上述等级制成绩。
定义上述类并编写主函数,输入类型符号,若输入R,根据学生基本信息、平时成绩和考试成绩,建立非免听生对象,若输入S,根据学生基本信息、考试成绩,建立免听生对象。计算学生的总评成绩,并输出。
二、输入与输出
1.输入
测试次数t
随后每行输入学生类型 相关信息,姓名的最大字符长度为20
2
R cindy 18 100 100
S sandy 28 59
2.输出
每个学生基本信息和总评成绩
cindy 18 A
sandy 28 F
三、参考代码
#include<iostream>
#include<string>
#include<iomanip>
#include<cmath>
using namespace std;
class stu
{
protected:
char ch;
string name;
int age;
public:
stu(char ch1, string name1, int age1)
{
ch = ch1;
name = name1;
age = age1;
cout << name << " " << age << " ";
}
};
class R :public ::stu
{
protected:
double g1, g2;
public:
R(char ch1, string name1, int age1, double vg1, double vg2) :stu(ch1, name1, age1)
{
g1 = vg1;
g2 = vg2;
}
void pri1()
{
double sum = 0.4 * g1 + 0.6 * g2;
if (sum >= 85)
{
cout << "A" << endl;
}
else if (sum >= 75 && sum < 85)
{
cout << "B" << endl;
}
else if (sum >= 65 && sum < 75)
{
cout << "C" << endl;
}
else if (sum < 65 && sum >= 60)
{
cout << "D" << endl;
}
else if (sum < 60)
{
cout << "F" << endl;
}
}
};
class S :public::stu
{
protected:
double g1;
public:
S(char ch1, string name1, double age1, double vg1) :stu(ch1, name1, age1)
{
g1 = vg1;
}
void pri()
{
double sum = g1;
if (sum >= 85)
{
cout << "A" << endl;
}
else if (sum >= 75 && sum < 85)
{
cout << "B" << endl;
}
else if (sum >= 65 && sum < 75)
{
cout << "C" << endl;
}
else if (sum > 65 && sum <= 60)
{
cout << "D" << endl;
}
else if (sum<60)
{
cout << "F" << endl;
}
}
};
int main()
{
int sum = 0;
char ch;
string name;
int age;
double num1=0, num2=0;
cin >> sum;
while (sum--)
{
cin >> ch >> name >> age;
if (ch == 'R')
{
cin >> num1 >> num2;
R a1(ch, name, age, num1, num2);
a1.pri1();
}
else if(ch=='S')
{
cin >> num1;
S a2(ch, name, age, num1);
a2.pri();
}
}
}