版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄1課設(shè)任務(wù)及要求 . .11.1課設(shè)任務(wù): .11.2創(chuàng)新要求: .11.3設(shè)計要求 .12需求分析 . .22.1設(shè)計背景 .22.2開發(fā)的技術(shù)及功能 .23設(shè)計思路 . .34詳細(xì)設(shè)計 . .44.1功能實現(xiàn): .44.4程序設(shè)計過程 .65系統(tǒng)調(diào)試 . .65.1運行調(diào)試 .66參考文獻(xiàn) . .7附錄 .81 課設(shè)任務(wù)及要求1.1 課設(shè)任務(wù):、設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法以及取余運算(可以進(jìn)行浮點數(shù)和負(fù)數(shù)的運算);、有求倒數(shù)、退格和清零功能。1.2 創(chuàng)新要求:能進(jìn)行正切、余弦,以及求平方根、指數(shù)(包括對 e)、自然對數(shù)運算1.3 設(shè)計要求 設(shè)計的計算器應(yīng)用程序可
2、以完成加法、減法、乘法、除法和取余運算。且有小數(shù)點、正負(fù)號、求倒數(shù)、退格和清零功能。 課程設(shè)計可選用Eclipse 、JBuilder 、NetBeans 等作為開發(fā)平臺以提高開發(fā)效率,通過資料查閱和學(xué)習(xí)盡可能熟練掌握其中一種集成開發(fā)環(huán)境。 認(rèn)真按時完成課程設(shè)計報告,課程設(shè)計報告內(nèi)容包括:設(shè)計任務(wù)與要求、需求分析、設(shè)計思路、詳細(xì)設(shè)計、運行調(diào)試與分析討論和設(shè)計體會與小結(jié)第 1頁六個部分。2 需求分析2.1 設(shè)計背景設(shè)計這個計算器主要是參考Win dows 操作系統(tǒng)中自帶的計算器,由于編者水平和時間的限制,不能將計算器設(shè)計到科學(xué)型及其他更復(fù)雜的類型,在設(shè)計過程中還參考了一些其他的優(yōu)秀設(shè)計。但本計算
3、器除了常用的加減乘除(可以進(jìn)行浮點和負(fù)數(shù)運算)這些基本運算外,還有求余、求倒、退格、清零,甚至還能進(jìn)行一些復(fù)雜科學(xué)的運算,比如余弦(cos )、正切( tan)、 指數(shù)運算( pow )、自然對數(shù)運算( log)、求平方根( sqrt )以及對 e 的指數(shù) 運算( exp ),并且還能進(jìn)行連續(xù)運算??傮w上說來,本計算器設(shè)計簡單, 代碼很少,程序很小,但功能卻很強大,這是同類計算器所不具備的。2.2開發(fā)的技術(shù)及功能本課程設(shè)計是要做一個圖形界面的計算器,其界面主要是由swing 組件中的控件構(gòu)成。程序?qū)崿F(xiàn)了計算器的基本功能有:加、減、乘、除基本算術(shù)運算(可以進(jìn)行浮點和負(fù)數(shù)運算)和 sin、cos
4、、tan 等三角函數(shù)求值 運算,同時能進(jìn)行指數(shù)運算和自然對數(shù)運算,還有求倒數(shù)、退格和清零功第 2頁3 設(shè)計思路、本應(yīng)用程序繼承自框架類(JFram? ,容器 Con tai ner c 采用 BorderLayout邊緣布局,將單行文本框加入到“North ”區(qū)域,包含各種按鈕的面板JPa nel p加入到” Cente ”區(qū)域。包含各種按鈕的面板JPanel p 采用 3 行 6 列的網(wǎng)格布局,然后將數(shù)字按鈕和運算符按鈕以及控制按鈕用一個for 循環(huán)添加到面板中同時注冊按鈕事件監(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)”、運算符按鈕事件(”+”,”“” * ”,” / ”,”)、正負(fù)號按鈕事件( ” +/-“、小數(shù)點按鈕事件(” . ”)、等號按鈕事件(” =”)、 求倒按鈕事件(”求倒”)、退格按鈕事件(”退格”)、清除按鈕事件 (C”) 、 正切( tan)、余弦( cos ),以及求平方根( sqrt )、指數(shù) (pow)、對 e 的指 數(shù)( exp )、對數(shù)運算( log)。、在事件處理
6、,觸發(fā)按鈕事件時,先判斷是或是數(shù)字是或是“-/+ ”是或是“ ?”,是的話就將負(fù)號“ -”、數(shù)字、小數(shù)點“ .”分別寫入文本框并存放在sum 中,然后判斷是或是“退格”、“求倒”等,是的話進(jìn)行相應(yīng)的處理,都不是的話則跳到doOperati on ()執(zhí)行運算同時將運算符存放在preOperater中。觸發(fā)按鈕事件時,要進(jìn)一步分析,是重新開始計算時觸發(fā)的按鈕事件還是計算中間觸發(fā)的按鈕事件。、計算器完成的是一個數(shù)學(xué)表達(dá)式,如:3 + 2, 所以可以采用一個數(shù)組來存儲數(shù)字或字符,如3,+,2 分別存儲在數(shù)組中,最后運算時,可以一一取出來進(jìn)行運算。、利用按鈕設(shè)計計算器的各個運算符和操作符,通過按鈕的事
7、件處理實 現(xiàn)按鈕計算功能。第 3頁、利用文本框顯示操作數(shù)和運算結(jié)果第 4頁4 詳細(xì)設(shè)計4.1 功能實現(xiàn):加減乘除求余以及指數(shù)運算其他運算I、求平方根u、對數(shù)運算川、余弦運算W 、正切運算V 、e 的指數(shù)運算切、倒數(shù)運算主要方法說明public cos(doublex) / 求 x 的余弦函數(shù)public tan (doublex) / 求 x 的正切函數(shù)public sqrt(doublex) / 求 x 的平方根public log (doublex) / 求 x 的自然對數(shù)運算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è)計過程設(shè)計過程:(1) 確定計算器函數(shù)功能和界面布局;(2) 設(shè)置框架,注冊監(jiān)聽事件,編寫方法 ;(3) 調(diào)試運行;(4) 改寫應(yīng)用程序,生成 APPLET5 系統(tǒng)調(diào)試5.1 運行調(diào)試計算器界面如下 :經(jīng)過調(diào)試后運行,計算器界面與 windows 自帶的計算器風(fēng)格基本一致實現(xiàn)了預(yù)期的效果;輸入數(shù)據(jù)進(jìn)行驗證,各項函數(shù)功能實現(xiàn)均正常。第 8頁6 參考文獻(xiàn)1 丁振凡 Java 語言使用教程 .北京郵件大學(xué)出版社, 2006.92丁振凡 Java 語言使用教
9、程實驗指導(dǎo) .北京郵件大學(xué)出版社,2006.93Bruce EckelJava 編程思想 .機械工業(yè)出版社 2007.64耿祥義JAVA2 實用教程 .清華大學(xué)出版社 2009.5第 9頁附錄程序代碼如下:Appalication如下 :public class Calculator /動作監(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 主菜單,子菜單 ,菜單項 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)行何種運算 , prekey用來保存前次進(jìn)行何種運算String copy;/構(gòu)造函數(shù)public Calculator 。clickable = true ;result = 0;frame = newJFrame ( ”計算器一應(yīng)用非師范 ");prec=newDecimalFormat( "0.#" );/ 設(shè)置數(shù)據(jù)輸出精度 ( 對于 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( ” 精簡型科學(xué)計算器 ");titem .addActionListener( slthis );tem = n ewJMe"開發(fā)團隊 ");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è)置各個按鈕的動作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ù)參與運算 ,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 按下 '.'按鈕時,判斷當(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ù)運算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等.壓縮文件請下載最新的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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年杭州市上城區(qū)望江街道社區(qū)衛(wèi)生服務(wù)中心編外招聘備考題庫及答案詳解1套
- 囊謙縣人民醫(yī)院2025年面向社會公開招聘編外聘用工作人員的招聘備考題庫及參考答案詳解一套
- 2026年泰州職業(yè)技術(shù)學(xué)院“銀發(fā)教師”長期招募備考題庫及答案詳解1套
- 2026年鹽城經(jīng)濟技術(shù)開發(fā)區(qū)公開招聘基層醫(yī)療機構(gòu)專業(yè)技術(shù)人員6人備考題庫及答案詳解參考
- 2026年昭通市第三人民醫(yī)院總務(wù)科綜合崗位招聘備考題庫及一套答案詳解
- 保密及知識產(chǎn)權(quán)保護制度
- 2026年重慶市北碚區(qū)東陽街道辦事處非在編人員招聘備考題庫及完整答案詳解1套
- 2026年茅嶺鎮(zhèn)衛(wèi)生院招聘備考題庫含答案詳解
- 2026年順德區(qū)杏壇鎮(zhèn)林文恩中學(xué)招聘化學(xué)、英語臨聘教師備考題庫有答案詳解
- 中學(xué)校園安全應(yīng)急處理制度
- 黑龍江省哈爾濱市師范大學(xué)附中2026屆數(shù)學(xué)高三第一學(xué)期期末質(zhì)量檢測模擬試題含解析
- DB31T+1661-2025公共區(qū)域電子屏播控安全管理要求
- 醫(yī)療聯(lián)合體兒童保健服務(wù)模式創(chuàng)新
- 2025版中國胃癌保功能手術(shù)外科專家共識課件
- 2026年書記員考試題庫附答案
- 中國高尿酸血癥與痛風(fēng)診療指南(2024更新版)課件
- TGXAS-火龍果品質(zhì)評價技術(shù)規(guī)范編制說明
- (2025)70周歲以上老年人換長久駕照三力測試題庫(含答案)3
- 口腔科門診主任年度工作匯報
- 2025至2030中國專用車行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃報告
- DB13∕T 6066.3-2025 國資數(shù)智化 第3部分:數(shù)據(jù)治理規(guī)范
評論
0/150
提交評論