Java 四则运算练习程序 - 自动批改并记录成绩
以下是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
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;
}
}
原文地址: https://www.cveoy.top/t/topic/ozjp 著作权归作者所有。请勿转载和采集!