09-B. 学生成绩计算(继承)

09-单继承-

题目描述
定义Person类具有姓名、年龄等属性,具有输出基本信息的display函数。

选修《面向对象程序设计》课程的学生在Person类的基础上,派生出子类:免听生和非免听生。子类继承父类成员,新增其他成员、改写display函数。

非免听生具有平时成绩、考试成绩和总评成绩三个属性,总评成绩根据(平时成绩40%+考试成绩60%)计算的结果,85分(包含)以上为A,75分(包含)-85分(不包含)为B,65分(包含)-75分(不包含)为C,60分(包含)-65分(不包含)为D,60分(不包含)以下为F。

免听生只有考试成绩和总评成绩两个属性,总评成绩100%根据考试成绩对应上述等级制成绩。

定义上述类并编写主函数,输入类型符号,若输入R,根据学生基本信息、平时成绩和考试成绩,建立非免听生对象,若输入S,根据学生基本信息、考试成绩,建立免听生对象。计算学生的总评成绩,并输出。

输入
测试次数t

随后每行输入学生类型 相关信息


输出
每个学生基本信息和总评成绩

输入样例
2
R cindy 18 100 100
S sandy 28 59

cindy 18 A
sandy 28 F

免听生类的命名不可以用free,因为free是系统内置函数

#include<iostream>
#include<string>
using namespace std;

class person
{
    protected:
        string name;
        int age;
        int grade;//最终成绩
    public:
        person();
        person(string n,int a):name(n),age(a){};
        char Final()
        {
            if(grade>=85)
                return 'A';
            else if(grade>=75)
                return 'B';
            else if(grade>=65)
                return 'C';
            else if(grade>=60)
                return 'D';
            else
                return 'F';
        }
        void display()
        {cout<<name<<" "<<age<<endl;}
};

class Free:public person
{
    int test;//考试成绩
    public:
        Free();
        Free(string n,int a,int t):person(n,a),test(t){};
        void display()
        {
            grade=test;
            cout<<name<<" "<<age<<" "<<Final()<<endl;
        }
};

class notfree:public person
{
    int usual,test;
    public:
        notfree();
        notfree(string n,int a,int u,int t):person(n,a),usual(u),test(t){};
        void display()
        {
            grade=0.4*usual+0.6*test;
            cout<<name<<" "<<age<<" "<<Final()<<endl;
        }
};

int main()
{
    int t,usual,test,age;
    string name;
    char person;
    cin>>t;
    while(t--)
    {
        cin>>person;
        if(person=='R')
        {
            cin>>name>>age>>usual>>test;
            notfree nf(name,age,usual,test);
            nf.display();
        }
        else if(person=='S')
        {
            cin>>name>>age>>test;
            Free f(name,age,test);
            f.display();
        }
    }
    return 0;
}
实验题目1:班级学生学期成绩管理系统 (1)程序功能简介 灵活运用类的继承、对象成员等机制,设计一个能够实现班级学生学期成绩管理的程序。 (2)程序设计说明 ① 个人信息类CPerson的数据成员有姓名、性别、年龄、身份证号等数据成员,成员函数根据需要自行设计; ② 学生类CStudent从CPerson派生,并增加学号、CCourse对象成员数组(大小至少3个)等数据成员,并根据需要自行设计成员函数,包括能够求解所选修课程的总学分、显示某个学生基本信息和课程信息的成员函数; ③ 课程类CCourse包括课程名、学分、分数、任课老师等数据成员,成员函数根据需要自行设计; ④ 班级类CClass的数据成员有班级名称、班级人数、CStudent对象成员数组(大小由构造函数确定)等。本班级类CClass的对象成员数组需要在构造函数中用new动态分配内存空间,在析构函数中用delete释放。在CClass类中设计包括能够求解最高成绩、最低成绩平均成绩以及通过学号查找并输出某个学生全部信息(例如Seek())等功能在内的成员函数; ⑤ 构造三十个学生的数据,每个学生都有三门课程成绩,输出并显示这些数据; ⑥ 根据类的需要添加适当的其它成员,编写完整的程序并测试。 (3)程序调试运行 运行程序查看结果,并进行源代码调试和优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值