以下是Java代码的示例:

import java.awt.; import java.awt.event.; import javax.swing.*;

public class ArithmeticQuiz extends JFrame implements ActionListener { private JLabel titleLabel; private JLabel typeLabel; private JComboBox typeComboBox; private JLabel sizeLabel; private JTextField sizeTextField; private JLabel countLabel; private JTextField countTextField; private JButton generateButton; private JLabel scoreLabel; private JTextField scoreTextField; private JLabel percentLabel; private JTextField percentTextField; private JButton submitButton; private JTextArea questionTextArea; private JScrollPane questionScrollPane; private JTextArea answerTextArea; private JScrollPane answerScrollPane; private JButton checkButton;

public ArithmeticQuiz() {
    titleLabel = new JLabel('四则运算练习');
    titleLabel.setFont(new Font('Dialog', Font.BOLD, 24));
    titleLabel.setHorizontalAlignment(JLabel.CENTER);
    typeLabel = new JLabel('题目类型:');
    typeComboBox = new JComboBox<String>(new String[]{'加法', '减法', '乘法', '除法'});
    sizeLabel = new JLabel('数据大小:');
    sizeTextField = new JTextField('10');
    countLabel = new JLabel('题目数量:');
    countTextField = new JTextField('10');
    generateButton = new JButton('生成题目');
    generateButton.addActionListener(this);
    scoreLabel = new JLabel('得分:');
    scoreTextField = new JTextField();
    scoreTextField.setEditable(false);
    percentLabel = new JLabel('正确率:');
    percentTextField = new JTextField();
    percentTextField.setEditable(false);
    submitButton = new JButton('提交答案');
    submitButton.addActionListener(this);
    questionTextArea = new JTextArea();
    questionTextArea.setEditable(false);
    questionScrollPane = new JScrollPane(questionTextArea);
    answerTextArea = new JTextArea();
    answerScrollPane = new JScrollPane(answerTextArea);
    checkButton = new JButton('批改答案');
    checkButton.addActionListener(this);
    
    JPanel topPanel = new JPanel(new GridLayout(3, 2, 5, 5));
    topPanel.add(typeLabel);
    topPanel.add(typeComboBox);
    topPanel.add(sizeLabel);
    topPanel.add(sizeTextField);
    topPanel.add(countLabel);
    topPanel.add(countTextField);
    JPanel middlePanel = new JPanel(new BorderLayout());
    middlePanel.add(generateButton, BorderLayout.CENTER);
    JPanel bottomPanel = new JPanel(new GridLayout(2, 4, 5, 5));
    bottomPanel.add(scoreLabel);
    bottomPanel.add(scoreTextField);
    bottomPanel.add(percentLabel);
    bottomPanel.add(percentTextField);
    bottomPanel.add(submitButton);
    bottomPanel.add(checkButton);
    JPanel leftPanel = new JPanel(new BorderLayout());
    leftPanel.add(questionScrollPane, BorderLayout.CENTER);
    leftPanel.add(topPanel, BorderLayout.NORTH);
    leftPanel.add(middlePanel, BorderLayout.SOUTH);
    JPanel rightPanel = new JPanel(new BorderLayout());
    rightPanel.add(answerScrollPane, BorderLayout.CENTER);
    rightPanel.add(bottomPanel, BorderLayout.SOUTH);
    JPanel mainPanel = new JPanel(new GridLayout(1, 2, 5, 5));
    mainPanel.add(leftPanel);
    mainPanel.add(rightPanel);
    setContentPane(mainPanel);
    pack();
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
    ArithmeticQuiz quiz = new ArithmeticQuiz();
    quiz.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if (source == generateButton) {
        int type = typeComboBox.getSelectedIndex();
        int size = Integer.parseInt(sizeTextField.getText());
        int count = Integer.parseInt(countTextField.getText());
        String[] questions = generateQuestions(type, size, count);
        questionTextArea.setText(String.join('

', questions)); answerTextArea.setText(''); scoreTextField.setText(''); percentTextField.setText(''); } else if (source == submitButton) { String[] questions = questionTextArea.getText().split(' '); String[] answers = answerTextArea.getText().split(' '); int[] scores = new int[questions.length]; for (int i = 0; i < questions.length; i++) { int index = questions[i].lastIndexOf('='); int expected = Integer.parseInt(questions[i].substring(index + 1).trim()); int actual = Integer.parseInt(answers[i].trim()); if (actual == expected) { scores[i] = 1; } else { scores[i] = 0; } } int score = 0; for (int s : scores) { score += s; } double percent = (double) score / questions.length * 100; scoreTextField.setText(String.valueOf(score)); percentTextField.setText(String.format('%.2f%%', percent)); } else if (source == checkButton) { String[] questions = questionTextArea.getText().split(' '); String[] answers = answerTextArea.getText().split(' '); int[] scores = new int[questions.length]; for (int i = 0; i < questions.length; i++) { int index = questions[i].lastIndexOf('='); int expected = Integer.parseInt(questions[i].substring(index + 1).trim()); int actual = Integer.parseInt(answers[i].trim()); if (actual == expected) { scores[i] = 1; } else { scores[i] = 0; } } StringBuilder sb = new StringBuilder(); for (int i = 0; i < questions.length; i++) { if (scores[i] == 0) { sb.append(questions[i]).append(' '); sb.append('你的答案是:').append(answers[i]).append(' '); sb.append('正确答案是:').append(questions[i].substring(questions[i].lastIndexOf('=') + 1)).append(' '); } } if (sb.length() == 0) { sb.append('全部答对,太棒了!'); } JOptionPane.showMessageDialog(this, sb.toString(), '批改结果', JOptionPane.INFORMATION_MESSAGE); } }

private String[] generateQuestions(int type, int size, int count) {
    String[] questions = new String[count];
    for (int i = 0; i < count; i++) {
        int a = (int) (Math.random() * size) + 1;
        int b = (int) (Math.random() * size) + 1;
        String operator;
        int expected;
        switch (type) {
            case 0: // addition
                operator = '+';
                expected = a + b;
                break;
            case 1: // subtraction
                if (a < b) {
                    int t = a;
                    a = b;
                    b = t;
                }
                operator = '-';
                expected = a - b;
                break;
            case 2: // multiplication
                operator = '*';
                expected = a * b;
                break;
            case 3: // division
                b = (int) (Math.random() * (size - 1)) + 1;
                a = b * (int) (Math.random() * size) + b;
                operator = '/';
                expected = a / b;
                break;
            default:
                operator = '';
                expected = 0;
                break;
        }
        questions[i] = String.format('%d %s %d = ', a, operator, b);
    }
    return questions;
}

}

Java 四则运算练习程序 - 自动批改并记录成绩

原文地址: https://www.cveoy.top/t/topic/ozjp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录