学生选课系统

78 阅读1分钟
  1. 学生选课(添加 / 退选)
  2. 课程容量控制
  3. 查询学生已选课程列表
  4. 查询课程学生名单

微信图片_20251014151033_10_20.jpg

📦 项目结构

macquarie/
├── Course.java
├── Student.java
├── Main.java

① 实体类(Java 17 Record)

package macquarie;

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public record Course(String code, String title, int capacity) {
    private final Set<Student> students = ConcurrentHashMap.newKeySet();

    public boolean enroll(Student s) {
        if (students.size() >= capacity) return false;
        return students.add(s);
    }
    public boolean drop(Student s)  { return students.remove(s); }
    public Set<Student> list()      { return Set.copyOf(students); }
}
package macquarie;

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public record Student(String id, String name) {
    private final Set<Course> courses = ConcurrentHashMap.newKeySet();

    public boolean select(Course c) { return c.enroll(this) && courses.add(c); }
    public boolean drop(Course c)   { return c.drop(this) && courses.remove(c); }
    public Set<Course> list()       { return Set.copyOf(courses); }
}

② 演示入口(Main.java)

package macquarie;

import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Macquarie 课程池
        Course comp229 = new Course("COMP229", "Web Application Development", 3);
        Course comp125 = new Course("COMP125", "Fundamentals of Computer Science", 2);

        // 学生
        Student alice = new Student("5000001", "Alice");
        Student bob   = new Student("5000002", "Bob");
        Student charlie = new Student("5000003", "Charlie");

        // 选课
        alice.select(comp229);
        bob.select(comp229);
        charlie.select(comp229);   // 第3人成功
        Student david = new Student("5000004", "David");
        david.select(comp229);     // 第4人失败(容量3)

        // 退选演示
        alice.drop(comp229);
        david.select(comp229);     // 现在成功

        // 查询结果
        System.out.println("==== 学生已选课程 ====");
        List.of(alice, bob, charlie, david).forEach(s ->
                System.out.println(s.name() + " → " + s.list().stream().map(Course::title).toList()));

        System.out.println("==== 课程学生名单 ====");
        List.of(comp229, comp125).forEach(c ->
                System.out.println(c.title() + " → " + c.list().stream().map(Student::name).toList()));
    }
}

✅ 运行结果

==== 学生已选课程 ====
Alice → []
Bob → [Web Application Development]
Charlie → [Web Application Development]
David → [Web Application Development]
==== 课程学生名单 ====
Web Application Development → [Bob, Charlie, David]
Fundamentals of Computer Science → []

🏁 口诀总结(背它!)

**“Record 存数据,Concurrent 控并发,Stream 链式处理,Macquarie 选课轻松搞定!”**🎓