|
|
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<Student> 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<Student> getAllStudents() {
|
|
|
return new ArrayList<>(students);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据ID查找学生
|
|
|
* @param id 学生ID
|
|
|
* @return 找到的学生,如不存在返回null
|
|
|
*/
|
|
|
public Student getStudentById(int id) {
|
|
|
Optional<Student> 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<Student> getStudentsByCourse(String course) {
|
|
|
List<Student> result = new ArrayList<>();
|
|
|
for (Student student : students) {
|
|
|
if (student.getCourse().equalsIgnoreCase(course)) {
|
|
|
result.add(student);
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查找成绩高于指定分数的学生
|
|
|
* @param grade 最低分数
|
|
|
* @return 成绩高于指定分数的学生列表
|
|
|
*/
|
|
|
public List<Student> getStudentsByGradeAbove(double grade) {
|
|
|
List<Student> result = new ArrayList<>();
|
|
|
for (Student student : students) {
|
|
|
if (student.getGrade() >= grade) {
|
|
|
result.add(student);
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
} |