Java口算练习软件(随机生成10道100以内的数学练习题)

您所在的位置:网站首页 100以内加法和减法练习题 Java口算练习软件(随机生成10道100以内的数学练习题)

Java口算练习软件(随机生成10道100以内的数学练习题)

2023-12-08 11:44| 来源: 网络整理| 查看: 265

Java口算练习软件 使用Java编写口算练习软件 实现以下功能点: 1、随机生成10道100以内的加减法练习题 2、设计GUI界面(包含“生成题目”、“上一题”、“检查答案”、“导出结果”、“导入题目”等按钮)

在这里插入图片描述 这是一个Java程序,实现了一个口算练习软件。该软件提供以下功能:

点击“生成题目”按钮可以随机生成一定数量的加减法题目;可以在文本框中输入答案并检查是否正确;点击“上一题”和“下一题”按钮可以切换当前题目;可以导出做题结果到文本文件;可以从文本文件中导入题目。

该程序由一个ArithmeticPractice类和三个子类AdditionProblem、SubtractionProblem和ArithmeticProblem组成。ArithmeticProblem是一个抽象类,包含两个整数a和b,以及getAnswer()和checkAnswer()方法。AdditionProblem和SubtractionProblem分别代表加法和减法问题,它们继承自ArithmeticProblem并重写了getAnswer()和checkAnswer()方法。ResultsExporter和ResultsImporter分别用于将做题结果导出到文本文件和从文本文件中导入题目。

在ArithmeticPractice中,定义了界面元素和事件监听器,实现了相应的操作。JPanel、JLabel、JButton等Swing组件被用来构建用户界面。在ArithmeticPractice的构造函数中,创建了各个组件,并将它们添加到主面板中。点击按钮后,actionPerformed()方法会被调用,根据参数判断需要执行哪些操作。

public ArithmeticPractice() { super("口算练习软件"); equationLabel = new JLabel(); answerField = new JTextField(); nextButton = new JButton("下一题"); prevButton = new JButton("上一题"); checkButton = new JButton("检查答案"); exportButton = new JButton("导出结果"); importButton = new JButton("导入题目"); generateButton = new JButton("生成题目"); // 初始化生成题目按钮 JPanel mainPanel = new JPanel(new BorderLayout(10, 10)); mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); JPanel equationPanel = new JPanel(new GridLayout(2, 1, 5, 5)); equationPanel.add(equationLabel); equationPanel.add(answerField); JPanel buttonPanel = new JPanel(new GridLayout(1, 5, 5, 5)); buttonPanel.add(prevButton); buttonPanel.add(nextButton); buttonPanel.add(checkButton); buttonPanel.add(exportButton); buttonPanel.add(importButton); mainPanel.add(equationPanel, BorderLayout.CENTER); mainPanel.add(buttonPanel, BorderLayout.SOUTH); mainPanel.add(generateButton, BorderLayout.NORTH); // 将生成题目按钮添加到面板中 nextButton.addActionListener(this); prevButton.addActionListener(this); checkButton.addActionListener(this); exportButton.addActionListener(this); importButton.addActionListener(this); generateButton.addActionListener(this); // 添加生成题目按钮的事件监听器 fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt")); setContentPane(mainPanel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 200); // 增加了一个生成题目按钮后需要调整窗口大小 setVisible(true); }

在showProblem()方法中,根据currentProblemIndex获取当前问题并在equationLabel中显示题目,同时将answerField清空,并根据当前问题的索引设置prevButton和nextButton是否可用。在generateProblems()方法中,使用随机数生成一定数量的加减法题目并存储到problems列表中,同时更新currentProblemIndex,并调用showProblem()方法显示第一个问题。

void showProblem() { ArithmeticProblem problem = problems.get(currentProblemIndex); equationLabel.setText(problem.toString()); answerField.setText(""); prevButton.setEnabled(currentProblemIndex > 0); nextButton.setEnabled(currentProblemIndex int answer = Integer.parseInt(answerField.getText()); if (problem.checkAnswer(answer)) { score++; JOptionPane.showMessageDialog(this, "回答正确!\n得分:" + score, "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "回答错误,正确答案是:" + problem.getAnswer(), "提示", JOptionPane.WARNING_MESSAGE); } } catch (NumberFormatException e) { JOptionPane.showMessageDialog(this, "无效的答案!", "错误", JOptionPane.ERROR_MESSAGE); } }

在exportResults()方法中,先判断是否有结果可供导出,然后弹出文件选择器,将选择的文件路径作为参数传递给ResultsExporter.exportToTextFile()方法,该方法将做题结果写入指定的文本文件中。如果操作过程中发生异常,则弹出无法写入文件的错误提示框。

void exportResults() { if (problems == null || problems.isEmpty()) { JOptionPane.showMessageDialog(this, "还没有做题!"); return; } int result = JOptionPane.showConfirmDialog(this, "确定导出结果吗?", "确认", JOptionPane.YES_NO_OPTION); if (result != JOptionPane.YES_OPTION) { return; } if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getAbsolutePath(); Exporter exporter = new Exporter(filename); exporter.export(problems); } }

在importProblems()方法中,先弹出文件选择器,选择要导入的文件后将其路径传递给ResultsImporter.importFromTextFile()方法,该方法解析文本文件中的题目并返回ArithmeticProblem对象组成的列表。如果列表为空,则弹出没有可导入的题目的提示窗口;否则,将导入的题目存储到problems中,重置currentProblemIndex,然后调用showProblem()方法显示第一个问题。

void importProblems() { int result = JOptionPane.showConfirmDialog(this, "导入新的题目会清空当前所有题目,确定继续吗?", "确认", JOptionPane.YES_NO_OPTION); if (result != JOptionPane.YES_OPTION) { return; } if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getAbsolutePath(); Importer importer = new Importer(filename); problems = importer.importProblems(); if (problems != null && !problems.isEmpty()) { currentProblemIndex = 0; showProblem(); } } }

在main()方法中,使用EventQueue.invokeLater()方法将ArithmeticPractice类的实例化操作放入事件队列中,以便在GUI线程中执行。

public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { new ArithmeticPractice(); } }); }

需要源代码的可以后台踢我~ 看见会及时回复的~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3