java課程設計計算器_第1頁
java課程設計計算器_第2頁
java課程設計計算器_第3頁
java課程設計計算器_第4頁
java課程設計計算器_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 成 績10信計2011-2012(二)java程序設計課程設計設計題目 模擬科學計算器 設計時間 學生姓名 學生學號 所在班級 指導教師 徐州工程學院數學與物理科學學院摘要計算器在我們的生活中常常會使用到,本次課程設計,通過界面以及其中的邏輯處理,完成了四則運算的處理。通過awt包或者swing包中的界面設計部分對界面設計的細節可以有更多的了解。利用面向對象的思想,將各個組件的事件響應分別用不同的類表達出來。面向對象的思想從很大程度上可以讓程序的思路更加清晰,而且可重用性很高。對于具有相同事件響;應的組件則可以調用相同的類來處理事件。除此之外,利用棧的知識來解決運算符優先的問題也讓我們對ja

2、va中的棧有了更多的了解。關鍵詞 java;計算器;四則運算;面向對象;棧目 錄1需求分析.11.1該計算器完成的功能.11.2出錯處理.11.3數據處理.12設計方案.12.1設計方法.12.2界面布局.13系統設計.23.1界面設計.23.2功能模塊.23.2.1功能模塊的設計方案.23.2.2功能模塊的實現方法34系統的開發和運行環境及安裝配置說明.35系統測試截圖.45.1系統初始運行界面.45.2計算器按鍵測試.45.3運算符重復輸入測試.45.4被除數為0的測試.55.5小數點重復性檢查.55.6 backspace按鍵越界操作.65.7優先級程序計算.65.8計算結果.76總結與

3、心得體會.7附錄91需求分析1.1該計算器完成的功能用戶能夠完成四則混合運算+、-、*、/,并且計算器能夠自動的識別運算符的優先級,根據輸入的運算公式,自動計算出相應的結果。同時完成計算器中的backspace、ce按鈕,能夠完成消除或者刪除的功能。1.2出錯處理當用戶如果按下的是除零的操作,顯示框將顯示“被除數不能為0”。當用戶如果連續多次按下運算符,計算器自動記憶第一次運算符,并且做防連續輸入相同的運算符或者是不同的運算符。當用戶在同一個數據中多次輸入小數點,計算器能夠自動判斷小數點重復,自動只記憶第一個小數點。當用戶在同一個數據中輸入多個負號,計算器能夠自動做重復檢查,不顯示多余的負號。

4、當用戶在使用backspace功能刪除越界數據時候,計算器自動做相應處理。1.3數據處理在程序的起始,建立了兩個棧,分別用來存儲操作數和操作符。在計算器的核心運算代買中,運用這兩個棧來實現算法中的優先級的處理,使用“#”號來標記目標計算公式的結束。目標計算公式通過計算器的鍵盤實現輸入,當按下“=”號之后,計算器通過調用計算器核心函數來實現數據的處理。2設計方案2.1設計方法本程序的實現使用了swing和awt兩個包,主題程序界面按鍵根據微軟計算器的布置界面進行設置,采用比較人性化的常規按鍵排布。返回計算結果的“=”號鍵使用了兩倍于普通按鍵面積的設計,使的擊中的概率更加大。2.2界面布局整體界面

5、是采用了borderlayout布局,通過4個panel進行布局的詳細劃分,panel3用來存儲位于panel4左下角的gridlayout(1,2,4,4)布局,panel1、panel2、panel3分別用來表示borderlayout的上中下三個模塊。panel1中添加了一個label display,display用來作為顯示器,實時的顯示輸入和計算的數據。其中display需要設置為右對齊和只讀屬性。panel2中添加數字輸入鍵和基本操作符鍵,panel采用了gridlayout布局,將整個panel2平分為4*4個空間,其中,數字鍵采用了15磅字體和藍色文字,操作符采用了15磅字體

6、和紅色文字,是的界面更加顯眼和便于區分。panel4中首先劃分為gridlayout(1,2,4,4),在panel4中,再次使用了gridlayout(1,2,4,4)將panel4的左側一分為二,左邊為panle3,這個的基礎上程序往panel3中添加了backspace和ce兩個按鍵,在panel4的右側單元格中添加了“=”號按鈕,這個時候的“=”號就是相當于兩個普通按鈕的長度和大小。3系統設計3.1界面設計圖3-1 系統初始運行界面截圖這個就是計算器界面,簡潔易用,我們可以從中的數字按鍵和運算符按鈕進行相應的數學計算,總共由19個按鈕(10個數字符+5個運算符號+1個小數點+1個“+/

7、-”按鈕+個“clear”按鈕+1個“backspace”按鈕)。3.2功能模塊3.2.1功能模塊的設計方案本次程序設計一共分為了5個類,每個類都各自完成不同的功能:(1)class mycalculator: 類mycalculator是主類,含有main()函數,通過new calframe()來運行程序。(2)class calframe: 類calframe完成的功能是計算器界面的設計,并且將每個組件都添加事件響應。具體的事件響應操作將在其他的類中逐一實現。(3)class handlewin:點擊關閉windows窗口的控制類。(4)class handlenum:字符串輸入控制類。

8、(5)class handleequal:等號出發事件的響應機制類。3.2.2功能模塊的實現方法(1)public void actionperformed(actionevent e)當按下了控制按鈕,根據搜索控制開關來確定能否繼續添加,各個相應的處理機制。(2)public double segmentation(string mystring)字符串優先級計算代碼的核心函數。(3)public int compare(char ch1,char ch2)1值為ch1大于ch2;-1為ch1小于ch2;0為ch1等于ch2(4)public double oprate(double a,c

9、har b,double ce)通過參數b來判斷加減乘除4系統的開發和運行環境及安裝配置說明本系統是利用java語言在netbeans ide6.5環境下開發的,java語言是當今流行的網絡編程語言,它具有面向對象、跨平臺、分布應用等特點。面向對象的開發方法是當今世界最流行的開發方法,它不僅具有更貼近自然的語義,而且有利于軟件的維護和繼承。為了進一步鞏固課堂上所學到的知識,深刻把握java語言的重要概念及其面向對象的特性,鍛煉學生熟練的應用面向對象的思想和設計方法解決實際問題的能力,開設了java程序設計課程設計。通過此次課程設計,鞏固所學java語言基本知識,增進java語言編輯基本功,掌握

10、jdk、editplus、eclipse、jcreator等開發工具的運用,拓寬常用類庫的應用。使學生通過該教學環節與手段,把所學課程及相關知識加以融會貫通,全面掌握java語言的編程思想及面向對象程序設計的方法,為今后從事實際工作打下堅實的基礎。5系統測試截圖5.1系統初始運行界面圖5-1 系統初始運行界面截圖5.2計算器按鍵測試圖5-2 系統按鍵測試截圖5.3運算符重復輸入測試圖5-3 加號重復輸入測試截圖5.4被除數為0的測試圖5-4的結果infinity截圖5.5小數點重復性檢查圖5-5小數點重復輸入錯誤檢查截圖5.6backspace按鍵越界操作圖5-6使用backspace鍵做越界

11、操作的截圖5.7優先級程序計算圖7 計算2/3+6*9-3截圖5.8計算結果圖5-8上面有優先級的公式計算結果6總結與心得體會這個學期的java課程設計-計算器對我來說是一個不斷學習,逐步完善的過程。開始的時候拿到題目看到只有四則混合運算就理所當然的認為應該是非常簡單的的一個程序而已。首先開始了程序的界面的設計。并且將一些簡單的按鈕的事件響應完成了。剩下了運算符優先級的問題以及數據的處理問題。于是在同學的幫助下利用正則表達式來完成輸入字符串的切割,但是如果自己一個人單挑來說,對于題目中的數據處理的問題一時不知道該如何與正則表達式連接上。最后我還是選擇用棧來處理。這個過程讓我明白了學習知識的時候

12、實踐與理論之間是有很大的差異的。應用能力我還有待加強。于是我開始熟悉棧的使用。以前在c+的學習中接觸過棧,這次的使用思想是一樣的,只需要在了解一下java 中的相關一些函數便可。但實際在寫程序的過程中,由于有一些特殊情況的考慮與進出入棧的聯系,還是碰到了一些問題。但在后來我慢慢的整理清楚思路以后,邏輯列清楚了,便也將這些問題解決了。逐步的將各項功能都完善了。當然目前我的計算器也只是完成了四則混合運算,實際上還應該有很多功能可以添加入計算器的。本次java課程設計也讓我明白只要我一步步去做,那么程序功能便會不斷強大。同時很重要的一點便是以后要多加強自己的動手實踐能力。附錄:源代碼:import

13、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; stack opnt = new stack (); stack optr

14、 = new stack (); label display; /顯示 jbutton num = new jbutton10;/按鍵設計 jbutton plus; jbutton minus; jbutton mutiply; jbutton divide; jbutton bs;jbutton ce;jbutton equal; jbutton point; jbutton sign;jbutton lbracket; jbutton rbracket; panel p1,p2,p3,p4; string disp = ;/用戶輸入的表達式 string result = ;/用戶輸入的

15、字符串 calframe() optr.push(#); for(int i=0;i=9;+i) numi = new jbutton(string.valueof(i); plus = new jbutton(+); 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(*); muti

16、ply.setforeground(color.red); mutiply.setfont(new font(dialog,1,15); divide = new jbutton(/); divide.setforeground(color.red); divide.setfont(new font(dialog,1,15); equal = new jbutton(=); equal.setforeground(color.red); equal.setfont(new font(dialog,1,15); point = new jbutton(.); point.setfont(new

17、font(dialog,1,15); sign = new jbutton(+/-); sign.setfont(new font(dialog,1,15); bs = new jbutton(backspace); bs.setforeground(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.

18、,label.right); display.setbackground(color.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(

19、minus); p2.add(num0);p2.add(sign);p2.add(point);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

20、,borderlayout.south); setvisible(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 handlenum

21、(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(ne

22、w 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;/小數點開關 boolean oprateswitch = false;/運算符開關 boolean siginswitch = true;/ class h

23、andlenum 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)if(e.getsource()=numitemp)/輸入數字字符oprateswitch = true;siginswitch = false;disp = disp + itemp;display.sett

24、ext(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;siginswitch = true;disp = disp + -;display.settext(disp);if(oprateswitc

25、h&e.getsource()=mutiply)/輸入乘號pointswitch = true;oprateswitch = false;siginswitch = true;disp = disp + *;display.settext(disp);if(oprateswitch&e.getsource()=divide)/輸入除號pointswitch = true;oprateswitch = false;siginswitch = true;disp = disp + /;display.settext(disp);if(oprateswitch&pointswitch=true&e.

26、getsource()=point)/輸入小數點pointswitch = false;oprateswitch = false;siginswitch = false;disp = disp + .;display.settext(disp);if(siginswitch&e.getsource()=sign)/輸入負號disp = disp + ;display.settext(disp);if(e.getsource()=bs)/點擊backspaceif(!disp.isempty()disp = disp.substring(0,disp.length()-1);if(disp.is

27、empty()disp= ;display.settext(disp);if(e.getsource()=ce)/點擊cedisp = ;display.settext(disp); class handleequal implements actionlistener/ 等于號觸發的事件 frame my_equal; handleequal(jframe f) my_equal = f; public void actionperformed(actionevent e) if(e.getsource()=equal) disp = disp+#; disp = string.valueo

28、f(segmentation(disp); display.settext(disp); disp = ; pointswitch = true;/小數點開關 oprateswitch = false;/運算符開關 siginswitch = true;/符號開關 public double segmentation(string mystring)string reg = (?d+.?d*)|(-+*/()#); /分割表達式.pattern p = ppile(reg);matcher m = p.matcher(mystring);string find = ;double num = 0;double op1,op2;char op3;while(m.find()find = m.group();find = find.replace(,-);trynum = double.valueof(find);opnt.push(num);catch(numberformatexception nfe) /find為操作符 if(compare(optr.p

溫馨提示

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

評論

0/150

提交評論