学院教学信息管理系统(c++)

每一条记录包括一位教师的职工号、姓名、职称、性别、3门课程,教学效果综合评分。

系统实现了以下功能:

1、输入:输入每一位教师记录,将其信息写入文件中。

2、显示:显示每位教师记录。

3、排序:按职工号或教学效果综合评分进行排序,并显示。

4、查找:完成按姓名或课程查找教师的相关记录,并显示。

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

using namespace std;

// 定义教师结构体
struct Teacher {
    int id; //职工号
    string name; //姓名
    string title; //职称
    char gender; //性别
    string courses[3]; //课程
    double teachingEffectiveness; //教学效果综合评分

    // 显示教师信息,声明为 const 成员函数
    void display() const {
        cout << "教师信息:" << endl;
        cout << "职工号: " << id << endl;
        cout << "姓名: " << name << endl;
        cout << "职称: " << title << endl;
        cout << "性别: " << gender << endl;
        cout << "课程: ";
        for (int i = 0; i < 3; ++i) {
            cout << courses[i] << " ";
        }
        cout << endl;
        cout << "教学效果综合评分: " << teachingEffectiveness << endl;
        cout << "-----------------------------" << endl;
    }
};


// 比较函数,用于排序
bool compareById(const Teacher& a, const Teacher& b) {
    return a.id < b.id;
}

bool compareByEffectiveness(const Teacher& a, const Teacher& b) {
    return a.teachingEffectiveness > b.teachingEffectiveness;
}

// 函数声明
void writeToFile(const vector<Teacher>& teachers, const string& filename);
void readFromFile(vector<Teacher>& teachers, const string& filename);
void displayTeachers(const vector<Teacher>& teachers);
void sortByOption(vector<Teacher>& teachers, int option);
void searchTeachers(const vector<Teacher>& teachers, const string& key);

int main() {
    vector<Teacher> teachers;
    string filename = "teachers.txt"; //文件 teachers.txt 将保存在程序的当前工作目录中
    int choice;

    // 读取文件中的数据
    readFromFile(teachers, filename);

    while (true) {
        cout << "欢迎使用学院教学信息管理系统:" << endl;
        cout << "1. 输入教师记录" << endl;
        cout << "2. 显示所有教师记录" << endl;
        cout << "3. 按职工号排序并显示" << endl;
        cout << "4. 按教学效果评分排序并显示" << endl;
        cout << "5. 按姓名或课程查找教师记录" << endl;
        cout << "0. 退出系统" << endl;
        cout << "请选择操作:";
        cin >> choice;

        switch (choice) {
            case 1: {
                Teacher newTeacher;
                cout << "请输入教师信息:" << endl;
                cout << "职工号: ";
                cin >> newTeacher.id;
                cout << "姓名: ";
                cin.ignore(); // 忽略之前的回车符
                getline(cin, newTeacher.name);
                cout << "职称: ";
                getline(cin, newTeacher.title);
                cout << "性别 (M/F): ";
                cin >> newTeacher.gender;
                cout << "输入3门课程名称:" << endl;
                for (int i = 0; i < 3; ++i) {
                    cout << "课程 " << i + 1 << ": ";
                    cin >> newTeacher.courses[i];
                }
                cout << "教学效果综合评分: ";
                cin >> newTeacher.teachingEffectiveness;
                teachers.push_back(newTeacher);

                // 写入文件
                writeToFile(teachers, filename);
                break;
            }
            case 2:
                displayTeachers(teachers);
                break;
            case 3:
                sortByOption(teachers, 1); // 1 表示按职工号排序
                displayTeachers(teachers);
                break;
            case 4:
                sortByOption(teachers, 2); // 2 表示按教学效果评分排序
                displayTeachers(teachers);
                break;
            case 5: {
                string key;
                cout << "请输入要查找的姓名或课程名称:";
                cin.ignore(); // 忽略之前的回车符
                getline(cin, key);
                searchTeachers(teachers, key);
                break;
            }
            case 0:
                cout << "感谢使用!再见!" << endl;
                return 0;
            default:
                cout << "无效的选项,请重新选择。" << endl;
                break;
        }
    }

    return 0;
}

// 将教师信息写入文件
void writeToFile(const vector<Teacher>& teachers, const string& filename) {
    ofstream outFile(filename);
    if (outFile.is_open()) {
        for (const auto& teacher : teachers) {
            outFile << teacher.id << "," << teacher.name << "," << teacher.title << ","
                    << teacher.gender << "," << teacher.courses[0] << "," << teacher.courses[1] << ","
                    << teacher.courses[2] << "," << teacher.teachingEffectiveness << endl;
        }
        outFile.close();
        cout << "数据已成功写入文件 " << filename << endl;
    } else {
        cout << "无法打开文件 " << filename << " 进行写入。" << endl;
    }
}

// 从文件中读取教师信息
void readFromFile(vector<Teacher>& teachers, const string& filename) {
    ifstream inFile(filename);
    if (inFile.is_open()) {
        teachers.clear();
        Teacher teacher;
        char comma;
        while (inFile >> teacher.id >> comma >> teacher.name >> comma >> teacher.title >> comma
                      >> teacher.gender >> comma >> teacher.courses[0] >> comma >> teacher.courses[1] >> comma
                      >> teacher.courses[2] >> comma >> teacher.teachingEffectiveness) {
            teachers.push_back(teacher);
        }
        inFile.close();
        cout << "成功从文件 " << filename << " 中读取数据。" << endl;
    } else {
        cout << "无法打开文件 " << filename << " 进行读取。" << endl;
    }
}

// 显示所有教师记录
void displayTeachers(const vector<Teacher>& teachers) {
    if (teachers.empty()) {
        cout << "暂无教师记录。" << endl;
    } else {
        for (const auto& teacher : teachers) {
            teacher.display();
        }
    }
}

// 按选项排序教师信息
void sortByOption(vector<Teacher>& teachers, int option) {
    switch (option) {
        case 1:
            sort(teachers.begin(), teachers.end(), compareById);
            cout << "按职工号排序结果:" << endl;
            break;
        case 2:
            sort(teachers.begin(), teachers.end(), compareByEffectiveness);
            cout << "按教学效果评分排序结果:" << endl;
            break;
        default:
            cout << "无效的排序选项。" << endl;
            return;
    }
}

// 按姓名或课程查找教师记录
void searchTeachers(const vector<Teacher>& teachers, const string& key) {
    bool found = false;
    for (const auto& teacher : teachers) {
        if (teacher.name == key) {
            teacher.display();
            found = true;
        } else {
            for (int i = 0; i < 3; ++i) {
                if (teacher.courses[i] == key) {
                    teacher.display();
                    found = true;
                    break;
                }
            }
        }
    }
    if (!found) {
        cout << "未找到与 " << key << " 相关的教师记录。" << endl;
    }
}

相关推荐

  1. 学院教学信息管理系统c++)

    2024-07-14 01:40:03       17 阅读
  2. C语言——教师信息管理系统

    2024-07-14 01:40:03       44 阅读
  3. C++构建MVC学生信息管理系统

    2024-07-14 01:40:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 01:40:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 01:40:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 01:40:03       62 阅读
  4. Python语言-面向对象

    2024-07-14 01:40:03       72 阅读

热门阅读

  1. 元组-预习

    2024-07-14 01:40:03       18 阅读
  2. Python标准库中的HTTP客户端模块

    2024-07-14 01:40:03       22 阅读
  3. HTTPS的工作原理(HTTPS建立连接的过程)

    2024-07-14 01:40:03       20 阅读
  4. 记录一点mybatis的坑

    2024-07-14 01:40:03       19 阅读
  5. 5Python的Pandas:数据结构

    2024-07-14 01:40:03       17 阅读
  6. 【技术支持】npm镜像设置

    2024-07-14 01:40:03       19 阅读
  7. 2024.7.31 Spyglass dft tcl 及sgdc使用总结

    2024-07-14 01:40:03       20 阅读
  8. Qt- 槽函数和普通函数的主要区别

    2024-07-14 01:40:03       20 阅读
  9. SQL基本查询

    2024-07-14 01:40:03       20 阅读
  10. 开箱Windows server 2025

    2024-07-14 01:40:03       21 阅读