版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
IIIjava實(shí)現(xiàn)簡單的計(jì)算器目錄目錄 I1 需求分析 11.1 計(jì)算器的基本功能: 11.1.1 加法運(yùn)算:用數(shù)字按鈕和“+”按鈕進(jìn)行運(yùn)算; 11.1.2 減法運(yùn)算:用數(shù)字按鈕和“-”按鈕進(jìn)行運(yùn)算; 11.1.3 乘法運(yùn)算:用數(shù)字按鈕和“*”按鈕進(jìn)行運(yùn)算; 11.1.4 除法運(yùn)算:用數(shù)字按鈕和“/”按鈕進(jìn)行運(yùn)算; 11.2 退格鍵和清零鍵:用”Backspace”、”C”和”CE”按鈕實(shí)現(xiàn); 11.3 計(jì)算器的科學(xué)計(jì)算方法: 11.3.1 開方:用數(shù)字按鈕和“Sqrt”按鈕進(jìn)行運(yùn)算; 11.3.2 百分比:用數(shù)字按鈕和“%”按鈕進(jìn)行運(yùn)算; 11.3.3 求倒數(shù):用數(shù)字按鈕和“1/x”按鈕進(jìn)行運(yùn)算; 11.3.4 求自然對數(shù):用數(shù)字按鈕和“l(fā)n”按鈕進(jìn)行運(yùn)算; 11.3.5 三角函數(shù):用數(shù)字按鈕和“tan”“cos”“sin”按鈕進(jìn)行運(yùn)算 11.3.6 角度換算成弧度:用數(shù)字按鈕和“’””按鈕進(jìn)行運(yùn)算 11.3.7 求反:用數(shù)字按鈕和“-/+”按鈕進(jìn)行運(yùn)算 11.3.8 平方和三次方:用數(shù)字按鈕和“x^2”“x^3”按鈕進(jìn)行運(yùn)算 11.4 常數(shù): 21.4.1 π:用Math類中的PI來實(shí)現(xiàn) 21.4.2 自然對數(shù)e:用Math類中的E來實(shí)現(xiàn) 22 設(shè)計(jì) 22.1 用戶界面設(shè)計(jì) 22.1.1 該計(jì)算器程序的設(shè)計(jì):用戶界面包括Swing組件,不過程序中大都使用的是AWT組件. 22.1.2 在AWT組件, 22.1.3 這個界面設(shè)計(jì)中包含了五個接口,分別控制運(yùn)算符,數(shù)字,清除,存儲功能和小數(shù)點(diǎn)的輸入 22.1.4 程序設(shè)計(jì)中,使用了布局管理: 32.2 概要設(shè)計(jì) 32.2.1 它的功能是使用圖形用戶來實(shí)現(xiàn)計(jì)算器的界面設(shè)計(jì)和運(yùn)算功能以及一些科學(xué)運(yùn)算方法. 33 實(shí)現(xiàn) 34 測試 144.1 實(shí)現(xiàn)加法運(yùn)算:4+12=16 144.2 實(shí)現(xiàn)乘法運(yùn)算:3*9=27 154.3 用”C’實(shí)現(xiàn)清零功能: 164.4 用”Backspace”實(shí)現(xiàn)退格功能: 174.5 求倒數(shù):1/4=0.25 18第32頁共SECTIONPAGES32頁需求分析該計(jì)算器程序除了具備加減乘除基本功能外,還有清零鍵C、CE和退格鍵Backspace,和一些部分的科學(xué)計(jì)算方法,包括開方、求倒、百分比,由于時間問題,之后會完善鍵盤事件的監(jiān)聽功能。計(jì)算器的基本功能:加法運(yùn)算:用數(shù)字按鈕和“+”按鈕進(jìn)行運(yùn)算;減法運(yùn)算:用數(shù)字按鈕和“-”按鈕進(jìn)行運(yùn)算;乘法運(yùn)算:用數(shù)字按鈕和“*”按鈕進(jìn)行運(yùn)算;除法運(yùn)算:用數(shù)字按鈕和“/”按鈕進(jìn)行運(yùn)算;退格鍵和清零鍵:用”Backspace”、”C”和”CE”按鈕實(shí)現(xiàn);計(jì)算器的科學(xué)計(jì)算方法:開方:用數(shù)字按鈕和“Sqrt”按鈕進(jìn)行運(yùn)算;百分比:用數(shù)字按鈕和“%”按鈕進(jìn)行運(yùn)算;求倒數(shù):用數(shù)字按鈕和“1/x”按鈕進(jìn)行運(yùn)算;求自然對數(shù):用數(shù)字按鈕和“l(fā)n”按鈕進(jìn)行運(yùn)算;三角函數(shù):用數(shù)字按鈕和“tan”“cos”“sin”按鈕進(jìn)行運(yùn)算角度換算成弧度:用數(shù)字按鈕和“’””按鈕進(jìn)行運(yùn)算求反:用數(shù)字按鈕和“-/+”按鈕進(jìn)行運(yùn)算平方和三次方:用數(shù)字按鈕和“x^2”“x^3”按鈕進(jìn)行運(yùn)算常數(shù):π:用Math類中的PI來實(shí)現(xiàn)自然對數(shù)e:用Math類中的E來實(shí)現(xiàn)設(shè)計(jì)用戶界面設(shè)計(jì)該計(jì)算器程序的設(shè)計(jì):用戶界面包括Swing組件,不過程序中大都使用的是AWT組件.在AWT組件,使用了面板和按鈕組:JPanelpanel1,panel2,panel3,panel4;ButtonGroupbgb;由于該組件按鈕較多,設(shè)計(jì)一個方法簡化按鈕的設(shè)置voidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){ JButtonbt=newJButton(name); panel.add(bt);//在面板上增加按鈕 bt.setForeground(color);//設(shè)置字體顏色 bt.addActionListener(action);//增加監(jiān)聽事件這個界面設(shè)計(jì)中包含了五個接口,分別控制運(yùn)算符,數(shù)字,清除,存儲功能和小數(shù)點(diǎn)的輸入classSignsimplementsActionListenerclassNumimplementsActionListenerclassClearimplementsActionListenerclassMemoryimplementsActionListenerclassDotimplementsActionListener程序設(shè)計(jì)中,使用了布局管理:用邊布局管理器(BorderLayout)設(shè)置計(jì)算器容器各方位組件:panel4=newJPanel(newBorderLayout(5,5))panel4.add(panel1,BorderLayout.NORTH); panel4.add(panel2,BorderLayout.CENTER); this.add(tf,BorderLayout.NORTH); this.add(panel3,BorderLayout.WEST);用網(wǎng)格布局管理器(GridLayout)設(shè)置面板panel1=newJPanel(newGridLayout(1,3,10,10)); panel2=newJPanel(newGridLayout(5,6,5,5)); panel3=newJPanel(newGridLayout(5,1,5,5));概要設(shè)計(jì)計(jì)算器的整個程序包括:一個Calculator類它的功能是使用圖形用戶來實(shí)現(xiàn)計(jì)算器的界面設(shè)計(jì)和運(yùn)算功能以及一些科學(xué)運(yùn)算方法.類中包含了Calculator()構(gòu)造方法,和其他重要的成員方法,最終在main方法中實(shí)例化一個ca對象實(shí)現(xiàn)計(jì)算器的功能。實(shí)現(xiàn)packagecalculator;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.text.DecimalFormat;publicclassCalculatorextendsJFrame{ JTextFieldtf; JPanelpanel1,panel2,panel3,panel4; JMenuBarmyBar; JMenumenu1,menu2,menu3; JMenuItemeditItem1,editItem2,help1,help2,help3; JRadioButtonMenuItemseeItem1,seeItem2;//單選框 JCheckBoxMenuItemseeItem3;//復(fù)選框 ButtonGroupbgb; booleanIfResult=true,flag=false; Stringoper="="; doubleresult=0,memory=0; DecimalFormatdf; Calculator(){ super("科學(xué)計(jì)算器");//設(shè)置標(biāo)題欄 df=newDecimalFormat("#.####");//保留四位小數(shù) this.setLayout(newBorderLayout(10,5)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); //設(shè)置每個JPanel的參數(shù) panel1=newJPanel(newGridLayout(1,3,10,10)); panel2=newJPanel(newGridLayout(5,6,5,5)); panel3=newJPanel(newGridLayout(5,1,5,5)); panel4=newJPanel(newBorderLayout(5,5)); /** *菜單欄 */ myBar=newJMenuBar(); menu1=newJMenu("編輯(E)"); menu2=newJMenu("查看(V)"); menu3=newJMenu("幫助(H)"); menu1.setFont(newFont("宋體",Font.PLAIN,12)); menu2.setFont(newFont("宋體",Font.PLAIN,12)); menu3.setFont(newFont("宋體",Font.PLAIN,12)); /** *編輯欄 */ editItem1=newJMenuItem("復(fù)制(C)Ctrl+C"); editItem2=newJMenuItem("粘貼(P)Ctrl+V"); editItem1.setFont(newFont("宋體",Font.PLAIN,12)); editItem2.setFont(newFont("宋體",Font.PLAIN,12)); /** *查看欄 */ seeItem1=newJRadioButtonMenuItem("科學(xué)型(T)"); seeItem2=newJRadioButtonMenuItem("標(biāo)準(zhǔn)型(S)"); seeItem3=newJCheckBoxMenuItem("數(shù)字分組(I)"); seeItem1.setFont(newFont("宋體",Font.PLAIN,12)); seeItem2.setFont(newFont("宋體",Font.PLAIN,12)); seeItem3.setFont(newFont("宋體",Font.PLAIN,12)); /** *幫助欄 */ help1=newJMenuItem("幫助主題(H)"); help2=newJMenuItem("關(guān)于計(jì)算器(A)"); help1.setFont(newFont("宋體",Font.PLAIN,12)); help2.setFont(newFont("宋體",Font.PLAIN,12)); bgb=newButtonGroup();//選項(xiàng)組 menu1.add(editItem1); menu1.add(editItem2); menu2.add(seeItem1); menu2.add(seeItem2); menu2.addSeparator();//添加一條分割線 menu2.add(seeItem3); menu3.add(help1); menu3.addSeparator();//添加一條分割線 menu3.add(help2); myBar.add(menu1); myBar.add(menu2); myBar.add(menu3); this.setJMenuBar(myBar); /** *文本域,即為計(jì)算器的屏幕顯示區(qū)域 */ tf=newJTextField(); tf.setEditable(false);//文本區(qū)域不可編輯 tf.setBackground(Color.white);//文本區(qū)域的背景色 tf.setHorizontalAlignment(JTextField.RIGHT);//文字右對齊 tf.setText("0"); init();//對計(jì)算器進(jìn)行初始化 } /** *初始化操作 *添加按鈕 */ voidinit(){ addButton(panel1,"Backspace",newClear(),Color.red); addButton(panel1,"CE",newClear(),Color.red); addButton(panel1,"C",newClear(),Color.red); addButton(panel2,"1/x",newSigns(),Color.magenta); addButton(panel2,"ln",newSigns(),Color.magenta); addButton(panel2,"7",newNum(),Color.blue); addButton(panel2,"8",newNum(),Color.blue); addButton(panel2,"9",newNum(),Color.blue); addButton(panel2,"÷",newSigns(),Color.red); addButton(panel2,"n!",newSigns(),Color.magenta); addButton(panel2,"sqrt",newSigns(),Color.magenta); addButton(panel2,"4",newNum(),Color.blue); addButton(panel2,"5",newNum(),Color.blue); addButton(panel2,"6",newNum(),Color.blue); addButton(panel2,"×",newSigns(),Color.red); addButton(panel2,"sin",newSigns(),Color.magenta); addButton(panel2,"x^2",newSigns(),Color.magenta); addButton(panel2,"1",newNum(),Color.blue); addButton(panel2,"2",newNum(),Color.blue); addButton(panel2,"3",newNum(),Color.blue); addButton(panel2,"-",newSigns(),Color.red); addButton(panel2,"cos",newSigns(),Color.magenta); addButton(panel2,"x^3",newSigns(),Color.magenta); addButton(panel2,"0",newNum(),Color.blue); addButton(panel2,"-/+",newClear(),Color.blue); addButton(panel2,".",newDot(),Color.blue); addButton(panel2,"+",newSigns(),Color.red); addButton(panel2,"tan",newSigns(),Color.magenta); addButton(panel2,"%",newSigns(),Color.magenta); addButton(panel2,"π",newNum(),Color.orange); addButton(panel2,"e",newNum(),Color.orange); addButton(panel2,"′″",newSigns(),Color.orange); addButton(panel2,"=",newSigns(),Color.red); addButton(panel3,"MC",newMemory(),Color.red); addButton(panel3,"MS",newMemory(),Color.red); addButton(panel3,"MR",newMemory(),Color.red); addButton(panel3,"M-",newMemory(),Color.red); addButton(panel3,"M+",newMemory(),Color.red); panel4.add(panel1,BorderLayout.NORTH); panel4.add(panel2,BorderLayout.CENTER); this.add(tf,BorderLayout.NORTH); this.add(panel3,BorderLayout.WEST); this.add(panel4); pack(); //調(diào)整此窗口的大小,以適合其子組件的首選大小和布局 this.setResizable(false); //窗口不可改變大小 this.setLocation(300,200); } /** *統(tǒng)一設(shè)置按鈕的的使用方式 */ voidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){ JButtonbt=newJButton(name); panel.add(bt);//在面板上增加按鈕 bt.setForeground(color);//設(shè)置字體顏色 bt.addActionListener(action);//增加監(jiān)聽事件 } /** *計(jì)算器的基礎(chǔ)操作(+-×÷) */ voidgetResult(doublex){ if(oper.equals("+")){result+=x;} elseif(oper.equals("-")){result-=x;} elseif(oper.equals("×")){result*=x;} elseif(oper.equals("÷")){result/=x;} elseif(oper.equals("=")){result=x;} tf.setText(df.format(result)); } /** *運(yùn)算符號的事件監(jiān)聽 */ classSignsimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ /* *用ActionEvent對象的getActionCommand()方法取得與引發(fā)事件對象的字符串 */ Stringstr=e.getActionCommand(); /*sqrt求平方根*/ if(str.equals("sqrt")){ doublei=Double.parseDouble(tf.getText()); //將tf文本框中已經(jīng)輸入的數(shù)字字符串轉(zhuǎn)化為double類型的變量 if(i>=0){ /* *String.valueOf()轉(zhuǎn)換為字符串 *df.format()按要求保留四位小數(shù) *Math.sqrt()求算數(shù)平方根 */ tf.setText(String.valueOf(df.format(Math.sqrt(i)))); } else{ tf.setText("負(fù)數(shù)不能開平方根"); } } /** *用log函數(shù)求自然對數(shù) */ elseif(str.equals("ln")){ doublei=Double.parseDouble(tf.getText()); if(i>0){ tf.setText(String.valueOf(df.format(Math.log(i)))); }else{ tf.setText("負(fù)數(shù)不能求對數(shù)"); } } /*%求百分比*/ elseif(str.equals("%")){ tf.setText(String.valueOf(df.format(Double.parseDouble(tf.getText())/100))); } /*1/x求倒數(shù)*/ elseif(str.equals("1/x")){ if(Double.parseDouble(tf.getText())==0){ tf.setText("除數(shù)不能為零"); }else{ tf.setText(String.valueOf(df.format(1/Double.parseDouble(tf.getText())))); } } /*sin求正弦函數(shù)*/ elseif(str.equals("sin")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.sin(i)))); } /*cos求余弦函數(shù)*/ elseif(str.equals("cos")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.cos(i)))); } /*tan求正切函數(shù)*/ elseif(str.equals("tan")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.tan(i)))); } /*n!求階乘*/ elseif(str.equals("n!")){ doublei=Double.parseDouble(tf.getText()); if((i%2==0)||(i%2==1))//判斷為整數(shù)放進(jìn)行階乘操作 { intj=(int)i;//強(qiáng)制類型轉(zhuǎn)換 intresult=1; for(intk=1;k<=j;k++) result*=k; tf.setText(String.valueOf(result)); } else { tf.setText("無法進(jìn)行階乘"); } } /*x^2求平方*/ elseif(str.equals("x^2")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i))); } /*x^3求立方*/ elseif(str.equals("x^3")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i*i))); } /*′″角度轉(zhuǎn)換*/ /** *將角度值轉(zhuǎn)換成弧度值,方便三角函數(shù)的計(jì)算 */ elseif(str.equals("′″")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(i/180*Math.PI)); } else{ if(flag){ IfResult=false; } if(IfResult){ oper=str; }else{ getResult(Double.parseDouble(tf.getText())); oper=str; IfResult=true; } } } } /** *清除按鈕的事件監(jiān)聽 */ classClearimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ /* *用ActionEvent對象的getActionCommand()方法取得與引發(fā)事件對象的字符串 */ Stringstr=e.getActionCommand(); if(str=="C"){ tf.setText("0"); IfResult=true; result=0; }elseif(str=="-/+"){ doublei=0-Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i))); }elseif(str=="Backspace"){ if(Double.parseDouble(tf.getText())>0){ if(tf.getText().length()>1){ tf.setText(tf.getText().substring(0,tf.getText().length()-1)); //使用退格刪除最后一位字符 /* *函數(shù):substring(intbeginIndex,intendIndex) *它的返回值為一個新的字符串,為原字符串的子串 *beginIndex為子字符串開始的地方,endIndex為子字符串結(jié)束的地方 */ }else{ tf.setText("0"); IfResult=true; } }else{ if(tf.getText().length()>1){ tf.setText(tf.getText().substring(0,tf.getText().length()-1)); }else{ tf.setText("0"); IfResult=true; } } }elseif(str=="CE
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年粵教版選修3歷史下冊階段測試試卷含答案
- 2024年度青海省公共營養(yǎng)師之四級營養(yǎng)師綜合練習(xí)試卷B卷附答案
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師全真模擬考試試卷B卷含答案
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師過關(guān)檢測試卷A卷附答案
- 2025年度苗圃基地苗木交易市場運(yùn)營管理合同4篇
- 2025年北師大版八年級地理下冊月考試卷含答案
- 2024年度青海省公共營養(yǎng)師之三級營養(yǎng)師模擬考試試卷A卷含答案
- 二零二四年度新媒體平臺廣告創(chuàng)意策劃合同3篇
- 服務(wù)型企業(yè)的核心競爭力服務(wù)流程優(yōu)化管理培訓(xùn)
- 2025年度個人旅游保證金貸款合同樣本2篇
- 2022年中國電信維護(hù)崗位認(rèn)證動力專業(yè)考試題庫大全-上(單選、多選題)
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 初中英語-Unit2 My dream job(writing)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 【公司利潤質(zhì)量研究國內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國地區(qū)碼
- 新疆2022年中考物理試卷及答案
- 地暖工程監(jiān)理實(shí)施細(xì)則
- 頂部板式吊耳計(jì)算HGT-20574-2018
評論
0/150
提交評論