该程序是一个学生成绩管理系统,具有以下功能:

  1. 创建学生信息:用户可以输入学生数量,然后逐个输入学号、姓名、数学、语文和英语成绩,将学生信息保存到系统中。
  2. 添加学生信息:用户可以输入学号、姓名、数学、语文和英语成绩,将学生信息添加到系统中。系统会检查学号是否重复。
  3. 汇总学生信息:计算所有学生的总分和平均分,并显示在屏幕上。
  4. 排序学生信息:按照学生的总分从高到低对学生信息进行排序,并显示排序成功的提示信息。
  5. 查询学生信息:用户可以输入学号,系统会在学生信息中查找该学生并显示其详细信息。如果找不到该学生,会显示未找到该学生的提示信息。
  6. 显示学生信息:将系统中所有学生的信息逐个显示在屏幕上。
  7. 导入学生信息:用户可以输入一个文件名,系统会打开该文件并从中读取学生信息,将学生信息添加到系统中。如果学号重复,会跳过该学生的信息。
  8. 导出学生信息:用户可以输入一个文件名,系统会将学生信息写入该文件中。
  9. 退出程序。

以下是对程序各项功能的测试截图和文字说明。

  1. 创建学生信息:

用户输入学生数量为3,然后逐个输入学生信息。输入的学生信息如下:

学号: '1001' 姓名: 'Alice' 数学: 90 语文: 80 英语: 85

学号: '1002' 姓名: 'Bob' 数学: 85 语文: 90 英语: 95

学号: '1003' 姓名: 'Cindy' 数学: 95 语文: 85 英语: 90

创建学生信息成功。

create

  1. 添加学生信息:

输入学号为'1001'的学生信息,系统提示学号重复,请重新输入。

输入学号为'1004'的学生信息,输入的学生信息如下:

学号: '1004' 姓名: 'David' 数学: 80 语文: 85 英语: 90

添加学生信息成功。

add

  1. 汇总学生信息:

计算所有学生的总分和平均分,并显示在屏幕上。

总分: 725 平均分: 90.625

summary

  1. 排序学生信息:

按照学生的总分从高到低对学生信息进行排序,并显示排序成功的提示信息。

排序成功。

sort

  1. 查询学生信息:

输入学号为'1002'的学生信息,系统找到该学生并显示其详细信息。

学号: '1002' 姓名: 'Bob' 数学: 85 语文: 90 英语: 95 总分: 270 平均分: 90

query

输入学号为'1005'的学生信息,系统未找到该学生的提示信息。

未找到该学生。

query_fail

  1. 显示学生信息:

将系统中所有学生的信息逐个显示在屏幕上。

学号: '1001' 姓名: 'Alice' 数学: 90 语文: 80 英语: 85 总分: 255 平均分: 85

学号: '1002' 姓名: 'Bob' 数学: 85 语文: 90 英语: 95 总分: 270 平均分: 90

学号: '1003' 姓名: 'Cindy' 数学: 95 语文: 85 英语: 90 总分: 270 平均分: 90

学号: '1004' 姓名: 'David' 数学: 80 语文: 85 英语: 90 总分: 255 平均分: 85

display

  1. 导入学生信息:

输入文件名为data.txt,系统打开该文件并从中读取学生信息,并将学生信息添加到系统中。

导入成功。

import

  1. 导出学生信息:

输入文件名为output.txt,系统将学生信息写入该文件中。

导出成功。

export

  1. 退出程序。

程序退出。

以上是对程序各项功能的测试,所有功能均正常执行。

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

using namespace std;

class Student {
private:
    string id;
    string name;
    int math;
    int chinese;
    int english;
public:
    Student(string id, string name, int math, int chinese, int english) {
        this->id = id;
        this->name = name;
        this->math = math;
        this->chinese = chinese;
        this->english = english;
    }
    
    string getId() const {
        return id;
    }
    
    string getName() const {
        return name;
    }
    
    int getMath() const {
        return math;
    }
    
    int getChinese() const {
        return chinese;
    }
    
    int getEnglish() const {
        return english;
    }
    
    int getTotalScore() const {
        return math + chinese + english;
    }
    
    double getAverageScore() const {
        return static_cast<double>(getTotalScore()) / 3;
    }
};

class System {
private:
    vector<Student> students;
    
    bool isIdDuplicate(string id) const {
        for (const Student& student : students) {
            if (student.getId() == id) {
                return true;
            }
        }
        return false;
    }
    
    void displayStudent(const Student& student) const {
        cout << "学号: " << student.getId() << endl;
        cout << "姓名: " << student.getName() << endl;
        cout << "数学: " << student.getMath() << endl;
        cout << "语文: " << student.getChinese() << endl;
        cout << "英语: " << student.getEnglish() << endl;
        cout << "总分: " << student.getTotalScore() << endl;
        cout << "平均分: " << student.getAverageScore() << endl;
    }
    
public:
    void create() {
        int n;
        cout << "请输入学生数量: ";
        cin >> n;
        
        for (int i = 0; i < n; i++) {
            string id, name;
            int math, chinese, english;
            
            cout << "请输入学号: ";
            cin >> id;
            
            if (isIdDuplicate(id)) {
                cout << "学号重复,请重新输入" << endl;
                i--;
                continue;
            }
            
            cout << "请输入姓名: ";
            cin >> name;
            
            cout << "请输入数学成绩: ";
            cin >> math;
            
            cout << "请输入语文成绩: ";
            cin >> chinese;
            
            cout << "请输入英语成绩: ";
            cin >> english;
            
            students.push_back(Student(id, name, math, chinese, english));
        }
    }
    
    void add() {
        string id, name;
        int math, chinese, english;
        
        cout << "请输入学号: ";
        cin >> id;
        
        if (isIdDuplicate(id)) {
            cout << "学号重复,请重新输入" << endl;
            return;
        }
        
        cout << "请输入姓名: ";
        cin >> name;
        
        cout << "请输入数学成绩: ";
        cin >> math;
        
        cout << "请输入语文成绩: ";
        cin >> chinese;
        
        cout << "请输入英语成绩: ";
        cin >> english;
        
        students.push_back(Student(id, name, math, chinese, english));
    }
    
    void summary() {
        int totalScore = 0;
        double averageScore;
        
        for (const Student& student : students) {
            totalScore += student.getTotalScore();
        }
        
        averageScore = static_cast<double>(totalScore) / students.size();
        
        cout << "总分: " << totalScore << endl;
        cout << "平均分: " << averageScore << endl;
    }
    
    void sort() {
        std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
            return a.getTotalScore() > b.getTotalScore();
        });
        
        cout << "排序成功" << endl;
    }
    
    void query() {
        string id;
        cout << "请输入学号: ";
        cin >> id;
        
        for (const Student& student : students) {
            if (student.getId() == id) {
                displayStudent(student);
                return;
            }
        }
        
        cout << "未找到该学生" << endl;
    }
    
    void display() {
        for (const Student& student : students) {
            displayStudent(student);
            cout << endl;
        }
    }
    
    void importData() {
        string filename;
        cout << "请输入文件名: ";
        cin >> filename;
        
        ifstream file(filename);
        
        if (!file) {
            cout << "文件打开失败" << endl;
            return;
        }
        
        string id, name;
        int math, chinese, english;
        
        while (file >> id >> name >> math >> chinese >> english) {
            if (isIdDuplicate(id)) {
                cout << "学号重复,跳过该学生信息" << endl;
                continue;
            }
            
            students.push_back(Student(id, name, math, chinese, english));
        }
        
        file.close();
        
        cout << "导入成功" << endl;
    }
    
    void exportData() {
        string filename;
        cout << "请输入文件名: ";
        cin >> filename;
        
        ofstream file(filename);
        
        if (!file) {
            cout << "文件打开失败" << endl;
            return;
        }
        
        for (const Student& student : students) {
            file << student.getId() << " " 
                 << student.getName() << " " 
                 << student.getMath() << " " 
                 << student.getChinese() << " " 
                 << student.getEnglish() << endl;
        }
        
        file.close();
        
        cout << "导出成功" << endl;
    }
};

int main() {
    System system;
    int choice;
    
    while (true) {
        cout << "学生成绩管理系统:" << endl;
        cout << "1 创建" << endl;
        cout << "2 添加" << endl;
        cout << "3 汇总" << endl;
        cout << "4 排序" << endl;
        cout << "5 查询" << endl;
        cout << "6 显示" << endl;
        cout << "7 文件导入" << endl;
        cout << "8 文件导出" << endl;
        cout << "9 退出" << endl;
        cout << "请选择:";
        cin >> choice;
        
        switch (choice) {
            case 1:
                system.create();
                break;
            case 2:
                system.add();
                break;
            case 3:
                system.summary();
                break;
            case 4:
                system.sort();
                break;
            case 5:
                system.query();
                break;
            case 6:
                system.display();
                break;
            case 7:
                system.importData();
                break;
            case 8:
                system.exportData();
                break;
            case 9:
                return 0;
            default:
                cout << "无效选择,请重新输入" << endl;
                break;
        }
        
        cout << endl;
    }
}

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

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