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.
MVC/StudentController.java

163 lines
5.1 KiB

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