diff --git a/StudentDAO.java b/StudentDAO.java new file mode 100644 index 0000000..9c4241b --- /dev/null +++ b/StudentDAO.java @@ -0,0 +1,126 @@ +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; + } +} \ No newline at end of file