- 学生选课(添加 / 退选)
- 课程容量控制
- 查询学生已选课程列表
- 查询课程学生名单
📦 项目结构
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 选课轻松搞定!”**🎓