头歌-学生成绩管理系统

任务描述

设计一个学生成绩管理系统,包括以下功能:

  1. 添加学生信息
  2. 删除学生信息
  3. 修改学生信息
  4. 查询学生信息
  5. 统计班级平均分、最高分、最低分
  6. 输出全班学生成绩

编程要求

  1. 学生信息包括姓名、学号、语文、数学、英语三门课程成绩
  2. 使用STL库的容器存储学生信息
  3. 实现类的继承与派生,派生出普通学生和优等生两个类,优等生的计算方法和普通学生不同
  4. 使用多态性和虚函数实现成绩计算方法的动态绑定

根据提示,在右侧编辑器补充代码,完成以上要求。

测试说明

平台会对你编写的代码进行测试:

测试输入:无(已在主函数给出测试集)

预期输出: 班级平均分:255.5 最高分:271 最低分:240 姓名:张三 学号:001 语文成绩:90 数学成绩:80 英语成绩:70 ... 姓名:王二 学号:...

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <limits.h>
using namespace std;
// 学生类
class Student {
public:
    virtual void calculateScore() = 0;  // 计算总分和平均分的虚函数
    virtual void printInfo() = 0;  // 输出学生信息的虚函数
    string name;  // 学生姓名
    string id;  // 学号
    int score_chinese;  // 语文成绩
    int score_math;  // 数学成绩
    int score_english;  // 英语成绩
    int score_total;  // 总分
    double score_average;  // 平均分
};
// 普通学生类
class OrdinaryStudent : public Student {
public:
    void calculateScore() override {  // 重写虚函数
        score_total = score_chinese + score_math + score_english;
        score_average = score_total / 3.0;
    }
    void printInfo() override {  // 重写虚函数
        cout << "姓名:" << name << " 学号:" << id << " 语文成绩:" << score_chinese 
             << " 数学成绩:" << score_math << " 英语成绩:" << score_english << endl;
    }
};
// 优等生类
class ExcellentStudent : public Student {
public:
    void calculateScore() override {  // 重写虚函数
        score_total = score_chinese * 0.8 + score_math * 1.2 + score_english * 1.0;
        score_average = score_total / 3.0;
    }
    void printInfo() override {  // 重写虚函数
        cout << "姓名:" << name << " 学号:" << id << " 语文成绩:" << score_chinese 
             << " 数学成绩:" << score_math << " 英语成绩:" << score_english << endl;
    }
};
// 学生成绩管理系统类
class ScoreManager {
public:
    void addStudent(Student* student) {  // 添加学生信息
        students.push_back(student);
    }
    void deleteStudent(int index) {  // 删除学生信息
        if (index >= 0 && index < students.size()) {
            students.erase(students.begin() + index);
        }
    }
    void modifyStudent(int index, Student* student) {  // 修改学生信息
        if (index >= 0 && index < students.size()) {
            students[index] = student;
        }
    }
    void queryStudent(string id) {  // 查询学生信息
        for (int i = 0; i < students.size(); i++) {
            if (students[i]->id == id) {
                students[i]->printInfo();
            }
        }
    }
    void calculateScore() {  // 计算班级平均分、最高分、最低分
    //========begin========
        if (students.empty()) { 
            cout << "No students available." << endl; 
            return;
            } 
        double totalScore = 0.0; 
        int highestScore = INT_MIN; 
        int lowestScore = INT_MAX; 

        for (int i = 0; i < students.size(); ++i) { 
                students[i]->calculateScore();  
                totalScore += students[i]->score_total; 

        if (students[i]->score_total > highestScore) {
            highestScore = students[i]->score_total; 
            } 

        if (students[i]->score_total < lowestScore) {
            lowestScore = students[i]->score_total; 
            } 
        } 
            double averageScore = totalScore / students.size(); 
            cout << "班级平均分:" << averageScore << endl;
            cout << "最高分:" << highestScore << endl; 
            cout << "最低分:" << lowestScore << endl;            
    //=========end=========
    }
    void printAllStudents() {  // 输出全班学生成绩
        for (int i = 0; i < students.size(); i++) {
            students[i]->calculateScore();
            students[i]->printInfo();
        }
    }
private:
    vector<Student*> students;  // 使用STL库的容器存储学生信息
};
int main() {
    ScoreManager manager;
    OrdinaryStudent* student1 = new OrdinaryStudent();
    student1->name = "张三";
    student1->id = "001";
    student1->score_chinese = 90;
    student1->score_math = 80;
    student1->score_english = 70;
    manager.addStudent(student1);
    ExcellentStudent* student2 = new ExcellentStudent();
    student2->name = "李四";
    student2->id = "002";
    student2->score_chinese = 85;
    student2->score_math = 90;
    student2->score_english = 95;
    manager.addStudent(student2);
    manager.calculateScore();
    manager.printAllStudents();
    manager.deleteStudent(0);
    manager.modifyStudent(0, student2);
    manager.queryStudent("002");
    delete student1;
    delete student2;
    return 0;
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值