C++ 面向对象实现学生成绩管理系统

本系统使用 C++ 面向对象编程实现,能够对学生成绩进行增、删、改、查等操作,支持按学分积点排序,并提供友好的菜单界面。

基本要求

  1. 存储结构: 采用合适的存储结构存储学生成绩信息,每个记录包含以下数据项:

    • 学号
    • 姓名
    • 高等数学
    • 英语
    • 物理
    • 数据结构
    • 面向对象程序设计综合实训
    • 总分
    • 学分积点

    以学号为关键字。

  2. 功能:

    • 增加学生记录
    • 修改指定学生的成绩数据
    • 删除指定学生记录
    • 查找符合条件的学生成绩信息(指定学号、指定课程、指定课程且成绩在指定范围、学分积点在指定范围)
    • 将学生成绩按学分积点降序排序
  3. 用户界面:

    • 菜单方式
    ****************************************************
    I ---增加学生记录               U ---修改学生成绩
    D---删除学生记录               F ---查找条件的学生记录
    S ---按学分积点降序排序并输出   P ---打印学生记录
    Q ---结束 
    ****************************************************
    请选择功能符(输入I、U、D、F、S、P和Q);
    
    • 当选择的功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。

实现思路

  1. 数据结构设计:

    • 可以使用 C++ 的 structclass 来定义学生成绩信息结构。
    • 可以使用 vector 或其他容器来存储学生成绩信息。
  2. 面向对象设计:

    • 可以定义一个 Student 类来表示学生信息,包含学号、姓名、各科成绩、总分、学分积点等属性。
    • 可以定义一个 ScoreManager 类来管理学生成绩信息,包含增、删、改、查、排序等功能。
  3. 用户界面设计:

    • 可以使用 C++ 的 iostream 库来实现菜单界面。
    • 可以使用 switch 语句来实现不同功能的选择。

代码示例

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 定义学生成绩信息结构
struct Student {
    string id; // 学号
    string name; // 姓名
    int math; // 高等数学
    int english; // 英语
    int physics; // 物理
    int dataStructure; // 数据结构
    int oop; // 面向对象程序设计综合实训
    int totalScore; // 总分
    double creditPoint; // 学分积点
};

// 定义学生成绩管理类
class ScoreManager {
public:
    // 添加学生记录
    void addStudent(const Student& student) {
        students.push_back(student);
    }

    // 修改学生成绩
    void modifyStudent(const string& id, const Student& newStudent) {
        // 找到指定学号的学生
        for (auto& stu : students) {
            if (stu.id == id) {
                stu = newStudent;
                return;
            }
        }
        cout << '没有找到学号为 ' << id << ' 的学生记录!' << endl;
    }

    // 删除学生记录
    void deleteStudent(const string& id) {
        // 找到指定学号的学生
        auto it = find_if(students.begin(), students.end(),
                          [&id](const Student& stu) { return stu.id == id; });
        if (it != students.end()) {
            students.erase(it);
            cout << '删除学生记录成功!' << endl;
        } else {
            cout << '没有找到学号为 ' << id << ' 的学生记录!' << endl;
        }
    }

    // 查找学生成绩
    vector<Student> findStudents(const string& id = '', const string& course = '',
                                 int minScore = -1, int maxScore = -1,
                                 double minCreditPoint = -1, double maxCreditPoint = -1) {
        vector<Student> result;
        for (const auto& stu : students) {
            if (id != '' && stu.id != id) continue;
            if (course != '' && !isCourseMatch(stu, course)) continue;
            if (minScore != -1 && stu.totalScore < minScore) continue;
            if (maxScore != -1 && stu.totalScore > maxScore) continue;
            if (minCreditPoint != -1 && stu.creditPoint < minCreditPoint) continue;
            if (maxCreditPoint != -1 && stu.creditPoint > maxCreditPoint) continue;
            result.push_back(stu);
        }
        return result;
    }

    // 按学分积点降序排序
    void sortStudentsByCreditPoint() {
        sort(students.begin(), students.end(),
             [](const Student& a, const Student& b) { return a.creditPoint > b.creditPoint; });
    }

private:
    // 判断学生成绩是否符合指定课程
    bool isCourseMatch(const Student& stu, const string& course) {
        if (course == '高等数学') return true;
        if (course == '英语') return true;
        if (course == '物理') return true;
        if (course == '数据结构') return true;
        if (course == '面向对象程序设计综合实训') return true;
        return false;
    }

    vector<Student> students; // 存储所有学生成绩信息
};

int main() {
    ScoreManager manager;

    while (true) {
        cout << '****************************************************' << endl;
        cout << 'I ---增加学生记录               U ---修改学生成绩' << endl;
        cout << 'D---删除学生记录               F ---查找条件的学生记录' << endl;
        cout << 'S ---按学分积点降序排序并输出   P ---打印学生记录' << endl;
        cout << 'Q ---结束' << endl;
        cout << '****************************************************' << endl;
        cout << '请选择功能符(输入I、U、D、F、S、P和Q):';

        char choice;
        cin >> choice;

        switch (choice) {
            case 'I': {
                // 添加学生记录
                Student newStudent;
                cout << '请输入学生学号:';
                cin >> newStudent.id;
                cout << '请输入学生姓名:';
                cin >> newStudent.name;
                // 输入各科成绩...
                manager.addStudent(newStudent);
                break;
            }
            case 'U': {
                // 修改学生成绩
                string id;
                cout << '请输入要修改的学生学号:';
                cin >> id;
                // 输入新的学生信息...
                manager.modifyStudent(id, newStudent);
                break;
            }
            case 'D': {
                // 删除学生记录
                string id;
                cout << '请输入要删除的学生学号:';
                cin >> id;
                manager.deleteStudent(id);
                break;
            }
            case 'F': {
                // 查找学生成绩
                // 输入查找条件...
                vector<Student> result = manager.findStudents(id, course, minScore, maxScore, minCreditPoint, maxCreditPoint);
                // 打印查找结果...
                break;
            }
            case 'S': {
                // 按学分积点降序排序
                manager.sortStudentsByCreditPoint();
                // 打印排序结果...
                break;
            }
            case 'P': {
                // 打印学生记录
                // 打印所有学生记录...
                break;
            }
            case 'Q':
                return 0;
            default:
                cout << '无效的功能符!请重新输入。' << endl;
        }
    }
    return 0;
}

说明

  • 以上代码仅为示例,具体的实现细节还需要根据实际情况进行调整。
  • 可以根据需求添加更多功能,例如统计成绩、计算平均分等。
  • 可以使用 C++ 的文件操作来实现数据的持久化存储。
C++ 面向对象实现学生成绩管理系统

原文地址: https://www.cveoy.top/t/topic/lXKQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录