Java課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第1頁(yè)
Java課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第2頁(yè)
Java課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第3頁(yè)
Java課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第4頁(yè)
Java課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、java程序設(shè)計(jì)課程設(shè)計(jì)Java設(shè)計(jì)簡(jiǎn)易計(jì)算器班級(jí)2013級(jí)學(xué)號(hào)2013070261姓名E-Mail電話提交日期2015-06XX學(xué)院信息科學(xué)技術(shù)學(xué)院報(bào)告正文Java設(shè)計(jì)簡(jiǎn)易計(jì)算器摘要: 本計(jì)算器是由java語(yǔ)言所編程設(shè)計(jì)的標(biāo)準(zhǔn)計(jì)算器,可以進(jìn)行十進(jìn)制下的四則運(yùn)算(加、減、乘、除)、開平方、求余、求倒數(shù)。通過(guò)本課程設(shè)計(jì)使學(xué)生能夠較全面的掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的有關(guān)概念和開發(fā)方法,以便能較全面地理解、掌握和綜合運(yùn)用所學(xué)的知識(shí),提高自身的編程能力。關(guān)鍵字: 計(jì)算機(jī)編程;Java語(yǔ)言;計(jì)算器 課程設(shè)計(jì)介紹1.熟悉java圖形用戶界面的設(shè)計(jì)原理和程序結(jié)構(gòu) 2.能設(shè)計(jì)復(fù)核問(wèn)題要求的圖形用戶界面程序

2、 3.熟悉java awt和swing的組合 4.掌握常用組建的事件接口 5.會(huì)應(yīng)用awt和swing組件進(jìn)行應(yīng)用程序設(shè)計(jì)2. 基本原理或方法2. 1 用戶界面設(shè)計(jì) 該計(jì)算器程序的設(shè)計(jì):用戶界面包括Swing組件,不過(guò)程序中大都使用的是AWT組件. Import java.awt.*;2.2 利用AWT組件這個(gè)界面設(shè)計(jì)中包含了接口,單擊事件監(jiān)聽器接口ActionListener事件監(jiān)聽器中的事件處理方法 void actionPerformed(ActionEvent evt) 完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件(“0” ,“ 2” ,

3、 “1”,“ 8”、“9” ) 運(yùn)算符按鈕事件 (“+” ,“ ” ,“ /”,“ *” ,“ %”) 正負(fù)號(hào)按鈕事件(“+/-”) 、小數(shù)點(diǎn)按鈕事件(“.”),等號(hào)按鈕事件(“ ”),求倒按鈕事件(“1/x”、退格按鈕事件(“退格”、“清除”按鈕事件 )。 在事件處理。 觸發(fā)按鈕事件時(shí),要進(jìn)一步分析,是重新開始計(jì)算時(shí)觸發(fā)的按鈕事件還是 計(jì)算中間觸發(fā)的按鈕事件。2.3 程序設(shè)計(jì)中,使用了布局管理。 Border Layout,GridBagLayout2.4 Calculator類中的類名是Calculator. 它的功能是使用圖形用戶來(lái)實(shí)現(xiàn)計(jì)算器的界面設(shè)計(jì)和運(yùn)算功能以及一些科學(xué)運(yùn)算方法.42

4、.5 main主類.中調(diào)用了calculator類來(lái)實(shí)現(xiàn)計(jì)算器的功能 .3. 結(jié)果和結(jié)果分析運(yùn)行試驗(yàn):實(shí)例:99+66=165運(yùn)行實(shí)例:165-88=77運(yùn)行實(shí)例:77/0 報(bào)錯(cuò):除數(shù)不能為零4.帶注釋的程序清單(小四號(hào)粗)import 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

5、.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;/* *一個(gè)計(jì)算器,與Windows附件自帶計(jì)算器的標(biāo)準(zhǔn)版功能、界面相仿。 但還不支持鍵盤操作。 */public class Calculator extends JFrame implements ActionListener /* * */private static final long serialVersionUID = 1L;/* 計(jì)算器上的鍵的顯示名字 */private final String KEYS = "7",

6、 "8", "9", "/", "sqrt", "4", "5", "6","*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" ;/* 計(jì)算器上的

7、功能鍵的顯示名字 */private final String COMMAND = "Backspace", "CE", "C" ;/* 計(jì)算器左邊的M的顯示名字 */private final String M = " ", "MC", "MR", "MS", "M+" ;/* 計(jì)算器上鍵的按鈕 */private JButton keys = new JButtonKEYS.length;/* 計(jì)算器上的功能鍵的按鈕 */priva

8、te JButton commands = new JButtonCOMMAND.length;/* 計(jì)算器左邊的M的按鈕 */private JButton m = new JButtonM.length;/* 計(jì)算結(jié)果文本框 */private JTextField resultText = new JTextField("0");/ 標(biāo)志用戶按的是否是整個(gè)表達(dá)式的第一個(gè)數(shù)字,或者是運(yùn)算符后的第一個(gè)數(shù)字private boolean firstDigit = true;/ 計(jì)算的中間結(jié)果。private double resultNum = 0.0;/ 當(dāng)前運(yùn)算的運(yùn)算符

9、private String operator = "="/ 操作是否合法private boolean operateValidFlag = true;/* * 構(gòu)造函數(shù) */public Calculator() super();/ 初始化計(jì)算器init();/ 設(shè)置計(jì)算器的背景顏色this.setBackground(Color.LIGHT_GRAY);this.setTitle("計(jì)算器-設(shè)計(jì)者:61-王磊");/ 在屏幕(500, 300)坐標(biāo)處顯示計(jì)算器this.setLocation(500, 300);/ 不許修改計(jì)算器的大小this.s

10、etResizable(false);/ 使計(jì)算器中各組件大小合適this.pack();/* * 初始化計(jì)算器 */private void init() / 文本框中的內(nèi)容采用右對(duì)齊方式resultText.setHorizontalAlignment(JTextField.RIGHT);/ 不允許修改結(jié)果文本框resultText.setEditable(false);/ 設(shè)置文本框背景顏色為白色resultText.setBackground(Color.white);/ 初始化計(jì)算器上鍵的按鈕,將鍵放在一個(gè)畫板內(nèi)JPanel calckeysPanel = new JPanel();

11、/ 用網(wǎng)格布局器,4行,5列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個(gè)象素,垂直方向間隔為3個(gè)象素calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3);for (int i = 0; i < KEYS.length; i+) keysi = new JButton(KEYSi);calckeysPanel.add(keysi);keysi.setForeground(Color.blue);/ 運(yùn)算符鍵用紅色標(biāo)示,其他鍵用藍(lán)色表示keys3.setForeground(Color.red);keys8.setForeground(Color.re

12、d);keys13.setForeground(Color.red);keys18.setForeground(Color.red);keys19.setForeground(Color.red);/ 初始化功能鍵,都用紅色標(biāo)示。將功能鍵放在一個(gè)畫板內(nèi)JPanel commandsPanel = new JPanel();/ 用網(wǎng)格布局器,1行,3列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個(gè)象素,垂直方向間隔為3個(gè)象素commandsPanel.setLayout(new GridLayout(1, 3, 3, 3);for (int i = 0; i < COMMAND.length; i+

13、) commandsi = new JButton(COMMANDi);commandsPanel.add(commandsi);commandsi.setForeground(Color.red);/ 初始化M鍵,用紅色標(biāo)示,將M鍵放在一個(gè)畫板內(nèi)JPanel calmsPanel = new JPanel();/ 用網(wǎng)格布局管理器,5行,1列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個(gè)象素,垂直方向間隔為3個(gè)象素calmsPanel.setLayout(new GridLayout(5, 1, 3, 3);for (int i = 0; i < M.length; i+) mi = new J

14、Button(Mi);calmsPanel.add(mi);mi.setForeground(Color.red);/ 下面進(jìn)行計(jì)算器的整體布局,將calckeys和command畫板放在計(jì)算器的中部,/ 將文本框放在北部,將calms畫板放在計(jì)算器的西部。/ 新建一個(gè)大的畫板,將上面建立的command和calckeys畫板放在該畫板內(nèi)JPanel panel1 = new JPanel();/ 畫板采用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素panel1.setLayout(new BorderLayout(3, 3);panel1.add("North&q

15、uot;, commandsPanel);panel1.add("West", calckeysPanel);/ 建立一個(gè)畫板放文本框JPanel top = new JPanel();top.setLayout(new BorderLayout();top.add("Center", resultText);/ 整體布局getContentPane().setLayout(new BorderLayout(3, 5);getContentPane().add("North", top);getContentPane().add(&q

16、uot;Center", panel1);getContentPane().add("West", calmsPanel);/ 為各按鈕添加事件偵聽器/ 都使用同一個(gè)事件偵聽器,即本對(duì)象。本類的聲明中有implements ActionListenerfor (int i = 0; i < KEYS.length; i+) keysi.addActionListener(this);for (int i = 0; i < COMMAND.length; i+) commandsi.addActionListener(this);for (int i =

17、 0; i < M.length; i+) mi.addActionListener(this);/* * 處理事件 */public void actionPerformed(ActionEvent e) / 獲取事件源的標(biāo)簽String label = e.getActionCommand();if (label.equals(COMMAND0) / 用戶按了"Backspace"鍵handleBackspace(); else if (label.equals(COMMAND1) / 用戶按了"CE"鍵resultText.setText(&

18、quot;0"); else if (label.equals(COMMAND2) / 用戶按了"C"鍵handleC(); else if ("0123456789.".indexOf(label) >= 0) / 用戶按了數(shù)字鍵或者小數(shù)點(diǎn)鍵handleNumber(label);/ handlezero(zero); else / 用戶按了運(yùn)算符鍵handleOperator(label);/* * 處理Backspace鍵被按下的事件 */private void handleBackspace() String text = re

19、sultText.getText();int i = text.length();if (i > 0) / 退格,將文本最后一個(gè)字符去掉text = text.substring(0, i - 1);if (text.length() = 0) / 如果文本沒(méi)有了內(nèi)容,則初始化計(jì)算器的各種值resultText.setText("0");firstDigit = true;operator = "=" else / 顯示新的文本resultText.setText(text);/* * 處理數(shù)字鍵被按下的事件 * * param key */pri

20、vate void handleNumber(String key) if (firstDigit) / 輸入的第一個(gè)數(shù)字resultText.setText(key); else if (key.equals(".") && (resultText.getText().indexOf(".") < 0) / 輸入的是小數(shù)點(diǎn),并且之前沒(méi)有小數(shù)點(diǎn),則將小數(shù)點(diǎn)附在結(jié)果文本框的后面resultText.setText(resultText.getText() + "."); else if (!key.equals(&

21、quot;.") / 如果輸入的不是小數(shù)點(diǎn),則將數(shù)字附在結(jié)果文本框的后面resultText.setText(resultText.getText() + key);/ 以后輸入的肯定不是第一個(gè)數(shù)字了firstDigit = false;/* * 處理C鍵被按下的事件 */private void handleC() / 初始化計(jì)算器的各種值resultText.setText("0");firstDigit = true;operator = "="/* * 處理運(yùn)算符鍵被按下的事件 * * param key */private void

22、handleOperator(String key) if (operator.equals("/") / 除法運(yùn)算/ 如果當(dāng)前結(jié)果文本框中的值等于0if (getNumberFromText() = 0.0) / 操作不合法operateValidFlag = false;resultText.setText("除數(shù)不能為零"); else resultNum /= getNumberFromText(); else if (operator.equals("1/x") / 倒數(shù)運(yùn)算if (resultNum = 0.0) / 操作

23、不合法operateValidFlag = false;resultText.setText("零沒(méi)有倒數(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("*") /

24、 乘法運(yùn)算resultNum *= getNumberFromText(); else if (operator.equals("sqrt") / 平方根運(yùn)算resultNum = Math.sqrt(resultNum); else if (operator.equals("%") / 百分號(hào)運(yùn)算,除以100resultNum = resultNum / 100; else if (operator.equals("+/-") / 正數(shù)負(fù)數(shù)運(yùn)算resultNum = resultNum * (-1); else if (operat

25、or.equals("=") / 賦值運(yùn)算resultNum = getNumberFromText();if (operateValidFlag) / 雙精度浮點(diǎn)數(shù)的運(yùn)算long t1;double t2;t1 = (long) resultNum;t2 = resultNum - t1;if (t2 = 0) resultText.setText(String.valueOf(t1); else resultText.setText(String.valueOf(resultNum);/ 運(yùn)算符等于用戶按的按鈕operator = key;firstDigit = true;operateValidFlag = true;/* * 從結(jié)果文本框中獲取數(shù)字 * * return */private double getNumberFromText() double result = 0;try result = Double.valueOf(resultText.getText().doubleValue(); catch (NumberF

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論