設計題目一:設計GUI界面的計算器程序,用戶可以通過鼠標依次輸入參加計算的數值,進行加、減、乘、除混合運算。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
本題目設計的方法是通過:
鼠標單擊進行各種輸入----通過單擊各種數字按鈕輸入整數;通過單擊運算符號按鈕輸入算術運算;通過單擊計算器面板上包含=號,按鈕輸入等號,以及通過單擊CE按鈕清除輸入。
程序輸出----面板輸出結果或者輸出錯誤信息(系統出錯誤時)。//王睿的MyCalculator
import java.awt.*;
import java.awt.event.*;
public class MyCalculator extends WindowAdapter implements ActionListener{
private Frame f;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,
b13,b14,b15,b16,b17,b18,b19;
private TextField f1;
private double ans = 0;//臨時存放結果,結果最後給final
private double n1=0;//定義爲存放要輸入的數字,初值爲沒有輸入數字
private int op=0;//初值爲沒選擇任何運算
private boolean hasop=false;//初值爲沒有按下運算符號
private boolean dot=false;//定義爲運算中小數運算,初值爲無小數
public static void main(String args[]){
MyCalculator be=new MyCalculator();
be.go();
}
public void go(){
f=new Frame("王睿的計算器");
f.setLayout(new GridLayout(4,4));
f1=new TextField("",10);
b1=new Button("1");
b2=new Button("2");
b3=new Button("3");
b4=new Button("CE");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("+");
b9=new Button("7");
b10=new Button("8");
b11=new Button("9");
b12=new Button("-");
b13=new Button("*");
b14=new Button("0");
b15=new Button(".");
b16=new Button("/");
b17=new Button("=");
b18=new Button("(");
b19=new Button(")");
f.add(f1);
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.add(b7);
f.add(b8);
f.add(b9);
f.add(b10);
f.add(b11);
f.add(b12);
f.add(b13);
f.add(b14);
f.add(b15);
f.add(b16);
f.add(b17);
f.add(b18);
f.add(b19);
f.pack();
f.setVisible(true);
f.add(f1,"Center");
f.addWindowListener(this);
f.setSize(300,150);
f.setVisible(true);
}
//實現ActionListener接口中的actionPerformed()方法
public void actionPerformed(ActionEvent e){
String d = e.getActionCommand();
char c = d.charAt(0);
switch(c)
{
case '+'://首次按下運算符號且在其之前
case '-'://沒有數字按下且沒有連按兩次
case '*':
case '/'://則先把剛剛的結果計算出來
if (op!='0' && !hasOp) //按下等號
Result();
n1 = Double.valueOf(final.getText()).doubleValue();
op = c;
hasOp = true;
dot = false;
break;
case '=': //按下等號
Result();
break;
case '.': //按下小數點
if ( !dot )
{
final.setText(final.getText()+".");
dot = true;
}
break;
case 'CE': //按下清除
n1 = 0;
op = '0';
hasOp = false;
dot = false;
final.setText("0");
break;
default: //按下數字正常執行
if (final.getText().equals("0") || hasOp)
{
final.setText(d);
hasop = false;
}
else
final.setText(final.getText()+d);
}
}
//計算結果
private void Result()
{
double n2 = Double.valueOf(final.getText()).doubleValue();
switch (op)
{
case '+':
ans = n1 + n2;
break;
case '-':
ans = n1 - n2;
break;
case '*':
ans = n1 * 2;
break;
case '/':
ans = n1 / n2;
}
op = '0';
hasOp = true;
dot = false;
n1 = ans;
final.setText(String.valueOf(ans));
}
//覆蓋WindowAdapter類中的 windowClosing()方法
public void windowClosing(WindowEvent e){
System.exit(0);
}
}