



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄1課設(shè)任務(wù)及要求 . .11.1課設(shè)任務(wù): .11.2創(chuàng)新要求: .11.3設(shè)計(jì)要求 .12需求分析 . .22.1設(shè)計(jì)背景 .22.2開發(fā)的技術(shù)及功能 .23設(shè)計(jì)思路 . .34詳細(xì)設(shè)計(jì) . .44.1功能實(shí)現(xiàn): .44.4程序設(shè)計(jì)過程 .65系統(tǒng)調(diào)試 . .65.1運(yùn)行調(diào)試 .66參考文獻(xiàn) . .7附錄 .81 課設(shè)任務(wù)及要求1.1 課設(shè)任務(wù):、設(shè)計(jì)的計(jì)算器應(yīng)用程序可以完成加法、減法、乘法、除法以及取余運(yùn)算(可以進(jìn)行浮點(diǎn)數(shù)和負(fù)數(shù)的運(yùn)算);、有求倒數(shù)、退格和清零功能。1.2 創(chuàng)新要求:能進(jìn)行正切、余弦,以及求平方根、指數(shù)(包括對(duì) e)、自然對(duì)數(shù)運(yùn)算1.3 設(shè)計(jì)要求 設(shè)計(jì)的計(jì)算器應(yīng)用程序可
2、以完成加法、減法、乘法、除法和取余運(yùn)算。且有小數(shù)點(diǎn)、正負(fù)號(hào)、求倒數(shù)、退格和清零功能。 課程設(shè)計(jì)可選用Eclipse 、JBuilder 、NetBeans 等作為開發(fā)平臺(tái)以提高開發(fā)效率,通過資料查閱和學(xué)習(xí)盡可能熟練掌握其中一種集成開發(fā)環(huán)境。 認(rèn)真按時(shí)完成課程設(shè)計(jì)報(bào)告,課程設(shè)計(jì)報(bào)告內(nèi)容包括:設(shè)計(jì)任務(wù)與要求、需求分析、設(shè)計(jì)思路、詳細(xì)設(shè)計(jì)、運(yùn)行調(diào)試與分析討論和設(shè)計(jì)體會(huì)與小結(jié)第 1頁六個(gè)部分。2 需求分析2.1 設(shè)計(jì)背景設(shè)計(jì)這個(gè)計(jì)算器主要是參考Win dows 操作系統(tǒng)中自帶的計(jì)算器,由于編者水平和時(shí)間的限制,不能將計(jì)算器設(shè)計(jì)到科學(xué)型及其他更復(fù)雜的類型,在設(shè)計(jì)過程中還參考了一些其他的優(yōu)秀設(shè)計(jì)。但本計(jì)算
3、器除了常用的加減乘除(可以進(jìn)行浮點(diǎn)和負(fù)數(shù)運(yùn)算)這些基本運(yùn)算外,還有求余、求倒、退格、清零,甚至還能進(jìn)行一些復(fù)雜科學(xué)的運(yùn)算,比如余弦(cos )、正切( tan)、 指數(shù)運(yùn)算( pow )、自然對(duì)數(shù)運(yùn)算( log)、求平方根( sqrt )以及對(duì) e 的指數(shù) 運(yùn)算( exp ),并且還能進(jìn)行連續(xù)運(yùn)算??傮w上說來,本計(jì)算器設(shè)計(jì)簡(jiǎn)單, 代碼很少,程序很小,但功能卻很強(qiáng)大,這是同類計(jì)算器所不具備的。2.2開發(fā)的技術(shù)及功能本課程設(shè)計(jì)是要做一個(gè)圖形界面的計(jì)算器,其界面主要是由swing 組件中的控件構(gòu)成。程序?qū)崿F(xiàn)了計(jì)算器的基本功能有:加、減、乘、除基本算術(shù)運(yùn)算(可以進(jìn)行浮點(diǎn)和負(fù)數(shù)運(yùn)算)和 sin、cos
4、、tan 等三角函數(shù)求值 運(yùn)算,同時(shí)能進(jìn)行指數(shù)運(yùn)算和自然對(duì)數(shù)運(yùn)算,還有求倒數(shù)、退格和清零功第 2頁3 設(shè)計(jì)思路、本應(yīng)用程序繼承自框架類(JFram? ,容器 Con tai ner c 采用 BorderLayout邊緣布局,將單行文本框加入到“North ”區(qū)域,包含各種按鈕的面板JPa nel p加入到” Cente ”區(qū)域。包含各種按鈕的面板JPanel p 采用 3 行 6 列的網(wǎng)格布局,然后將數(shù)字按鈕和運(yùn)算符按鈕以及控制按鈕用一個(gè)for 循環(huán)添加到面板中同時(shí)注冊(cè)按鈕事件監(jiān)聽器。如:Butt on b=new Butt on () ;b.addActionListener (事件監(jiān)聽器
5、 );、事件監(jiān)聽器中的事件處理方法 void actio nPerformed (Actio nEve nt evt )完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件(”,”, ”2”.”8, ”9)”、運(yùn)算符按鈕事件(”+”,”“” * ”,” / ”,”)、正負(fù)號(hào)按鈕事件( ” +/-“、小數(shù)點(diǎn)按鈕事件(” . ”)、等號(hào)按鈕事件(” =”)、 求倒按鈕事件(”求倒”)、退格按鈕事件(”退格”)、清除按鈕事件 (C”) 、 正切( tan)、余弦( cos ),以及求平方根( sqrt )、指數(shù) (pow)、對(duì) e 的指 數(shù)( exp )、對(duì)數(shù)運(yùn)算( log)。、在事件處理
6、,觸發(fā)按鈕事件時(shí),先判斷是或是數(shù)字是或是“-/+ ”是或是“ ?”,是的話就將負(fù)號(hào)“ -”、數(shù)字、小數(shù)點(diǎn)“ .”分別寫入文本框并存放在sum 中,然后判斷是或是“退格”、“求倒”等,是的話進(jìn)行相應(yīng)的處理,都不是的話則跳到doOperati on ()執(zhí)行運(yùn)算同時(shí)將運(yùn)算符存放在preOperater中。觸發(fā)按鈕事件時(shí),要進(jìn)一步分析,是重新開始計(jì)算時(shí)觸發(fā)的按鈕事件還是計(jì)算中間觸發(fā)的按鈕事件。、計(jì)算器完成的是一個(gè)數(shù)學(xué)表達(dá)式,如:3 + 2, 所以可以采用一個(gè)數(shù)組來存儲(chǔ)數(shù)字或字符,如3,+,2 分別存儲(chǔ)在數(shù)組中,最后運(yùn)算時(shí),可以一一取出來進(jìn)行運(yùn)算。、利用按鈕設(shè)計(jì)計(jì)算器的各個(gè)運(yùn)算符和操作符,通過按鈕的事
7、件處理實(shí) 現(xiàn)按鈕計(jì)算功能。第 3頁、利用文本框顯示操作數(shù)和運(yùn)算結(jié)果第 4頁4 詳細(xì)設(shè)計(jì)4.1 功能實(shí)現(xiàn):加減乘除求余以及指數(shù)運(yùn)算其他運(yùn)算I、求平方根u、對(duì)數(shù)運(yùn)算川、余弦運(yùn)算W 、正切運(yùn)算V 、e 的指數(shù)運(yùn)算切、倒數(shù)運(yùn)算主要方法說明public cos(doublex) / 求 x 的余弦函數(shù)public tan (doublex) / 求 x 的正切函數(shù)public sqrt(doublex) / 求 x 的平方根public log (doublex) / 求 x 的自然對(duì)數(shù)運(yùn)算public exp (double x) / 求 e 的 x 次幕public pow (double a ,d
8、ouble b) / 求 a 的 b 次幕第 5頁public daoshu (double x) /求 x 的倒數(shù)第 6頁第 7頁4.4 程序設(shè)計(jì)過程設(shè)計(jì)過程:(1) 確定計(jì)算器函數(shù)功能和界面布局;(2) 設(shè)置框架,注冊(cè)監(jiān)聽事件,編寫方法 ;(3) 調(diào)試運(yùn)行;(4) 改寫應(yīng)用程序,生成 APPLET5 系統(tǒng)調(diào)試5.1 運(yùn)行調(diào)試計(jì)算器界面如下 :經(jīng)過調(diào)試后運(yùn)行,計(jì)算器界面與 windows 自帶的計(jì)算器風(fēng)格基本一致實(shí)現(xiàn)了預(yù)期的效果;輸入數(shù)據(jù)進(jìn)行驗(yàn)證,各項(xiàng)函數(shù)功能實(shí)現(xiàn)均正常。第 8頁6 參考文獻(xiàn)1 丁振凡 Java 語言使用教程 .北京郵件大學(xué)出版社, 2006.92丁振凡 Java 語言使用教
9、程實(shí)驗(yàn)指導(dǎo) .北京郵件大學(xué)出版社,2006.93Bruce EckelJava 編程思想 .機(jī)械工業(yè)出版社 2007.64耿祥義JAVA2 實(shí)用教程 .清華大學(xué)出版社 2009.5第 9頁附錄程序代碼如下:Appalication如下 :public class Calculator /動(dòng)作監(jiān)聽接口JFrame frame; JTextFieldtextShow;JPanel panel, panel1 ,implements ActionListener/框架/文本行panel2 , panel3 ; /面板JButtonbuttonBk , buttonCe , buttonC ;JBut
10、ton button ;JButton Dot, AddAndSub Add, Sub Mui, Div, Mod Sqrt, Dao Equal, zhengxian , yuxian , jiecheng , duishu ;JMenuBar mainMenu 主菜單,子菜單 ,菜單項(xiàng) JMenu editMenu, viewMenu;JMenultem copyitem , pasteltem , tltem , sltem ;DecimalFormat prec;/用于設(shè)置數(shù)據(jù)輸出精度49,67boolean clickable ;/用于控制當(dāng)前能否按鍵double vard, res
11、ult;/用來保存 double 型數(shù)據(jù)的中間值 (vard)第 10頁和最后結(jié)果 (result)int key = -1, prekey = -1; /key 用來保存當(dāng)前進(jìn)行何種運(yùn)算 , prekey用來保存前次進(jìn)行何種運(yùn)算String copy;/構(gòu)造函數(shù)public Calculator 。clickable = true ;result = 0;frame = newJFrame ( ”計(jì)算器一應(yīng)用非師范 ");prec=newDecimalFormat( "0.#" );/ 設(shè)置數(shù)據(jù)輸出精度 ( 對(duì)于 double 型值 )textShow = ne
12、w JTextField(15);textShow .setText("");textShow .setHorizontalAlignment( textShow. RIGHT; textShow .setEditable( false );textShow .setBackground( new Color(255, 255, 255);panel = n ewJPa nel();frame .getC onten tPa ne().add( pan el);pan el1 = n ewJPa nel();pan el2 = n ewJPa nel();pan el .s
13、etLayout( new BorderLayout();/菜單設(shè)置mainMenu= new JMe nuBar();editMenu = new JMenu ( ”編輯 (E)");viewMenu= new JMenu ( ”查看 (V)");copyItem = new JMe nultem( ”復(fù)制 (C) Ctrl+C");copyItem .addActionListener(this );pasteItem = new JMe nultem( ”粘貼 (P) Ctrl+V");第 11頁pasteItem .addActionListen
14、er(this );第 12頁editMenu .add( copyitem ); editMenu .add( pasteitem );titem = n ewJMe nultem( ” 精簡(jiǎn)型科學(xué)計(jì)算器 ");titem .addActionListener( slthis );tem = n ewJMe"開發(fā)團(tuán)隊(duì) ");nultem( sltem .addActionLithis );stener(viewMenuadd( tItem ); viewMenuadd( sItem);mainMenuadd( editMenu); mainMenuadd( vi
15、ewMen?;pan el .add( mai nMenu BorderLayout. NORTHpan el .add( textShow , BorderLayout. CENTE)Rpan el .add( pan el1 , BorderLayout. SOUTHpanel1 .setLayout( new BorderLayout。) ;butt on Bk = new JButt"Backspace"); newColor(255, 0, 0);"CE");new Color(255, 0,on( buttonBk .setForegroun
16、d( 0);butt onCe = new JButt on( buttonCe .setForeground(butto nC = new JButto"C");n( buttonC .setForegrounnew Color(255, 0, 0);d(this );buttonBk .addActionListener(buttonCe .addActionListener(this );buttonC .addActionListener(this );panel1 .add( panel2 , BorderLayout. NORTHpanel2 .setLayou
17、t( new FlowLayout(FlowLayout. RIGHT);第 13頁panel2 .add( buttonBk ); pan el2 .add( butt on Ce);panel2 .add( buttonC );pan el3 = n ewJPa nel();pan ell .add( pan el3 , BorderLayout. CENTER butt on = n ewJButt on 14;for ( int i = 0; i <butt on . le ngth ; i+)butt on i = new JButt on (I nteger. toStri
18、ng (i);button i.setForeground( new Color(22, 22, 255);Dot = newJButton(".");Dot.setForeground( new Color(0, 0, 255);AddAndSub= new JButton( "+/-");AddAndSutsetForeground( new Color(0, 0, 255);Add = newJButton( "+");AddsetForeground( new Color(0, 0, 255);Sub = newJButt o
19、n(Suh setForegro und(new Color(0, 0, 255);Mul = newJButt"*") ;new Color(0, 0,on( Mul.setForegro255);und(Div = newJButton( "/");Div .setForeground( new Color(0, 0, 255);Mod= newJButt"%");on( ModsetForegronew Color(0, 0,und(255);第 14頁Sqrt = newJButton( "sqrt");S
20、qrt .setForeground( new Color? 0, 255);Dao= newJButton( "1/x");DaosetForeground( new Color(0, 0, 255);Equal = newJButton("=");Equal.setForeground( new Color(0, 0, 255);jiecheng = new JButton( "n!");jiecheng .setForeground( new Color(0, 0, 255);zhengxian = new JButton( &
21、quot;sin");zhengxian .setForeground( new Color(0, 0, 255);yuxian = newJButton( "cos");yuxian .setForeground( new Color(0, 0, 255);duishu = n ewJButt"log");on( duishu .setForegrounew Color(0, 0,nd(255);/將所有行為與監(jiān)聽綁定panel3 .setLayout( new GridLayout(4, 6,6,6);/pan el3 .add( butt
22、 on 7);butt on 7.addActi on Liste ner(this );pan el3 .add( butt on 8);butt on 8.addActi on Liste ner(this );pan el3 .add( butt on 9);butt on 9.addActi on Liste ner(this );panel3 .add( Div);Div .addActionListener(this );第 15頁panel3 .add( Sqrt);Sqrt .addActionListener( this );panel3 .add( zhengxian );
23、zhengxian .addActionListener(this );pan el3 .add( butt on 4);butt on 4.addActi on Liste ner(this );pan el3 .add( butt on 5);butt on 5.addActi on Liste ner(this );pan el3 .add( butt on 6);butt on 6.addActi on Liste ner(this );panel3 .add( Mul);Mul.addActionListener(this );panel3 .add( Mod ;ModaddActi
24、onListener(this );panel3 .add( yuxian );yuxian .addActionListener(this );pan el3 .add( butt on 1);butt on 1.addActi on Liste ner(this );pan el3 .add( butt on 2);butt on 2.addActi on Liste ner(this );pan el3 .add( butt on 3);butt on 3.addActi on Liste ner(this );panel3 .add( Sub);SuhaddActionListener
25、(this );第 16頁panel3 .add( Da 。;DaoaddActionListener(this );panel3 .add( jiecheng );jiecheng .addActionListener(this );pan el3 .add( butt on 0);butt on 0.addActi on Liste ner(this );panel3 .add( AddAndSubAddAndSubaddActionListener(this );panel3 .add( Dot);Dot.addActionListener(this );panel3 .add( Add
26、);AddaddActionListener(this );panel3 .add( Equal);Equal.addActionListener(this );panel3 .add( duishu );duishu .addActionListener(this );frame.setDefaultCloseOperation( frame. EXIT ON CLOSE frame.pack(); frame .show();/設(shè)置各個(gè)按鈕的動(dòng)作public static int calc( int n)int ret =1;/ BigInteger.ONE;for (Integer i=
27、 2; i<=n; i+)第 17頁ret =ret*i; . multiply( new Bigl nteger(i.toStri ng(); return ret;public void action Performed(Acti on Eve nt eve nt)II 判斷是否是 double 型數(shù)參與運(yùn)算 ,boolean sign = false ; 是為true ,不是為 falseObject temp = evetry II 如果按下數(shù)字按鈕,將按下的按鈕代表的數(shù)據(jù)插入的當(dāng)前文本框字符串之后for ( int i = 0; i <= 9; i+)if (temp =
28、 butt on i && clickable = true )textShow .setText( textShow .getText()+Integer. toString (i);II 按下 '.'按鈕時(shí),判斷當(dāng)前文本框內(nèi)字符串中含不含 '.',如果 已含,則不允許再插入 '.'if (temp = Dot && clickable = true ) boolean isDot = false ;if ( textShow .getText().length() = 0)isDot =true ;for (i
29、nt i = 0; i < textShow .getText().le ngth(); 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 =
30、 Add) switch ( prekey) 第 18頁case 0:result += Double. parseDouble (textShow .getText(); break; case 1:result -= Double. parseDouble (textShow .getText(); break; case 2:result *= Double. parseDouble (textShow .getText(); break; case 3:if (Double. parseDouble (textShow .getText() = 0) textShow .setText
31、(" 除數(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) case 0:result += Double.break;parseDoub
32、le (textShow .getText();case 1:result -= Double.break;parseDouble (textShow .getText();case 2:result *= Double.break;parseDouble (textShow .getText();case 3:第 19頁if (Double. parseDouble (textShow .getText() = 0) textShow .setText(" 除數(shù)不能為零 "); clickable = false ;elseresult /= Double. parseD
33、ouble (textShow .getText(); break;default :result = Double. parseDouble (textShow .getText();textShow .setText("");prekey = key = 1;/'*' 操作if (temp = Mul) switch ( prekey) case 0:result += Double. parseDouble (textShow .getText(); break;case 1:result -= Double. parseDouble (textSho
34、w .getText(); break;case 2:result *= Double. parseDouble (textShow .getText(); break;case 3:if (Double. parseDouble (textShow .getText() = 0) textShow .setText(" 除數(shù)不能為零 "); clickable = false ;elseresult /= Double. parseDouble (textShow .getText(); break;default :result = Double. parseDoubl
35、e (textShow .getText();第 20頁textShow .setText(""); prekey = key = 2;/'/' 操作if (temp = Div) switch ( prekey) case 0:result += Double. parseDouble (textShow .getText(); break;case 1:result -= Double. parseDouble (textShow .getText(); break;case 2:result *= Double. parseDouble (textSh
36、ow .getText(); break;case 3: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 =
37、key = 3;/'=' 操作if (temp = Equal && clickable = true ) /如果連續(xù)按 '=',則進(jìn)行連續(xù)運(yùn)算if ( prekey = 5) 第 21頁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 .se
38、tText( 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)parseDouble (textShow .getText(); prekey = -1;prec .format( result );result -= Double.textShow .setText(if ( key = 2) prekey = -1;result *= Double. parseDouble (textShow .getText();第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上半年安徽宣城廣德市楊灘鎮(zhèn)招錄村級(jí)后備干部5人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽合肥肥東縣張集鄉(xiāng)招考村級(jí)后備干部8人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年寧波市奉化區(qū)工業(yè)投資集團(tuán)限公司公開招聘工作人員9名易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年寧波市臨床病理診斷中心招考編制外文員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025中電信人工智能科技(北京)有限公司校園招聘筆試參考題庫附帶答案詳解
- 2024年玻璃溫度計(jì)項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024陜西渭河煤化工集團(tuán)有限責(zé)任公司專職消防員招聘10人筆試參考題庫附帶答案詳解
- 2024遼寧盤錦市政建設(shè)集團(tuán)社會(huì)招聘31人查看職位筆試參考題庫附帶答案詳解
- 2025年拉刀刃磨床項(xiàng)目可行性研究報(bào)告
- 2024西安市自來水有限公司招聘管理崗位筆試參考題庫附帶答案詳解
- 成人手術(shù)后疼痛評(píng)估與護(hù)理團(tuán)體標(biāo)準(zhǔn)
- 【數(shù)學(xué)】一元一次方程的應(yīng)用第2課時(shí)盈不足問題課件-2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)
- 不說臟話課件
- 完整版項(xiàng)目實(shí)施保密方案
- 河北醫(yī)科大學(xué)第一醫(yī)院招聘醫(yī)療工作人員筆試真題2023
- 人教版(2024)八年級(jí)上冊(cè)物理第六章 質(zhì)量與密度 單元測(cè)試卷(含答案解析)
- 2023年黑龍江省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 倪海廈天紀(jì)學(xué)習(xí)筆記以及講義
- 現(xiàn)代家政導(dǎo)論-課件 4.2.1認(rèn)識(shí)家庭教育及意義
- 科學(xué)通史學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 手提花籃培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論