簡單計算器設(shè)計與實(shí)現(xiàn)_第1頁
簡單計算器設(shè)計與實(shí)現(xiàn)_第2頁
簡單計算器設(shè)計與實(shí)現(xiàn)_第3頁
簡單計算器設(shè)計與實(shí)現(xiàn)_第4頁
簡單計算器設(shè)計與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

計算器:

1、

界面基本上沒什么問題,再寫到運(yùn)算操作時候碰到問題了,當(dāng)捕獲運(yùn)算符操作,這時,由于這個時候只輸入了一種數(shù),不能進(jìn)行加減乘除運(yùn)算,(核心)因此先判斷運(yùn)算符,默認(rèn)為“=”,再定義一種字符變量來保存?zhèn)鬟M(jìn)來的運(yùn)算符,這樣就達(dá)成了,傳入一種運(yùn)算符的時候,進(jìn)行的是上一次傳進(jìn)來的運(yùn)算符的操作,并把成果保存在一種中間變量中。2、當(dāng)發(fā)現(xiàn)太多的if,else語句嵌套,不防把這些代碼定義為一種辦法3、在響應(yīng)事件的辦法中,如果有,采用調(diào)用辦法,來簡化響應(yīng)時間里面的代碼,并使思路更清晰,在計算器的程序中,加入了兩個boolean類型的變量來達(dá)成控制的目的4、怎么樣設(shè)計代碼,才干使擴(kuò)展性更強(qiáng)呢?現(xiàn)在懂得的只有:解耦,耦合度越低,能夠擴(kuò)張性就更強(qiáng)。[java]

\o"viewplain"viewplain\o"copy"copyimport

java.awt.BorderLayout;

import

java.awt.Color;

import

java.awt.GridLayout;

import

java.awt.event.ActionEvent;

import

java.awt.event.ActionListener;

import

javax.swing.JButton;

import

javax.swing.JFrame;

import

javax.swing.JPanel;

import

javax.swing.JTextField;

/**

*

一種計算器,與Windows附件自帶計算器的原則版功效、界面相仿。

但還不支持鍵盤操作。

*/

public

class

Calculator

extends

JFrame

implements

ActionListener

{

/**

計算器上的鍵的顯示名字

*/

private

final

String[]

KEYS

=

{

"7",

"8",

"9",

"/",

"sqrt",

"4",

"5",

"6",

"*",

"%",

"1",

"2",

"3",

"-",

"1/x",

"0",

"+/-",

".",

"+",

"="

};

/**

計算器上的功效鍵的顯示名字

*/

private

final

String[]

COMMAND

=

{

"Backspace",

"CE",

"C"

};

/**

計算器左邊的M的顯示名字

*/

private

final

String[]

M

=

{

"

",

"MC",

"MR",

"MS",

"M+"

};

/**

計算器上鍵的按鈕

*/

private

JButton

keys[]

=

new

JButton[KEYS.length];

/**

計算器上的功效鍵的按鈕

*/

private

JButton

commands[]

=

new

JButton[COMMAND.length];

/**

計算器左邊的M的按鈕

*/

private

JButton

m[]

=

new

JButton[M.length];

/**

計算成果文本框

*/

private

JTextField

resultText

=

new

JTextField("0");

//

標(biāo)志顧客按的與否是整個體現(xiàn)式的第一種數(shù)字,或者是運(yùn)算符后的第一種數(shù)字

private

boolean

firstDigit

=

true;

//

計算的中間成果。

private

double

resultNum

=

0.0;

//

現(xiàn)在運(yùn)算的運(yùn)算符

private

String

operator

=

"=";

//

操作與否正當(dāng)

private

boolean

operateValidFlag

=

true;

/**

*

構(gòu)造函數(shù)

*/

public

Calculator()

{

super();

//

初始化計算器

init();

//

設(shè)立計算器的背景顏色

this.setBackground(Color.LIGHT_GRAY);

this.setTitle("計算器");

//

在屏幕(500,

300)坐標(biāo)處顯示計算器

this.setLocation(500,

300);

//

不許修改計算器的大小

this.setResizable(false);

//

使計算器中各組件大小適宜

this.pack();

}

/**

*

初始化計算器

*/

private

void

init()

{

//

文本框中的內(nèi)容采用右對齊方式

resultText.setHorizontalAlignment(JTextField.RIGHT);

//

不允許修改成果文本框

resultText.setEditable(false);

//

設(shè)立文本框背景顏色為白色

resultText.setBackground(Color.white);

//

初始化計算器上鍵的按鈕,將鍵放在一種畫板內(nèi)

JPanel

calckeysPanel

=

new

JPanel();

//

用網(wǎng)格布局器,4行,5列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素

calckeysPanel.setLayout(new

GridLayout(4,

5,

3,

3));

for

(int

i

=

0;

i

<

KEYS.length;

i++)

{

keys[i]

=

new

JButton(KEYS[i]);

calckeysPanel.add(keys[i]);

keys[i].setForeground(Color.blue);

}

//

運(yùn)算符鍵用紅色標(biāo)示,其它鍵用藍(lán)色表達(dá)

keys[3].setForeground(Color.red);

keys[8].setForeground(Color.red);

keys[13].setForeground(Color.red);

keys[18].setForeground(Color.red);

keys[19].setForeground(Color.red);

//

初始化功效鍵,都用紅色標(biāo)示。將功效鍵放在一種畫板內(nèi)

JPanel

commandsPanel

=

new

JPanel();

//

用網(wǎng)格布局器,1行,3列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素

commandsPanel.setLayout(new

GridLayout(1,

3,

3,

3));

for

(int

i

=

0;

i

<

COMMAND.length;

i++)

{

commands[i]

=

new

JButton(COMMAND[i]);

commandsPanel.add(commands[i]);

commands[i].setForeground(Color.red);

}

//

初始化M鍵,用紅色標(biāo)示,將M鍵放在一種畫板內(nèi)

JPanel

calmsPanel

=

new

JPanel();

//

用網(wǎng)格布局管理器,5行,1列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素

calmsPanel.setLayout(new

GridLayout(5,

1,

3,

3));

for

(int

i

=

0;

i

<

M.length;

i++)

{

m[i]

=

new

JButton(M[i]);

calmsPanel.add(m[i]);

m[i].setForeground(Color.red);

}

//

下面進(jìn)行計算器的整體布局,將calckeys和command畫板放在計算器的中部,

//

將文本框放在北部,將calms畫板放在計算器的西部。

//

新建一種大的畫板,將上面建立的command和calckeys畫板放在該畫板內(nèi)

JPanel

panel1

=

new

JPanel();

//

畫板采用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素

panel1.setLayout(new

BorderLayout(3,

3));

panel1.add("North",

commandsPanel);

panel1.add("West",

calckeysPanel);

//

建立一種畫板放文本框

JPanel

top

=

new

JPanel();

top.setLayout(new

BorderLayout());

top.add("Center",

resultText);

//

整體布局

getContentPane().setLayout(new

BorderLayout(3,

5));

getContentPane().add("North",

top);

getContentPane().add("Center",

panel1);

getContentPane().add("West",

calmsPanel);

//

為各按鈕添加事件偵聽器

//

都使用同一種事件偵聽器,即本對象。本類的聲明中有implements

ActionListener

for

(int

i

=

0;

i

<

KEYS.length;

i++)

{

keys[i].addActionListener(this);

}

for

(int

i

=

0;

i

<

COMMAND.length;

i++)

{

commands[i].addActionListener(this);

}

for

(int

i

=

0;

i

<

M.length;

i++)

{

m[i].addActionListener(this);

}

}

/**

*

解決事件

*/

public

void

actionPerformed(ActionEvent

e)

{

//

獲取事件源的標(biāo)簽

String

label

=

e.getActionCommand();

if

(label.equals(COMMAND[0]))

{

//

顧客按了"Backspace"鍵

handleBackspace();

}

else

if

(label.equals(COMMAND[1]))

{

//

顧客按了"CE"鍵

resultText.setText("0");

}

else

if

(label.equals(COMMAND[2]))

{

//

顧客按了"C"鍵

handleC();

}

else

if

(".".indexOf(label)

>=

0)

{

//

顧客按了數(shù)字鍵或者小數(shù)點(diǎn)鍵

handleNumber(label);

//

handlezero(zero);

}

else

{

//

顧客按了運(yùn)算符鍵

handleOperator(label);

}

}

/**

*

解決Backspace鍵被按下的事件

*/

private

void

handleBackspace()

{

String

text

=

resultText.getText();

int

i

=

text.length();

if

(i

>

0)

{

//

退格,將文本最后一種字符去掉

text

=

text.substring(0,

i

-

1);

if

(text.length()

==

0)

{

//

如果文本沒有了內(nèi)容,則初始化計算器的多個值

resultText.setText("0");

firstDigit

=

true;

operator

=

"=";

}

else

{

//

顯示新的文本

resultText.setText(text);

}

}

}

/**

*

解決數(shù)字鍵被按下的事件

*

*

@param

key

*/

private

void

handleNumber(String

key)

{

if

(firstDigit)

{

//

輸入的第一種數(shù)字

resultText.setText(key);

}

else

if

((key.equals("."))

&&

(resultText.getText().indexOf(".")

<

0))

{

//

輸入的是小數(shù)點(diǎn),并且之前沒有小數(shù)點(diǎn),則將小數(shù)點(diǎn)附在成果文本框的背面

resultText.setText(resultText.getText()

+

".");

}

else

if

(!key.equals("."))

{

//

如果輸入的不是小數(shù)點(diǎn),則將數(shù)字附在成果文本框的背面

resultText.setText(resultText.getText()

+

key);

}

//

后來輸入的必定不是第一種數(shù)字了

firstDigit

=

false;

}

/**

*

解決C鍵被按下的事件

*/

private

void

handleC()

{

//

初始化計算器的多個值

resultText.setText("0");

firstDigit

=

true;

operator

=

"=";

}

/**

*

解決運(yùn)算符鍵被按下的事件

*

*

@param

key

*/

private

void

handleOperator(String

key)

{

if

(operator.equals("/"))

{

//

除法運(yùn)算

//

如果現(xiàn)在成果文本框中的值等于0

if

(getNumberFromText()

==

0.0)

{

//

操作不正當(dāng)

operateValidFlag

=

false;

resultText.setText("除數(shù)不能為零");

}

else

{

resultNum

/=

getNumberFromText();

}

}

else

if

(operator.equals("1/x"))

{

//

倒數(shù)運(yùn)算

if

(resultNum

==

0.0)

{

//

操作不正當(dāng)

operateValidFlag

=

false;

resultText.setText("零沒有倒數(shù)");

}

else

{

resultNum

=

1

/

resultNum;

}

}

else

if

(operator.equals("+"))

{

//

加法運(yùn)算

resultNum

+=

getNumberFromText();

}

else

if

(operator.equals("-"))

{

//

減法運(yùn)算

resultNum

-=

getNumberFromText();

}

else

if

(operator.equals("*"))

{

//

乘法運(yùn)算

resultNum

*=

getNumberFromText();

}

else

if

(operator.equals("sqrt"))

{

//

平方根運(yùn)算

resultNum

=

Math.sqrt(resultNum);

}

else

if

(operator.equals("%"))

{

//

百分號運(yùn)算,除以100

resultNum

=

resultNum

/

100;

}

else

if

(operator.equals("+/-"))

{

//

正數(shù)負(fù)數(shù)運(yùn)算

resultNum

=

resultNum

*

(-1);

}

else

if

(operator.equals("="))

{

//

賦值運(yùn)算

resultNum

=

getNumberFromText();

}

if

(operateVali

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論