Test類
/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱: 編寫一個算術測試小軟件。
* 作 者: 雷恆鑫
* 完成日期: 2012 年 11 月 06 日
* 版 本 號: V1.0
* 對任務及求解方法的描述部分
* 輸入描述:程序組成:編寫 一個Teacher類負責給出算術題目,隨機給出兩個整數並進行運算,並判斷回答者的答案是否正確;
* 輸入描述:編寫一個GUI類ComputerFrame,回答者可以通過GUI看到題目並給出答案;編寫一個程序執行入口運行該軟件。
* 輸入描述:GUI界面如下所示。
* 問題描述:
* 程序輸出:
* 程序頭部的註釋結束
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ComputerFrame computerFrame = new ComputerFrame("mycomframe");
}
}
Teacher類
public class Teacher {
int numberOne,numberTwo;
String operator="";
boolean right;
public int giveNumberOne(int n)
{ numberOne=(int)(Math.random()*n)+1;
return numberOne;
}
public int giveNumberTwo(int n)
{ numberTwo=(int)(Math.random()*n)+1;
return numberTwo;
}
public String giveOperator()
{ double d=Math.random();
if(d>=0.5)
operator="+";
else
operator="-";
return operator;
}
public boolean getRight(int answer)
{ if(operator.equals("+"))
{ if(answer==numberOne+numberTwo)
right=true;
else
right=false;
}
else if(operator.equals("-"))
{ if(answer==numberOne-numberTwo)
right=true;
else
right=false;
}
return right;
}
}
ComputerFrame類
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
//import laoshi.Teacher;
/* 輸入描述:程序組成:編寫 一個Teacher類負責給出算術題目,隨機給出兩個整數並進行運算,並判斷回答者的答案是否正確;
* 輸入描述:編寫一個GUI類ComputerFrame,回答者可以通過GUI看到題目並給出答案;編寫一個程序執行入口運行該軟件。
* 輸入描述:GUI界面如下所示。
*/
public class ComputerFrame extends JFrame implements ActionListener{
JTextField textOne,textTwo,textResult;
JButton getProblem,giveAnwser;
JLabel operatorLabel,message;
Teacher teacher;
ComputerFrame(String s)
{ super(s);
teacher=new Teacher();
setLayout(new FlowLayout());
textOne=new JTextField(10); //創建textOne,其可見字符長是10
textTwo=new JTextField(10); //創建textTwo,其可見字符長是10
textResult=new JTextField(10); //創建textResult,其可見字符長是10
operatorLabel=new JLabel("+");
message=new JLabel("你還沒有回答呢");
getProblem=new JButton("獲取題目");
giveAnwser=new JButton("確認答案");
add(getProblem);
add(textOne);
add(operatorLabel);
add(textTwo);
add(new Label("="));
add(textResult);
add(giveAnwser);
add(message);
textResult.requestFocus();//請求此 Component 獲得輸入焦點,並且此 Component 的頂層祖先成爲獲得焦點的 Window。
textOne.setEditable(false);
textTwo.setEditable(false);
getProblem.addActionListener(this);//將當前窗口註冊爲getProblem的ActionEvent事件監視器
giveAnwser.addActionListener(this);//將當前窗口註冊爲giveAnwser的ActionEvent事件監視器
textResult.addActionListener(this);//將當前窗口註冊爲textResult的ActionEvent事件監視器
setBounds(100,100,550,100);
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==getProblem) //判斷事件源是否是getProblem
{ int number1=teacher.giveNumberOne(100);
int number2=teacher.giveNumberTwo(100);
String operator=teacher.giveOperator();
textOne.setText(""+number1);
textTwo.setText(""+number2);
operatorLabel.setText(operator);
message.setText("請回答");
textResult.setText(null);
}
if(e.getSource()==giveAnwser) //判斷事件源是否是giveAnwser
{ String answer=textResult.getText();
try{
int result=Integer.parseInt(answer);
if(teacher.getRight(result)==true)
{ message.setText("你回答正確");
}
else
{ message.setText("你回答錯誤");
}
}
catch(NumberFormatException ex)
{ message.setText("請輸入數字字符");
}
}
textResult.requestFocus();
validate();
}
}
運行結果: