【java】小学生数学练习题目生成系统

简介: 小学生数学练习题目生成系统

效果图:
image.png

image.png

image.png

代码:

package com.example.dingtalk.question;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

/***
 * 小学计算题生成
 */
public class MathExerciseGenerator extends JFrame {
   
   
    private JComboBox<String> operationComboBox;
    private JButton generateButton;
    private JButton evaluateButton;
    private JButton showAnswersButton;
    private JTextArea questionArea;
    private JTextField answerField;

    public MathExerciseGenerator() {
   
   
        super("小学生数学练习题目生成系统");
        initComponents();
    }

    private void initComponents() {
   
   
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        operationComboBox = new JComboBox<>(new String[]{
   
   "10以内加法", "10以内减法", "20以内加法", "20以内减法", "100以内加法", "100以内减法", "100以内乘法", "100以内除法"});
        generateButton = new JButton("出题");
        evaluateButton = new JButton("评卷");
        showAnswersButton = new JButton("答案");
        questionArea = new JTextArea(20, 40);
        answerField = new JTextField(10);

        JPanel topPanel = new JPanel();
        topPanel.add(new JLabel("选择题目类型: "));
        topPanel.add(operationComboBox);
        topPanel.add(generateButton);
        topPanel.add(evaluateButton);
        topPanel.add(showAnswersButton);

        add(topPanel, BorderLayout.NORTH);
        add(new JScrollPane(questionArea), BorderLayout.CENTER);
        add(answerField, BorderLayout.SOUTH);

        generateButton.addActionListener(new ActionListener() {
   
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
   
                generateQuestions();
            }
        });

        evaluateButton.addActionListener(new ActionListener() {
   
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
   
                evaluateAnswers();
            }
        });

        showAnswersButton.addActionListener(new ActionListener() {
   
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
   
                showAnswers();
            }
        });

        pack();
        setLocationRelativeTo(null);
    }

    private void generateQuestions() {
   
   
        int numQuestions = 20;
        String operation = (String) operationComboBox.getSelectedItem();
        StringBuilder questions = new StringBuilder();
        StringBuilder answers = new StringBuilder();  // 用于存储答案

        Random random = new Random();

        for (int i = 0; i < numQuestions; i++) {
   
   
            int operand1 = random.nextInt(100) + 1;
            int operand2 = random.nextInt(100) + 1;
            String question = "";

            switch (operation) {
   
   
                case "10以内加法":
                    operand1 = random.nextInt(10) + 1;
                    operand2 = random.nextInt(10) + 1;
                    question = operand1 + " + " + operand2 + " = ";
                    break;
                case "10以内减法":
                    operand1 = random.nextInt(10) + 1;
                    operand2 = random.nextInt(operand1) + 1;
                    question = operand1 + " - " + operand2 + " = ";
                    break;
                case "20以内加法":
                    operand1 = random.nextInt(20) + 1;
                    operand2 = random.nextInt(20) + 1;
                    question = operand1 + " + " + operand2 + " = ";
                    break;
                case "20以内减法":
                    operand1 = random.nextInt(20) + 1;
                    operand2 = random.nextInt(operand1) + 1;
                    question = operand1 + " - " + operand2 + " = ";
                    break;
                case "100以内加法":
                    operand1 = random.nextInt(100) + 1;
                    operand2 = random.nextInt(100) + 1;
                    question = operand1 + " + " + operand2 + " = ";
                    break;
                case "100以内减法":
                    operand1 = random.nextInt(100) + 1;
                    operand2 = random.nextInt(operand1) + 1;
                    question = operand1 + " - " + operand2 + " = ";
                    break;
                case "100以内乘法":
                    operand1 = random.nextInt(100) + 1;
                    operand2 = random.nextInt(100) + 1;
                    question = operand1 + " * " + operand2 + " = ";
                    break;
                case "100以内除法":
                    operand2 = random.nextInt(100) + 1;
                    operand1 = operand2 * (random.nextInt(10) + 1);
                    question = operand1 + " / " + operand2 + " = ";
                    break;
                default:
                    break;
            }

            questions.append(question).append("\n");

            // 生成并附加答案
            int result = calculateResult(operand1 + " " + getOperationSymbol(operation) + " " + operand2);
            answers.append(result).append("\n");
        }
        questionArea.setText(questions.toString());
        answerField.setText(answers.toString());  // 将答案设置到答案文本框
    }
    // 获取操作符
    private String getOperationSymbol(String operation) {
   
   
        switch (operation) {
   
   
            case "10以内加法":
            case "20以内加法":
            case "100以内加法":
                return "+";
            case "10以内减法":
            case "20以内减法":
            case "100以内减法":
                return "-";
            case "100以内乘法":
                return "*";
            case "100以内除法":
                return "/";
            default:
                return "";
        }
    }

    private void evaluateAnswers() {
   
   
        String[] answers = questionArea.getText().split("\n");
        String[] userResponses = answerField.getText().split(" ");
        StringBuilder evaluation = new StringBuilder();

        for (int i = 0; i < answers.length; i++) {
   
   
            if (i < userResponses.length) {
   
   
                String answer = extractAnswer(answers[i].trim()); // 从完整表达式中提取答案部分
                String userAnswer = userResponses[i].trim();
                String result = answer.equals(userAnswer) ? "√" : "x";
                evaluation.append(result).append("\n");
            }
        }

        JOptionPane.showMessageDialog(this, evaluation.toString(), "评卷结果", JOptionPane.INFORMATION_MESSAGE);
    }

    // 从完整表达式中提取答案部分
    private String extractAnswer(String fullExpression) {
   
   
        // 以等号分割表达式,并取第二部分作为答案
        String[] parts = fullExpression.split("=");
        if (parts.length == 2) {
   
   
            return parts[1].trim();
        } else {
   
   
            return "";
        }
    }


    private void showAnswers() {
   
   
        String[] questions = questionArea.getText().split("\n");
        StringBuilder correctAnswers = new StringBuilder();

        for (String question : questions) {
   
   
            String[] parts = question.split("=");

            if (parts.length == 2) {
   
   
                String expression = parts[0].trim();
                int result = calculateResult(expression);
                correctAnswers.append(expression).append(" = ").append(result).append("\n");
            }
        }

        JOptionPane.showMessageDialog(this, correctAnswers.toString(), "正确答案", JOptionPane.INFORMATION_MESSAGE);
    }

    private int calculateResult(String expression) {
   
   
        try {
   
   
            // 使用 ScriptEngineManager 计算表达式
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("js");
            return (int) engine.eval(expression);
        } catch (ScriptException e) {
   
   
            e.printStackTrace();
        }

        return 0;
    }


    public static void main(String[] args) {
   
   
        SwingUtilities.invokeLater(new Runnable() {
   
   
            @Override
            public void run() {
   
   
                new MathExerciseGenerator().setVisible(true);
            }
        });
    }
}
AI 代码解读
目录
打赏
0
0
0
0
18
分享
相关文章
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
173 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
109 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
85 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
74 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
92 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
24 2
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
86 5
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
71 6
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
63 7
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等