Java Swing 课程设计 —— 小学生算术练习软件(附源码+可执行JAR)

项目简介

一个基于 Java Swing 的图形化算术练习工具,面向小学生设计,支持四则运算、自定义难度、随机出题和即时反馈。

开发环境:JDK 21 + Java Swing,无任何第三方依赖,纯原生 Java 实现。

功能展示

1. 主界面

在这里插入图片描述

答题流程:输入答案 → 按 Enter 键 → 即时判断对错 → 点击「下一题」继续。

2. 答对反馈

**【插入图片处 2】**

输入正确答案后的截图,展示绿色 ✓ 提示

3. 答错反馈

**【插入图片处 3】**

输入错误答案后的截图,展示红色 ✗ 及正确答案

4. 难度设置

**【插入图片处 4】**

难度设置弹窗截图,展示数值范围调节器、运算类型复选框、操作数类型复选框

5. 分数运算

**【插入图片处 5】**

分数题目的截图(如 3/4 + 1/2 = ?)及结果


功能特性

功能 说明
随机出题 每次生成不重复的题目,使用 java.util.Random
四则运算 加法、减法、乘法、除法,可在设置中独立开关
三种操作数 整数、小数(1 位精度)、分数(GCD 自动化简)
难度自定义 数值范围(1~1000)、运算类型、操作数类型自由组合
按键判题 输入框按 Enter 键即时提交判断
即时反馈 绿色 ✓ 正确,红色 ✗ 显示正确答案
成绩统计 底部状态栏实时显示已答题数、正确数、正确率

项目结构

src/
├── Main.java                      # 程序入口(EDT 启动)
├── enums/
│   ├── Operation.java             # 运算枚举:+ - × ÷
│   └── NumberType.java            # 操作数类型枚举:整数/小数/分数
├── logic/                         # 业务逻辑(零 Swing 依赖,可独立测试)
│   ├── Question.java              # 题目数据类(record)
│   ├── Difficulty.java            # 难度配置(record)
│   ├── QuestionGenerator.java     # 随机题目生成核心
│   ├── AnswerChecker.java         # 答案解析与校验
│   └── ScoreTracker.java          # 答题统计
└── ui/                            # Swing 界面层
    ├── MainFrame.java             # 主窗口(650×450,不可拉伸)
    ├── QuizPanel.java             # 答题面板
    ├── ScorePanel.java            # 底部状态栏
    └── SettingsDialog.java        # 难度设置弹窗

架构设计

采用 MVC + 策略模式,UI 与业务逻辑严格分离:

  • logic/ 包完全不依赖 javax.swingjava.awt,可脱离界面独立测试
  • QuestionGenerator 依据 Difficulty 配置随机选择运算类型和操作数类型,通过 GCD 算法化简分数
  • AnswerChecker 支持解析整数(5)、小数(2.5)、分数(3/4)三种输入格式,容差 1e-9
  • UI 层所有 Swing 操作确保在 EDT 线程执行,QuizPanel 通过 PropertyChangeEvent 通知 ScorePanel 更新
用户输入 → Enter 键触发
    → AnswerChecker.check(input, question)
    → ScoreTracker.recordAnswer(correct)
    → QuizPanel 更新反馈 + ScorePanel 更新统计

核心代码片段

随机题目生成(QuestionGenerator)

public Question generate() {
    Question q;
    do {
        q = tryGenerate();          // 随机选择运算 + 操作数类型
    } while (q.equals(lastQuestion)); // 避免连续重复
    lastQuestion = q;
    return q;
}

答案校验(AnswerChecker)

public static double parse(String input) {
    if (input.contains("/")) {          // 分数格式 3/4
        String[] parts = input.split("/");
        double num = Double.parseDouble(parts[0]);
        double den = Double.parseDouble(parts[1]);
        if (den == 0) throw new NumberFormatException("分母不能为零");
        return num / den;
    }
    return Double.parseDouble(input);   // 整数或小数
}

分数化简(GCD 算法)

private int[] simplify(int num, int den) {
    if (num == 0) return new int[]{0, 1};
    int g = gcd(Math.abs(num), Math.abs(den));
    return new int[]{num / g, den / g};
}

private int gcd(int a, int b) {
    while (b != 0) { int t = b; b = a % b; a = t; }
    return a;
}

Java Swing 算术练习软件 - 完整源码+可执行JAR
算术练习软件 - 可执行JAR(双击运行)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐