项目一:小学生算术练习系统
1.1 需求分析
支持 + − × ÷ 四种运算,操作数涵盖整数、小数、分数
四种难度梯度:简单 → 中等 → 困难 → 专家
随机出题、按键提交、实时反馈、错题回顾
计时计分,进度条显示
1.2 架构设计
采用 CardLayout 实现三页切换(欢迎页 → 游戏页 → 结果页),避免多窗口跳转带来的状态同步问题。
核心类职责:
Fraction:封装分数的加减乘除与约分,支持带分数解析
Question:策略模式生成不同难度的题目
GameUI:界面与逻辑解耦,专注事件分发
ArithmeticGame:程序入口
1.3 程序界面
屏幕截图 2026-07-01 205846
屏幕截图 2026-07-01 205925
屏幕截图 2026-07-01 210215
1.4 完整代码
Fraction.java
import java.util.Objects;
/**
分数类:支持加减乘除、约分、带分数/假分数转换
*/
public class Fraction {
private final int numerator;
private final int denominator;public Fraction(int numerator, int denominator) {
if (denominator == 0) {
throw new IllegalArgumentException(“分母不能为零”);
}
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
int gcd = gcd(Math.abs(numerator), Math.abs(denominator));
this.numerator = numerator / gcd;
this.denominator = denominator / gcd;
}public Fraction(int whole) {
this(whole, 1);
}private int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}public Fraction add(Fraction other) {
int num = this.numerator * other.denominator + other.numerator * this.denominator;
int den = this.denominator * other.denominator;
return new Fraction(num, den);
}public Fraction subtract(Fraction other) {
int num = this.numerator * other.denominator - other.numerator * this.denominator;
int den = this.denominator * other.denominator;
return new Fraction(num, den);
}public Fraction multiply(Fraction other) {
return new Fraction(this.numerator * other.numerator, this.denominator * other.denominator);
}public Fraction divide(Fraction other) {
if (other.numerator == 0) throw new ArithmeticException(“除以零”);
return new Fraction(this.numerator * other.denominator, this.denominator * other.numerator);
}public double toDouble() {
return (double) numerator / denominator;
}@Override
public String toString() {
if (denominator == 1) return String.valueOf(numerator);
if (Math.abs(numerator) > denominator) {
int whole = numerator / denominator;
int rem = Math.abs(numerator % denominator);
if (rem == 0) return String.valueOf(whole);
return whole + “'” + rem + “/” + denominator;
}
return numerator + “/” + denominator;
}@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Fraction)) return false;
Fraction other = (Fraction) o;
return this.numerator == other.numerator && this.denominator == other.denominator;
}@Override
public int hashCode() {
return Objects.hash(numerator, denominator);
}public int getNumerator() { return numerator; }
public int getDenominator() { return denominator; }
}