You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
}