Java基础编程500题——基于Swing的学生成绩管理系统(单机简易版)

💥 该系列属于【Java基础编程500题】专栏,如您需查看Java基础的其他相关题目,请您点击左边的连接

目录

1. 项目目标

2. 功能需求

(1)用户界面需求

(2)功能模块需求

3. 项目展示

4. 代码实现

(1)项目结构

(2)GradeManager

(3)GradeQuerySystem

(4)Main


  ✨✨  返回题目目录 ✨ ✨ 

Java基础编程500题


1. 项目目标

  •  设计并实现一个具有界面的学生成绩管理系统。
  •  实现学生成绩的录入、查询、修改、删除和显示所有成绩等功能。

2. 功能需求

(1)用户界面需求

  • 系统主界面应包含学号、成绩输入框,以及录入、删除、修改、查询和显示所有成绩等按钮。
  • 操作结果在界面下方以标签形式显示。

(2)功能模块需求

  • 录入成绩:用户输入学号和成绩,点击“录入”按钮,系统将成绩添加到Map中。
  • 删除成绩:用户输入学号,点击“删除”按钮,系统从Map中删除对应成绩。
  • 修改成绩:用户输入学号和新的成绩,点击“修改”按钮,系统更新Map中的成绩。
  • 查询成绩:用户输入学号,点击“查询”按钮,系统显示对应学生的成绩。
  • 显示所有成绩:点击“显示所有成绩”按钮,系统以文本区域形式显示所有学生的成绩。

3. 项目展示

4. 代码实现

(1)项目结构

(2)GradeManager

  • 负责管理学生的成绩,包括添加、删除、更新和查询学生成绩的功能。
  • 成绩管理是系统的核心功能,它应该独立于用户界面。将成绩管理逻辑封装在 GradeManager 类中,可以使得代码更加模块化和易于维护。
import java.util.Map; // 导入Map接口,用于存储键值对
import java.util.NoSuchElementException; // 导入NoSuchElementException类,用于处理查找元素不存在的情况
import java.util.TreeMap; // 导入TreeMap类,用于实现一个有序的Map集合

class GradeManager {
    private Map<String, Integer> studentGrades; // 声明一个Map类型的私有变量,用于存储学生学号和成绩的映射关系

    public GradeManager() { // 构造方法,用于初始化GradeManager对象
        studentGrades = new TreeMap<>(); // 创建一个TreeMap实例,确保学号按照自然顺序排序
        // 初始化HashMap,添加一些示例数据
        studentGrades.put("A001", 85); // 添加学号和成绩到Map中
        studentGrades.put("A002", 92); // 添加学号和成绩到Map中
        studentGrades.put("A003", 78); // 添加学号和成绩到Map中
    }

    public void addGrade(String studentId, int grade) { // 添加成绩的方法
        if (studentGrades.containsKey(studentId)) { // 检查学号是否已存在
            throw new IllegalArgumentException("学号 " + studentId + " 已存在。"); // 如果存在,抛出异常
        } else {
            studentGrades.put(studentId, grade); // 如果不存在,添加学号和成绩到Map中
        }
    }

    public void deleteGrade(String studentId) { // 删除成绩的方法
        if (studentGrades.containsKey(studentId)) { // 检查学号是否存在于Map中
            studentGrades.remove(studentId); // 如果存在,从Map中移除该学号的成绩
        } else {
            throw new NoSuchElementException("学号 " + studentId + " 不存在。"); // 如果不存在,抛出异常
        }
    }

    public void updateGrade(String studentId, int grade) { // 更新成绩的方法
        if (studentGrades.containsKey(studentId)) { // 检查学号是否存在于Map中
            studentGrades.put(studentId, grade); // 如果存在,更新Map中对应学号的成绩
        } else {
            throw new NoSuchElementException("学号 " + studentId + " 不存在。"); // 如果不存在,抛出异常
        }
    }

    public Integer queryGrade(String studentId) { // 查询成绩的方法
        return studentGrades.get(studentId); // 返回Map中对应学号的成绩,如果不存在则返回null
    }

    public String getAllGrades() { // 获取所有成绩的方法
        StringBuilder allGradesText = new StringBuilder(); // 创建一个StringBuilder对象,用于构建成绩文本
        for (Map.Entry<String, Integer> entry : studentGrades.entrySet()) { // 遍历Map中的所有条目
            allGradesText.append("学号: ").append(entry.getKey()) // 添加学号到StringBuilder
                    .append(" 的成绩是: ").append(entry.getValue()) // 添加成绩到StringBuilder
                    .append("\n"); // 添加换行符到StringBuilder
        }
        return allGradesText.toString(); // 返回构建好的成绩文本
    }
}

(3)GradeQuerySystem

  • 负责构建用户界面,包括文本框、按钮和标签等组件,以及处理按钮点击事件,调用类的相关方法来执行GradeManager成绩管理操作。
import javax.swing.*; // 导入Swing库,用于创建图形用户界面
import java.awt.*; // 导入AWT库,用于图形界面设计
import java.util.NoSuchElementException; // 导入NoSuchElementException类,用于处理查找元素不存在的情况

class GradeQuerySystem extends JFrame { // 创建一个名为GradeQuerySystem的类,继承自JFrame类
    private JTextField studentIdField; // 声明一个文本框,用于输入学生学号
    private JTextField gradeField; // 声明一个文本框,用于输入学生成绩
    private JLabel resultLabel; // 声明一个标签,用于显示操作结果
    private JTextArea allGradesArea; // 声明一个文本区域,用于显示所有学生成绩
    private GradeManager gradeManager; // 声明一个GradeManager对象,用于管理成绩

    public GradeQuerySystem() { // 构造方法,用于初始化GradeQuerySystem对象
        gradeManager = new GradeManager(); // 创建GradeManager实例
        createUI(); // 调用方法创建用户界面
    }

    private void createUI() { // 创建用户界面的方法
        setTitle("成绩管理系统"); // 设置窗口标题
        setSize(500, 400); // 设置窗口大小
        setLocationRelativeTo(null); // 设置窗口相对于屏幕居中
        setDefaultCloseOperation(EXIT_ON_CLOSE); // 设置窗口关闭操作
        setLayout(new FlowLayout()); // 设置布局管理器为FlowLayout

        add(new JLabel("学号:")); // 添加标签提示输入学号
        studentIdField = new JTextField(15); // 创建文本框并设置大小
        add(studentIdField); // 将文本框添加到窗口

        add(new JLabel("成绩:")); // 添加标签提示输入成绩
        gradeField = new JTextField(5); // 创建文本框并设置大小
        add(gradeField); // 将文本框添加到窗口

        JButton addButton = new JButton("录入"); // 创建一个录入按钮
        addButton.addActionListener(e -> addGrade()); // 为按钮添加事件监听器
        add(addButton); // 将按钮添加到窗口

        JButton deleteButton = new JButton("删除"); // 创建一个删除按钮
        deleteButton.addActionListener(e -> deleteGrade()); // 为按钮添加事件监听器
        add(deleteButton); // 将按钮添加到窗口

        JButton updateButton = new JButton("修改"); // 创建一个修改按钮
        updateButton.addActionListener(e -> updateGrade()); // 为按钮添加事件监听器
        add(updateButton); // 将按钮添加到窗口

        JButton queryButton = new JButton("查询"); // 创建一个查询按钮
        queryButton.addActionListener(e -> queryGrade()); // 为按钮添加事件监听器
        add(queryButton); // 将按钮添加到窗口

        JButton showAllButton = new JButton("显示所有成绩"); // 创建一个显示所有成绩按钮
        showAllButton.addActionListener(e -> showAllGrades()); // 为按钮添加事件监听器
        add(showAllButton); // 将按钮添加到窗口

        allGradesArea = new JTextArea(10, 40); // 创建文本区域以显示所有成绩
        allGradesArea.setEditable(false); // 设置文本区域不可编辑
        add(new JScrollPane(allGradesArea)); // 将文本区域添加到滚动窗格中

        resultLabel = new JLabel("操作结果将显示在这里"); // 创建一个标签用于显示操作结果
        add(resultLabel); // 将标签添加到窗口
    }

    private void addGrade() { // 录入成绩的方法
        try {
            String studentId = studentIdField.getText(); // 获取输入的学号
            int grade = Integer.parseInt(gradeField.getText()); // 获取输入的成绩并转换为整数
            gradeManager.addGrade(studentId, grade); // 调用GradeManager的方法添加成绩
            resultLabel.setText("学号 " + studentId + " 的成绩已录入。"); // 显示录入成功的消息
        } catch (NumberFormatException ex) { // 捕获转换成绩时的异常
            resultLabel.setText("请输入有效的成绩。"); // 显示错误消息
        } catch (IllegalArgumentException ex) { // 捕获学号已存在的异常
            resultLabel.setText(ex.getMessage()); // 显示异常信息
        }
    }

    private void deleteGrade() { // 删除成绩的方法
        try {
            String studentId = studentIdField.getText(); // 获取输入的学号
            gradeManager.deleteGrade(studentId); // 调用GradeManager的方法删除成绩
            resultLabel.setText("学号 " + studentId + " 的成绩已删除。"); // 显示删除成功的消息
        } catch (NoSuchElementException ex) { // 捕获学号不存在的异常
            resultLabel.setText(ex.getMessage()); // 显示异常信息
        }
    }


    private void updateGrade() { // 更新成绩的方法
        try {
            String studentId = studentIdField.getText(); // 获取输入的学号
            int grade = Integer.parseInt(gradeField.getText()); // 获取输入的成绩并转换为整数
            gradeManager.updateGrade(studentId, grade); // 调用GradeManager的方法更新成绩
            resultLabel.setText("学号 " + studentId + " 的成绩已更新。"); // 显示更新成功的消息
        } catch (NumberFormatException ex) { // 捕获转换成绩时的异常
            resultLabel.setText("请输入有效的成绩。"); // 显示错误消息
        } catch (NoSuchElementException ex) { // 捕获学号不存在的异常
            resultLabel.setText(ex.getMessage()); // 显示异常信息
        }
    }

    private void queryGrade() { // 查询成绩的方法
        String studentId = studentIdField.getText(); // 获取输入的学号
        Integer grade = gradeManager.queryGrade(studentId); // 调用GradeManager的方法查询成绩
        if (grade != null) { // 如果成绩存在
            resultLabel.setText("学号 " + studentId + " 的成绩是: " + grade); // 显示成绩
        } else { // 如果成绩不存在
            resultLabel.setText("未找到学号为 " + studentId + " 的学生。"); // 显示错误消息
        }
    }

    private void showAllGrades() { // 显示所有成绩的方法
        allGradesArea.setText(gradeManager.getAllGrades()); // 调用GradeManager的方法获取所有成绩文本
    }
}

(4)Main

  • 是程序的入口点,负责启动应用程序,创建 GradeQuerySystem 实例,并设置窗口可见。
import javax.swing.*;

public class Main {
    public static void main(String[] args) { // 主方法,程序的入口点
        SwingUtilities.invokeLater(() -> {// 使用SwingUtilities.invokeLater来确保GUI的创建和更新在事件调度线程中执行
            GradeQuerySystem frame = new GradeQuerySystem(); // 创建GradeQuerySystem的实例
            frame.setVisible(true); // 设置窗口可见
        });
    }
}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值