Java学生成绩管理系统设计与实现
目标
本篇攻略将介绍如何设计并实现一个简单的Java学生成绩管理系统。该系统需要具有以下功能:
- 添加学生信息;
- 添加学生的成绩信息;
- 根据学生姓名或学号查找学生信息及成绩信息;
- 计算学生的总分、平均分及排名。
设计思路
- 创建学生类,包括姓名、学号、年级等基本信息;
- 创建成绩类,包括学生信息、科目信息、成绩等内容;
- 通过map数据结构存储学生信息及成绩信息,以学生姓名或学号作为key;
- 实现添加学生信息及成绩信息的方法;
- 实现根据学生姓名或学号查找学生信息及成绩信息的方法;
- 实现计算学生的总分、平均分及排名的方法。
具体实现
学生类的实现
public class Student {
private String name;
private String studentId;
private String grade;
public Student(String name, String studentId, String grade) {
this.name = name;
this.studentId = studentId;
this.grade = grade;
}
// getter and setter
...
}
成绩类的实现
public class Score {
private Student student;
private String subject;
private double score;
public Score(Student student, String subject, double score) {
this.student = student;
this.subject = subject;
this.score = score;
}
// getter and setter
...
}
学生信息及成绩信息的存储方式
使用HashMap存储所有学生信息及成绩信息。
private Map<String, List<Score>> studentScoresMap = new HashMap<>();
添加学生信息的方法
public void addStudent(String name, String studentId, String grade) {
Student student = new Student(name, studentId, grade);
List<Score> scores = new ArrayList<>();
studentScoresMap.put(studentId, scores);
}
添加成绩信息的方法
public void addScore(String studentId, String subject, double score) {
Student student = getStudentById(studentId);
Score scoreObj = new Score(student, subject, score);
List<Score> scores = studentScoresMap.get(studentId);
scores.add(scoreObj);
}
查找学生信息及成绩信息的方法
public List<Score> findScore(String studentId) {
return studentScoresMap.get(studentId);
}
计算学生的总分、平均分及排名的方法
public void calcStudentScore() {
List<StudentTotalScore> studentScoreList = new ArrayList<>();
for (Map.Entry<String, List<Score>> entry : studentScoresMap.entrySet()) {
double totalScore = 0.0;
String studentId = entry.getKey();
List<Score> scores = entry.getValue();
for (Score score : scores) {
totalScore += score.getScore();
}
StudentTotalScore studentScore = new StudentTotalScore(studentId, totalScore);
studentScoreList.add(studentScore);
}
Collections.sort(studentScoreList, new Comparator<StudentTotalScore>() {
@Override
public int compare(StudentTotalScore o1, StudentTotalScore o2) {
if (o1.getTotalScore() > o2.getTotalScore()) {
return -1;
} else if (o1.getTotalScore() == o2.getTotalScore()) {
return 0;
}
return 1;
}
});
for (int i = 0; i < studentScoreList.size(); i++) {
StudentTotalScore studentScore = studentScoreList.get(i);
studentScore.setRank(i + 1);
}
}
示例说明
示例1:添加学生信息及成绩信息
StudentScoreManager manager = new StudentScoreManager();
manager.addStudent("Tom", "202101", "Grade 1");
manager.addStudent("Jerry", "202102", "Grade 1");
manager.addScore("202101", "Java", 90.0);
manager.addScore("202101", "Math", 80.0);
manager.addScore("202102", "Java", 95.0);
manager.addScore("202102", "Math", 85.0);
manager.calcStudentScore();
示例2:查找学生信息及成绩信息
List<Score> scores = manager.findScore("202101");
for (Score score : scores) {
System.out.println(score.getSubject() + ": " + score.getScore());
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java学生成绩管理系统设计与实现 - Python技术站