package System;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class StudentManagementSystem {
private static List<Student> students = new ArrayList<>();
private static int undergraduateCount = 0;
private static int graduateCount = 0;
public static void main(String[] args) {
while (true) {
System.out.println("请选择操作:");
System.out.println("1. 增加学生信息");
System.out.println("2. 修改学生信息");
System.out.println("3. 删除学生信息");
System.out.println("4. 浏览学生信息");
System.out.println("5. 查询学生信息");
System.out.println("6. 排序学生信息");
System.out.println("7. 统计学生人数");
System.out.println("0. 退出系统");
try (Scanner scanner = new Scanner(System.in)){
int chosen = scanner.nextInt();
switch (chosen) {
case 1:
addStudent();
break;
case 2:
modifyStudent();
break;
case 3:
deleteStudent();
break;
case 4:
browseStudents();
break;
case 5:
queryStudents();
break;
case 6:
sortStudents();
break;
case 7:
countStudents();
break;
case 0:
System.out.println("谢谢使用!");
return;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static void addStudent() {
Scanner scanner = new Scanner(System.in);
try {
System.out.println("请选择学生类型:");
System.out.println("1. 本科生");
System.out.println("2. 研究生");
int choice = scanner.nextInt();
System.out.println("请输入学号:");
String id = scanner.next();
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
System.out.println("请输入班级:");
String className = scanner.next();
System.out.println("请输入省份:");
String province = scanner.next();
System.out.println("请输入城市:");
String city = scanner.next();
System.out.println("请输入街道:");
String street = scanner.next();
System.out.println("请输入门牌号:");
String houseNumber = scanner.next();
Address address = new Address(province, city, street, houseNumber);
System.out.println("请输入各科成绩(用逗号分隔):");
String[] scoreStrings = scanner.next().split(",");
double[] scores = new double[scoreStrings.length];
for (int i = 0; i < scoreStrings.length; i++) {
scores[i] = Double.parseDouble(scoreStrings[i]);
}
if (choice == 1) {
System.out.println("请输入专业:");
String major = scanner.next();
Undergraduate undergraduate = new Undergraduate(id, name, age, className, address, scores, major);
students.add(undergraduate);
undergraduateCount++;
} else {
System.out.println("请输入导师:");
String supervisor = scanner.next();
System.out.println("请输入研究方向:");
String researchArea = scanner.next();
Graduate graduate = new Graduate(id, name, age, className, address, scores, supervisor, researchArea);
students.add(graduate);
graduateCount++;
}
scanner.close();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("添加成功!");
}
private static void modifyStudent() {
try (Scanner scanner = new Scanner(System.in)) {
System.out.println("请输入学号:");
String id = scanner.nextLine();
for (Student student : students) {
if (student.getId().equals(id)) {
System.out.println("请选择要修改的信息:");
System.out.println("1. 姓名");
System.out.println("2. 年龄");
System.out.println("3. 班级");
System.out.println("4. 地址");
System.out.println("5. 各科成绩");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
System.out.println("请输入新的姓名:");
String name = scanner.nextLine();
student.setName(name);
System.out.println("修改成功!");
break;
case 2:
System.out.println("请输入新的年龄:");
int age = scanner.nextInt();
student.setAge(age);
System.out.println("修改成功!");
break;
case 3:
System.out.println("请输入新的班级:");
String className = scanner.nextLine();
student.setClassName(className);
System.out.println("修改成功!");
break;
case 4:
System.out.println("请输入新的省份:");
String province = scanner.nextLine();
System.out.println("请输入新的城市:");
String city = scanner.nextLine();
System.out.println("请输入新的街道:");
String street = scanner.nextLine();
System.out.println("请输入新的门牌号:");
String houseNumber = scanner.nextLine();
Address address = new Address(province, city, street, houseNumber);
student.setAddress(address);
System.out.println("修改成功!");
break;
case 5:
System.out.println("请输入新的各科成绩(用逗号隔开):");
String[] scores = scanner.nextLine().split(",");
for (int i = 0; i < scores.length; i++) {
student.getScores()[i] = Double.parseDouble(scores[i]);
}
System.out.println("修改成功!");
break;
default:
System.out.println("输入有误,请重新选择!");
break;
}
return;
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("未找到该学生!");
}
private static void deleteStudent() {
try (Scanner scanner = new Scanner(System.in)) {
System.out.println("请输入学号:");
String id = scanner.nextLine();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(id)) {
students.remove(i);
System.out.println("删除成功!");
return;
}
}
}
System.out.println("未找到该学生!");
}
private static void browseStudents() {
try (Scanner scanner = new Scanner(System.in)) {
System.out.println("请选择要浏览的学生类型:");
System.out.println("1. 本科生");
System.out.println("2. 研究生");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
System.out.println("本科生信息如下:");
for (Student student : students) {
if (student instanceof Undergraduate) {
System.out.println(student);
}
}
break;
case 2:
System.out.println("研究生信息如下:");
for (Student student : students) {
if (student instanceof Graduate) {
System.out.println(student);
}
}
break;
default:
System.out.println("输入有误,请重新选择!");
break;
}
}
}
private static void queryStudents() {
try (Scanner scanner = new Scanner(System.in)) {
System.out.println("请选择要查询的方式:");
System.out.println("1. 学号");
System.out.println("2. 姓名");
System.out.println("3. 班级");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
System.out.println("请输入学号:");
String id = scanner.nextLine();
for (Student student : students) {
if (student.getId().equals(id)) {
System.out.println(student);
return;
}
}
System.out.println("未找到该学生!");
break;
case 2:
System.out.println("请输入姓名:");
String name = scanner.nextLine();
for (Student student : students) {
if (student.getName().equals(name)) {
System.out.println(student);
}
}
break;
case 3:
System.out.println("请输入班级:");
String className = scanner.nextLine();
for (Student student : students) {
if (student.getClassName().equals(className)) {
System.out.println(student);
}
}
break;
default:
System.out.println("输入有误,请重新选择!");
break;
}
}
}
private static void sortStudents() {
try (Scanner scanner = new Scanner(System.in)) {
System.out.println("请选择要排序的方式:");
System.out.println("1. 各科成绩");
System.out.println("2. 总成绩");
System.out.println("3. 学号");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
double sum1 = 0, sum2 = 0;
for (double score : o1.getScores()) {
sum1 += score;
}
for (double score : o2.getScores()) {
sum2 += score;
}
return Double.compare(sum2, sum1);
}
});
break;
case 2:
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
double sum1 = 0, sum2 = 0;
for (double score : o1.getScores()) {
sum1 += score;
}
for (double score : o2.getScores()) {
sum2 += score;
}
return Double.compare(sum2, sum1);
}
});
break;
case 3:
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getId().compareTo(o2.getId());
}
});
break;
default:
System.out.println("输入有误,请重新选择!");
break;
}
}
System.out.println("排序结果如下:");
for (Student student : students) {
System.out.println(student);
}
}
private static void countStudents() {
int undergraduateCount = 0;
int graduateCount = 0;
for (Student student : students) {
if (student instanceof Undergraduate) {
undergraduateCount++;
} else if (student instanceof Graduate) {
graduateCount++;
}
}
System.out.println("本科生人数:" + undergraduateCount);
System.out.println("研究生人数:" + graduateCount);
System.out.println("总人数:" + students.size());
}
public static int getUndergraduateCount() {
return undergraduateCount;
}
public static void setUndergraduateCount(int undergraduateCount) {
StudentManagementSystem.undergraduateCount = undergraduateCount;
}
public static int getGraduateCount() {
return graduateCount;
}
public static void setGraduateCount(int graduateCount) {
StudentManagementSystem.graduateCount = graduateCount;
}
}
这是一个Java学生管理系统,代码没报错,但运行结果有问题,具体输入数据和输出提示信息如下。求解错误原因和具体改正方法