毕业论文关于学生选修课管理系统,提供详细的C++源代码

毕业论文关于学生选修课管理系统

以下是基于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+)
• 无需额外数据库,数据通过文件持久化

项目特点

  1. 模块化设计:分离学生、课程、管理模块
  2. STL高效存储:使用map快速检索,vector管理选课关系
  3. 健壮性保障:选课前自动校验容量,退课恢复学分
  4. 数据持久化:通过文本文件保存状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码力金矿

谢谢您的打赏,我将会更好创作。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值