Java 实现简易学生成绩管理系统

一、系统概述

为满足学校教学管理需求,开发一套简易学生成绩管理系统。该系统可实现学生信息管理、课程管理、成绩录入与统计分析等功能,支持命令行界面操作,适合教学场景或小型学校使用。

二、功能模块设计

  1. 学生管理:添加、查询、修改、删除学生信息。
  2. 课程管理:添加、查询课程信息。
  3. 成绩管理:录入、修改、查询学生课程成绩。
  4. 统计分析:计算平均分、最高分、最低分,生成成绩排名。

三、系统实现

(一)数据模型设计

// 学生类
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 方法,系统将显示主菜单。

(二)主菜单操作

  1. 学生管理:可添加、查询、修改、删除学生信息,以及查看所有学生列表。
  2. 课程管理:可添加、查询课程信息,以及查看所有课程列表。
  3. 成绩管理:可录入、修改、查询学生成绩。
  4. 统计分析:可计算课程平均分、查看最高分 / 最低分,以及生成课程成绩排名。
  5. 退出系统:结束程序运行。

(三)数据输入

  • 输入学生和课程信息时,按提示依次输入各字段。
  • 输入数值类型(如年龄、成绩)时,请确保输入有效数字,否则会提示重新输入。

五、系统特点

  1. 模块化设计:将学生、课程、成绩管理分离,便于维护和扩展。
  2. 完整功能:覆盖学生成绩管理基本需求,包括数据增删改查和统计分析。
  3. 用户友好:通过菜单引导操作,提供清晰的提示信息。
  4. 数据一致性:录入成绩时会验证学生和课程是否存在,确保数据有效性。

六、扩展方向

  1. 数据持久化:增加文件存储功能,将数据保存到文件中,实现程序退出后数据不丢失。
  2. GUI 界面:开发图形用户界面,提升用户体验。
  3. 多用户管理:增加用户权限管理,区分管理员和教师等不同角色。
  4. 数据导出:支持将成绩数据导出为 Excel 或 CSV 格式。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值