每一条记录包括一位教师的职工号、姓名、职称、性别、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;
}
}