計算器java課程設(shè)計(完整版)_第1頁
計算器java課程設(shè)計(完整版)_第2頁
計算器java課程設(shè)計(完整版)_第3頁
計算器java課程設(shè)計(完整版)_第4頁
計算器java課程設(shè)計(完整版)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..第1頁共11頁"面向?qū)ο蟪绦蛟O(shè)計"課程設(shè)計報告課程設(shè)計題目:計算器學(xué)生:婉如專業(yè):信息管理與信息系統(tǒng)班級:1424603指導(dǎo)教師:司紅偉2016年5月25日一、課設(shè)任務(wù)及要求1〕課設(shè)任務(wù):⑴設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法以及取余運算〔可以進展浮點數(shù)和負數(shù)的運算〕。⑵有求倒數(shù)、退格和清零功能。2〕創(chuàng)新要求:能進展正切、余弦,以及求平方根、指數(shù)〔包括對e〕、自然對數(shù)運算。3〕設(shè)計要求①設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法和取余運算。且有小數(shù)點、正負號、求倒數(shù)、退格和清零功能。②課程設(shè)計可選用Eclipse、uilder、NetBeans等作為開發(fā)平臺以提高開發(fā)效率,通過資料查閱和學(xué)習(xí)盡可能熟練掌握其中一種集成開發(fā)環(huán)境。③認真按時完成課程設(shè)計報告,課程設(shè)計報告容包括:設(shè)計任務(wù)與要求、需求分析、設(shè)計思路、詳細設(shè)計、運行調(diào)試與分析討論和設(shè)計體會與小結(jié)六個局部。二、設(shè)計思路⑴本應(yīng)用程序繼承自框架類〔JFrame〕,容器Containerc采用BorderLayout邊緣布局,將單行文本框參加到"North〞區(qū)域,包含各種按鈕的面板JPanelp參加到〞Center〞區(qū)域。包含各種按鈕的面板JPanelp采用3行6列的網(wǎng)格布局,然后將數(shù)字按鈕和運算符按鈕以及控制按鈕用一個for循環(huán)添加到面板中同時注冊按鈕事件監(jiān)聽器。如:Buttonb=newButton();b.addActionListener(事件監(jiān)聽器);⑵事件監(jiān)聽器中的事件處理方法voidactionPerformed(ActionEventevt)完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件〔〞0〞,〞1〞,〞2〞…〞8〞,〞9〞〕、運算符按鈕事件〔〞+〞,〞-",〞*〞,〞/〞,〞%〞〕、正負號按鈕事件〔〞+/-"〕、小數(shù)點按鈕事件〔〞.〞〕、等號按鈕事件〔〞=〞〕、求倒按鈕事件〔〞求倒〞〕、退格按鈕事件〔〞退格〞〕、去除按鈕事件("C〞)、正切〔tan〕、余弦〔cos〕,以及求平方根〔sqrt〕、指數(shù)〔pow〕、對e的指數(shù)〔exp〕、對數(shù)運算〔log〕。⑶在事件處理,觸發(fā)按鈕事件時,先判斷是或是數(shù)字是或是"-/+〞是或是".〞,是的話就將負號"-〞、數(shù)字、小數(shù)點".〞分別寫入文本框并存放在sum中,然后判斷是或是"退格〞、"求倒〞等,是的話進展相應(yīng)的處理,都不是的話那么跳到doOperation()執(zhí)行運算同時將運算符存放在preOperater中。觸發(fā)按鈕事件時,要進一步分析,是重新開場計算時觸發(fā)的按鈕事件還是計算中間觸發(fā)的按鈕事件。⑷計算器完成的是一個數(shù)學(xué)表達式,如:3+2,所以可以采用一個數(shù)組來存儲數(shù)字或字符,如3,+,2分別存儲在數(shù)組中,最后運算時,可以一一取出來進展運算。⑸利用按鈕設(shè)計計算器的各個運算符和操作符,通過按鈕的事件處理實現(xiàn)按鈕計算功能。⑹利用文本框顯示操作數(shù)和運算結(jié)果。三、詳細設(shè)計⑴、功能實現(xiàn):①加減乘除求余以及指數(shù)運算voiddoOperation(){ doublem=Double.parseDouble(x.getText()); if(preOperater.equals(""))sum=m;//無前一操作,結(jié)果為剛輸入數(shù) //將結(jié)果與文本框中的數(shù)據(jù)按照前一個運算符運算 if(preOperater.equals("+"))sum=sum+m;//加法運算 if(preOperater.equals("-"))sum=sum-m;//減法運算 if(preOperater.equals("*"))sum=sum*m;//乘法運算 if(preOperater.equals("/"))sum=sum/m;//除法運算 if(preOperater.equals("%"))sum=sum%m;//求余 if(preOperater.equals("pow"))sum=Math.pow(sum,m);//求冪,指數(shù)運算}②其他運算Ⅰ、求平方根Voidsqrt〔〕{ doublem=Double.parseDouble(x.getText());if(m<0) x.setText("負數(shù)不能開根號"); elsex.setText(""+Math.sqrt(m)); }Ⅱ、對數(shù)運算Voidlog〔〕{ doublem=Double.parseDouble(x.getText());if(m<0) x.setText("負數(shù)不能進展自然對數(shù)運算");elsex.setText(""+Math.log(m)); }Ⅲ、余弦運算Voidcos〔〕{ doublem=Double.parseDouble(x.getText()); x.setText(""+Math.cos(m)); }Ⅳ、正切運算Voidtan〔〕{ doublem=Double.parseDouble(x.getText()); x.setText(""+Math.tan(m)); }Ⅴ、e的指數(shù)運算Voidexp〔〕{ doublem=Double.parseDouble(x.getText()); x.setText(""+Math.exp(m)); }Ⅵ、倒數(shù)運算Voiddaoshu〔〕{ if(Double.parseDouble(x.getText())==0) x.setText("除數(shù)不能為零"); else{ x.setText(""+1/(Double.parseDouble(x.getText()))); preOperater=""; } }③主要方法說明publiccos(doublex) //求x的余弦函數(shù)publictan(doublex) //求x的正切函數(shù)publicsqrt(doublex) //求x的平方根publiclog(doublex) //求x的自然對數(shù)運算publicexp(doublex) //求e的x次冪publicpow(doublea,doubleb) //求a的b次冪publicdaoshu(doublex) //求x的倒數(shù)⑵、算法思路:這是一個簡單的計算器,里面所涉及到的功能就是加、減、乘、除、等根本功能。在輸入數(shù)據(jù)之后Character.isDigit(mand.charAt(0))判斷輸入的數(shù)據(jù)是否符合要求。不符合要求給出提示,符合要求以后將判斷點擊的運算符,執(zhí)行相應(yīng)的操作。對于單運算操作要進一步判斷是否符合要求,如果是就進入下步計算,如果不是就彈出相應(yīng)的提示:"負數(shù)不能開根號";"除數(shù)不能為零";用try….catch捕獲異常,如果有異常那么中止活動。在進展開方〔sqrt〕運算時,如果輸入數(shù)為負數(shù),那么彈出"負數(shù)不能開根號",中止運算。在進展自然對數(shù)運算時〔log〕如果輸入數(shù)為負數(shù),那么彈出"負數(shù)不能進展自然對數(shù)運算〞。在進展三角函數(shù)運算時〔cos、tan〕不必考慮輸入的數(shù)字是否符合規(guī),對于任意輸入的數(shù)函數(shù)本身有一個判斷的過程,都能把輸入的數(shù)轉(zhuǎn)化為適宜的圍,進而得到正確的結(jié)果。對于加減乘除等雙運算操作,每個功能都由每一個模塊來實現(xiàn),當(dāng)按下加按鈕時,進展相應(yīng)的加法操作,這一塊對相應(yīng)的操作數(shù)沒有要求;當(dāng)點擊減號時,那么進展減法操作,由jTextField.getText()得到數(shù)字按鈕的值顯示在相應(yīng)的文本框中;乘法操作在點擊一個操作數(shù)然后點擊乘號再點擊另一個時得出相應(yīng)的結(jié)果顯示在文本框中;在作除法運算時,當(dāng)被除數(shù)點擊為零時,調(diào)用catch進展異常處理,彈出"Infinity〞。⑶、數(shù)據(jù)分析在事件處理,觸發(fā)按鈕事件時,先判斷是或是數(shù)字是或是"-/+〞是或是".〞,是的話就將負號"-〞、數(shù)字、小數(shù)點".〞分別寫入文本框并存放在sum中,然后判斷是或是"退格〞、"求倒〞等,是的話進展相應(yīng)的處理,都不是的話那么跳到doOperation()執(zhí)行運算同時將運算符存放在preOperater中。觸發(fā)按鈕事件時,要進一步分析,是重新開場計算時觸發(fā)的按鈕事件還是計算中間觸發(fā)的按鈕事件。⑷、程序代碼importjava.util.*;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassCalculaterextendsJFrameimplementsActionListener{JTextFieldx;//文本框StringpreOperater="";//上一次的運算符doublesum=0;//運算結(jié)果publicCalculater(Stringtitle){super(title);Containerc=getContentPane();//容器c.setLayout(newBorderLayout());//容器采用邊緣布局x=newJTextField(50);c.add("North",x);Stringbuttoned[]={"0","1","2","3","+/-",".","C","退格","求倒","4","5","6","7","+","-","*","/","%","8","9","=","sqrt","pow","log","cos","tan","exp"};JPanelp=newJPanel();//面板p.setLayout(newGridLayout(3,9,10,10));//面板采用行列數(shù)3,6的網(wǎng)格布局for(intk=0;k<buttoned.length;k++){//用一個for循環(huán)將按鈕添加進面板并注冊監(jiān)聽器uttonb=newutton(buttoned[k]);p.add(b);b.addActionListener(this);}c.add("Center",p);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//響應(yīng)用戶事件,根據(jù)點擊按鈕實現(xiàn)相關(guān)操作publicvoidactionPerformed(ActionEvente){ Stringmand=e.getActionmand(); try{ if(Character.isDigit(mand.charAt(0))){//如果按鈕事件為數(shù)字鍵 x.setText(x.getText()+mand);//添加數(shù)字 } elseif(mand.equals(".")){//如果按鈕事件為"."鍵 xiaoshu(); } elseif(mand.equals("+/-")){//如果按鈕事件為"+/-"鍵 fuhao(); } elseif(mand.equals("退格")){//如果按鈕事件為"退格"鍵 backspace(); } elseif(mand.equals("=")){//如果按鈕事件為"="鍵 dengyu(); } elseif(mand.equals("sqrt")){//如果按鈕事件為"sqrt"鍵 sqrt(); } elseif(mand.equals("log")){//如果按鈕事件為"log"鍵 log(); } elseif(mand.equals("cos")){//如果按鈕事件為"cos"鍵 cos(); } elseif(mand.equals("tan")){//如果按鈕事件為"tan"鍵 tan(); } elseif(mand.equals("exp")){//如果按鈕事件為"exp"鍵 exp(); } elseif(mand.equals("求倒")){//如果按鈕事件為"求倒"鍵 qiudao(); } elseif(mand.equals("C")){//如果按鈕事件為"C"鍵 clear(); } else{ doOperation();//記錄運算符和輸入的數(shù)字 x.setText(""); preOperater=mand; } }catch(Exceptionex){sum=0;x.setText("");}}voidxiaoshu(){//添加小數(shù)點 Strings=x.getText(); if(s.indexOf(".")==-1) x.setText(s+".");}voidfuhao(){//添加負號 Strings=x.getText(); if(s.indexOf("-")==-1) x.setText("-"+x.getText());}voidbackspace(){//退格 Strings=x.getText(); if(s.length()>0) x.setText(s.substring(0,s.length()-1));//刪除最后一個字符}voiddengyu(){//等號,顯示計算結(jié)果 doOperation(); x.setText(""+sum); preOperater="";}voidsqrt(){//求該數(shù)的平方根 doublem=Double.parseDouble(x.getText()); if(m<0) x.setText("負數(shù)不能開根號"); else x.setText(""+Math.sqrt(m));}voidlog(){//求該數(shù)的自然對數(shù)doublem=Double.parseDouble(x.getText()); if(m<0) x.setText("負數(shù)不能進展自然對數(shù)運算"); else x.setText(""+Math.log(m));}voidcos(){//求該數(shù)的余弦 doublem=Double.parseDouble(x.getText()); x.setText(""+Math.cos(m));}voidtan(){//求該數(shù)的正切 doublem=Double.parseDouble(x.getText()); x.setText(""+Math.tan(m));}voidexp(){//求e的冪 doublem=Double.parseDouble(x.getText()); x.setText(""+Math.exp(m));}voidqiudao(){//求倒 if(Double.parseDouble(x.getText())==0) x.setText("除數(shù)不能為零"); else{ x.setText(""+1/(Double.parseDouble(x.getText()))); preOperater=""; } }voidclear(){//清零 sum=0; x.setText(""); preOperater="";}//根據(jù)記錄的運算符將前面記錄的結(jié)果sum與文本框中的數(shù)據(jù)進展運算voiddoOperation(){ doublem=Double.parseDouble(x.getText()); if(preOperater.equals(""))sum=m; //將結(jié)果與文本框中的數(shù)據(jù)按照前一個運算符運算 if(preOperater.equals("+"))sum=sum+m;//加法運算 if(preOperater.equals("-"))sum=sum-m;//減法運算 if(preOperater.equals("*"))sum=sum*m;//乘法運算 if(preOperater.equals("/"))sum=sum/m;//除法運算 if(preOperater.equals("%"))sum=sum%m;//求余 if(preOperater.equals("pow"))sum=Math.pow(sum,m);//求冪}publicstaticvoidmain(Stringa[]){JFramex=newCalculater("計算器");x.setSize(650,300);x.setVisible(true);}}四、運行調(diào)試設(shè)計時先在設(shè)計界面中添加按鈕等控件,后在按鈕的actionPerformed事件中添加代碼完成其功能其中調(diào)用了Java類中的Math函數(shù)庫以及各種字符串操作。設(shè)計的界面如下:圖1計算器運行界面⑴進展加減乘除求余以及指數(shù)運算。①帶負數(shù)的浮點加法運算〔例:-1.2+2=0.8〕依次按"+/-〞〔也可以最后按〕,"1〞,".〞,"2〞鍵按下"+〞鍵按下"2〞鍵按下"=〞鍵其余運算同理,鑒于篇幅此處就不再一一列舉。⑵、求倒再按下"求倒〞鍵⑶、退格按下"退格〞鍵⑷、清零按下"c〞鍵⑸、求余弦

溫馨提示

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

評論

0/150

提交評論