【id:175】【20分】E. 学生成绩计算(继承)

该文描述了一个面向对象编程的问题,涉及Person基类以及两个子类:免听生和非免听生。Person类包含姓名和年龄属性,以及显示信息的方法。非免听生有平时成绩、考试成绩和总评成绩,总评成绩根据给定规则计算。免听生只有考试成绩和总评成绩。程序需根据输入创建相应类型的对象,计算并输出总评成绩。

题目描述

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

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

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

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

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

输入

测试次数t

随后每行输入学生类型 相关信息,姓名的最大字符长度为20

输出

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

样例查看模式

正常显示查看格式

输入样例1 <-复制

2\n

R cindy 18 100 100\n

S sandy 28 59

输出样例1

cindy 18 A\n

sandy 28 F

#include<iostream>
using namespace std;
class mian;
class fei; 
class person
{
protected:
    string name;
    int age;
public:
    person() {};
    person(string name, int age)
    {
        this->name = name;
        this->age = age;
    }
    virtual void display()
    {
        cout << name << " " << age;
    }
};
class mian:public person
{
protected:
    int test;
    int sum;
public:
    mian() {};
    mian(string name,int age,int test):person(name,age)
    {
        this->test = test;
    }
    virtual void display()
    {
        cout << name << " " << age << " ";
        sum = test;
        if (sum >= 85)
        {
            cout << "A" ;
        }
        else if (sum >= 75 && sum < 85)
        {
            cout << "B";
        }
        else if (sum >= 65 && sum < 75)
        {
            cout << "C";
        }
        else if (sum < 65 && sum >= 60)
        {
            cout << "D";
        }
        else
        {
            cout << "E";
        }
        cout << endl;
    }
};
//非免听生具有平时成绩、考试成绩和总评成绩三个属性
class fei:public person
{
protected:
    int common;
    int test;
    int sum;
public:
    fei() {};
    fei(string name, int age, int c, int t):person(name,age)
    {
        common = c;
        test = t;
    }
    virtual void display()
    {
        cout << name << " " << age << " ";
        //平时成绩*40%+考试成绩*60%
        sum = common * 0.6 + test * 0.6;
        if (sum >= 85)
        {
            cout << "A";
        }
        else if (sum >= 75 && sum < 85)
        {
            cout << "B";
        }
        else if (sum >= 65 && sum < 75)
        {
            cout << "C";
        }
        else if (sum < 65 && sum >= 60)
        {
            cout << "D";
        }
        else
        {
            cout << "F";
        }
        cout << endl;
    }
};
int main()
{
    int t;
    cin >> t;
    char type;
    string name;
    int age, test, common;
    while (t--)
    {
        cin >> type;
        if (type == 'R')
        {
            cin >> name >> age >> common >> test;
            fei f(name, age, common, test);
            f.display();
        }
        else
        {
            cin >> name >> age >> test;
            mian m(name, age, test);
            m.display();
        }
    }
    return 0;
}
1. 代码规范:类名采⽤驼峰命名法(如 ExamGenerator ),变量名⼩写加下划线(如 student_id )。 2. 账号管理:每个题⽬有两类⽤户,除了题⽬规定的功能外,为⽤户设计账号登陆退出功能。 3. 错误处理:⽂件操作包含 try-catch 块,捕获并提示 std::ios::failure 异常。 4. 测试⽤例:报告中为每个功能提供2个功能以上的测试⽤例。 题⽬1 “在线学习平台智能题库系统设计”  1. 问题描述  设计⼀个供教师和学⽣使⽤的智能题库系统,⽀持题⽬录⼊、智能组卷、学习数据析功能。 2. 功能要求  1. 题库管理(教师端) 题⽬录⼊:教师通过命令⾏输⼊题⽬信息(题⼲、选项、答案、知识点标签、难度系数1-5),保存到⽂件 questions.txt ,格 式为: 题⽬修改:输⼊题⽬ID,⽀持修改题⼲或答案,修改后同步更新⽂件。 2. 智能组卷(教师端) 规则输⼊:教师输⼊知识点(如“继承”)、题⽬数量(如10题)、难度范围(如2-4),系统从题库中随机抽取符合条件的题⽬ ⽣成试卷。 ⼿动调整:允许教师替换试卷中的题⽬,替换后⽣成新试卷⽂件 exam_001.txt 。 3. 答题与评(学⽣端) 答题:学⽣输⼊答案(如“A,B,C”),系统对⽐标准答案并计算成绩记录:将学⽣ID、得、答题时间写⼊ scores.csv ,格式为: 4. 学习报告(学⽣端) 报告⽣成:每周⼀⾃动⽣成报告 report_20231001.txt ,内容包括: 3. 问题的解决⽅案  1. 类设计 Question 类: 属性: id , content , options , answer , tag , difficulty ⽅法: saveToFile() , loadFromFile() ExamGenerator 类: ⽅法: randomSelect(vector<Question>&, int count) , exportExam(string filename) Student 类: 属性: id , password [ID] 题⼲:C++继承的三种类型是? 选项:A.公有 B.私有 C.保护 D.静态 答案:A,B,C 知识点:继承 难度:3 20231001,85,2023-10-01 14:30
04-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值