計(jì)算器 java程序設(shè)計(jì)._第1頁(yè)
計(jì)算器 java程序設(shè)計(jì)._第2頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄1. 課程設(shè)計(jì)目的22. 設(shè)計(jì)題目分析22. 1題目簡(jiǎn)介22. 2設(shè)計(jì)要求及需求分析23. 課程設(shè)計(jì)內(nèi)容33. 1總體設(shè)計(jì)33.2計(jì)算器功能模塊設(shè)計(jì)43.3計(jì)算器算法流程設(shè)計(jì)43.4類(lèi)的設(shè)計(jì)53. 5代碼實(shí)現(xiàn):63.5設(shè)計(jì)結(jié)果與分析84. 設(shè)計(jì)心得與總結(jié)10參考文獻(xiàn):10附錄:1131課程設(shè)計(jì)目的通過(guò)課程設(shè)計(jì)把知識(shí)形成系統(tǒng),把自己所學(xué)的知識(shí)在實(shí)際問(wèn)題中加以運(yùn)用。如果自己編寫(xiě)的程序能夠給更多的人帶來(lái)方便,并且得到人們的好評(píng),那么自己編寫(xiě)的程序就可以實(shí)現(xiàn)商品化,形成產(chǎn)品給更多的人利用,并實(shí)現(xiàn)一定的商品價(jià)值。因此本次課程設(shè)計(jì)有目的有以下幾點(diǎn):(1)復(fù)習(xí)鞏固java語(yǔ)言的基礎(chǔ)知識(shí),進(jìn)一步加深對(duì)ja

2、va語(yǔ)言的理解和掌控。(2)提供一個(gè)既動(dòng)手又動(dòng)腦,獨(dú)立實(shí)踐的機(jī)會(huì),將課本上的理論知識(shí)和實(shí)際有機(jī)結(jié)合起來(lái),鍛煉我們的分析解決實(shí)際問(wèn)題的能力。提高我們適應(yīng)實(shí)際,實(shí)踐編程的能力。(3)培養(yǎng)我們?cè)陧?xiàng)目開(kāi)發(fā)中創(chuàng)新意識(shí)及能力,通過(guò)親身實(shí)踐,利用所學(xué)編寫(xiě)簡(jiǎn)單的面向?qū)ο蟪绦?,提高?duì)面向?qū)ο蠹癑AVA語(yǔ)言的理解。2設(shè)計(jì)題目分析2. 1題目簡(jiǎn)介設(shè)計(jì)一個(gè)圖形界面(GUI)的計(jì)算器應(yīng)用程序,完成簡(jiǎn)單的算術(shù)運(yùn)算、設(shè)計(jì)的計(jì)算器應(yīng)用程序可以完成家法、減法、乘法、除法。2.2設(shè)計(jì)要求及需求分析設(shè)計(jì)要求:由于現(xiàn)代用戶(hù)更傾向于由鼠標(biāo)方便操作的圖形用戶(hù)界面,所以我們采用GUI來(lái)實(shí)現(xiàn)計(jì)算器,并采用Swing組件,AWT事件處理等實(shí)現(xiàn)

3、具體功能。背景需求分析:在我們?nèi)粘I钪校?jì)算開(kāi)支、收入時(shí),大額數(shù)字或是多倍小數(shù)的計(jì)算都需要計(jì)算器的幫助,而在學(xué)習(xí)一些科目時(shí),也常常要處理數(shù)字。雖然現(xiàn)在的計(jì)算器價(jià)格比較低廉,但是功能過(guò)于簡(jiǎn)單的不能滿(mǎn)足個(gè)人需求,功能多的價(jià)格較貴,不僅操作不便,很多功能也根本用不到。所以我們想用自己所學(xué)設(shè)計(jì)開(kāi)發(fā)一個(gè)屬于自己的簡(jiǎn)單計(jì)算器來(lái)完成日常學(xué)習(xí)生活的需求。3課程設(shè)計(jì)內(nèi)容3. 1總體設(shè)計(jì)本應(yīng)用程序繼承自框架類(lèi)(Frame),此程序使用Frame布局管理器BorderLayout,將單行文本框加入到“North"區(qū)域,包含各種按鈕的面板Panelp加入到”Center"區(qū)域。包含各種按鈕的面板

4、Panelp采用4行4列的網(wǎng)格布局,然后將數(shù)字按鈕和運(yùn)算符按鈕以及控制按鈕添加到面板中。同時(shí)注冊(cè)按鈕事件監(jiān)聽(tīng)器。如:Buttonb二newButton();b.addActionListener(事件監(jiān)聽(tīng)器);事件監(jiān)聽(tīng)器中的事件處理方法voidactionPerformed(ActionEventevt)完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件("0","1","2”8","9”)、運(yùn)算符按鈕事件(”+","-“,”*",”/”,”%”)、正負(fù)號(hào)按鈕事件(”+/-“)、小數(shù)

5、點(diǎn)按鈕事件(”.”)、等號(hào)按鈕事件(”=”)、求倒按鈕事件(”1/x”)、退格按鈕事件("退格”)、清楚按鈕事件(“C”)。觸發(fā)按鈕事件時(shí),要進(jìn)一步分析,是重新開(kāi)始計(jì)算時(shí)觸發(fā)的按鈕事件還是計(jì)算中間觸發(fā)的按鈕事件。計(jì)算器完成的是一個(gè)數(shù)學(xué)表達(dá)式,如:3+2,所以可以采用一個(gè)鏈表(LinkedList類(lèi)、來(lái)存儲(chǔ)數(shù)字或字符,如3,+,2分別存儲(chǔ)在鏈表中,最后運(yùn)算時(shí),可以一一取出來(lái)進(jìn)行運(yùn)算。計(jì)算器設(shè)計(jì)外形及結(jié)構(gòu)如下:系統(tǒng)總體設(shè)計(jì)框架Panel2PanellPanel:4*4的數(shù)字及運(yùn)算鍵Panel2:輸入及運(yùn)行結(jié)果顯示及倒退清空鍵3.2計(jì)算器功能模塊設(shè)計(jì)以下為標(biāo)準(zhǔn)計(jì)算器的基本功能:(1)加法兩

6、個(gè)數(shù)據(jù)進(jìn)行加操作,可以為小數(shù)。2)減法兩個(gè)數(shù)據(jù)進(jìn)行減操作,可以為負(fù)數(shù)相減。3)乘法兩個(gè)數(shù)相乘操作。4)除法兩個(gè)數(shù)相除操作。(5)清零清除顯示框的數(shù)據(jù)。具體的計(jì)算器功能模塊圖如下:33計(jì)算器算法流程設(shè)計(jì)計(jì)算器的程序設(shè)計(jì),必然有數(shù)據(jù)的輸入,當(dāng)中就包含運(yùn)算符和數(shù)字,都要通過(guò)計(jì)算器上的button按鈕選項(xiàng)按鍵輸入進(jìn)去,里面錄入的為字符型的數(shù)據(jù),若要進(jìn)行運(yùn)算,要將輸入的字符轉(zhuǎn)換成double型,以防運(yùn)算出錯(cuò)。實(shí)現(xiàn)計(jì)算器算法功能的流程圖如下所示:34類(lèi)的設(shè)計(jì)classjisuanextendsJFrameimplementsActionListener/jisuan是初始化界面,以及響應(yīng)用戶(hù)的操作。jis

7、uan是個(gè)內(nèi)部類(lèi),功能是進(jìn)行進(jìn)制的轉(zhuǎn)換。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;這三項(xiàng)是系統(tǒng)初始時(shí)需要引入的主類(lèi)以達(dá)到完成界面的目的。35代碼實(shí)現(xiàn):1、引入主類(lèi):importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassjisuanextendsJFrameimplementsActionListener2、實(shí)現(xiàn)計(jì)算器界面的關(guān)閉與擴(kuò)展privatestaticfinallongserialVersionUID=-1690684721

8、93786457L;privateclassWindowCloserextendsWindowAdapterpublicvoidwindowClosing(WindowEventwe)System.exit(0);3、建立按鍵并為每個(gè)按鍵賦予相應(yīng)的字符inti;privatefinalStringstr="7","8","9","/","4","5","6","*","+"JButtonbuttons=newJBut

9、tonstr.length;JButtonreset=newJButton("CE");JTextFielddisplay=newJTextField("0");4、設(shè)計(jì)計(jì)算器界面publicjisuan()super("jisuan");JPanelpanel1=newJPanel(newGridLayout(4,4);for(i=0;i<str.length;i+)buttonsi=newJButton(stri);panel1.add(buttonsi);JPanelpanel2=newJPanel(newBorderLa

10、yout();panel2.add("Center",display);panel2.add("East",reset);getContentPane().setLayout(newBorderLayout();getContentPane().add("North",panel2);getContentPane().add("Center",panel1);5、為各個(gè)按鍵及顯示框添加事件監(jiān)聽(tīng)for(i=0;i<str.length;i+)buttonsi.addActionListener(this);/A

11、ddlistenerfor"reset"button,reset.addActionListener(this);/Addlistenerfor"display"button.display.addActionListener(this);/The"close"button"X".addWindowListener(newWindowCloser();/Initializethewindowsize.setSize(800,800);/Showthewindow./show();Usingshow()whileJD

12、Kversionisbelow1.5.setvisible(true);/Fitthecertainsize.pack();6、實(shí)現(xiàn)各個(gè)功能函數(shù)的調(diào)度publicvoidactionPerformed(ActionEvente)Objecttarget=e.getSource();Stringlabel=e.getActionCommand();if(target=reset)handleReset();elseif("0123456789.".indexOf(label)>0)handleNumber(label);elsehandleOperator(label)

13、;booleanisFirstDigit=true;publicvoidhandleNumber(Stringkey)if(isFirstDigit)display.setText(key);elseif(key.equals(".")&&(display.getText().indexOf(".")<0)display.setText(display.getText()+".");elseif(!key.equals(".")display.setText(display.getText()

14、+key);isFirstDigit=false;7、重置功能的實(shí)現(xiàn)publicvoidhandleReset()display.setText("0");isFirstDigit=true;operator="="doublenumber=0.0;Stringoperator="="8、運(yùn)算功能的實(shí)現(xiàn)publicvoidhandleOperator(Stringkey)if(operator.equals("+")number+=Double.vaLueO/(display.getText();elseif(op

15、erator.equals("-")number-=Double.valueOf(display.getText();elseif(operator.equals("*")number*=Double.valueOf(display.getText();elseif(operator.equals("/")number/=Double.valueOf(display.getText();elseif(operator.equals("=")number=Double.valueOf(display.getText(

16、);display.setText(String.valueOf(number);operator=key;isFirstDigit=true;publicstaticvoidmain(Stringargs)newjisuan();35設(shè)計(jì)結(jié)果與分析1、運(yùn)行的初始界面2、數(shù)字計(jì)算演示以計(jì)算(789+45)*23=19182為例,計(jì)算過(guò)程如下:輸入7891魚(yú)1ii&uan1=回£3834.0CE1£9i456123-10=+與45相加所得結(jié)果輸入23并相乘得到最終結(jié)果Bjisuan1=1丨回I0CE789i4&6*123-0=+點(diǎn)擊CE清零最后得到的結(jié)果為19

17、182,結(jié)果正確,計(jì)算器的各個(gè)功能均得以實(shí)現(xiàn)。4設(shè)計(jì)心得與總結(jié)通過(guò)此次的課程設(shè)計(jì)實(shí)踐,我們不但進(jìn)一步理解掌握了課上老師教授的知識(shí),而且通過(guò)查找資料學(xué)會(huì)了課上沒(méi)有的東西,進(jìn)一步理解了面向?qū)ο蟮暮x,發(fā)現(xiàn)了很多它比面向過(guò)程突出的地方,第一次接觸了圖形界面,初步了解了GUI方面的知識(shí)。在實(shí)踐中我們遇到了很多問(wèn)題,但我們都努力克服,并最終成功的完成了這次課程設(shè)計(jì)。通過(guò)編寫(xiě)這個(gè)相對(duì)復(fù)雜的程序,我們認(rèn)識(shí)解決實(shí)際問(wèn)題前應(yīng)先建立模型,再通過(guò)建立的模型使問(wèn)題簡(jiǎn)單化,從而解決問(wèn)題。并且這次編寫(xiě)的程序大部分是通過(guò)調(diào)用各包中的方法來(lái)實(shí)現(xiàn)的,這也讓我們充分理解了包和類(lèi)的調(diào)用關(guān)系。由于這次編寫(xiě)的程序比較復(fù)雜,所以不能一次

18、性編寫(xiě)、調(diào)試,也由此讓我們學(xué)會(huì)把程序分塊,逐個(gè)編寫(xiě)、調(diào)試。參考文獻(xiàn):2葉乃文,王丹面向?qū)ο蟪绦蛟O(shè)計(jì)M.清華大學(xué)出版社,2009.2邱桃榮,陳軼,馮纓.JAVA語(yǔ)言程序設(shè)計(jì)教程M.機(jī)械工業(yè)出版社,2009.2於東軍,楊靜宇,李千目,王國(guó)全.JAVA程序設(shè)計(jì)與應(yīng)用開(kāi)發(fā)M.清華大學(xué)出版社,2006.1113附錄:計(jì)算器的完整實(shí)現(xiàn)代碼:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassjisuanextendsJFrameimplementsActionListenerprivatestaticfinallon

19、gseriaLVersionUID=-169068472193786457L;privateclassWindowCloserextendsWindowAdapterpublicvoidwindowClosing(WindowEventwe)System.exit(0);inti;/StringsforDigit&Operatorbuttons,privatefinalStringstr="7","8","9","/","4","5","6",&q

20、uot;*","+"/Buildbuttons.JButtonbuttons=newJButtonstr.length;/Forcancelorreset.JButtonreset=newJButton("CE");/Buildthetextfieldtoshowtheresult.JTextFielddisplay=newJTextField("0");publicjisuan()super("jisuan");/Addapanel.JPanelpanel1=newJPanel(newGridLayou

21、t(4,4);/panel1.setLayout(newGridLayout(4,4);for(i=0;i<str.length;i+)buttonsi=newJButton(stri);panel1.add(buttonsi);JPanelpanel2=newJPanel(newBorderLayout();/panel2.setLayout(newBorderLayout();panel2.add("Center",display);panel2.add("East",reset);/JPanelpanel3=newPanel();getCon

22、tentPane().setLayout(newBorderLayout();getContentPane().add("North",panel2);getContentPane().add("Center",panel1);/Addactionlistenerforeachdigit&operatorbutton.for(i=0;i<str.length;i+)buttonsi.addActionListener(this);/Addlistenerfor"reset"button.reset.addActionLi

23、stener(this);/Addlistenerfor"display"button.display.addActionListener(this);/The"close"button"X".addWindowListener(newWindowCloser();/Initializethewindowsize.setSize(800,800);/Showthewindow./show();Usingshow()whileJDKversionisbelow1.5.setvisible(true);/Fitthecertainsize

24、.pack();publicvoidactionPerformed(ActionEvente)Objecttarget=e.getSource();Stringlabel=e.getActionCommand();if(target=reset)handleReset();elseif("0123456789.".indexOf(label)>0)handleNumber(label);elsehandleOperator(label);/Isthefirstdigitpressed?booleanisFirstDigit=true;publicvoidhandleNumber(Stringkey)if(isFirstDigit)display.setText(key);elseif(key.equals(".")&&(display.getText().indexOf(".")&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論