四大管理模塊:監考教師、考試科目、教室、學生考試信息。每模塊需支援:數據錄入、查詢、刪除。菜單驅動,面向對象設計。
// 基礎實體類
class Teacher { string id, name, dept; /*...*/ };
class Subject { string id, name, credit; /*...*/ };
class Room { string id, building, capacity; /*...*/ };
class Student { string id, name, major, className; /*...*/ };
class ExamArrangement { string studentId, subjectId, roomId, teacherId, time; /*...*/ };
// 管理器介面(統一 CRUD)
class Manager {
public:
virtual void add() = 0;
virtual void query() = 0;
virtual void remove() = 0;
virtual ~Manager() {}
};
// 具体管理器
class TeacherManager : public Manager { vector data; /*實現 CRUD*/ };
class SubjectManager : public Manager { vector data; /*實現 CRUD*/ };
class RoomManager : public Manager { vector data; /*實現 CRUD*/ };
class ExamManager : public Manager { vector data; /*實現 CRUD*/ };
// 主控制器
class ExamSystem {
TeacherManager tm;
SubjectManager sm;
RoomManager rm;
ExamManager em;
void showMainMenu();
void run();
};
fstream 讀寫 CSV/二進制文件operator<< / operator>> 或用 nlohmann/jsonvoid TeacherManager::add() {
Teacher t;
cout << "輸入工號: "; cin >> t.id;
if (exists(t.id)) throw runtime_error("工號已存在");
// ...
data.push_back(t);
saveToFile();
}
void ExamSystem::showMainMenu() {
while (true) {
system("cls");
cout << "=== 考場管理系統 ===\n";
cout << "1. 監考教師管理\n2. 考試科目管理\n3. 教室管理\n4. 學生考試信息管理\n0. 退出\n";
int choice; cin >> choice;
switch(choice) {
case 1: tm.menu(); break;
case 2: sm.menu(); break;
case 3: rm.menu(); break;
case 4: em.menu(); break;
case 0: return;
}
}
}
exam_system/
├── CMakeLists.txt
├── src/
│ ├── main.cpp
│ ├── entity/
│ │ ├── Teacher.h/.cpp
│ │ ├── Subject.h/.cpp
│ │ ├── Room.h/.cpp
│ │ ├── Student.h/.cpp
│ │ └── ExamArrangement.h/.cpp
│ ├── manager/
│ │ ├── Manager.h
│ │ ├── TeacherManager.h/.cpp
│ │ ├── SubjectManager.h/.cpp
│ │ ├── RoomManager.h/.cpp
│ │ └── ExamManager.h/.cpp
│ ├── persistence/
│ │ ├── FileStorage.h/.cpp
│ │ └── DbStorage.h/.cpp
│ └── ui/
│ └── ConsoleUI.h/.cpp
└── test/
└── test_managers.cpp
考場管理系統是經典的增刪改查 + 菜單驅動 + 面向對象分層教學項目。關鍵在於:實體類封裝數據、管理器統一 CRUD 介面、持久化層解耦、主控制器協調流程。建議從文件存儲起步,逐步遷移至 SQLite,體會分層架構優勢。