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
7.0 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;
import com.studentmanagement.controller.StudentController;
import com.studentmanagement.model.Student;
import com.studentmanagement.util.InputUtil;
import com.studentmanagement.view.StudentConsoleView;
import com.studentmanagement.view.StudentView;
/**
* 学生管理系统主应用类
* 应用程序的入口点初始化MVC组件并启动系统
*/
public class MainApp {
public static void main(String[] args) {
// 初始化MVC组件
StudentView studentView = new StudentConsoleView();
StudentController studentController = new StudentController(studentView);
// 启动应用
runApplication(studentController, (StudentConsoleView) studentView);
}
/**
* 运行应用程序主循环
* @param controller 学生控制器
* @param view 学生控制台视图
*/
private static void runApplication(StudentController controller, StudentConsoleView view) {
boolean running = true;
while (running) {
// 显示主菜单
view.displayMainMenu();
// 获取用户选择
int choice = InputUtil.getIntInput("");
// 根据选择执行相应操作
switch (choice) {
case 1:
addStudent(controller);
break;
case 2:
controller.displayAllStudents();
break;
case 3:
findStudentById(controller);
break;
case 4:
updateStudent(controller);
break;
case 5:
deleteStudent(controller);
break;
case 6:
filterStudentsByCourse(controller);
break;
case 7:
filterStudentsByGradeRange(controller);
break;
case 8:
calculateAverageGradeByCourse(controller);
break;
case 9:
controller.calculateAverageAge();
break;
case 0:
running = false;
System.out.println("\n感谢使用学生管理系统再见");
break;
default:
System.out.println("无效的选择,请重新输入");
break;
}
// 如果不是退出,等待用户确认继续
if (running && choice != 0) {
InputUtil.waitForEnter();
}
}
}
/**
* 添加学生
* @param controller 学生控制器
*/
private static void addStudent(StudentController controller) {
String id = InputUtil.getStringInput("请输入学生ID: ");
String name = InputUtil.getStringInput("请输入学生姓名: ");
int age = InputUtil.getIntInput("请输入学生年龄: ");
String gender = InputUtil.getStringInput("请输入学生性别: ");
Student student = new Student(id, name, age, gender);
// 添加课程成绩
boolean addMoreCourses = true;
while (addMoreCourses) {
String course = InputUtil.getStringInput("请输入课程名称 (输入空字符串结束): ");
if (course.isEmpty()) {
addMoreCourses = false;
} else {
double grade = InputUtil.getDoubleInput("请输入该课程成绩: ");
student.addCourseGrade(course, grade);
}
}
controller.addStudent(student);
}
/**
* 根据ID查找学生
* @param controller 学生控制器
*/
private static void findStudentById(StudentController controller) {
String id = InputUtil.getStringInput("请输入要查找的学生ID: ");
controller.findStudentById(id);
}
/**
* 更新学生信息
* @param controller 学生控制器
*/
private static void updateStudent(StudentController controller) {
String id = InputUtil.getStringInput("请输入要更新的学生ID: ");
// 先查找学生是否存在
try {
// 这里我们直接创建一个新的学生对象来更新
String name = InputUtil.getStringInput("请输入新的学生姓名: ");
int age = InputUtil.getIntInput("请输入新的学生年龄: ");
String gender = InputUtil.getStringInput("请输入新的学生性别: ");
Student updatedStudent = new Student(id, name, age, gender);
// 添加课程成绩
boolean addCourses = InputUtil.getConfirmation("是否添加/更新课程成绩");
if (addCourses) {
boolean addMoreCourses = true;
while (addMoreCourses) {
String course = InputUtil.getStringInput("请输入课程名称 (输入空字符串结束): ");
if (course.isEmpty()) {
addMoreCourses = false;
} else {
double grade = InputUtil.getDoubleInput("请输入该课程成绩: ");
updatedStudent.addCourseGrade(course, grade);
}
}
}
controller.updateStudent(updatedStudent);
} catch (Exception e) {
System.out.println("更新失败: " + e.getMessage());
}
}
/**
* 删除学生
* @param controller 学生控制器
*/
private static void deleteStudent(StudentController controller) {
String id = InputUtil.getStringInput("请输入要删除的学生ID: ");
if (InputUtil.getConfirmation("确定要删除该学生吗?")) {
controller.deleteStudent(id);
} else {
System.out.println("删除操作已取消");
}
}
/**
* 根据课程筛选学生
* @param controller 学生控制器
*/
private static void filterStudentsByCourse(StudentController controller) {
String course = InputUtil.getStringInput("请输入课程名称: ");
controller.filterStudentsByCourse(course);
}
/**
* 根据成绩范围筛选学生
* @param controller 学生控制器
*/
private static void filterStudentsByGradeRange(StudentController controller) {
double minGrade = InputUtil.getDoubleInput("请输入最低成绩: ");
double maxGrade = InputUtil.getDoubleInput("请输入最高成绩: ");
controller.filterStudentsByGradeRange(minGrade, maxGrade);
}
/**
* 计算课程平均成绩
* @param controller 学生控制器
*/
private static void calculateAverageGradeByCourse(StudentController controller) {
String course = InputUtil.getStringInput("请输入课程名称: ");
controller.calculateAverageGradeByCourse(course);
}
}