Java中学生选课管理系统实战

P粉602998670

P粉602998670

2025-09-23

519人浏览

原创

学生选课管理系统通过student、course和coursemanager类实现,支持学生与课程的增删查及选课退课功能,利用集合存储数据并进行关联操作,最后通过测试类验证核心逻辑正确性。

java中学生选课管理系统实战

学生选课管理系统是Java初学者常见的实战项目,能综合运用面向对象编程、集合框架、文件读写等核心知识。下面从需求分析到代码实现,带你一步步完成一个基础但完整的系统。

系统功能设计

一个基本的学生选课管理系统应包含以下功能:

  • 学生管理:添加、查询学生信息
  • 课程管理:添加、查看课程
  • 选课操作:学生选择课程,支持退课
  • 查询选课情况:查看某学生所选课程或某课程的选课学生

类结构设计

根据功能划分,系统主要需要三个类:

  • Student:包含学号、姓名等属性
  • Course:包含课程编号、名称、最大容量等
  • CourseManager:负责管理学生、课程和选课关系
以下是核心类的简单实现:

Student类

度加AI
度加AI

度加AI官网入口,百度官方 AIGC 创作平台,支持 AI 成片、AI 生文、数字人、声音克隆、配音字幕与智能剪辑等在线创作能力。

下载
public class Student {
    private String id;
    private String name;

    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

    // getter方法
    public String getId() { return id; }
    public String getName() { return name; }

    @Override
    public String toString() {
        return "Student{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}';
    }
}

Course类

public class Course {
    private String courseId;
    private String courseName;
    private int maxStudents;
    private int currentCount;

    public Course(String courseId, String courseName, int maxStudents) {
        this.courseId = courseId;
        this.courseName = courseName;
        this.maxStudents = maxStudents;
        this.currentCount = 0;
    }

    public boolean isFull() {
        return currentCount >= maxStudents;
    }

    public void enroll() {
        if (!isFull()) {
            currentCount++;
        }
    }

    public void drop() {
        if (currentCount > 0) {
            currentCount--;
        }
    }

    // getter方法
    public String getCourseId() { return courseId; }
    public String getCourseName() { return courseName; }

    @Override
    public String toString() {
        return "Course{" + "courseId='" + courseId + '\'' +
               ", courseName='" + courseName + '\'' +
               ", capacity=" + currentCount + "/" + maxStudents + '}';
    }
}

CourseManager类(核心逻辑)

import java.util.*;

public class CourseManager {
    private Map<string student> students = new HashMap();
    private Map<string course> courses = new HashMap();
    private Map<string list>> studentEnrollments = new HashMap(); // 学生ID -> 课程ID列表

    public void addStudent(Student student) {
        students.put(student.getId(), student);
        studentEnrollments.put(student.getId(), new ArrayList());
    }

    public void addCourse(Course course) {
        courses.put(course.getCourseId(), course);
    }

    public boolean selectCourse(String studentId, String courseId) {
        if (!students.containsKey(studentId)) {
            System.out.println("学生不存在");
            return false;
        }
        if (!courses.containsKey(courseId)) {
            System.out.println("课程不存在");
            return false;
        }

        Course course = courses.get(courseId);
        if (course.isFull()) {
            System.out.println("课程已满");
            return false;
        }

        List<string> studentCourses = studentEnrollments.get(studentId);
        if (studentCourses.contains(courseId)) {
            System.out.println("该学生已选此课程");
            return false;
        }

        studentCourses.add(courseId);
        course.enroll();
        System.out.println("选课成功");
        return true;
    }

    public void dropCourse(String studentId, String courseId) {
        List<string> studentCourses = studentEnrollments.get(studentId);
        if (studentCourses != null && studentCourses.remove(courseId)) {
            Course course = courses.get(courseId);
            if (course != null) {
                course.drop();
            }
            System.out.println("退课成功");
        } else {
            System.out.println("未找到该选课记录");
        }
    }

    public void printStudentCourses(String studentId) {
        Student student = students.get(studentId);
        if (student == null) {
            System.out.println("学生不存在");
            return;
        }
        List<string> courseIds = studentEnrollments.get(studentId);
        System.out.println(student.getName() + " 的选课列表:");
        for (String cid : courseIds) {
            Course c = courses.get(cid);
            if (c != null) {
                System.out.println("  " + c);
            }
        }
    }

    public void printCourseStudents(String courseId) {
        Course course = courses.get(courseId);
        if (course == null) {
            System.out.println("课程不存在");
            return;
        }
        System.out.println(course.getCourseName() + " 的学生列表:");
        for (Map.Entry<string list>> entry : studentEnrollments.entrySet()) {
            if (entry.getValue().contains(courseId)) {
                Student s = students.get(entry.getKey());
                System.out.println("  " + s);
            }
        }
    }
}
</string></string></string></string></string></string></string>

测试与运行

编写main方法进行测试:

public class Main {
    public static void main(String[] args) {
        CourseManager cm = new CourseManager();

        // 添加学生
        cm.addStudent(new Student("S001", "张三"));
        cm.addStudent(new Student("S002", "李四"));

        // 添加课程
        cm.addCourse(new Course("C001", "Java编程", 2));
        cm.addCourse(new Course("C002", "数据结构", 1));

        // 选课
        cm.selectCourse("S001", "C001");
        cm.selectCourse("S002", "C001");
        cm.selectCourse("S001", "C002"); // 张三再选一门

        // 查看结果
        cm.printStudentCourses("S001");
        cm.printCourseStudents("C001");
    }
}

这个系统虽然简单,但涵盖了Java开发中常见的设计思路和编码技巧。你可以在此基础上扩展功能,比如加入文件持久化、图形界面、异常处理等。基本上就这些,动手试试吧。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

2025.09.05

1963

14

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.27

153

13

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

2026.04.09

91

30

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

2026.04.17

81

15

火山引擎API Key获取教程
火山引擎API Key获取教程

火山引擎API Key适合需要调用火山引擎云服务、AI模型、火山方舟接口或其他开放能力的开发者参考。本专题整理控制台入口、账号认证、服务开通、API Key创建、密钥复制保存、权限检查、调用测试和Key无效等常见问题排查。

2026.08.04

1

10

火山引擎API接入教程
火山引擎API接入教程

火山引擎API接入适合需要在应用、脚本、后台服务或AI工具中调用火山引擎能力的开发者参考。本专题整理控制台入口、服务开通、API Key获取、接口地址配置、请求参数填写、调用测试、权限设置、额度查询和常见接口报错排查。

2026.08.04

2

10

火山引擎DeepSeek API调用教程
火山引擎DeepSeek API调用教程

火山引擎DeepSeek API适合需要在应用、脚本、智能体或AI编程工具中调用DeepSeek模型的开发者参考。本专题整理火山引擎控制台入口、模型服务开通、API Key获取、Base URL配置、模型名称填写、调用测试、额度查询和常见接口报错排查。

2026.08.04

1

10

火山引擎控制台操作教程
火山引擎控制台操作教程

火山引擎控制台中常用功能包括API密钥管理、模型调用配置、云资源查看、账单明细、用量统计和权限分配。本专题整理控制台基础操作、服务开通流程、Key创建与保存、费用消耗查看、子账号权限设置和调用失败排查,方便开发者完成日常管理。

2026.08.04

2

10

PDF与PPT格式转换操作方法及在线转换技巧
PDF与PPT格式转换操作方法及在线转换技巧

本专题聚焦 PDF 与 PPT 文件格式转换需求,整理 PDF 转 PPT 在线转换方法、PPT 批量转换 PDF 操作步骤、转换后格式错乱处理以及文档版式检查技巧。通过详细教程帮助用户掌握 PDF、PPT 双向转换方法,解决演示文稿制作、文件整理和办公格式转换中的常见问题,提高办公效率。

2026.07.31

112

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

Java 26官方文档
Java 26官方文档

共0课时 | 0人学习