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.
163 lines
5.1 KiB
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));
|
|
}
|
|
} |