一、系统概述
为满足学校教学管理需求,开发一套简易学生成绩管理系统。该系统可实现学生信息管理、课程管理、成绩录入与统计分析等功能,支持命令行界面操作,适合教学场景或小型学校使用。
二、功能模块设计
- 学生管理:添加、查询、修改、删除学生信息。
- 课程管理:添加、查询课程信息。
- 成绩管理:录入、修改、查询学生课程成绩。
- 统计分析:计算平均分、最高分、最低分,生成成绩排名。
三、系统实现
(一)数据模型设计
// 学生类
public class Student {
private String studentId;
private String name;
private int age;
private String gender;
public Student(String studentId, String name, int age, String gender) {
this.studentId = studentId;
this.name = name;
this.age = age;
this.gender = gender;
}
// Getters and Setters
public String getStudentId() { return studentId; }
public String getName() { return name; }
public int getAge() { return age; }
public String getGender() { return gender; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
public void setGender(String gender) { this.gender = gender; }
@Override
public String toString() {
return "学生ID:" + studentId +
",姓名:" + name +
",年龄:" + age +
",性别:" + gender;
}
}
// 课程类
public class Course {
private String courseId;
private String courseName;
public Course(String courseId, String courseName) {
this.courseId = courseId;
this.courseName = courseName;
}
// Getters and Setters
public String getCourseId() { return courseId; }
public String getCourseName() { return courseName; }
@Override
public String toString() {
return "课程ID:" + courseId + ",课程名称:" + courseName;
}
}
// 成绩类
public class Score {
private Student student;
private Course course;
private double score;
public Score(Student student, Course course, double score) {
this.student = student;
this.course = course;
this.score = score;
}
// Getters and Setters
public Student getStudent() { return student; }
public Course getCourse() { return course; }
public double getScore() { return score; }
public void setScore(double score) { this.score = score; }
@Override
public String toString() {
return student.getName() + "的" + course.getCourseName() + "成绩:" + score;
}
}
(二)数据管理类
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// 学生管理类
public class StudentManager {
private Map<String, Student> students = new HashMap<>();
// 添加学生
public void addStudent(Student student) {
students.put(student.getStudentId(), student);
}
// 删除学生
public void deleteStudent(String studentId) {
students.remove(studentId);
}
// 查询学生
public Student getStudent(String studentId) {
return students.get(studentId);
}
// 获取所有学生
public List<Student> getAllStudents() {
return new ArrayList<>(students.values());
}
// 更新学生信息
public void updateStudent(Student student) {
if (students.containsKey(student.getStudentId())) {
students.put(student.getStudentId(), student);
}
}
}
// 课程管理类
public class CourseManager {
private Map<String, Course> courses = new HashMap<>();
// 添加课程
public void addCourse(Course course) {
courses.put(course.getCourseId(), course);
}
// 删除课程
public void deleteCourse(String courseId) {
courses.remove(courseId);
}
// 查询课程
public Course getCourse(String courseId) {
return courses.get(courseId);
}
// 获取所有课程
public List<Course> getAllCourses() {
return new ArrayList<>(courses.values());
}
}
// 成绩管理类
public class ScoreManager {
private List<Score> scores = new ArrayList<>();
// 添加成绩
public void addScore(Score score) {
scores.add(score);
}
// 修改成绩
public void updateScore(Student student, Course course, double newScore) {
for (Score score : scores) {
if (score.getStudent().getStudentId().equals(student.getStudentId()) &&
score.getCourse().getCourseId().equals(course.getCourseId())) {
score.setScore(newScore);
break;
}
}
}
// 获取学生课程成绩
public double getScore(Student student, Course course) {
for (Score score : scores) {
if (score.getStudent().getStudentId().equals(student.getStudentId()) &&
score.getCourse().getCourseId().equals(course.getCourseId())) {
return score.getScore();
}
}
return -1; // 表示未找到成绩
}
// 获取学生所有成绩
public List<Score> getScoresByStudent(Student student) {
List<Score> result = new ArrayList<>();
for (Score score : scores) {
if (score.getStudent().getStudentId().equals(student.getStudentId())) {
result.add(score);
}
}
return result;
}
// 获取课程所有学生成绩
public List<Score> getScoresByCourse(Course course) {
List<Score> result = new ArrayList<>();
for (Score score : scores) {
if (score.getCourse().getCourseId().equals(course.getCourseId())) {
result.add(score);
}
}
return result;
}
}
(三)统计分析类
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class StatisticsAnalyzer {
private ScoreManager scoreManager;
public StatisticsAnalyzer(ScoreManager scoreManager) {
this.scoreManager = scoreManager;
}
// 计算课程平均分
public double calculateAverageScore(Course course) {
List<Score> courseScores = scoreManager.getScoresByCourse(course);
if (courseScores.isEmpty()) return 0;
double sum = 0;
for (Score score : courseScores) {
sum += score.getScore();
}
return sum / courseScores.size();
}
// 获取课程最高分
public double getMaxScore(Course course) {
List<Score> courseScores = scoreManager.getScoresByCourse(course);
if (courseScores.isEmpty()) return 0;
return Collections.max(courseScores, Comparator.comparingDouble(Score::getScore)).getScore();
}
// 获取课程最低分
public double getMinScore(Course course) {
List<Score> courseScores = scoreManager.getScoresByCourse(course);
if (courseScores.isEmpty()) return 0;
return Collections.min(courseScores, Comparator.comparingDouble(Score::getScore)).getScore();
}
// 生成课程成绩排名(从高到低)
public List<Score> generateRanking(Course course) {
List<Score> courseScores = scoreManager.getScoresByCourse(course);
courseScores.sort(Comparator.comparingDouble(Score::getScore).reversed());
return courseScores;
}
}
(四)用户交互界面
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class StudentGradeSystem {
private StudentManager studentManager = new StudentManager();
private CourseManager courseManager = new CourseManager();
private ScoreManager scoreManager = new ScoreManager();
private StatisticsAnalyzer analyzer = new StatisticsAnalyzer(scoreManager);
private Scanner scanner = new Scanner(System.in);
public void start() {
while (true) {
printMenu();
int choice = getIntInput("请输入你的选择:");
switch (choice) {
case 1:
manageStudents();
break;
case 2:
manageCourses();
break;
case 3:
manageScores();
break;
case 4:
analyzeStatistics();
break;
case 5:
System.out.println("感谢使用学生成绩管理系统,再见!");
scanner.close();
return;
default:
System.out.println("无效的选择,请重新输入!");
}
}
}
private void printMenu() {
System.out.println("\n===== 学生成绩管理系统 =====");
System.out.println("1. 学生管理");
System.out.println("2. 课程管理");
System.out.println("3. 成绩管理");
System.out.println("4. 统计分析");
System.out.println("5. 退出系统");
}
// 学生管理子菜单
private void manageStudents() {
while (true) {
System.out.println("\n----- 学生管理 -----");
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 = getIntInput("请输入你的选择:");
switch (choice) {
case 1:
addStudent();
break;
case 2:
queryStudent();
break;
case 3:
updateStudent();
break;
case 4:
deleteStudent();
break;
case 5:
listAllStudents();
break;
case 6:
return;
default:
System.out.println("无效的选择,请重新输入!");
}
}
}
// 课程管理子菜单
private void manageCourses() {
while (true) {
System.out.println("\n----- 课程管理 -----");
System.out.println("1. 添加课程");
System.out.println("2. 查询课程");
System.out.println("3. 查看所有课程");
System.out.println("4. 返回主菜单");
int choice = getIntInput("请输入你的选择:");
switch (choice) {
case 1:
addCourse();
break;
case 2:
queryCourse();
break;
case 3:
listAllCourses();
break;
case 4:
return;
default:
System.out.println("无效的选择,请重新输入!");
}
}
}
// 成绩管理子菜单
private void manageScores() {
while (true) {
System.out.println("\n----- 成绩管理 -----");
System.out.println("1. 录入成绩");
System.out.println("2. 修改成绩");
System.out.println("3. 查询学生成绩");
System.out.println("4. 返回主菜单");
int choice = getIntInput("请输入你的选择:");
switch (choice) {
case 1:
enterScore();
break;
case 2:
modifyScore();
break;
case 3:
queryScore();
break;
case 4:
return;
default:
System.out.println("无效的选择,请重新输入!");
}
}
}
// 统计分析子菜单
private void analyzeStatistics() {
while (true) {
System.out.println("\n----- 统计分析 -----");
System.out.println("1. 计算课程平均分");
System.out.println("2. 查看课程最高分");
System.out.println("3. 查看课程最低分");
System.out.println("4. 生成课程成绩排名");
System.out.println("5. 返回主菜单");
int choice = getIntInput("请输入你的选择:");
switch (choice) {
case 1:
calculateAverage();
break;
case 2:
showMaxScore();
break;
case 3:
showMinScore();
break;
case 4:
generateRanking();
break;
case 5:
return;
default:
System.out.println("无效的选择,请重新输入!");
}
}
}
// 添加学生
private void addStudent() {
String studentId = getStringInput("请输入学生ID:");
String name = getStringInput("请输入学生姓名:");
int age = getIntInput("请输入学生年龄:");
String gender = getStringInput("请输入学生性别:");
Student student = new Student(studentId, name, age, gender);
studentManager.addStudent(student);
System.out.println("学生添加成功!");
}
// 查询学生
private void queryStudent() {
String studentId = getStringInput("请输入要查询的学生ID:");
Student student = studentManager.getStudent(studentId);
if (student != null) {
System.out.println(student);
} else {
System.out.println("未找到该学生!");
}
}
// 修改学生信息
private void updateStudent() {
String studentId = getStringInput("请输入要修改的学生ID:");
Student student = studentManager.getStudent(studentId);
if (student != null) {
String name = getStringInput("请输入新的学生姓名(不修改请直接回车):");
if (!name.isEmpty()) {
student.setName(name);
}
String ageStr = getStringInput("请输入新的学生年龄(不修改请直接回车):");
if (!ageStr.isEmpty()) {
try {
int age = Integer.parseInt(ageStr);
student.setAge(age);
} catch (NumberFormatException e) {
System.out.println("年龄格式错误,未修改!");
}
}
String gender = getStringInput("请输入新的学生性别(不修改请直接回车):");
if (!gender.isEmpty()) {
student.setGender(gender);
}
studentManager.updateStudent(student);
System.out.println("学生信息更新成功!");
} else {
System.out.println("未找到该学生!");
}
}
// 删除学生
private void deleteStudent() {
String studentId = getStringInput("请输入要删除的学生ID:");
studentManager.deleteStudent(studentId);
System.out.println("学生删除成功!");
}
// 列出所有学生
private void listAllStudents() {
List<Student> students = studentManager.getAllStudents();
if (students.isEmpty()) {
System.out.println("暂无学生信息!");
} else {
System.out.println("所有学生信息:");
for (Student student : students) {
System.out.println(student);
}
}
}
// 添加课程
private void addCourse() {
String courseId = getStringInput("请输入课程ID:");
String courseName = getStringInput("请输入课程名称:");
Course course = new Course(courseId, courseName);
courseManager.addCourse(course);
System.out.println("课程添加成功!");
}
// 查询课程
private void queryCourse() {
String courseId = getStringInput("请输入要查询的课程ID:");
Course course = courseManager.getCourse(courseId);
if (course != null) {
System.out.println(course);
} else {
System.out.println("未找到该课程!");
}
}
// 列出所有课程
private void listAllCourses() {
List<Course> courses = courseManager.getAllCourses();
if (courses.isEmpty()) {
System.out.println("暂无课程信息!");
} else {
System.out.println("所有课程信息:");
for (Course course : courses) {
System.out.println(course);
}
}
}
// 录入成绩
private void enterScore() {
String studentId = getStringInput("请输入学生ID:");
Student student = studentManager.getStudent(studentId);
if (student == null) {
System.out.println("未找到该学生!");
return;
}
String courseId = getStringInput("请输入课程ID:");
Course course = courseManager.getCourse(courseId);
if (course == null) {
System.out.println("未找到该课程!");
return;
}
double score = getDoubleInput("请输入成绩:");
Score newScore = new Score(student, course, score);
scoreManager.addScore(newScore);
System.out.println("成绩录入成功!");
}
// 修改成绩
private void modifyScore() {
String studentId = getStringInput("请输入学生ID:");
Student student = studentManager.getStudent(studentId);
if (student == null) {
System.out.println("未找到该学生!");
return;
}
String courseId = getStringInput("请输入课程ID:");
Course course = courseManager.getCourse(courseId);
if (course == null) {
System.out.println("未找到该课程!");
return;
}
double newScore = getDoubleInput("请输入新成绩:");
scoreManager.updateScore(student, course, newScore);
System.out.println("成绩修改成功!");
}
// 查询学生成绩
private void queryScore() {
String studentId = getStringInput("请输入学生ID:");
Student student = studentManager.getStudent(studentId);
if (student == null) {
System.out.println("未找到该学生!");
return;
}
List<Score> scores = scoreManager.getScoresByStudent(student);
if (scores.isEmpty()) {
System.out.println("该学生暂无成绩记录!");
} else {
System.out.println(student.getName() + "的成绩:");
for (Score score : scores) {
System.out.println(score.getCourse().getCourseName() + ":" + score.getScore());
}
}
}
// 计算平均分
private void calculateAverage() {
String courseId = getStringInput("请输入课程ID:");
Course course = courseManager.getCourse(courseId);
if (course == null) {
System.out.println("未找到该课程!");
return;
}
double average = analyzer.calculateAverageScore(course);
System.out.println(course.getCourseName() + "的平均分为:" + average);
}
// 显示最高分
private void showMaxScore() {
String courseId = getStringInput("请输入课程ID:");
Course course = courseManager.getCourse(courseId);
if (course == null) {
System.out.println("未找到该课程!");
return;
}
double maxScore = analyzer.getMaxScore(course);
System.out.println(course.getCourseName() + "的最高分为:" + maxScore);
}
// 显示最低分
private void showMinScore() {
String courseId = getStringInput("请输入课程ID:");
Course course = courseManager.getCourse(courseId);
if (course == null) {
System.out.println("未找到该课程!");
return;
}
double minScore = analyzer.getMinScore(course);
System.out.println(course.getCourseName() + "的最低分为:" + minScore);
}
// 生成排名
private void generateRanking() {
String courseId = getStringInput("请输入课程ID:");
Course course = courseManager.getCourse(courseId);
if (course == null) {
System.out.println("未找到该课程!");
return;
}
List<Score> ranking = analyzer.generateRanking(course);
if (ranking.isEmpty()) {
System.out.println("该课程暂无成绩记录!");
} else {
System.out.println(course.getCourseName() + "成绩排名:");
int rank = 1;
for (Score score : ranking) {
System.out.println(rank + ". " + score.getStudent().getName() + ":" + score.getScore());
rank++;
}
}
}
// 获取字符串输入
private String getStringInput(String prompt) {
System.out.print(prompt);
return scanner.nextLine();
}
// 获取整数输入
private int getIntInput(String prompt) {
while (true) {
try {
System.out.print(prompt);
int input = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
return input;
} catch (InputMismatchException e) {
System.out.println("输入格式错误,请输入整数!");
scanner.nextLine(); // 清除错误输入
}
}
}
// 获取双精度浮点数输入
private double getDoubleInput(String prompt) {
while (true) {
try {
System.out.print(prompt);
double input = scanner.nextDouble();
scanner.nextLine(); // 消耗换行符
return input;
} catch (InputMismatchException e) {
System.out.println("输入格式错误,请输入数字!");
scanner.nextLine(); // 清除错误输入
}
}
}
public static void main(String[] args) {
StudentGradeSystem system = new StudentGradeSystem();
system.start();
}
}
四、系统使用说明
(一)启动系统
运行 StudentGradeSystem
类的 main
方法,系统将显示主菜单。
(二)主菜单操作
- 学生管理:可添加、查询、修改、删除学生信息,以及查看所有学生列表。
- 课程管理:可添加、查询课程信息,以及查看所有课程列表。
- 成绩管理:可录入、修改、查询学生成绩。
- 统计分析:可计算课程平均分、查看最高分 / 最低分,以及生成课程成绩排名。
- 退出系统:结束程序运行。
(三)数据输入
- 输入学生和课程信息时,按提示依次输入各字段。
- 输入数值类型(如年龄、成绩)时,请确保输入有效数字,否则会提示重新输入。
五、系统特点
- 模块化设计:将学生、课程、成绩管理分离,便于维护和扩展。
- 完整功能:覆盖学生成绩管理基本需求,包括数据增删改查和统计分析。
- 用户友好:通过菜单引导操作,提供清晰的提示信息。
- 数据一致性:录入成绩时会验证学生和课程是否存在,确保数据有效性。
六、扩展方向
- 数据持久化:增加文件存储功能,将数据保存到文件中,实现程序退出后数据不丢失。
- GUI 界面:开发图形用户界面,提升用户体验。
- 多用户管理:增加用户权限管理,区分管理员和教师等不同角色。
- 数据导出:支持将成绩数据导出为 Excel 或 CSV 格式。