使用java编写:有若干个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,并按从大到小的顺序进行排序,排序后数据以表格形式输出。再创建一个泛型管理类,从键盘一波一波输入数据,其中包括四波人(小学生,初中生,高中生,大学生)的数据信息,要使其能增加能删除相关学生信息。并使用接口来实现。
时间: 2024-01-02 17:02:17 浏览: 64
用java实现学生成绩管理
以下是使用Java编写的代码,实现对学生信息的输入、计算、排序和输出,以及泛型管理类的创建和相关操作:
首先,我们需要创建一个学生类,其中包括学生号、姓名和三门课成绩:
```java
class Student {
private int id;
private String name;
private double grade1;
private double grade2;
private double grade3;
private double average;
public Student(int id, String name, double grade1, double grade2, double grade3) {
this.id = id;
this.name = name;
this.grade1 = grade1;
this.grade2 = grade2;
this.grade3 = grade3;
this.average = (grade1 + grade2 + grade3) / 3;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double getGrade1() {
return grade1;
}
public double getGrade2() {
return grade2;
}
public double getGrade3() {
return grade3;
}
public double getAverage() {
return average;
}
}
```
接下来,我们需要创建一个管理类,用于存储和操作学生信息。该类中包括添加、删除、排序和输出等方法:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
interface StudentManagement<T extends Student> {
void add(T student);
void remove(int id);
void sort();
void print();
}
class StudentManager<T extends Student> implements StudentManagement<T> {
private ArrayList<T> students = new ArrayList<T>();
@Override
public void add(T student) {
students.add(student);
}
@Override
public void remove(int id) {
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId() == id) {
students.remove(i);
break;
}
}
}
@Override
public void sort() {
Collections.sort(students, new Comparator<T>() {
@Override
public int compare(T s1, T s2) {
return Double.compare(s2.getAverage(), s1.getAverage());
}
});
}
@Override
public void print() {
System.out.println("| 学号 | 姓名 | 课程1 | 课程2 | 课程3 | 平均成绩 |");
System.out.println("-------------------------------------------------");
for (T student : students) {
System.out.printf("| %4d | %s | %5.2f | %5.2f | %5.2f | %8.2f |\n",
student.getId(), student.getName(), student.getGrade1(), student.getGrade2(),
student.getGrade3(), student.getAverage());
}
}
}
```
最后,我们可以在主函数中使用上述代码进行测试,例如:
```java
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StudentManager<Student> manager = new StudentManager<Student>();
// 从键盘输入学生信息
while (true) {
System.out.print("请输入学生信息(格式:学号 姓名 课程1成绩 课程2成绩 课程3成绩):");
int id = scanner.nextInt();
String name = scanner.next();
double grade1 = scanner.nextDouble();
double grade2 = scanner.nextDouble();
double grade3 = scanner.nextDouble();
Student student = new Student(id, name, grade1, grade2, grade3);
manager.add(student);
System.out.print("是否继续输入?(Y/N):");
String answer = scanner.next();
if (answer.equalsIgnoreCase("N")) {
break;
}
}
// 进行排序和输出
manager.sort();
manager.print();
// 测试删除功能
System.out.print("请输入要删除的学生学号:");
int id = scanner.nextInt();
manager.remove(id);
manager.print();
scanner.close();
}
}
```
可以看到,我们通过使用泛型和接口,实现了对学生信息的管理和操作。同时,这种方法也可以扩展到其他类型的数据上,如小学生、初中生、高中生和大学生的信息管理。
阅读全文