现有M(M=2)位教师,N名同学,每名同学有3科成绩(语文,数学,英语),其中一位收师农授2门课程,另一位教师教授一门课程。请随机生成学生的结,并实现以下功能。
(一)教师具备的功能
1.查看、修改自己的信息(教师流号不可修改):
2.成绩查询
(1)查询自己救授课程的全班成绩、是高成绩、最低成绩、平均成绩等.
(2)根据学生的学号成姓名,查询该生自己放授课程的成绩。
(3)实现对学生成绩的排序,升序降序
3.教师信息和所教授的课程成绩保存到文件中。(二)学生具备的功能
1.查看、修改自己的信息(学生学号不可修改)
2.成绩查询
(1)查询自己所有科目的成绩、平均分等。
(2)查询自己某科目的成绩。
3.学生信息和学生个人成绩的保存,保存到文件中。
(三)系统管理员
1.对学生、教师的增加、迎除、修改、查看。教师编号和学生学号自动生成,不能修改。
2.对成绩的查看 (合所有科目,所有学生,单个科目,单个学生的成绩查询等)、排序等。
3.实现对教师信息、学生信息、学生成绩的保存(保存到文件中。可根据不同的内容保存的不同的文件中)
(四)主类实现的功能根8A入的值选择相应的单,执行湘应的损作.
四、项目要求
-)项目开发要求
1.定义父类Person,学生类、教师类继承Person类,课程类。
首先,我们需要根据问题的要求定义一个父类Person,学生类和教师类继承自Person类,并定义一个课程类。然后,我们可以根据用户的输入选择相应的功能单元,执行相应的操作。
首先是定义Person类,其中包括学号和姓名这两个属性,再定义一个构造函数用于初始化学生或教师对象。
class Person {
private String id; // 学号或教师工号
private String name; // 姓名
public Person(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
// 可以根据需要添加其他属性和方法
}
接下来,我们定义一个课程类,其中包括科目名称和成绩这两个属性。我们可以根据需要添加其他属性和方法。
class Course {
private String name; // 科目名称
private float score; // 成绩
public Course(String name, float score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public float getScore() {
return score;
}
// 可以根据需要添加其他属性和方法
}
然后,我们定义学生类,继承自Person类,并包括所学课程和成绩这两个属性。
class Student extends Person {
private List<Course> courses; // 所学课程和成绩
public Student(String id, String name) {
super(id, name);
courses = new ArrayList<>();
}
public void addCourse(Course course) {
courses.add(course);
}
public List<Course> getCourses() {
return courses;
}
// 可以根据需要添加其他属性和方法
}
接下来,我们定义教师类,继承自Person类,并包括所教课程和成绩这两个属性。
class Teacher extends Person {
private List<Course> courses; // 所教课程和成绩
public Teacher(String id, String name) {
super(id, name);
courses = new ArrayList<>();
}
public void addCourse(Course course) {
courses.add(course);
}
public List<Course> getCourses() {
return courses;
}
// 可以根据需要添加其他属性和方法
}
接下来,我们定义一个主类,实现各类功能。
```java import java.util.*;
public class Main { private static List students; // 学生列表 private static List teachers; // 教师列表
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
students = new ArrayList<>();
teachers = new ArrayList<>();
while (true) {
System.out.println("请选择操作:");
System.out.println("1. 登录教师账号");
System.out.println("2. 登录学生账号");
System.out.println("3. 登录系统管理员账号");
System.out.println("4. 退出");
int choice = scanner.nextInt();
switch (choice) {
case 1:
teacherMenu(scanner);
break;
case 2:
studentMenu(scanner);
break;
case 3:
adminMenu(scanner);
break;
case 4:
scanner.close();
System.exit(0);
default:
System.out.println("无效的选择,请重新输入");
break;
}
}
}
private static void teacherMenu(Scanner scanner) {
System.out.println("请输入教师工号:");
String id = scanner.next();
Teacher teacher = findTeacherById(id);
if (teacher == null) {
System.out.println("教师不存在");
return;
}
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. 返回");
int choice = scanner.nextInt();
switch (choice) {
case 1:
editTeacherInfo(scanner, teacher);
break;
case 2:
queryClassScores(scanner, teacher);
break;
case 3:
queryPersonalScores(scanner, teacher);
break;
case 4:
sortStudentScores(scanner, teacher);
break;
case 5:
saveToFile(scanner, teacher);
break;
case 6:
return;
default:
System.out.println("无效的选择,请重新输入");
break;
}
}
}
private static void editTeacherInfo(Scanner scanner, Teacher teacher) {
System.out.println("姓名:" + teacher.getName());
System.out.println("请输入新的姓名:");
String name = scanner.next();
// 修改姓名
teacher.setName(name);
}
private static void queryClassScores(Scanner scanner, Teacher teacher) {
List<Student> classStudents = getAllStudents();
for (Course course : teacher.getCourses()) {
List<Float> scores = new ArrayList<>();
for (Student student : classStudents) {
List<Course> studentCourses = student.getCourses();
// 查找学生在当前课程中的成绩
for (Course studentCourse : studentCourses) {
if (studentCourse.getName().equals(course.getName())) {
scores.add(studentCourse.getScore());
}
}
}
float maxScore = Collections.max(scores);
float minScore = Collections.min(scores);
float averageScore = (float) scores.stream().mapToDouble(Float::doubleValue).average().orElse(0);
System.out.println("课程:" + course.getName());
System.out.println("最高成绩:" + maxScore);
System.out.println("最低成绩:" + minScore);
System.out.println("平均成绩:" + averageScore);
}
}
private static void queryPersonalScores(Scanner scanner, Teacher teacher) {
System.out.println("请输入学生学号:");
String studentId = scanner.next();
List<Student> classStudents = getAllStudents();
Student student = findStudentById(studentId);
if (student == null) {
System.out.println("学生不存在");
return;
}
for (Course course : teacher.getCourses()) {
List<Course> studentCourses = student.getCourses();
// 查找学生在当前课程中的成绩
for (Course studentCourse : studentCourses) {
if (studentCourse.getName().equals(course.getName())) {
System.out.println("课程:" + course.getName() + ",成绩:" + studentCourse.getScore());
break;
}
}
}
}
private static void sortStudentScores(Scanner scanner, Teacher teacher) {
List<Student> classStudents = getAllStudents();
for (Course course : teacher.getCourses()) {
List<Float> scores = new ArrayList<>();
for (Student student : classStudents) {
List<Course> studentCourses = student.getCourses();
// 查找学生在当前课程中的成绩
for (Course studentCourse : studentCourses) {
if (studentCourse.getName().equals(course.getName())) {
scores.add(studentCourse.getScore());
}
}
}
scores.sort(Comparator.naturalOrder());
System.out.println("课程:" + course.getName() + ",成绩排序:");
for (Float score : scores) {
System.out.println(score);
}
}
}
private static void saveToFile(Scanner scanner, Teacher teacher) {
// TODO: 将教师信息和所教授的课程成绩保存到文件中
}
private static void studentMenu(Scanner scanner) {
System.out.println("请输入学生学号:");
String id = scanner.next();
Student student = findStudentById(id);
if (student == null) {
System.out.println("学生不存在");
return;
}
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. 返回");
int choice = scanner.nextInt();
switch (choice) {
case 1:
editStudentInfo(scanner, student);
break;
case 2:
queryAllCourseScores(student);
break;
case 3:
querySingleCourseScores(scanner, student);
break;
case 4:
saveToFile(scanner, student);
break;
case 5:
return;
default:
System.out.println("无效的选择,请重新输入");
break;
}
}
}
private static void editStudentInfo(Scanner scanner, Student student) {
System.out.println("姓名:" + student.getName());
System.out.println("请输入新的姓名:");
String name = scanner.next();
// 修改姓名
student.setName(name);
}
private static void queryAllCourseScores(Student student) {
List<Course> courses = student.getCourses();
float sum = 0;
int count = 0;
for (Course course : courses) {
sum += course.getScore();
count++;
}
float averageScore = sum / count;
System.out.println("总成绩:" + sum);
System.out.println("平均成绩:" + averageScore);
}
private static void querySingleCourseScores(Scanner scanner, Student student) {
System.out.println("请输入课程名称:");
String courseName = scanner.next();
List<Course> courses = student.getCourses();
for (Course course : courses) {
if (course.getName().equals(courseName)) {
System.out.println("科目:" + course.getName() + ",成绩:" + course.getScore());
return;
}
}
System.out.println("未找到该课程成绩");
}
private static void saveToFile(Scanner scanner, Student student) {
// TODO: 将学生信息和个人成绩保存到文件中
}
private static void adminMenu(Scanner scanner) {
while (true) {
System.out.println("请选择操作:");
System.out.println("1. 添加学生");
参考:https://peakchen.blog.csdn.net/article/details/131568233?spm=1001.2014.3001.5502