




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 了解寵物殯葬師試題及答案的重點(diǎn)
- 小白鼠企業(yè)門戶網(wǎng)站系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 2024年份十一月份光子晶體EPC總承包合同帶隙穩(wěn)定性條款
- 二零二四年份二月辦公室文員合同增補(bǔ)智能清潔機(jī)器人條款
- 2024人力資源管理師成功者經(jīng)驗(yàn)試題及答案
- 黑龍江民族職業(yè)學(xué)院《馬克思基本原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江省伊春市美溪區(qū)2025年三下數(shù)學(xué)期末聯(lián)考試題含解析
- 黑龍江省大慶市鐵人中學(xué)2025年高三第二學(xué)期年級(jí)質(zhì)量調(diào)研考試物理試題試卷含解析
- 黑龍江省牡東部地區(qū)四校聯(lián)考2025年高三物理試題第二次模擬考試試題含解析
- 黑龍江省雞西市密山市2025屆數(shù)學(xué)四下期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識(shí)宣傳課件
- 大象版小學(xué)科學(xué)新版四年級(jí)上冊(cè)科學(xué)實(shí)驗(yàn)記錄單
- 2021版十八項(xiàng)醫(yī)療質(zhì)量安全核心制度附流程圖
- 神經(jīng)內(nèi)科護(hù)理教學(xué)查房護(hù)理病歷臨床病案
- TCASME 1525-2024 工業(yè)用甲縮醛
- 《證券投資學(xué)》全套教學(xué)課件
- 2輸變電工程施工質(zhì)量驗(yàn)收統(tǒng)一表式(變電工程土建專業(yè))-2024年版
- 2024年浙江省中考?xì)v史真題(解析版)
- 洗地機(jī)產(chǎn)品營(yíng)銷計(jì)劃書
- 火麻種子生產(chǎn)技術(shù)規(guī)程
- 新人教版生物八年級(jí)下冊(cè)教學(xué)計(jì)劃及進(jìn)度表
評(píng)論
0/150
提交評(píng)論