package com.studentmanagement.controller; import com.studentmanagement.exception.DuplicateStudentException; import com.studentmanagement.exception.StudentNotFoundException; import com.studentmanagement.model.Student; import com.studentmanagement.model.StudentDAO; import com.studentmanagement.view.StudentView; import java.util.List; /** * 学生控制器类 * 负责协调模型和视图之间的交互,处理业务逻辑 */ public class StudentController { private StudentDAO studentDAO; private StudentView studentView; /** * 构造函数 * @param studentView 学生视图对象 */ public StudentController(StudentView studentView) { this.studentDAO = StudentDAO.getInstance(); this.studentView = studentView; } /** * 添加学生 * @param student 学生对象 */ public void addStudent(Student student) { try { studentDAO.addStudent(student); studentView.displaySuccessMessage("学生添加成功: " + student.getName()); } catch (DuplicateStudentException e) { studentView.displayErrorMessage("学生添加失败: " + e.getMessage()); } } /** * 显示所有学生 */ public void displayAllStudents() { List students = studentDAO.getAllStudents(); studentView.displayStudentList(students); } /** * 根据ID查找学生 * @param id 学生ID */ public void findStudentById(String id) { try { Student student = studentDAO.getStudentById(id); studentView.displayStudentDetails(student); } catch (StudentNotFoundException e) { studentView.displayErrorMessage(e.getMessage()); } } /** * 更新学生信息 * @param student 学生对象 */ public void updateStudent(Student student) { try { studentDAO.updateStudent(student); studentView.displaySuccessMessage("学生信息更新成功: " + student.getName()); } catch (StudentNotFoundException e) { studentView.displayErrorMessage("学生更新失败: " + e.getMessage()); } } /** * 删除学生 * @param id 学生ID */ public void deleteStudent(String id) { try { Student student = studentDAO.getStudentById(id); studentDAO.deleteStudent(id); studentView.displaySuccessMessage("学生删除成功: " + student.getName()); } catch (StudentNotFoundException e) { studentView.displayErrorMessage("学生删除失败: " + e.getMessage()); } } /** * 根据课程筛选学生 * @param course 课程名称 */ public void filterStudentsByCourse(String course) { List students = studentDAO.getStudentsByCourse(course); if (students.isEmpty()) { studentView.displayErrorMessage("未找到选修课程'" + course + "'的学生"); } else { studentView.displayFilteredStudents(students, "课程: " + course); } } /** * 根据成绩范围筛选学生 * @param minGrade 最低成绩 * @param maxGrade 最高成绩 */ public void filterStudentsByGradeRange(double minGrade, double maxGrade) { List students = studentDAO.getStudentsByGradeRange(minGrade, maxGrade); if (students.isEmpty()) { studentView.displayErrorMessage("未找到成绩在" + minGrade + "-" + maxGrade + "范围内的学生"); } else { studentView.displayFilteredStudents(students, "成绩范围: " + minGrade + "-" + maxGrade); } } /** * 计算某门课程的平均成绩 * @param course 课程名称 */ public void calculateAverageGradeByCourse(String course) { List students = studentDAO.getStudentsByCourse(course); if (students.isEmpty()) { studentView.displayErrorMessage("未找到选修课程'" + course + "'的学生"); return; } double sum = 0.0; int count = 0; for (Student student : students) { Double grade = student.getCourseGrade(course); if (grade != null) { sum += grade; count++; } } if (count > 0) { double average = sum / count; studentView.displayStatistics("课程'" + course + "'的平均成绩: " + String.format("%.2f", average)); } else { studentView.displayErrorMessage("无法计算课程'" + course + "'的平均成绩"); } } /** * 计算所有学生的平均年龄 */ public void calculateAverageAge() { List students = studentDAO.getAllStudents(); if (students.isEmpty()) { studentView.displayErrorMessage("当前没有学生记录"); return; } int sum = 0; for (Student student : students) { sum += student.getAge(); } double average = (double) sum / students.size(); studentView.displayStatistics("学生平均年龄: " + String.format("%.2f", average)); } }