package com.studentmanagement.model; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * 学生数据访问对象,负责学生数据的CRUD操作 * 实现了单例模式,确保整个应用只有一个数据访问实例 */ public class StudentDAO { // 使用单例模式 private static StudentDAO instance; private List students; /** * 私有构造函数,初始化学生列表 */ private StudentDAO() { students = new ArrayList<>(); // 初始化一些示例数据 students.add(new Student(1, "张三", 20, "Java编程", 85.5)); students.add(new Student(2, "李四", 21, "数据结构", 90.0)); students.add(new Student(3, "王五", 19, "数据库原理", 88.5)); } /** * 获取单例实例 * @return StudentDAO的唯一实例 */ public static synchronized StudentDAO getInstance() { if (instance == null) { instance = new StudentDAO(); } return instance; } /** * 获取所有学生 * @return 学生列表 */ public List getAllStudents() { return new ArrayList<>(students); } /** * 根据ID查找学生 * @param id 学生ID * @return 找到的学生,如不存在返回null */ public Student getStudentById(int id) { Optional student = students.stream() .filter(s -> s.getId() == id) .findFirst(); return student.orElse(null); } /** * 添加学生 * @param student 要添加的学生对象 * @return 添加是否成功 */ public boolean addStudent(Student student) { // 检查ID是否已存在 for (Student s : students) { if (s.getId() == student.getId()) { return false; } } return students.add(student); } /** * 更新学生信息 * @param student 要更新的学生对象 * @return 更新是否成功 */ public boolean updateStudent(Student student) { for (int i = 0; i < students.size(); i++) { if (students.get(i).getId() == student.getId()) { students.set(i, student); return true; } } return false; } /** * 删除学生 * @param id 要删除的学生ID * @return 删除是否成功 */ public boolean deleteStudent(int id) { return students.removeIf(s -> s.getId() == id); } /** * 查找特定课程的学生 * @param course 课程名称 * @return 该课程的学生列表 */ public List getStudentsByCourse(String course) { List result = new ArrayList<>(); for (Student student : students) { if (student.getCourse().equalsIgnoreCase(course)) { result.add(student); } } return result; } /** * 查找成绩高于指定分数的学生 * @param grade 最低分数 * @return 成绩高于指定分数的学生列表 */ public List getStudentsByGradeAbove(double grade) { List result = new ArrayList<>(); for (Student student : students) { if (student.getGrade() >= grade) { result.add(student); } } return result; } }