c++语言课表查询系统【基本功能】 课表数据文件。每个课表的信息包括:学期、专业班级、时间、科目、教室等基本信息。 能够按给定班级、时间等信息进行查找并显示相关信息。 能够添加、删除或修改课表中的课程信息。 能够按照学期或班级信息对课表进行排序,并存入文件中。 【扩展功能】 可以按照自己对课表查询系统的需求理解进行扩展。比如:(1)权限处理 (2)模糊查询(3)综合查询(4)统计功能等。,写出完整代码
时间: 2024-03-17 09:44:28 浏览: 21
好的,以下是一个c++语言课表查询系统的完整代码,其中包含了基本功能和扩展功能:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 课程类
class Course {
public:
string semester; // 学期
string major; // 专业
string classNo; // 班级
string time; // 上课时间
string subject; // 科目
string classroom; // 教室
// 构造函数
Course(string s, string m, string cn, string t, string sub, string c) :
semester(s), major(m), classNo(cn), time(t), subject(sub), classroom(c) {}
};
// 课表类
class Schedule {
public:
vector<Course> courses; // 课程列表
// 添加课程
void addCourse(Course course) {
courses.push_back(course);
}
// 删除课程
void deleteCourse(int index) {
courses.erase(courses.begin() + index);
}
// 修改课程
void editCourse(int index, Course course) {
courses[index] = course;
}
// 按班级查找课程
vector<Course> queryByClass(string classNo) {
vector<Course> result;
for (auto& course : courses) {
if (course.classNo == classNo) {
result.push_back(course);
}
}
return result;
}
// 按时间查找课程
vector<Course> queryByTime(string time) {
vector<Course> result;
for (auto& course : courses) {
if (course.time == time) {
result.push_back(course);
}
}
return result;
}
// 按学期排序
void sortBySemester() {
sort(courses.begin(), courses.end(), [](Course& a, Course& b) {
return a.semester < b.semester;
});
}
// 按班级排序
void sortByClass() {
sort(courses.begin(), courses.end(), [](Course& a, Course& b) {
if (a.major == b.major) {
return a.classNo < b.classNo;
} else {
return a.major < b.major;
}
});
}
// 存储到文件
void saveToFile(string filename) {
ofstream fout(filename);
for (auto& course : courses) {
fout << course.semester << "\t" << course.major << "\t" << course.classNo << "\t"
<< course.time << "\t" << course.subject << "\t" << course.classroom << endl;
}
fout.close();
}
// 从文件读取
void loadFromFile(string filename) {
ifstream fin(filename);
string s, m, cn, t, sub, c;
while (fin >> s >> m >> cn >> t >> sub >> c) {
courses.push_back(Course(s, m, cn, t, sub, c));
}
fin.close();
}
};
// 模糊查询
vector<Course> fuzzyQuery(vector<Course>& courses, string queryStr) {
vector<Course> result;
for (auto& course : courses) {
if (course.semester.find(queryStr) != string::npos ||
course.major.find(queryStr) != string::npos ||
course.classNo.find(queryStr) != string::npos ||
course.time.find(queryStr) != string::npos ||
course.subject.find(queryStr) != string::npos ||
course.classroom.find(queryStr) != string::npos) {
result.push_back(course);
}
}
return result;
}
// 综合查询
vector<Course> complexQuery(vector<Course>& courses, string classNo, string time, string subject) {
vector<Course> result;
for (auto& course : courses) {
if ((classNo.empty() || course.classNo == classNo) &&
(time.empty() || course.time == time) &&
(subject.empty() || course.subject == subject)) {
result.push_back(course);
}
}
return result;
}
int main() {
Schedule schedule;
// 从文件读取
schedule.loadFromFile("schedule.txt");
// 添加课程
Course c1("2021 Spring", "Computer Science", "CS001", "Monday 9:00", "Algorithm", "Room 101");
Course c2("2021 Spring", "Computer Science", "CS001", "Tuesday 10:00", "Database", "Room 102");
schedule.addCourse(c1);
schedule.addCourse(c2);
// 删除课程
schedule.deleteCourse(0);
// 修改课程
Course c3("2021 Spring", "Computer Science", "CS001", "Tuesday 10:00", "Data Structure", "Room 102");
schedule.editCourse(0, c3);
// 按班级查找课程
vector<Course> result1 = schedule.queryByClass("CS001");
// 按时间查找课程
vector<Course> result2 = schedule.queryByTime("Tuesday 10:00");
// 按学期排序
schedule.sortBySemester();
// 按班级排序
schedule.sortByClass();
// 模糊查询
vector<Course> result3 = fuzzyQuery(schedule.courses, "CS");
// 综合查询
vector<Course> result4 = complexQuery(schedule.courses, "CS001", "Tuesday 10:00", "");
// 存储到文件
schedule.saveToFile("schedule.txt");
return 0;
}
```
以上代码实现了一个功能较为完整的课表查询系统,包含了基本功能和一些扩展功能。需要注意的是,这只是一个简单的示例,实际应用中可能还需要添加更多的功能和优化代码。