![Java計算器_課程設計文檔和代碼_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/f03f6ab6-1344-4ca9-8d50-61a209cc11c4/f03f6ab6-1344-4ca9-8d50-61a209cc11c41.gif)
![Java計算器_課程設計文檔和代碼_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/f03f6ab6-1344-4ca9-8d50-61a209cc11c4/f03f6ab6-1344-4ca9-8d50-61a209cc11c42.gif)
![Java計算器_課程設計文檔和代碼_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/f03f6ab6-1344-4ca9-8d50-61a209cc11c4/f03f6ab6-1344-4ca9-8d50-61a209cc11c43.gif)
![Java計算器_課程設計文檔和代碼_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/f03f6ab6-1344-4ca9-8d50-61a209cc11c4/f03f6ab6-1344-4ca9-8d50-61a209cc11c44.gif)
![Java計算器_課程設計文檔和代碼_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/4/f03f6ab6-1344-4ca9-8d50-61a209cc11c4/f03f6ab6-1344-4ca9-8d50-61a209cc11c45.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、一課程設計的目的計算器在我們的生活中常常會使用到,本次課程設計,通過界面以及其中的邏輯處理,完成了四那么運算的處理。通過awt包或者swing包中的界面設計局部對界面設計的細節(jié)可以有更多的了解。利用面向?qū)ο蟮乃枷?,將各個組件的事件響應分別用不同的類表達出來。面向?qū)ο蟮乃枷霃暮艽蟪潭壬峡梢宰尦绦虻乃悸犯忧逦?,而且可重用性很高。對于具有相同事件響應的組件那么可以調(diào)用相同的類來處理事件。除此之外,利用棧的知識來解決運算符優(yōu)先的問題也讓我們對java中的棧有了更多的了解。 1二課程設計的任務與要求a. 使用Java的awt包或Swing包的類庫設計圖形界面的計算器 b 該計算器能夠完成加減乘除的四那
2、么混合運算注意運算優(yōu)先級 c 使用圖形界面中的事件委托機制來處理事件響應 2三需求分析 1.該計算器完成的功能有:用戶能夠完成四那么混合運算+、-、*、/,并且計算器能夠自動的識別運算符的優(yōu)先級,根據(jù)輸入的運算公式,自動計算出相應的結(jié)果。同時完成計算器中的backspace、ce按鈕,能夠完成消除或者刪除的功能。 2.出錯處理當用戶如果按下的是除零的操作,顯示框?qū)@示“被除數(shù)不能為0。當用戶如果連續(xù)屢次按下運算符,計算器自動記憶第一次運算符,并且做防連續(xù)輸入相同的運算符或者是不同的運算符。當用戶在同一個數(shù)據(jù)中屢次輸入小數(shù)點,計算器能夠自動判斷小數(shù)點重復,自動只記憶第一個小數(shù)點。當用戶在同一個數(shù)
3、據(jù)中輸入多個負號,計算器能夠自動做重復檢查,不顯示多余的負號。 當用戶在使用backspace功能刪除越界數(shù)據(jù)時候,計算器自動做相應處理。 3.數(shù)據(jù)處理在程序的起始,建立了兩個棧,分別用來存儲操作數(shù)和操作符。在計算器的核心運算代買中,運用這兩個棧來實現(xiàn)算法中的優(yōu)先級的處理,使用“#號來標記目標計算公式的結(jié)束。目標計算公式通過計算器的鍵盤實現(xiàn)輸入,當按下“=號之后,計算器通過調(diào)用計算器核心函數(shù)來實現(xiàn)數(shù)據(jù)的處理。 3四類層次中各個類的描述包括屬性和方法 本次課程設計一共分為了5個類,每個類都各自完成不同的功能。l class MyCalculator: 類MyCalculator是主類,含有mai
4、n函數(shù), 通過new CalFrame()來運行程序。l class CalFrame: 類CalFrame完成的功能是計算器界面的設計,并且將每個組件都添加事件響應。具體的事件響應操作將在其他的類中逐一實現(xiàn)。 l class HandleWin:點擊關閉windows窗口的控制類。l class HandleNum:字符串輸入控制類。l Class HandleEqual:等號出發(fā)事件的響應機制類。 屬性包括:09的數(shù)字鍵JButton num1; JButton num2; JButton num3; JButton num4; JButton num5; JButton num6; JB
5、utton num7; JButton num8; JButton num9; JButton num0; + - * / 四個控制按鈕 JButton plus;JButton minus;JButton mutiply;JButton divide;. +/- 兩個按鈕JButton point;JButton sign; Backspace ce = 三個按鈕JButton bs;JButton ce;JButton equal; 將這些按鈕按照一定的順序添加到現(xiàn)實面板中。Panel p1,p2,p3,p4;/為了布局的方便,利用borderLayout,通過幾個面板來添加 Stack
6、<Double> OPNT = new Stack <Double> ();/用來記錄操作數(shù)的棧Stack <String> OPTR = new Stack <String> ();/用來記錄操作符的棧,棧底壓入“#,取到了“#"代表已到棧底 boolean pointswitch = true;/小數(shù)點開關boolean oprateswitch = false;/運算符開關boolean siginswitch = true;/ 正負號開關 4方法: publ
7、ic void actionPerformed(ActionEvent e)當按下了控制按鈕,根據(jù)搜索控制開關來確定能否繼續(xù)添加,各個相應的處理機制。 public double segmentation(String myString)字符串優(yōu)先級計算代碼的核心函數(shù)。public int compare(char ch1,char ch2)1值為ch1大于ch2;-1為ch1小于ch2;0為ch1等于ch2public double oprate(double a,char b,double ce)通過參數(shù)b來判斷加減乘除 5五計算器界面的設計 本程序的實現(xiàn)使用了swing和awt兩個包,主
8、題程序界面按鍵根據(jù)微軟計算器的布置界面進行設置,采用比較人性化的常規(guī)按鍵排布。返回計算結(jié)果的“=號鍵使用了兩倍于普通按鍵面積的設計,使的擊中的概率更加大。整體界面是采用了BorderLayout布局,通過4個panel進行布局的詳細劃分,panel3用來存儲位于panel4左下角的GridLayout1,2,4,4布局,panel1、panel2、panel3分別用來表示BorderLayout的上中下三個模塊。Panel1中添加了一個Label display,display用來作為顯示器,實時的顯示輸入和計算的數(shù)據(jù)。其中display需要設置為右對齊和只讀屬性。Panel2中添加數(shù)字輸入鍵
9、和根本操作符鍵,panel采用了GridLayout布局,將整個panel2平分為4*4個空間,其中,數(shù)字鍵采用了15磅字體和藍色文字,操作符采用了15磅字體和紅色文字,是的界面更加顯眼和便于區(qū)分。Panel4中首先劃分為GridLayout1,2,4,4,在Panel4中,再次使用了GridLayout1,2,4,4將panel4的左側(cè)一分為二,左邊為panle3,這個的根底上程序往panel3中添加了backspace和ce兩個按鍵,在Panel4的右側(cè)單元格中添加了“=號按鈕,這個時候的“=號就是相當于兩個普通按鈕的長度和大小。整個程序界面的設計工作根本完成。 6六系統(tǒng)測試截圖1.系統(tǒng)初
10、始運行界面 圖1 系統(tǒng)初始運行界面截圖2.計算器按鍵測試 3.運算符重復輸入測試圖2 系統(tǒng)按鍵測試截圖 圖3 加號重復輸入測試截圖 73.被除數(shù)為0的測試 4.小數(shù)點重復性檢查圖4 1/0的結(jié)果Infinity截圖 圖5 小數(shù)點重復輸入錯誤檢查截圖5.backspace按鍵越界操作 圖6 使用backspace鍵做越界操作的截圖 86.優(yōu)先級程序計算 7.計算結(jié)果 圖7 計算2/3+6*9-3截圖 圖8 上面有優(yōu)先級的公式計算結(jié)果 9七設計步驟 本次最先開始程序界面的設計,通過界面的設計,這樣心中更加清楚功能的完成。所以先實現(xiàn)了一個類CalFrame,將每一個需要的組件全都進行添加進來,并運用
11、了相應的布局方式。這樣一個界面就顯示出來了。其實在這個過程中還進行了很屢次布局方式的嘗試,但最后也是以上面所說的這種來完成。因為一共才學習了四種布局方式,應用能力有局限。 接下來逐步實現(xiàn)邏輯功能。即每個組件的事件響應。因為后面還涉及到運算符的優(yōu)先級的問題,需要應用到棧,所以先完成一些簡單的操作。接下來完成的是數(shù)字鍵的事件響應。這樣后面的其他按鈕的事件響應才能繼續(xù)下去。因此完成根本的數(shù)據(jù)顯示是必須得。這個實現(xiàn)是很簡單的,通過actionPerformed的實現(xiàn),獲取到了信息來實現(xiàn)相應功能的輸出。在actionPerformed中需要完成的還有ce 以及backspace 按鈕的事件響應。首先弄清
12、楚了雖然兩個鍵代表的是清空和去除。backspace按鈕的事件響應。完成逐一刪除單個數(shù)字的功能,利用到字符串中的取出相應長度的子字符串來完成顯示框的顯示。Ce那么是將所以相關的控制開關和棧重置。在完成了根本的這些操作后,將要進行的是運算符的運算過程??紤]到優(yōu)先級的問題,將應用棧來完成。因此先定義了兩個靜態(tài)的棧來存入用戶每次在按下等號之前輸入的字符串的使用正那么表達式的分解操作數(shù)和操作符。對于每個運算符的處理都是一樣的,即將每次按下運算符時將顯示框中的內(nèi)容壓入棧中,并且將該運算符壓入棧中。最后是對等于號的事件響應。通過慢慢的添加,計算器的運算功能就完成了。 10八總結(jié) 這個學期的java課程設計
13、-計算器對我來說是一個不斷學習,逐步完善的過程。開始的時候拿到題目看到只有四那么混合運算就理所當然的認為應該是非常簡單的的一個程序而已。首先開始了程序的界面的設計。并且將一些簡單的按鈕的事件響應完成了。剩下了運算符優(yōu)先級的問題以及數(shù)據(jù)的處理問題。于是在同學的幫助下利用正那么表達式來完成輸入字符串的切割,但是如果自己一個人單挑來說,對于題目中的數(shù)據(jù)處理的問題一時不知道該如何與正那么表達式連接上。最后我還是選擇用棧來處理。這個過程讓我明白了學習知識的時候?qū)嵺`與理論之間是有很大的差異的。應用能力我還有待加強。于是我開始熟悉棧的使用。以前在c+的學習中接觸過棧,這次的使用思想是一樣的,只需要在了解一下
14、java 中的相關一些函數(shù)便可。但實際在寫程序的過程中,由于有一些特殊情況的考慮與進出入棧的聯(lián)系,還是碰到了一些問題。但在后來我慢慢的整理清楚思路以后,邏輯列清楚了,便也將這些問題解決了。逐步的將各項功能都完善了。當然目前我的計算器也只是完成了四那么混合運算,實際上還應該有很多功能可以添參加計算器的。本次java課程設計也讓我明白只要我一步步去做,那么程序功能便會不斷強大。同時很重要的一點便是以后要多加強自己的動手實踐能力。 11參考文獻 1 Struts Web設計與開發(fā)大全/邱哲,王俊標,馬斗編著.北京:清華大學出版社,2006.22 JSP應用開發(fā)詳解/劉曉華,張建,周慧貞編著.3版.北
15、京:電子工業(yè)出版社,2007.1 12附錄A:程序源代碼 import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.util.regex.Matcher;import java.util.regex.Pattern; public class MyCalculator public static void main(String args)new CalFrame(); class CalFrame extends JFrame String opnt,optr;S
16、tack <Double> OPNT = new Stack <Double> ();Stack <String> OPTR = new Stack <String> (); Label display; /顯示JButton num = new JButton10;/按鍵設計JButton plus; JButton minus; JButton mutiply; JButton divide; JButton bs;JButton ce;JButton equal;JButton
17、 point; JButton sign;JButton lbracket; JButton rbracket; Panel p1,p2,p3,p4; String disp = ""/用戶輸入的表達式 String result = "" ;/用戶輸入的字符串 CalFrame() OPTR.push("#"); for(int i=0;i<=9;+i) numi = new JButton(String.valueOf(i); plus = new JButton(&a
18、mp;quot;+"); plus.setForeground(Color.red); plus.setFont(new Font("Dialog",1,15); minus = new JButton("-"); minus.setForeground(Color.red); minus.setFont(new Font("Dialog",1,15); mutiply = new JButton("*"); mutiply.setF
19、oreground(Color.red); mutiply.setFont(new Font("Dialog",1,15); divide = new JButton("/");13divide.setForeground(Color.red);divide.setFont(new Font("Dialog",1,15);equal = new JButton("=");equal.setForeground(Color.red);equal.setF
20、ont(new Font("Dialog",1,15);point = new JButton(".");point.setFont(new Font("Dialog",1,15);sign = new JButton("+/-");sign.setFont(new Font("Dialog",1,15);bs = new JButton("backspace");bs.setFo
21、reground(Color.red);bs.setFont(new Font("Dialog",1,8);ce = new JButton("ce");ce.setFont(new Font("Dialog",1,15);p1 = new Panel();p1.setLayout(new BorderLayout(); display = new Label("0.",Label.RIGHT);display.setBackground(Color.
22、white); p1.add(display,BorderLayout.NORTH); p2 = new Panel();p2.setLayout(new GridLayout(4,4,4,4); p2.add(num7);p2.add(num8);p2.add(num9);p2.add(divide);p2.add(num4);p2.add(num5);p2.add(num6);p2.add(mutiply);p2.add(num1);p2.add(num2);p2.add(num3);p2.add(minus);p2.add(num0);p2.add(sign);p2.add(point)
23、;p2.add(plus);p3 = new Panel(new GridLayout(1,2,4,4);p3.add(bs);p3.add(ce); p4 = new Panel(new GridLayout(1,2,4,4);p4.add(p3);p4.add(equal); setTitle("超級計算器"); setLayout(new BorderLayout(); add(p1,BorderLayout.NORTH); add(p2,BorderLayout.CENTER); add(p4,BorderLayout.SOUTH);14 setVi
24、sible(true); pack(); setResizable(false); setBounds(600,350,300,230); addWindowListener(new HandleWin(); for(int i=0;i<=9;+i) numi.setForeground(Color.blue); numi.setFont(new Font("Dialog",1,15); numi.addActionListener(new HandleNum(this,i); plus.addActionListener(new Handle
25、Num(this); minus.addActionListener(new HandleNum(this); mutiply.addActionListener(new HandleNum(this); divide.addActionListener(new HandleNum(this); point.addActionListener(new HandleNum(this); sign.addActionListener(new HandleNum(this); bs.addActionListener(new HandleNum(this); ce.addActionListener
26、(new HandleNum(this); equal.addActionListener (new HandleEqual(this); class HandleWin extends WindowAdapter/關閉計算器 public void windowClosing(WindowEvent e) (e.getWindow().dispose(); System.exit(0); boolean pointswitch = true;/小數(shù)點開關 boolean oprateswitch = false;/運算符開關 boolean siginswitch = true;/ clas
27、s HandleNum implements ActionListener/字符串的輸入 JFrame my_Num; int itemp = 0; HandleNum(JFrame f,int a) my_Num = f; itemp = a; HandleNum(JFrame f) my_Num = f; public void actionPerformed(ActionEvent e) 15 if(e.getSource()=numitemp)/輸入數(shù)字字符 oprateswitch = true; siginswitch = false; disp = disp + itemp; d
28、isplay.setText(disp); if(oprateswitch&&e.getSource()=plus)/輸入加號 pointswitch = true; oprateswitch = false; siginswitch = true; disp = disp + "+" display.setText(disp); if(oprateswitch&&e.getSource()=minus)/輸入減號 pointswitch = true; oprateswitch = false
29、; siginswitch = true; disp = disp + "-" display.setText(disp); if(oprateswitch&&e.getSource()=mutiply)/輸入乘號 pointswitch = true; oprateswitch = false; siginswitch = true; disp = disp + "*" display.setText(disp); if(oprateswitch&&e.ge
30、tSource()=divide)/輸入除號 pointswitch = true; oprateswitch = false; siginswitch = true; disp = disp + "/" display.setText(disp); if(oprateswitch&&pointswitch=true&&e.getSource()=point)/輸入小數(shù)點pointswitch = false;oprateswitch = false;siginswitch = false;di
31、sp = disp + "."display.setText(disp); 16 if(siginswitch&&e.getSource()=sign)/輸入負號 disp = disp + "" display.setText(disp); if(e.getSource()=bs)/點擊backspace if(!disp.isEmpty() disp = disp.substring(0,disp.length()-1); if(disp.isEmpty() disp="
32、; " display.setText(disp); if(e.getSource()=ce)/點擊ce disp = " " display.setText(disp); class HandleEqual implements ActionListener/ 等于號觸發(fā)的事件 Frame my_Equal; HandleEqual(JFrame f) my_Equal = f; public void actionPerformed(ActionEvent e) if(e.getSource()=equal) disp = disp+&
33、amp;quot;#" disp = String.valueOf(segmentation(disp); display.setText(disp); disp = "" pointswitch = true;/小數(shù)點開關 oprateswitch = false;/運算符開關 siginswitch = true; /符號開關 public double segmentation(String myString) String reg = "(?d+.?d*)|(-+*/()#)" /分割表達Pattern p = Pattern pile(reg); Matcher m = p.matcher(myString); String find = "" double num = 0; 式.17 double op1,op2; char op3; while(m.find() find
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何有效記錄工作進度計劃
- 倉庫貨物拆零與分揀管理策略計劃
- 2025年路面清潔裝備合作協(xié)議書
- 如何制定品牌宣傳計劃
- 2025年優(yōu)良動植物新品種項目合作計劃書
- 班主任與學科教師協(xié)作計劃
- 2025年鈷粉系列合作協(xié)議書
- 2025年中國頁巖氣行業(yè)市場現(xiàn)狀及投資態(tài)勢分析報告(智研咨詢)
- 2025年氣體摻混設備合作協(xié)議書
- 2025年動葉可調(diào)軸流電站用風機項目發(fā)展計劃
- 2024年版網(wǎng)絡游戲版權合作與授權合同書
- 醫(yī)院6S管理成果匯報
- 2024年人教版小學六年級數(shù)學(上冊)期末試卷附答案
- 巴南區(qū)建筑垃圾污染環(huán)境防治規(guī)劃(2024-2035年)
- GB/T 4706.27-2024家用和類似用途電器的安全第27部分:風扇的特殊要求
- 2024-2025學年江蘇省南京鼓樓區(qū)五校聯(lián)考中考模擬物理試題含解析
- 2024年無人機駕駛員(五級)理論考試題庫(含答案)
- 標準作文稿紙模板(A4紙)
- YDT 4560-2023-5G數(shù)據(jù)安全評估規(guī)范
- 浙教版(2023)四下信息科技第1課《初探數(shù)字化》教學設計
- 抖音火花合同電子版獲取教程
評論
0/150
提交評論