用java写 1.随机生成 10 道数学计算题,两个整数的四则运算;被减数一定要大于减 数,除数不能为 0,用户输入答案,正确给出提示,加入总分;不正确,给出提示。10 道题做完给出最后总分和等级(小于 60 为不及格,60-70 为及格,70-80 为中, 80-90 为良,90-100 为优)。2.界面要求: ① 能够正确显示 10 道测试题,每道题提供输入框供考生输入答案; ② 有"提交答案"按钮,当点击提交答案按钮时,给出每道题的答案,并 且对比考生的答案,显示正确或者错误信息; ③ 当点击提交答案按钮时,还统计考生的做题总分,本次考试获得的等级; ④ 有"重做"按钮,点击之后清空答案和做题记录,考生可重新开始作答; ⑤ 有"另做一套"题的按钮,点击之后重新出一套不一样的题; ⑥ 有"查看记录"按钮,点击按钮可查看考生的做题记录; ⑦ 有"退出测试"按钮,点击按钮后可退出整个测试系统。
时间: 2023-11-23 22:06:49 浏览: 41
好的,这是一个比较完整的Java项目,需要用到Swing GUI库实现界面。我会提供代码框架和思路,您可以根据自己的理解和需求进行修改和完善。
首先,我们需要定义一个题目类,包含两个整数和运算符:
```java
public class Question {
private int num1;
private int num2;
private char operator;
public Question(int num1, int num2, char operator) {
this.num1 = num1;
this.num2 = num2;
this.operator = operator;
}
public int getNum1() {
return num1;
}
public int getNum2() {
return num2;
}
public char getOperator() {
return operator;
}
public int getAnswer() {
int answer = 0;
switch (operator) {
case '+':
answer = num1 + num2;
break;
case '-':
answer = num1 - num2;
break;
case '*':
answer = num1 * num2;
break;
case '/':
answer = num1 / num2;
break;
}
return answer;
}
}
```
然后,我们需要在GUI中显示10个随机生成的题目,并让用户输入答案。这里使用JPanel和JTextField来显示题目和输入答案:
```java
public class TestPanel extends JPanel {
private List<Question> questions;
private List<JTextField> answerFields;
private JLabel[] questionLabels;
public TestPanel(List<Question> questions) {
this.questions = questions;
answerFields = new ArrayList<>();
questionLabels = new JLabel[10];
setLayout(new GridLayout(10, 1));
for (int i = 0; i < 10; i++) {
Question question = questions.get(i);
JLabel label = new JLabel(question.getNum1() + " " + question.getOperator() + " " + question.getNum2() + " = ");
JTextField answerField = new JTextField(5);
answerFields.add(answerField);
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
panel.add(label);
panel.add(answerField);
questionLabels[i] = label;
add(panel);
}
}
public List<Integer> getAnswers() {
List<Integer> answers = new ArrayList<>();
for (JTextField answerField : answerFields) {
String answerStr = answerField.getText().trim();
int answer = answerStr.isEmpty() ? 0 : Integer.parseInt(answerStr);
answers.add(answer);
}
return answers;
}
public void showAnswers(List<Integer> answers) {
for (int i = 0; i < 10; i++) {
Question question = questions.get(i);
JLabel label = questionLabels[i];
int answer = question.getAnswer();
int userAnswer = answers.get(i);
if (userAnswer == answer) {
label.setText(question.getNum1() + " " + question.getOperator() + " " + question.getNum2() + " = " + userAnswer + " (正确)");
} else {
label.setText(question.getNum1() + " " + question.getOperator() + " " + question.getNum2() + " = " + userAnswer + " (错误,正确答案为" + answer + ")");
}
}
}
}
```
接下来,我们需要在GUI中添加按钮,实现提交答案、重做、另做一套题、查看记录和退出测试的功能。
```java
public class TestFrame extends JFrame {
private TestPanel testPanel;
private JButton submitButton;
private JButton redoButton;
private JButton newTestButton;
private JButton historyButton;
private JButton exitButton;
public TestFrame() {
setTitle("数学测试");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(400, 400);
List<Question> questions = generateQuestions();
testPanel = new TestPanel(questions);
add(testPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout());
submitButton = new JButton("提交答案");
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List<Integer> answers = testPanel.getAnswers();
testPanel.showAnswers(answers);
int totalScore = calculateScore(answers);
String level = getLevel(totalScore);
JOptionPane.showMessageDialog(TestFrame.this, "您的得分为" + totalScore + ",等级为" + level + "。");
}
});
buttonPanel.add(submitButton);
redoButton = new JButton("重做");
redoButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
reset();
}
});
buttonPanel.add(redoButton);
newTestButton = new JButton("另做一套");
newTestButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List<Question> newQuestions = generateQuestions();
testPanel.removeAll();
testPanel.add(new TestPanel(newQuestions));
testPanel.revalidate();
testPanel.repaint();
}
});
buttonPanel.add(newTestButton);
historyButton = new JButton("查看记录");
historyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO: 实现查看记录功能
}
});
buttonPanel.add(historyButton);
exitButton = new JButton("退出测试");
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
buttonPanel.add(exitButton);
add(buttonPanel, BorderLayout.SOUTH);
}
private List<Question> generateQuestions() {
List<Question> questions = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) {
int num1 = random.nextInt(100);
int num2 = random.nextInt(100);
char operator = "+-*/".charAt(random.nextInt(4));
if (operator == '-') {
while (num2 > num1) {
num2 = random.nextInt(100);
}
} else if (operator == '/') {
while (num2 == 0 || num1 % num2 != 0) {
num2 = random.nextInt(100) + 1;
}
}
questions.add(new Question(num1, num2, operator));
}
return questions;
}
private int calculateScore(List<Integer> answers) {
int totalScore = 0;
for (int i = 0; i < 10; i++) {
Question question = testPanel.questions.get(i);
int answer = question.getAnswer();
int userAnswer = answers.get(i);
if (userAnswer == answer) {
totalScore += 10;
}
}
return totalScore;
}
private String getLevel(int score) {
if (score < 60) {
return "不及格";
} else if (score < 70) {
return "及格";
} else if (score < 80) {
return "中";
} else if (score < 90) {
return "良";
} else {
return "优";
}
}
private void reset() {
List<Question> questions = generateQuestions();
testPanel.removeAll();
testPanel.add(new TestPanel(questions));
testPanel.revalidate();
testPanel.repaint();
}
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setVisible(true);
}
}
```
这样,一个简单的数学测试程序就完成了。您可以根据自己的需求进行修改和完善。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)