用java编写一个学生管理程序,选择集合类存储学生的学号、姓名和期末考试各科的成绩(课程名+成绩,假设只包括数学、语文和英语三门课程)。实现如下功能: (1)学生信息(学号+姓名)录入; (2)学生成绩录入(课程+得分); (3)根据姓名查找学号。 (4)根据学号查找姓名。 (5)根据学号查找成绩。 (6)根据学号和课程名查找学生的成绩。 (7)根据学号计算平均分,并屏幕输出。 (8)根据平均分对班级学生成绩排序,按从高到低的顺序输出姓名和平均成绩。
时间: 2023-12-16 20:05:32 浏览: 182
好的,我会根据您的要求为您解答这个问题。
您可以使用 Java 的 Map 集合来存储学生的信息和成绩,其中 key 为学号,value 为一个包含姓名和成绩的 Map,成绩的 Map 中 key 为课程名,value 为成绩。
以下是实现这个程序的一个示例代码:
```java
import java.util.*;
public class StudentManagement{
// 用 Map 存储学生信息和成绩
private Map<String, Map<String, Double>> students = new HashMap<>();
// 学生信息录入
public void addStudent(String studentId, String name){
students.put(studentId, new HashMap<>());
students.get(studentId).put("name", name);
}
// 学生成绩录入
public void addScore(String studentId, String course, double score){
students.get(studentId).put(course, score);
}
// 根据姓名查找学号
public String findStudentIdByName(String name){
for(String studentId : students.keySet()){
if(students.get(studentId).get("name").equals(name)){
return studentId;
}
}
return null;
}
// 根据学号查找姓名
public String findNameByStudentId(String studentId){
return students.get(studentId).get("name");
}
// 根据学号查找成绩
public Map<String, Double> findScoreByStudentId(String studentId){
return students.get(studentId);
}
// 根据学号和课程名查找学生的成绩
public Double findScoreByStudentIdAndCourse(String studentId, String course){
return students.get(studentId).get(course);
}
// 根据学号计算平均分,并屏幕输出
public double calculateAverageScoreByStudentId(String studentId){
Map<String, Double> scores = students.get(studentId);
double sum = 0.0;
int count = 0;
for(String course : scores.keySet()){
if(!course.equals("name")){
sum += scores.get(course);
count++;
}
}
double average = sum / count;
System.out.println("学号为 " + studentId + " 的学生平均分为:" + average);
return average;
}
// 根据平均分对班级学生成绩排序,按从高到低的顺序输出姓名和平均成绩
public void sortStudentsByAverageScore(){
List<Map.Entry<String, Map<String, Double>>> list = new ArrayList<>(students.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Map<String, Double>>>() {
@Override
public int compare(Map.Entry<String, Map<String, Double>> o1, Map.Entry<String, Map<String, Double>> o2) {
double averageScore1 = calculateAverageScoreByStudentId(o1.getKey());
double averageScore2 = calculateAverageScoreByStudentId(o2.getKey());
return Double.compare(averageScore2, averageScore1);
}
});
for(Map.Entry<String, Map<String, Double>> entry : list){
String name = entry.getValue().get("name");
double averageScore = calculateAverageScoreByStudentId(entry.getKey());
System.out.println("姓名:" + name + ",平均分:" + averageScore);
}
}
public static void main(String[] args){
// 测试代码
StudentManagement sm = new StudentManagement();
sm.addStudent("001", "张三");
sm.addScore("001", "数学", 80.0);
sm.addScore("001", "语文", 90.0);
sm.addScore("001", "英语", 85.0);
sm.addStudent("002", "李四");
sm.addScore("002", "数学", 95.0);
sm.addScore("002", "语文", 85.0);
sm.addScore("002", "英语", 90.0);
System.out.println("学号为 001 的学生成绩为:" + sm.findScoreByStudentId("001"));
System.out.println("学号为 002 的学生姓名为:" + sm.findNameByStudentId("002"));
System.out.println("姓名为 张三 的学生学号为:" + sm.findStudentIdByName("张三"));
System.out.println("学号为 002,课程为 数学 的成绩为:" + sm.findScoreByStudentIdAndCourse("002", "数学"));
sm.calculateAverageScoreByStudentId("001");
sm.calculateAverageScoreByStudentId("002");
sm.sortStudentsByAverageScore();
}
}
```
这个程序实现了您所要求的所有功能。您可以根据自己的需要进行修改和扩展。
阅读全文