#include <iostream> #include <sstream> #include <string> #include <ctime> #include <vector> #include <fstream> #include <string> #include <iomanip> using namespace std;
class Teacher { public: string id, name, gender, college, hireDate; int age;
Teacher() = default; Teacher(string id, string name, string gender, int age, string college, string hireDate) : id(id), name(name), gender(gender), age(age), college(college), hireDate(hireDate) {}
friend istream& operator>>(istream& in, Teacher& t) { in >> t.id >> t.name >> t.gender >> t.age >> t.college >> t.hireDate; return in; } friend ostream& operator<<(ostream& out, const Teacher& t) { out << t.id << " " << t.name << " " << t.gender << " " << t.age << " " << t.college << " " << t.hireDate; return out; }
void display() const { cout << setw(10) << id << setw(10) << name << setw(10) << gender << setw(5) << age << setw(15) << college << setw(15) << hireDate << endl; } };
class Student { public: string id, name, gender, category, college, admissionDate; int age;
Student() = default; Student(string id, string name, string gender, int age, string category, string college, string admissionDate) : id(id), name(name), gender(gender), age(age), category(category), college(college), admissionDate(admissionDate) {}
friend istream& operator>>(istream& in, Student& s) { in >> s.id >> s.name >> s.gender >> s.age >> s.category >> s.college >> s.admissionDate; return in; } friend ostream& operator<<(ostream& out, const Student& s) { out << s.id << " " << s.name << " " << s.gender << " " << s.age << " " << s.category << " " << s.college << " " << s.admissionDate; return out; }
void display() const { cout << setw(10) << id << setw(10) << name << setw(10) << gender << setw(5) << age << setw(10) << category << setw(15) << college << setw(15) << admissionDate << endl; } };
class Course { public: string id, name, category; int credits;
Course() = default; Course(string id, string name, int credits, string category) : id(id), name(name), credits(credits), category(category) {}
friend istream& operator>>(istream& in, Course& c) { in >> c.id >> c.name >> c.credits >> c.category; return in; } friend ostream& operator<<(ostream& out, const Course& c) { out << c.id << " " << c.name << " " << c.credits << " " << c.category; return out; }
void display() const { cout << setw(10) << id << setw(15) << name << setw(5) << credits << setw(15) << category << endl; } };
class TeachingInfo { public: string id, teacherId, courseCode, startTime;
TeachingInfo() = default; TeachingInfo(string id, string teacherId, string courseCode, string startTime) : teacherId(teacherId), courseCode(courseCode), startTime(startTime), id(id) {}
friend istream& operator>>(istream& in, TeachingInfo& t) { in >> t.id >> t.teacherId >> t.courseCode >> t.startTime; return in; } friend ostream& operator<<(ostream& out, const TeachingInfo& t) { out << t.id << t.teacherId << " " << t.courseCode << " " << t.startTime; return out; }
void display() const { cout << setw(10) << id << setw(10) << teacherId << setw(10) << courseCode << setw(15) << startTime << endl; } };
class Enrollment { public: string studentId, teacherId, courseCode, enrollTime, id; double grade;
Enrollment() = default; Enrollment(string id, string studentId, string teacherId, string courseCode, double grade, string enrollTime) : id(id), studentId(studentId), teacherId(teacherId), courseCode(courseCode), grade(grade), enrollTime(enrollTime) {}
friend istream& operator>>(istream& in, Enrollment& e) { in >> e.id >> e.studentId >> e.teacherId >> e.courseCode >> e.grade >> e.enrollTime; return in; } friend ostream& operator<<(ostream& out, const Enrollment& e) { out << e.id << e.studentId << " " << e.teacherId << " " << e.courseCode << " " << e.grade << " " << e.enrollTime; return out; }
void display() const { cout << setw(10) << id << setw(10) << studentId << setw(10) << teacherId << setw(10) << courseCode << setw(5) << grade << setw(15) << enrollTime << endl; } };
bool isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); }
bool checkDate(string dateStr) { if (dateStr.size() != 10 || dateStr[4] != '-' || dateStr[7] != '-') { return false; }
int year, month, day; char dash1, dash2;
std::istringstream iss(dateStr); iss >> year >> dash1 >> month >> dash2 >> day;
if (iss.fail() || dash1 != '-' || dash2 != '-') { return false; }
if (year < 1900 || year > 9999) { return false; }
if (month < 1 || month > 12) { return false; }
int daysInMonth; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: daysInMonth = 31; break; case 4: case 6: case 9: case 11: daysInMonth = 30; break; case 2: daysInMonth = isLeapYear(year) ? 29 : 28; break; default: return false; }
if (day < 1 || day > daysInMonth) { return false; }
return true; }
template <typename T> void saveToFile(const string& filename, const vector<T>& data) { ofstream outFile(filename); for (const auto& item : data) outFile << item << endl; }
template <typename T> void loadFromFile(const string& filename, vector<T>& data) { ifstream inFile(filename); if (!inFile) { cerr << "Warning: 未找到文件 " << filename << ",从空白开始!" << endl; return; } T item; while (inFile >> item) data.push_back(item); }
template <typename T> void deleteItem(vector<T>& data, const string& identifier, const string& filename) { for (auto it = data.begin(); it != data.end(); ++it) { if (it->id == identifier) { data.erase(it); saveToFile(filename, data); cout << "删除成功!" << endl; return; } } cout << "未找到指定项!" << endl; }
template <typename T> void modifyItem(vector<T>& data, const string& identifier, const string& filename) { bool found = false; for (auto& item : data) { if (item.id == identifier) { cout << "找到项,请输入新的数据(包括编号):" ; cin >> item; found = true; break; } } if (found) { saveToFile(filename, data); cout << "修改成功!" << endl; } else { cout << "未找到指定项!" << endl; } }
void modifyTeacherItem(vector<Teacher>& data, const string& identifier, const string& filename) { bool found = false; vector<string> collages = { "计算机学院" ,"土木学院","经济学院","生化学院","教育学院" }; vector<string> sexs = { "男","女" }; for (auto& item : data) { if (item.id == identifier) { cout << "找到项,请输入新的数据" << endl; cout << "输入姓名:"; cin >> item.name; for (auto temp : sexs) { cout << temp << " "; } cout << "输入性别(0:男,1:女):"; int ij; while (true) { cin >> ij; if (ij != 0 && ij != 1) { cout << "重新输入性别" << endl; } else if (ij == 0) { item.gender = "男"; break; } else { item.gender = "女"; break; } } cout << "输入年龄:"; cin >> item.age; int tt1 = 0; for (auto temp : collages) { cout << tt1 << "." << temp << endl; tt1 += 1; } cout << "选择学院(输入数字):"; cin >> ij; item.college = collages[ij]; cout << "输入入职时间(yyyy-mm-dd):"; string time_; while (true) { cin >> time_; if (checkDate(time_)) { item.hireDate = time_; break; } else { cout << "日期不规范,请重新输入:"; } } found = true; break; } } if (found) { saveToFile(filename, data); cout << "修改成功!" << endl; } else { cout << "未找到指定项!" << endl; } }
void modifyStudentItem(vector<Student>& data, const string& identifier, const string& filename) { bool found = false; vector<string> collages = { "计算机学院" ,"土木学院","经济学院","生化学院","教育学院" }; vector<string> sexs = { "男","女" }; for (auto& item : data) { if (item.id == identifier) { cout << "找到项,请输入新的数据" << endl; cout << "输入姓名:"; cin >> item.name; for (auto temp : sexs) { cout << temp << " "; } cout << "输入性别(0:男,1:女):"; int ij; while (true) { cin >> ij; if (ij != 0 && ij != 1) { cout << "重新输入性别" << endl; } else if (ij == 0) { item.gender = "男"; break; } else { item.gender = "女"; break; } } cout << "输入年龄:"; cin >> item.age; cout << "输入类别:"; cin >> item.category;
int tt1 = 0; for (auto temp : collages) { cout << tt1 << "." << temp << endl; tt1 += 1; } cout << "选择学院(输入数字):"; cin >> ij; item.college = collages[ij];
cout << "输入入学时间(yyyy-mm-dd):"; string time_; while (true) { cin >> time_; if (checkDate(time_)) { item.admissionDate = time_; break; } else { cout << "日期不规范,请重新输入:"; } } found = true; break; } } if (found) { saveToFile(filename, data); cout << "修改成功!" << endl; } else { cout << "未找到指定项!" << endl; } }
void showMenu() { cout << "****************************" << endl; cout << "***** 1.教师信息 *****" << endl; cout << "***** 2.学生信息 *****" << endl; cout << "***** 3.课程信息 *****" << endl; cout << "***** 4.授课信息 *****" << endl; cout << "***** 5.选课信息 *****" << endl; cout << "***** 6.退出 *****" << endl; cout << "****************************" << endl; cout << "请输入您的选择: "; }
void teacherMenu(vector<Teacher>& teachers) { int choice; vector<string> collages = { "计算机学院" ,"土木学院","经济学院","生化学院","教育学院"}; vector<string> sexs = { "男","女" }; int temp; do { cout << "1. 添加教师\n2. 修改教师\n3. 删除教师\n4. 查看所有教师" << endl; cout << "0. 退出\n请输入您的选择: "; cin >> choice; switch (choice) { case 1: { system("cls"); Teacher t; cout << "输入工号:"; cin >> t.id; cout << "输入姓名:"; cin >> t.name; for (auto temp : sexs) { cout << temp << " "; } cout << "输入性别(0:男,1:女):"; int ij; while (true) { cin >> ij; if (ij != 0 && ij != 1) { cout << "重新输入性别" << endl; } else if (ij == 0) { t.gender = "男"; break; } else { t.gender = "女"; break; } } cout << "输入年龄:"; cin >> t.age; int tt1 = 0; for (auto temp : collages) { cout << tt1 <<"." << temp << endl; tt1 += 1; } cout << "选择学院(输入数字):"; cin >> ij; t.college = collages[ij]; cout << "输入入职时间(yyyy-mm-dd):"; string time_; while (true) { cin >> time_; if (checkDate(time_)) { t.hireDate = time_; break; } else { cout << "日期不规范,请重新输入:"; } } teachers.push_back(t); saveToFile("teachers.txt", teachers); cout << "添加成功" << endl; break; }
case 2: { string id; system("cls"); cout << "输入要修改的教师工号: "; cin >> id; modifyTeacherItem(teachers, id, "teachers.txt"); break; }
case 3: { system("cls"); string id; cout << "输入要删除的教师工号: "; cin >> id; deleteItem(teachers, id, "teachers.txt"); break; } case 4: { system("cls"); for (const auto& t : teachers) t.display(); break; } case 0: cout << "退出" << endl; break; default: cout << "输入错误,请重新输入!" << endl; } } while (choice != 0); } void studentMenu(vector<Student>& students) { int choice; vector<string> collages = { "计算机学院" ,"土木学院","经济学院","生化学院","教育学院" }; vector<string> sexs = { "男","女" }; do {
cout << "1. 添加学生\n2. 修改学生\n3. 删除学生\n4. 查看所有学生" << endl; cout << "0. 退出\n请输入您的选择: "; cin >> choice; switch (choice) { case 1: { system("cls"); Student s; cout << "输入学号:"; cin >> s.id; cout << "输入姓名:"; cin >> s.name; for (auto temp : sexs) { cout << temp << " "; } cout << "输入性别(0:男,1:女):"; int ij; while (true) { cin >> ij; if (ij != 0 && ij != 1) { cout << "重新输入性别" << endl; } else if (ij == 0) { s.gender = "男"; break; } else { s.gender = "女"; break; } } cout << "输入年龄:"; cin >> s.age; cout << "输入类别:"; cin >> s.category;
int tt1 = 0; for (auto temp : collages) { cout << tt1 << "." << temp << endl; tt1 += 1; } cout << "选择学院(输入数字):"; cin >> ij; s.college = collages[ij];
cout << "输入入学时间(yyyy-mm-dd):"; string time_; while (true) { cin >> time_; if (checkDate(time_)) { s.admissionDate = time_; break; } else { cout << "日期不规范,请重新输入:"; } }
students.push_back(s); saveToFile("students.txt", students); cout << "添加成功" << endl; break; }
case 2: { system("cls"); string id; cout << "输入要修改的学生学号: "; cin >> id; modifyStudentItem(students, id, "students.txt"); break; }
case 3: { system("cls"); string id; cout << "输入要删除的学生学号: "; cin >> id; deleteItem(students, id, "students.txt"); break; } case 4: { system("cls"); for (const auto& s : students) s.display(); break; } case 0: cout << "退出系统!" << endl; break; default: cout << "输入错误,请重新输入!" << endl; } } while (choice != 0); } void courseMenu(vector<Course>& courses) { int choice; do {
cout << "1. 添加课程\n2. 修改课程\n3. 删除课程\n4. 查看所有课程" << endl; cout << "0. 退出\n请输入您的选择: "; cin >> choice; switch (choice) {
case 1: { system("cls"); Course c; cout << "输入课程编号 名称 学分 类别: "; cin >> c; courses.push_back(c); saveToFile("courses.txt", courses); cout << "添加成功" << endl; break; }
case 2: { string id; system("cls"); cout << "输入要修改的课程编号: "; cin >> id; modifyItem(courses, id, "courses.txt"); break; } case 3: { string id; system("cls"); cout << "输入要删除的课程编号: "; cin >> id; deleteItem(courses, id, "courses.txt"); break; } case 4: { system("cls"); for (const auto& c : courses) c.display(); break; } case 0: cout << "退出系统!" << endl; break; default: cout << "输入错误,请重新输入!" << endl; } } while (choice != 0); } void teachInfoMenu(vector<TeachingInfo> teachingInfos) { int choice; do {
cout << "1. 添加授课信息\n2. 修改授课信息\n3. 删除授课信息\n4. 查看所有授课信息" << endl; cout << "0. 退出\n请输入您的选择: "; cin >> choice; switch (choice) {
case 1: { system("cls"); TeachingInfo t; cout << "输入授课信息编号 教师工号 课程编号 开设时间: "; cin >> t; teachingInfos.push_back(t); saveToFile("teaching_info.txt", teachingInfos); cout << "添加成功" << endl; break; }
case 2: { system("cls"); string id; cout << "输入要修改的授课信息编号: "; cin >> id; modifyItem(teachingInfos, id, "teaching_info.txt"); break; }
case 3: { string id; system("cls"); cout << "输入要删除的授课信息编号: "; cin >> id; deleteItem(teachingInfos, id, "teaching_info.txt"); break; } case 4: { system("cls"); for (const auto& t : teachingInfos) t.display(); break; } case 0: cout << "退出系统!" << endl; break; default: cout << "输入错误,请重新输入!" << endl; } } while (choice != 0); } void enrollMenu(vector<Enrollment> enrollments) { int choice; do {
cout << "1. 添加选课信息\n2. 修改选课信息\n3. 删除选课信息\n4. 查看所有选课信息" << endl; cout << "0. 退出\n请输入您的选择: "; cin >> choice; switch (choice) { case 1: { Enrollment e; cout << "输入选课信息编号 学生学号 教师工号 课程编号 成绩 选修时间: "; cin >> e; enrollments.push_back(e); saveToFile("enrollments.txt", enrollments); system("cls"); break; } case 2: { string id; cout << "输入要修改的选课信息编号: "; cin >> id; modifyItem(enrollments, id, "enrollments.txt"); system("cls"); break; } case 3: { string id; cout << "输入要修改的选课信息编号: "; cin >> id; deleteItem(enrollments, id, "enrollments.txt"); system("cls"); break; } case 4: for (const auto& e : enrollments) e.display(); break; case 0: cout << "退出系统!" << endl; break; default: cout << "输入错误,请重新输入!" << endl; } } while (choice != 0); }
int main() { vector<Teacher> teachers; vector<Student> students; vector<Course> courses; vector<TeachingInfo> teachingInfos; vector<Enrollment> enrollments;
loadFromFile("teachers.txt", teachers); loadFromFile("students.txt", students); loadFromFile("courses.txt", courses); loadFromFile("teaching_info.txt", teachingInfos); loadFromFile("enrollments.txt", enrollments);
int choice; do { showMenu(); cin >> choice; switch (choice) { case 1: { system("cls"); teacherMenu(teachers); system("cls"); break; } case 2: { system("cls"); studentMenu(students); system("cls"); break; } case 3: { system("cls"); courseMenu(courses); system("cls"); break; } case 4: { system("cls"); teachInfoMenu(teachingInfos); system("cls"); break; } case 5: { system("cls"); enrollMenu(enrollments); system("cls"); break; } case 6: cout << "退出系统!" << endl; break; default: cout << "输入错误,请重新输入!" << endl; } } while (choice != 6);
return 0; }
|