答案:系统通过Student、Course和EnrollmentSystem类实现选课管理,支持学生选退课、课程容量控制及可选课程查询,测试用例验证了核心功能。

开发一个学生选课管理系统,核心是管理学生、课程以及选课关系。Java作为面向对象语言,非常适合构建这类系统。以下是实现该系统的结构化方法和关键步骤。
1. 系统需求分析与设计
明确系统基本功能:
- 学生可以查看可选课程
- 学生可以选课或退课
- 教师或管理员可以管理课程(增删改)
- 系统记录每个学生的已选课程
- 防止重复选课或超量选课
设计三个主要类:Student(学生)、Course(课程)、EnrollmentSystem(选课系统)。
2. 核心类的设计与实现
定义实体类和业务逻辑:
立即学习“Java免费学习笔记(深入)”;
public class Student {
private int id;
private String name;
private List enrolledCourses;
public Student(int id, String name) {
this.id = id;
this.name = name;
this.enrolledCourses = new ArrayList();
}
// getter 和 setter 方法
public int getId() { return id; }
public String getName() { return name; }
public List getEnrolledCourses() { return enrolledCourses; }
public boolean enrollInCourse(Course course) {
if (!enrolledCourses.contains(course)) {
enrolledCourses.add(course);
return true;
}
System.out.println("已选修该课程!");
return false;
}
public boolean dropCourse(Course course) {
if (enrolledCourses.remove(course)) {
System.out.println("成功退课:" + course.getTitle());
return true;
}
System.out.println("未选修该课程!");
return false;
}
}
public class Course {
private int courseId;
private String title;
private int capacity; // 最大容量
private int enrolledCount; // 当前人数
public Course(int courseId, String title, int capacity) {
this.courseId = courseId;
this.title = title;
this.capacity = capacity;
this.enrolledCount = 0;
}
public boolean hasSeats() {
return enrolledCount 0) enrolledCount--;
}
// getter 方法
public int getCourseId() { return courseId; }
public String getTitle() { return title; }
public int getCapacity() { return capacity; }
public int getEnrolledCount() { return enrolledCount; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Course)) return false;
Course course = (Course) o;
return courseId == course.courseId;
}
@Override
public int hashCode() {
return Integer.hashCode(courseId);
}
}
public class EnrollmentSystem {
private List students;
private List courses;
public EnrollmentSystem() {
this.students = new ArrayList();
this.courses = new ArrayList();
}
public void addStudent(Student student) {
students.add(student);
}
public void addCourse(Course course) {
courses.add(course);
}
public List getAvailableCourses() {
return courses.stream()
.filter(Course::hasSeats)
.collect(Collectors.toList());
}
public boolean registerStudentForCourse(int studentId, int courseId) {
Student student = findStudentById(studentId);
Course course = findCourseById(courseId);
if (student == null || course == null) {
System.out.println("学生或课程不存在!");
return false;
}
if (!course.hasSeats()) {
System.out.println("课程已满!");
return false;
}
if (student.enrollInCourse(course)) {
course.incrementEnrollment();
System.out.println(student.getName() + " 成功选修:" + course.getTitle());
return true;
}
return false;
}
public void dropCourse(int studentId, int courseId) {
Student student = findStudentById(studentId);
Course course = findCourseById(courseId);
if (student != null && course != null) {
if (student.dropCourse(course)) {
course.decrementEnrollment();
}
}
}
private Student findStudentById(int id) {
return students.stream()
.filter(s -> s.getId() == id)
.findFirst()
.orElse(null);
}
private Course findCourseById(int id) {
return courses.stream()
.filter(c -> c.getCourseId() == id)
.findFirst()
.orElse(null);
}
}
3. 测试系统运行
编写主程序测试功能:
public class Main {
public static void main(String[] args) {
EnrollmentSystem system = new EnrollmentSystem();
// 创建学生
Student alice = new Student(1, "Alice");
Student bob = new Student(2, "Bob");
// 创建课程
Course math = new Course(101, "高等数学", 2);
Course english = new Course(102, "大学英语", 1);
// 添加到系统
system.addStudent(alice);
system.addStudent(bob);
system.addCourse(math);
system.addCourse(english);
// 选课操作
system.registerStudentForCourse(1, 101); // Alice 选数学
system.registerStudentForCourse(2, 101); // Bob 选数学
system.registerStudentForCourse(1, 102); // Alice 选英语
system.registerStudentForCourse(2, 102); // Bob 选英语(应失败)
// 查看可选课程
System.out.println("剩余可选课程:");
system.getAvailableCourses().forEach(c ->
System.out.println(c.getTitle() + " (" + c.getEnrolledCount() + "/" + c.getCapacity() + ")")
);
}
}
4. 可扩展优化建议
基础版本完成后,可逐步增强功能:
- 加入身份验证(学生/教师/管理员)
- 使用文件或数据库(如MySQL)持久化数据
- 添加图形界面(Swing 或 JavaFX)
- 支持课程时间不冲突校验
- 提供查询接口,如查看某学生所有课程
基本上就这些。用Java开发选课系统,关键是理清对象关系,做好封装和边界控制。不复杂但容易忽略细节,比如重复选课和容量限制。按模块逐步实现,调试更方便。以上就是在Java中如何开发学生选课管理系统的详细内容,更多请关注php中文网其它相关文章!