利用Java语言编写程序:有若干学生,每个学生有3门成绩,从键盘输入数据(学号,姓名,三门课成绩),计算出平均成绩并由高到低排序,以表格形式输出。再创建一个泛型管理类,从键盘分批次输入小学生,中学生,大学生的数据,要使其能增删相关学生信息,并用接口来实现
时间: 2023-12-15 20:04:19 浏览: 79
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。
好的,我来回答你的问题。首先我要说明的是,我作为一个语言模型,并不会直接编写程序。但是我可以为你提供思路和步骤,帮助你编写这个程序。
1. 首先,你可以创建一个学生类,包含学号、姓名和3门课成绩的属性,以及计算平均成绩的方法。
```java
public class Student {
private String id; // 学号
private String name; // 姓名
private double[] scores; // 三门课成绩
public Student(String id, String name, double[] scores) {
this.id = id;
this.name = name;
this.scores = scores;
}
public double getAverageScore() {
double sum = 0;
for (double score : scores) {
sum += score;
}
return sum / scores.length;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public double[] getScores() {
return scores;
}
}
```
2. 接下来,你可以从键盘输入若干个学生的信息,并将它们存储在一个学生列表中。
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Student> students = new ArrayList<>();
// 从键盘输入学生信息
while (true) {
System.out.print("请输入学生的学号(输入exit退出):");
String id = scanner.nextLine();
if (id.equals("exit")) {
break;
}
System.out.print("请输入学生的姓名:");
String name = scanner.nextLine();
double[] scores = new double[3];
for (int i = 0; i < 3; i++) {
System.out.printf("请输入%s的第%d门课成绩:", name, i+1);
scores[i] = scanner.nextDouble();
scanner.nextLine(); // 读取换行符
}
Student student = new Student(id, name, scores);
students.add(student);
}
// 按平均成绩从高到低排序
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return Double.compare(s2.getAverageScore(), s1.getAverageScore());
}
});
// 输出表格形式
System.out.println("学号\t姓名\t平均成绩");
for (Student student : students) {
System.out.printf("%s\t%s\t%.2f\n", student.getId(), student.getName(), student.getAverageScore());
}
}
}
```
3. 接下来可以创建一个泛型管理类 `StudentManager<T extends Student>`,它可以管理小学生、中学生和大学生的信息。它包含了增加、删除、修改和查询学生信息的方法,并且用接口来实现。
```java
public interface StudentManager<T extends Student> {
void add(T student);
void remove(String id);
void update(String id, T student);
T get(String id);
List<T> getAll();
}
public class ElementaryStudent extends Student {
public ElementaryStudent(String id, String name, double[] scores) {
super(id, name, scores);
}
}
public class MiddleStudent extends Student {
public MiddleStudent(String id, String name, double[] scores) {
super(id, name, scores);
}
}
public class CollegeStudent extends Student {
public CollegeStudent(String id, String name, double[] scores) {
super(id, name, scores);
}
}
public class StudentManagerImpl<T extends Student> implements StudentManager<T> {
private Map<String, T> students = new HashMap<>();
@Override
public void add(T student) {
students.put(student.getId(), student);
}
@Override
public void remove(String id) {
students.remove(id);
}
@Override
public void update(String id, T student) {
students.put(id, student);
}
@Override
public T get(String id) {
return students.get(id);
}
@Override
public List<T> getAll() {
return new ArrayList<>(students.values());
}
}
```
4. 最后,你可以使用上面的类来增加、删除、修改和查询学生信息。
```java
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StudentManager<Student> manager = new StudentManagerImpl<>();
// 分批次输入小学生、中学生、大学生的信息
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();
scanner.nextLine(); // 读取换行符
if (choice == 4) {
break;
}
System.out.print("请输入学生的学号:");
String id = scanner.nextLine();
System.out.print("请输入学生的姓名:");
String name = scanner.nextLine();
double[] scores = new double[3];
for (int i = 0; i < 3; i++) {
System.out.printf("请输入%s的第%d门课成绩:", name, i+1);
scores[i] = scanner.nextDouble();
scanner.nextLine(); // 读取换行符
}
switch (choice) {
case 1:
ElementaryStudent elemStudent = new ElementaryStudent(id, name, scores);
manager.add(elemStudent);
break;
case 2:
MiddleStudent midStudent = new MiddleStudent(id, name, scores);
manager.add(midStudent);
break;
case 3:
CollegeStudent colStudent = new CollegeStudent(id, name, scores);
manager.add(colStudent);
break;
default:
break;
}
}
// 删除一个学生信息
System.out.print("请输入要删除的学生的学号:");
String id = scanner.nextLine();
manager.remove(id);
// 修改一个学生信息
System.out.print("请输入要修改的学生的学号:");
id = scanner.nextLine();
System.out.print("请输入学生的姓名:");
String name = scanner.nextLine();
double[] scores = new double[3];
for (int i = 0; i < 3; i++) {
System.out.printf("请输入%s的第%d门课成绩:", name, i+1);
scores[i] = scanner.nextDouble();
scanner.nextLine(); // 读取换行符
}
Student newStudent = new Student(id, name, scores);
manager.update(id, newStudent);
// 查询一个学生信息
System.out.print("请输入要查询的学生的学号:");
id = scanner.nextLine();
Student student = manager.get(id);
if (student != null) {
System.out.printf("学号:%s,姓名:%s,平均成绩:%.2f\n", student.getId(), student.getName(), student.getAverageScore());
} else {
System.out.println("没有找到该学生!");
}
// 查询所有学生信息
List<Student> students = manager.getAll();
for (Student s : students) {
System.out.printf("学号:%s,姓名:%s,平均成绩:%.2f\n", s.getId(), s.getName(), s.getAverageScore());
}
}
}
```
以上就是这个程序的完整代码。希望能对你有所帮助!
阅读全文