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.

196 lines
6.2 KiB

package com.studentmanagement;
import com.studentmanagement.controller.StudentController;
import com.studentmanagement.model.Student;
import com.studentmanagement.view.StudentConsoleView;
import com.studentmanagement.exception.StudentNotFoundException;
import com.studentmanagement.exception.DuplicateStudentException;
import com.studentmanagement.util.InputUtil;
/**
* 主应用程序类,系统入口点
* 初始化MVC组件并启动用户界面
*/
public class MainApp {
private StudentController controller;
private StudentConsoleView view;
/**
* 构造函数,初始化控制器和视图
*/
public MainApp() {
this.controller = new StudentController();
this.view = new StudentConsoleView();
}
/**
* 启动应用程序
*/
public void start() {
view.displayWelcome();
boolean running = true;
while (running) {
view.displayMenu();
int choice = InputUtil.getIntInput("", 0, 9);
view.displaySeparator();
switch (choice) {
case 1:
displayAllStudents();
break;
case 2:
findStudentById();
break;
case 3:
addNewStudent();
break;
case 4:
updateStudent();
break;
case 5:
deleteStudent();
break;
case 6:
findStudentsByCourse();
break;
case 7:
findStudentsWithHighGrades();
break;
case 8:
showCourseAverageGrade();
break;
case 9:
showAverageAge();
break;
case 0:
running = false;
view.displayExit();
break;
}
}
InputUtil.close();
}
/**
* 显示所有学生
*/
private void displayAllStudents() {
view.displayStudentList(controller.getAllStudents());
}
/**
* 根据ID查找学生
*/
private void findStudentById() {
int id = InputUtil.getIntInput("请输入学生ID: ");
try {
Student student = controller.getStudentById(id);
view.displayStudent(student);
} catch (StudentNotFoundException e) {
view.displayErrorMessage(e.getMessage());
}
}
/**
* 添加新学生
*/
private void addNewStudent() {
int id = InputUtil.getIntInput("请输入学生ID: ");
String name = InputUtil.getNonEmptyStringInput("请输入学生姓名: ");
int age = InputUtil.getIntInput("请输入学生年龄: ", 1, 100);
String course = InputUtil.getNonEmptyStringInput("请输入课程名称: ");
double grade = InputUtil.getDoubleInput("请输入成绩: ", 0, 100);
Student student = new Student(id, name, age, course, grade);
try {
controller.addStudent(student);
view.displaySuccessMessage("学生添加成功!");
} catch (DuplicateStudentException e) {
view.displayErrorMessage(e.getMessage());
}
}
/**
* 更新学生信息
*/
private void updateStudent() {
int id = InputUtil.getIntInput("请输入要更新的学生ID: ");
try {
Student existingStudent = controller.getStudentById(id);
view.displayStudent(existingStudent);
String name = InputUtil.getStringInput("请输入新姓名 (留空保持不变): ");
String course = InputUtil.getStringInput("请输入新课程 (留空保持不变): ");
// 只有在用户输入了新值时才更新
if (name.isEmpty()) name = existingStudent.getName();
if (course.isEmpty()) course = existingStudent.getCourse();
int age = InputUtil.getIntInput("请输入新年龄 (0保持不变): ", 0, 100);
if (age == 0) age = existingStudent.getAge();
double grade = InputUtil.getDoubleInput("请输入新成绩 (-1保持不变): ", -1, 100);
if (grade == -1) grade = existingStudent.getGrade();
Student updatedStudent = new Student(id, name, age, course, grade);
controller.updateStudent(updatedStudent);
view.displaySuccessMessage("学生信息更新成功!");
} catch (StudentNotFoundException e) {
view.displayErrorMessage(e.getMessage());
}
}
/**
* 删除学生
*/
private void deleteStudent() {
int id = InputUtil.getIntInput("请输入要删除的学生ID: ");
try {
controller.deleteStudent(id);
view.displaySuccessMessage("学生删除成功!");
} catch (StudentNotFoundException e) {
view.displayErrorMessage(e.getMessage());
}
}
/**
* 根据课程查找学生
*/
private void findStudentsByCourse() {
String course = InputUtil.getNonEmptyStringInput("请输入课程名称: ");
view.displayStudentList(controller.getStudentsByCourse(course));
}
/**
* 查找成绩优秀的学生
*/
private void findStudentsWithHighGrades() {
view.displayStudentList(controller.getStudentsByGradeAbove(90));
}
/**
* 显示课程平均成绩
*/
private void showCourseAverageGrade() {
String course = InputUtil.getNonEmptyStringInput("请输入课程名称: ");
double average = controller.calculateAverageGradeByCourse(course);
view.displayStatistics("课程《" + course + "》的平均成绩为: " + String.format("%.2f", average));
}
/**
* 显示学生平均年龄
*/
private void showAverageAge() {
double averageAge = controller.calculateAverageAge();
view.displayStatistics("所有学生的平均年龄为: " + String.format("%.2f", averageAge));
}
/**
* 主方法,应用程序入口
*/
public static void main(String[] args) {
MainApp app = new MainApp();
app.start();
}
}