版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
/目錄TOC\o"1-3"\u1課設(shè)任務(wù)與要求 11.1課設(shè)任務(wù): 11.2創(chuàng)新要求: 11.3設(shè)計要求 12需求分析 12.1設(shè)計背景 12.2開發(fā)的技術(shù)與功能 23設(shè)計思路 24詳細設(shè)計 44.1功能實現(xiàn): 44.4程序設(shè)計過程 55系統(tǒng)調(diào)試 55.1運行調(diào)試 56參考文獻 7附錄 71課設(shè)任務(wù)與要求1.1課設(shè)任務(wù):
⑴、設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法以與取余運算(可以進行浮點數(shù)和負數(shù)的運算);⑵、有求倒數(shù)、退格和清零功能。1.2創(chuàng)新要求:能進行正切、余弦,以與求平方根、指數(shù)(包括對e)、自然對數(shù)運算。1.3設(shè)計要求 ①設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法和取余運算。且有小數(shù)點、正負號、求倒數(shù)、退格和清零功能。②課程設(shè)計可選用Eclipse、JBuilder、NetBeans等作為開發(fā)平臺以提高開發(fā)效率,通過資料查閱和學(xué)習(xí)盡可能熟練掌握其中一種集成開發(fā)環(huán)境。③認真按時完成課程設(shè)計報告,課程設(shè)計報告內(nèi)容包括:設(shè)計任務(wù)與要求、需求分析、設(shè)計思路、詳細設(shè)計、運行調(diào)試與分析討論和設(shè)計體會與小結(jié)六個部分。2需求分析2.1設(shè)計背景設(shè)計這個計算器主要是參考Windows操作系統(tǒng)中自帶的計算器,由于編者水平和時間的限制,不能將計算器設(shè)計到科學(xué)型與其他更復(fù)雜的類型,在設(shè)計過程中還參考了一些其他的優(yōu)秀設(shè)計。但本計算器除了常用的加減乘除(可以進行浮點和負數(shù)運算)這些基本運算外,還有求余、求倒、退格、清零,甚至還能進行一些復(fù)雜科學(xué)的運算,比如余弦(cos)、正切(tan)、指數(shù)運算(pow)、自然對數(shù)運算(log)、求平方根(sqrt)以與對e的指數(shù)運算(exp),并且還能進行連續(xù)運算??傮w上說來,本計算器設(shè)計簡單,代碼很少,程序很小,但功能卻很強大,這是同類計算器所不具備的。2.2開發(fā)的技術(shù)與功能本課程設(shè)計是要做一個圖形界面的計算器,其界面主要是由swing組件中的控件構(gòu)成。程序?qū)崿F(xiàn)了計算器的基本功能有:加、減、乘、除基本算術(shù)運算(可以進行浮點和負數(shù)運算)和sin、cos、tan等三角函數(shù)求值運算,同時能進行指數(shù)運算和自然對數(shù)運算,還有求倒數(shù)、退格和清零功能。3設(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é)果。
4詳細設(shè)計4.1功能實現(xiàn):①加減乘除求余以與指數(shù)運算②其他運算 Ⅰ、求平方根 Ⅱ、對數(shù)運算 Ⅲ、余弦運算 Ⅳ、正切運算 Ⅴ、e的指數(shù)運算 Ⅵ、倒數(shù)運算 ③主要方法說明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ù)④程序流程圖4.4程序設(shè)計過程設(shè)計過程:確定計算器函數(shù)功能和界面布局;設(shè)置框架,注冊監(jiān)聽事件,編寫方法;調(diào)試運行;改寫應(yīng)用程序,生成APPLET5系統(tǒng)調(diào)試5.1運行調(diào)試計算器界面如下:經(jīng)過調(diào)試后運行,計算器界面與windows自帶的計算器風(fēng)格基本一致實現(xiàn)了預(yù)期的效果;輸入數(shù)據(jù)進行驗證,各項函數(shù)功能實現(xiàn)均正常。6參考文獻丁振凡《Java語言使用教程》.北京郵件大學(xué)出版社,2006.9[2]丁振凡《Java語言使用教程實驗指導(dǎo)》.北京郵件大學(xué)出版社,2006.9[3]BruceEckel《Java編程思想》.機械工業(yè)出版社2007.6[4]耿祥義《JAVA2實用教程》.清華大學(xué)出版社2009.5附錄程序代碼如下:Appalication如下:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;importjava.lang.*;importjava.text.*;importjava.math.BigInteger;publicclassCalculatorimplementsActionListener{//動作監(jiān)聽接口JFrameframe;//框架JTextFieldtextShow;//文本行JPanelpanel,panel1,panel2,panel3;//面板JButtonbuttonBk,buttonCe,buttonC;JButtonbutton[];JButtonDot,AddAndSub,Add,Sub,Mul,Div,Mod,Sqrt,Dao,Equal,zhengxian,yuxian,jiecheng,duishu;JMenuBarmainMenu;//主菜單,子菜單,菜單項JMenueditMenu,viewMenu;JMenuItemcopyItem,pasteItem,tItem,sItem;DecimalFormatprec;//用于設(shè)置數(shù)據(jù)輸出精度49,67booleanclickable;//用于控制當(dāng)前能否按鍵doublevard,result;//用來保存double型數(shù)據(jù)的中間值(vard)和最后結(jié)果(result)intkey=-1,prekey=-1;//key用來保存當(dāng)前進行何種運算,prekey用來保存前次進行何種運算Stringcopy;//做復(fù)制,粘貼用//構(gòu)造函數(shù)publicCalculator(){clickable=true;result=0;frame=newJFrame("計算器—應(yīng)用非師范");prec=newDecimalFormat("0.######");//設(shè)置數(shù)據(jù)輸出精度(對于double型值)textShow=newJTextField(15);textShow.setText("");textShow.setHorizontalAlignment(textShow.RIGHT);textShow.setEditable(false);textShow.setBackground(newColor(255,255,255));panel=newJPanel();frame.getContentPane().add(panel);panel1=newJPanel();panel2=newJPanel();panel.setLayout(newBorderLayout());//菜單設(shè)置mainMenu=newJMenuBar();editMenu=newJMenu("編輯(E)");viewMenu=newJMenu("查看(V)");copyItem=newJMenuItem("復(fù)制(C)Ctrl+C");copyItem.addActionListener(this);pasteItem=newJMenuItem("粘貼(P)Ctrl+V");pasteItem.addActionListener(this);editMenu.add(copyItem);editMenu.add(pasteItem);tItem=newJMenuItem("★精簡型科學(xué)計算器");tItem.addActionListener(this);sItem=newJMenuItem("☆開發(fā)團隊");sItem.addActionListener(this);viewMenu.add(tItem);viewMenu.add(sItem);mainMenu.add(editMenu);mainMenu.add(viewMenu);panel.add(mainMenu,BorderLayout.NORTH);panel.add(textShow,BorderLayout.CENTER);panel.add(panel1,BorderLayout.SOUTH);panel1.setLayout(newBorderLayout());buttonBk=newJButton("Backspace");buttonBk.setForeground(newColor(255,0,0));buttonCe=newJButton("CE");buttonCe.setForeground(newColor(255,0,0));buttonC=newJButton("C");buttonC.setForeground(newColor(255,0,0));buttonBk.addActionListener(this);buttonCe.addActionListener(this);buttonC.addActionListener(this);panel1.add(panel2,BorderLayout.NORTH);panel2.setLayout(newFlowLayout(FlowLayout.RIGHT));panel2.add(buttonBk);panel2.add(buttonCe);panel2.add(buttonC);panel3=newJPanel();panel1.add(panel3,BorderLayout.CENTER);button=newJButton[14];for(inti=0;i<button.length;i++){button[i]=newJButton(Integer.toString(i));button[i].setForeground(newColor(22,22,255));}Dot=newJButton(".");Dot.setForeground(newColor(0,0,255));AddAndSub=newJButton("+/-");AddAndSub.setForeground(newColor(0,0,255));Add=newJButton("+");Add.setForeground(newColor(0,0,255));Sub=newJButton("-");Sub.setForeground(newColor(0,0,255));Mul=newJButton("*");Mul.setForeground(newColor(0,0,255));Div=newJButton("/");Div.setForeground(newColor(0,0,255));Mod=newJButton("%");Mod.setForeground(newColor(0,0,255));Sqrt=newJButton("sqrt");Sqrt.setForeground(newColor(0,0,255));Dao=newJButton("1/x");Dao.setForeground(newColor(0,0,255));Equal=newJButton("=");Equal.setForeground(newColor(0,0,255));jiecheng=newJButton("n!");jiecheng.setForeground(newColor(0,0,255));zhengxian=newJButton("sin");zhengxian.setForeground(newColor(0,0,255));yuxian=newJButton("cos");yuxian.setForeground(newColor(0,0,255));duishu=newJButton("log");duishu.setForeground(newColor(0,0,255));//將所有行為與監(jiān)聽綁定panel3.setLayout(newGridLayout(4,6,6,6));//panel3.add(button[7]);button[7].addActionListener(this);panel3.add(button[8]);button[8].addActionListener(this);panel3.add(button[9]);button[9].addActionListener(this);panel3.add(Div);Div.addActionListener(this);panel3.add(Sqrt);Sqrt.addActionListener(this);panel3.add(zhengxian);zhengxian.addActionListener(this);panel3.add(button[4]);button[4].addActionListener(this);panel3.add(button[5]);button[5].addActionListener(this);panel3.add(button[6]);button[6].addActionListener(this);panel3.add(Mul);Mul.addActionListener(this);panel3.add(Mod);Mod.addActionListener(this);panel3.add(yuxian);yuxian.addActionListener(this);panel3.add(button[1]);button[1].addActionListener(this);panel3.add(button[2]);button[2].addActionListener(this);panel3.add(button[3]);button[3].addActionListener(this);panel3.add(Sub);Sub.addActionListener(this);panel3.add(Dao);Dao.addActionListener(this);panel3.add(jiecheng);jiecheng.addActionListener(this);panel3.add(button[0]);button[0].addActionListener(this);panel3.add(AddAndSub);AddAndSub.addActionListener(this);panel3.add(Dot);Dot.addActionListener(this);panel3.add(Add);Add.addActionListener(this);panel3.add(Equal);Equal.addActionListener(this);panel3.add(duishu);duishu.addActionListener(this);frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);frame.pack();frame.show();}//設(shè)置各個按鈕的動作publicstaticintcalc(intn){intret=1;//BigInteger.ONE;for(Integeri=2;i<=n;i++){ret=ret*i;//.multiply(newBigInteger(i.toString()));}returnret;}publicvoidactionPerformed(ActionEventevent){booleansign=false;//判斷是否是double型數(shù)參與運算,是為true,不是為falseObjecttemp=event.getSource();try{//如果按下數(shù)字按鈕,將按下的按鈕代表的數(shù)據(jù)插入的當(dāng)前文本框字符串之后for(inti=0;i<=9;i++)if(temp==button[i]&&clickable==true)textShow.setText(textShow.getText()+Integer.toString(i));//按下'.'按鈕時,判斷當(dāng)前文本框內(nèi)字符串中含不含'.',如果已含,則不允許再插入'.'if(temp==Dot&&clickable==true){booleanisDot=false;if(textShow.getText().length()==0)isDot=true;for(inti=0;i<textShow.getText().length();i++)if('.'==textShow.getText().charAt(i)){isDot=true;break;}if(isDot==false)textShow.setText(textShow.getText()+".");}if((temp==Add||temp==Sub||temp==Mul||temp==Div)&&clickable==true){//'+'操作if(temp==Add){switch(prekey){case0:result+=Double.parseDouble(textShow.getText());break;case1:result-=Double.parseDouble(textShow.getText());break;case2:result*=Double.parseDouble(textShow.getText());break;case3:if(Double.parseDouble(textShow.getText())==0){textShow.setText("除數(shù)不能為零");clickable=false;}elseresult/=Double.parseDouble(textShow.getText());break;default:result=Double.parseDouble(textShow.getText());}textShow.setText("");prekey=key=0;}//'-'操作if(temp==Sub){switch(prekey){case0:result+=Double.parseDouble(textShow.getText());break;case1:result-=Double.parseDouble(textShow.getText());break;case2:result*=Double.parseDouble(textShow.getText());break;case3:if(Double.parseDouble(textShow.getText())==0){textShow.setText("除數(shù)不能為零");clickable=false;}elseresult/=Double.parseDouble(textShow.getText());break;default:result=Double.parseDouble(textShow.getText());}textShow.setText("");prekey=key=1;}//'*'操作if(temp==Mul){switch(prekey){case0:result+=Double.parseDouble(textShow.getText());break;case1:result-=Double.parseDouble(textShow.getText());break;case2:result*=Double.parseDouble(textShow.getText());break;case3:if(Double.parseDouble(textShow.getText())==0){textShow.setText("除數(shù)不能為零");clickable=false;}elseresult/=Double.parseDouble(textShow.getText());break;default:result=Double.parseDouble(textShow.getText());}textShow.setText("");prekey=key=2;}//'/'操作if(temp==Div){switch(prekey){case0:result+=Double.parseDouble(textShow.getText());break;case1:result-=Double.parseDouble(textShow.getText());break;case2:result*=Double.parseDouble(textShow.getText());break;case3:if(Double.parseDouble(textShow.getText())==0){textShow.setText("除數(shù)不能為零");clickable=false;}elseresult/=Double.parseDouble(textShow.getText());break;default:result=Double.parseDouble(textShow.getText());}textShow.setText("");prekey=key=3;}}//'='操作if(temp==Equal&&clickable==true){//如果連續(xù)按'=',則進行連續(xù)運算if(prekey==5){if(key==0){result+=vard;textShow.setText(prec.format(result));}if(key==1){result-=vard;textShow.setText(prec.format(result));}if(key==2){result*=vard;textShow.setText(prec.format(result));}if(key==3){if(Double.parseDouble(textShow.getText())==0){textShow.setText("除數(shù)不能為零");clickable=false;}else{result/=vard;textShow.setText(prec.format(result));}}}else{vard=Double.parseDouble(textShow.getText());if(key==0){prekey=-1;result+=Double.parseDouble(textShow.getText());textShow.setText(prec.format(result));}if(key==1){prekey=-1;result-=Double.parseDouble(textShow.getText());textShow.setText(prec.format(result));}if(key==2){prekey=-1;result*=Double.parseDouble(textShow.getText());textShow.setText(prec.format(result));}if(key==3){prekey=-1;if(Double.parseDouble(textShow.getText())==0){textShow.setText("除數(shù)不能為零");clickable=false;}else{result/=Double.parseDouble(textShow.getText());textShow.setText(prec.format(result));}}}prekey=5;}//'%'操作,對第二個操作數(shù)除以100if(temp==Mod&&clickable==true){if(result==0){Strings=textShow.getText();textShow.setText(s);}else{booleanisDot=false;for(inti=0;i<textShow.getText().length();i++)if('.'==textShow.getText().charAt(i)){isDot=true;break;}//如果是double數(shù),除100if(isDot==true){doubledtemp=Double.parseDouble(textShow.getText());dtemp=dtemp/100.0;textShow.setText(Double.toString(dtemp));}else{//如果是int數(shù)但能被100整除,則去掉末尾兩個零if(Integer.parseInt(textShow.getText())%100==0){intitemp=Integer.parseInt(textShow.getText());itemp/=100;textShow.setText(Integer.toString(itemp));}//如果是int數(shù),但不能被100整除,則按double數(shù)處理else{doubledtemp=Double.parseDouble(textShow.getText());dtemp=dtemp/100.0;textShow.setText(Double.toString(dtemp));}}}}//開根號運算if(temp==Sqrt&&clickable==true){Strings=textShow.getText();if(s.charAt(0)=='-'){textShow.setText("負數(shù)不能開根號");clickable=false;}elsetextShow.setText(Double.toString(Math.sqrt(Double.parseDouble(textShow.getText()))));}//正弦運算if(temp==zhengxian&&clickable==true){Strings=textShow.getText();textShow.setText(Double.toString(Math.sin(Double.parseDouble(textShow.getText()))));}//余弦運算if(temp==yuxian&&clickable==true){Strings=textShow.getText();textShow.setText(Double.toString(Math.cos(Double.parseDouble(textShow.getText()))));}//對數(shù)運算if(temp==duishu&&clickable==true){Strings=textShow.getText();if(s.charAt(0)=='-'){textShow.setText("負數(shù)不能取對數(shù)");clickable=false;}elsetextShow.setText(Double.toString(Math.log10(Double.parseDouble(textShow.getText()))));}//階乘運算if(temp==jiecheng&&clickable==true){Strings=textShow.getText();if(s.charAt(0)=='-'){textShow.setText("負數(shù)不能階乘運算");clickable=false;}else{//textShow.setText(Double.toString(Math.sqrt(Double.parseDouble(textShow.getText())))); //textShow.setText(Double.toString(Arith.factorial(int(textShow.getText()))));}}//倒數(shù)運算if(temp==Dao&&clickable==true){if(textShow.getText().charAt(0)=='0'&&textShow.getText().length()==1){textShow.setText("零不能求倒數(shù)");clickable=false;}else{booleanisDec=true;inti,j,k;Strings=Double.toString(1/Double.parseDouble(textShow.getText()));for(i=0;i<s.length();i++)if(s.charAt(i)=='.')break;for(j=i+1;j<s.length();j++)if(s.charAt(j)!='0'){isDec=false;break;}if(isDec==true){Stringstemp="";for(k=0;k<i;k++)stemp+=s.charAt(k);textShow.setText(stemp);}elsetextShow.setText(s)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版:電子產(chǎn)品物流運輸合作協(xié)議
- 2024年風(fēng)電升壓站建設(shè)與電氣安裝合同
- 2025年礦權(quán)轉(zhuǎn)讓項目評估與咨詢合同協(xié)議3篇
- 寶雞中北職業(yè)學(xué)院《研究設(shè)計與寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年綠色社區(qū)地下車位租賃及轉(zhuǎn)讓合同3篇
- 2025版礦石加工與質(zhì)量檢測服務(wù)合同范本3篇
- 2024年電商行業(yè)退貨協(xié)議示例大全版B版
- 2024年輸送泵長期租賃合同3篇
- 2025版貨運企業(yè)貨運貨物損失賠償協(xié)議3篇
- 2025版建筑公司勞務(wù)輸出與員工福利保障合同3篇
- 小學(xué)信息科技《數(shù)據(jù)與編碼-探索生活中的“編碼”》教學(xué)設(shè)計
- 工程款代扣代付款協(xié)議書(2篇)
- 2024年湖北省高考化學(xué)試卷真題(含答案解析)
- 物業(yè)充電樁合作加盟協(xié)議書范文
- 2023春國開會計實務(wù)專題形考任務(wù)4題庫1及答案
- 現(xiàn)有民辦學(xué)校選擇登記為營利性民辦學(xué)校辦理流程
- 機械工安全操作規(guī)程有哪些(11篇)
- 期末測試卷(一)(試題)2023-2024學(xué)年二年級上冊數(shù)學(xué)蘇教版
- 2024中國華電集團限公司校招+社招高頻難、易錯點500題模擬試題附帶答案詳解
- 國家開放大學(xué)電大《會計信息系統(tǒng)》期末終考題庫及標準參考答案
- 【飛科電器公司基于杜邦分析法的財務(wù)分析案例(7700字論文)】
評論
0/150
提交評論