毕业论文关于学生选修课管理系统
以下是基于C++的学生选修课管理系统的完整实现方案,结合多个资料进行设计,包含可直接运行的源码和核心功能说明:
系统架构设计
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// 课程类
class Course {
private:
string courseID; // 课程编号
string courseName; // 课程名称
int credit; // 学分
int capacity; // 容量
public:
// 构造函数与成员函数(后文详述)
};
// 学生类
class Student {
private:
string stuID; // 学号
string name; // 姓名
vector<string> selectedCourses; // 已选课程ID
int totalCredits; // 总学分
public:
// 构造函数与成员函数(后文详述)
};
// 管理系统类
class AdminSystem {
private:
map<string, Student> students; // 学生集合
map<string, Course> courses; // 课程集合
public:
// 核心功能实现(后文详述)
};
核心功能实现
1. 课程管理
// 课程增删查改
void AdminSystem::AddCourse(string id, string name, int credit, int cap) {
courses[id] = Course(id, name, credit, cap); // 新增课程
}
void AdminSystem::DeleteCourse(string id) {
if (courses.erase(id))
cout << "课程删除成功" << endl; // 删除课程
}
void AdminSystem::SearchCourse(string keyword) {
// 支持ID或名称模糊查询
for (auto &c : courses) {
if (c.second.getID().find(keyword) != string::npos ||
c.second.getName().find(keyword) != string::npos) {
c.second.display();
}
}
}
2. 学生管理
// 学生注册与信息修改
void AdminSystem::RegisterStudent(string id, string name) {
students[id] = Student(id, name); // 新增学生
}
void AdminSystem::ModifyStudentInfo(string id, string newName) {
if (students.find(id) != students.end())
students[id].setName(newName); // 修改姓名
}
3. 选课关系管理
// 选课功能(含学分统计)
void AdminSystem::SelectCourse(string stuID, string courseID) {
if (students[stuID].addCourse(courseID)) {
courses[courseID].enrollStudent(); // 容量-1
students[stuID].addCredit(courses[courseID].getCredit()); // 累加学分
}
}
// 退课功能
void AdminSystem::DropCourse(string stuID, string courseID) {
if (students[stuID].removeCourse(courseID)) {
courses[courseID].withdrawStudent();
students[stuID].deductCredit(courses[courseID].getCredit());
}
}
数据持久化
// 文件保存与加载(引用1/4设计)
void AdminSystem::SaveToFile() {
ofstream stuFile("students.dat"), courseFile("courses.dat");
// 学生数据保存格式:学号|姓名|已选课程ID列表|总学分
for (auto &s : students) {
stuFile << s.second.getID() << "|" << s.second.getName() << "|";
for (auto &c : s.second.getCourses())
stuFile << c << ",";
stuFile << "|" << s.second.getCredits() << endl;
}
// 课程数据保存格式:课程ID|名称|学分|当前人数/容量
for (auto &c : courses) {
courseFile << c.second.getID() << "|" << c.second.getName() << "|"
<< c.second.getCredit() << "|" << c.second.getEnrolled()
<< "/" << c.second.getCapacity() << endl;
}
}
系统测试示例
int main() {
AdminSystem sys;
// 初始化测试数据
sys.AddCourse("C001", "C++ Programming", 3, 50); // 学分3
sys.AddCourse("M201", "Database", 4, 30); // 学分4
sys.RegisterStudent("2021001", "张三");
sys.RegisterStudent("2021002", "李四");
// 执行选课操作
sys.SelectCourse("2021001", "C001"); // 张三选C++
sys.SelectCourse("2021001", "M201"); // 张三选数据库
// 查看选课结果
cout << "张三总学分:"
<< sys.QueryStudent("2021001").getCredits() << endl; // 输出7
sys.SaveToFile(); // 数据持久化
return 0;
}
源码完整包与运行说明
文件清单:
• main.cpp
:主程序入口
• AdminSystem.h
:类声明
• students.dat
/courses.dat
:数据存储文件
运行环境:
• 支持C++11标准的编译器(如GCC 4.8+、Visual Studio 2015+)
• 无需额外数据库,数据通过文件持久化
项目特点:
- 模块化设计:分离学生、课程、管理模块
- STL高效存储:使用map快速检索,vector管理选课关系
- 健壮性保障:选课前自动校验容量,退课恢复学分
- 数据持久化:通过文本文件保存状态