

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 8/8JAVA實(shí)現(xiàn)計(jì)算器課程設(shè)計(jì)要點(diǎn) 計(jì)算機(jī)科學(xué)系 目錄 第一章緒論 (2) 1.1 開發(fā)環(huán)境 (2) 1.2 基本功能介紹 (2) 第二章系統(tǒng)設(shè)計(jì) (3) 2.1 系統(tǒng)流程圖 (3) 2.2 系統(tǒng)功能框圖 (3) 2.3 需求分析 (4) 第三章軟件設(shè)計(jì) (5) 3.1 界面設(shè)計(jì) (5) 3.2 代碼設(shè)計(jì) (5) 第四章測試分析 (10) 3.1 程序運(yùn)行情況: (10) 3.2 程序異常處理: (10) 3.3 測試用例 (11) 3.3.1 加法測試 (11) 3.3.2 減法測試 (11) 3.3.3 乘法測試 (12) 3.3.4 除法測試 (13) 第五章結(jié)束語 (14) 第六章
2、 第一章緒論 1.1 開發(fā)環(huán)境 本系統(tǒng)是利用Java語言在NetBeans IDE6.5環(huán)境下開發(fā)的,Java語言是當(dāng)今流行的網(wǎng)絡(luò)編程語言,它具有面向?qū)ο?、跨平臺、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今世界最流行的開發(fā)方法,它不僅具有更貼近自然的語義,而且有利于軟件的維護(hù)和繼承。 為了進(jìn)一步鞏固課堂上所學(xué)到的知識,深刻把握J(rèn)ava語言的重要概念及其面向?qū)ο蟮奶匦?,鍛煉學(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問題的能力,開設(shè)了Java程序設(shè)計(jì)課程設(shè)計(jì)。 通過此次課程設(shè)計(jì),鞏固所學(xué)Java語言基本知識,增進(jìn)Java語言編輯基本功,掌握J(rèn)DK、Editplus、Eclipse、JCreato
3、r等開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。使學(xué)生通過該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識加以融會貫通,全面掌握J(rèn)ava語言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,為今后從事實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。 1.2 基本功能介紹 本系統(tǒng)實(shí)現(xiàn)了一個簡單而實(shí)用的計(jì)算器,通過這個計(jì)算器我們可以進(jìn)行一些基本的運(yùn)算操作,它可以進(jìn)行簡單的四則運(yùn)算(加、減、乘、除)但僅限于十進(jìn)制下,還可以進(jìn)行(八進(jìn)制,十進(jìn)制,十六進(jìn)制)之間的相互轉(zhuǎn)換,八進(jìn)制最多可以輸入19位數(shù),十進(jìn)制最多可以輸入18位數(shù),十六進(jìn)制最多可以輸入14位數(shù),backspace表示退格,clear表示初始化,在window下直接運(yùn)行(Jsp2003.bat)即
4、可,界面為灰白對稱。它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面、必要的交互信息和較好的健壯性;醒目美觀的軟件封面。使用人員能快捷簡單地進(jìn)行操作。即時準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時間,對人們的生活有一定的幫助。 第二章系統(tǒng)設(shè)計(jì)2.1 系統(tǒng)流程圖 2.2 系統(tǒng)功能框圖 說明:在程序中構(gòu)建類testZ,在其中封裝起界面、文本框、按鈕、數(shù)字、運(yùn)算符等等成員,再引入成員函數(shù)testZ()進(jìn)行計(jì)算器的模擬界面設(shè)計(jì);其次設(shè)計(jì)出事件處理函數(shù),如:運(yùn)算事件、符號事件、等號事件等等;最后設(shè)計(jì)運(yùn)算函數(shù)的響應(yīng)事件。這樣設(shè)計(jì)的好處在于使得程序的實(shí)現(xiàn)思維更清晰,易懂,可讀性增強(qiáng)。反之
5、則不然。 2.3 需求分析 首先分析這個說要完成的功能,它的主要任務(wù)是完成十六進(jìn)制、十進(jìn)制、八進(jìn)制和二進(jìn)制之間的相互轉(zhuǎn)化,需要包含負(fù)數(shù),但不用考慮小數(shù)。 其次,確定接口參數(shù)。根據(jù)功能可知,它傳遞給外部的就是一個轉(zhuǎn)后的數(shù)據(jù),而外部除了需要傳遞給轉(zhuǎn)化前的數(shù)據(jù)以外,是否還需要其他參數(shù)呢?我們都知道,十進(jìn)制的負(fù)數(shù)同樣可以利用其他進(jìn)制進(jìn)行表示,例如二進(jìn)制,轉(zhuǎn)化方法是:求十進(jìn)制數(shù)的絕對值對應(yīng)的二進(jìn)制數(shù),最高位為1;然后對二進(jìn)制逐位求反,最高位除外;接著最低一位加1,需要進(jìn)位的話依次進(jìn)位,最高位除外。如今的問題就擺在了我們面前,我們?nèi)绾沃肋@個數(shù)的最高位是第幾位呢,也許有人會說,那就用轉(zhuǎn)化后的前面再加上一位
6、,好,即使這樣可以成立,那么-1轉(zhuǎn)化后就是11,3轉(zhuǎn)化后也為11,現(xiàn)在如果需要現(xiàn)在的把這個數(shù)二進(jìn)制數(shù)再轉(zhuǎn)化為十進(jìn)制,那么我們?nèi)绾沃涝瓉淼氖钦龜?shù)還是負(fù)數(shù)呢,如果要轉(zhuǎn)化為十六進(jìn)制,八進(jìn)制又當(dāng)如何呢?經(jīng)過以上的分析發(fā)現(xiàn),還應(yīng)該有另外一個參數(shù)二進(jìn)制時的寬度,只有這樣才能知道誰是最高位,因此就稱這個參數(shù)為位寬。 最后,設(shè)計(jì)類。根據(jù)第二步的分析,因?yàn)槲粚拰γ恳粋€方法都是一樣,所以可能把它作為類的成員變量,而另外兩個參數(shù)轉(zhuǎn)化前的值和轉(zhuǎn)化后的值就分別作為輸入?yún)?shù)和返回值。而類對外的接口只有各個轉(zhuǎn)化的方法,因此這幾個方法設(shè)計(jì)為public權(quán)限,而其它所有的輔助方法都為private權(quán)限。位寬通過構(gòu)造函數(shù)傳遞,
7、外部不能直接訪問和修改,設(shè)置也設(shè)置為private權(quán)限。為了減少計(jì)算量,所有的轉(zhuǎn)化都以二進(jìn)制為中介。例如十六進(jìn)制到十進(jìn)制,是十六進(jìn)制二進(jìn)制十進(jìn)制。 第三章軟件設(shè)計(jì) 3.1 界面設(shè)計(jì) 這個就是計(jì)算器界面,簡潔易用,我們可以從中的數(shù)字按鍵和運(yùn)算符按鈕 進(jìn)行相應(yīng)的數(shù)學(xué)計(jì)算,總共由個按鈕(個數(shù)字符+個運(yùn)算符號+個 小數(shù)點(diǎn)+個“clear”按鈕),一個標(biāo)簽、再加一個文本框組成。 3.2 代碼設(shè)計(jì) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Caculator public static vo
8、id main(String args) JFrame frame = new JFrame(Caculator); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new CaculatorPanel(); frame.pack(); frame.setVisible(true); class CaculatorPanel extends JPanel private JLabel namelabel,resultlabel; private JTextField resultF
9、ield; private JPanel labelPanel,numberPanel,toolPanel; private JButton s1,s2,s3,s4,s5,s6,s7, s8, s9,s0, p1,p2,t1,t2,t3,t4,clear; private boolean end,add,sub,mul,div; private String str; private double num1,num2; public CaculatorPanel() namelabel = new JLabel(計(jì)算器); resultField = new JTextField(10); B
10、uttonListener listener = new ButtonListener(); clear = new JButton(clear); clear.addActionListener(listener); s1 = new JButton(1); s1.addActionListener(listener); s2 = new JButton(2); s2.addActionListener(listener); s3 = new JButton(3); s3.addActionListener(listener); s4 = new JButton(4); s4.addActi
11、onListener(listener); s5 = new JButton(5); s5.addActionListener(listener); s6 = new JButton(6); s6.addActionListener(listener); s7 = new JButton(7); s7.addActionListener(listener); s8 = new JButton(8); s8.addActionListener(listener); s9 = new JButton(9); s9.addActionListener(listener); s0 = new JBut
12、ton(0); s0.addActionListener(listener); p1 = new JButton(.); p1.addActionListener(listener); p2 = new JButton(=); p2.addActionListener(listener); t1 = new JButton(+); t1.addActionListener(listener); t2 = new JButton(-); t2.addActionListener(listener); t3 = new JButton(*); t3.addActionListener(listen
13、er); t4 = new JButton(/); t4.addActionListener(listener); labelPanel = new JPanel(); labelPanel.add(namelabel); labelPanel.add(resultField); labelPanel.add(clear); numberPanel = new JPanel(); numberPanel.setLayout(new GridLayout(4,3); numberPanel.add(s1); numberPanel.add(s2); numberPanel.add(s3); nu
14、mberPanel.add(s4); numberPanel.add(s5); numberPanel.add(s6); numberPanel.add(s7); numberPanel.add(s8); numberPanel.add(s9); numberPanel.add(s0); numberPanel.add(p1); numberPanel.add(p2); toolPanel = new JPanel(); toolPanel.setLayout(new GridLayout(4,1); toolPanel.add(t1); toolPanel.add(t2); toolPane
15、l.add(t3); toolPanel.add(t4); setPreferredSize(new Dimension(500,200); setBackground(Color.cyan); add(labelPanel); add(numberPanel); add(toolPanel); public void num(int i) String s = null; s=String.valueOf(i); if(end) /如果數(shù)字輸入結(jié)束,則將文本框置零,重新輸入 resultField.setText(0); end=false; if(resultField.getText()
16、.equals(0) /如果文本框的內(nèi)容為零,則覆蓋文本框的內(nèi)容 resultField.setText(s); else /如果文本框的內(nèi)容不為零,則在內(nèi)容后面添加數(shù)字 str = resultField.getText() + s; resultField.setText(str); private class ButtonListener implements ActionListener public void actionPerformed(ActionEvent e) /數(shù)字事件 if(e.getSource()=clear) resultField.setText(0); els
17、e if(e.getSource()=s1) num(1); else if(e.getSource()=s2) num(2); else if(e.getSource()=s3) num(3); else if(e.getSource()=s4) num(4); else if(e.getSource()=s5) num(5); else if(e.getSource()=s6) num(6); else if(e.getSource()=s7) num(7); else if(e.getSource()=s8) num(8); else if(e.getSource()=s9) num(9
18、); else if(e.getSource()=s0) num(0); /符號事件 else if(e.getSource()=t1) sign(1); else if(e.getSource()=t2) sign(2); else if(e.getSource()=t3) sign(3); else if(e.getSource()=t4) sign(4); /等號 else if(e.getSource()=p1) str=resultField.getText(); if(str.indexOf(.)=1) str+=.; resultField.setText(str); else
19、if(e.getSource()=p2) num2=Double.parseDouble(resultField.getText(); if(add) num1=num1 + num2; else if(sub) num1=num1 - num2; else if(mul) num1=num1 * num2; else if(div) num1=num1 / num2; resultField.setText(String.valueOf(num1); end=true; public void sign(int s) if(s=1) add=true; sub=false; mul=fals
20、e; div=false; else if(s=2) add=false; sub=true; mul=false; div=false; else if(s=3) add=false; sub=false; mul=true; div=false; else if(s=4) add=false; sub=false; mul=false; div=true; num1=Double.parseDouble(resultField.getText(); end=true; 第四章測試分析 4.1 程序運(yùn)行情況: 程序正常的響應(yīng)按鈕事件,輸入的數(shù)值長度受變量length的限定,進(jìn)行混合四則運(yùn)算的
21、時候,結(jié)果如果不是很大,可以正常顯示,但如果結(jié)果很大,就可能采用科學(xué)記數(shù)方式,這樣帶來了進(jìn)制轉(zhuǎn)換時的麻煩,需要特殊的處理科學(xué)記數(shù)里的E ,當(dāng)結(jié)果太大的時候,有可能超出可能表示的最大值,(結(jié)果溢出),這個時候就要對結(jié)果進(jìn)行必要的異常處理,我在輸出結(jié)果的方法內(nèi)設(shè)置if 語句,如果結(jié)果大于某一個值就拋出一個This_number_too_big 類型的類,再使用try-catch,捕捉輸出結(jié)果的方法拋出的異常對象。然后進(jìn)行,重制歸零的處理。 4.2 程序異常處理: 當(dāng)結(jié)果超出Double.MAX_VALUE時,將拋出一個This_number_too_big 類的異常對象,這個是我自定義的一個異常類它繼承自Exception 類,然后使用try-catch去捕捉這個異常,異常的處理如下: try js(); catch(This_number_too_big e) lab.setText(0); number=0; mark=n; Refresh=false; System.out.println(The number is too big); /如果出現(xiàn)異常則初始化效果如同clear鍵 4.3 測試用例 4.4.1 加法測試 (1).運(yùn)行結(jié)果如下: (2)()運(yùn)行結(jié)果如下: 4.4.2 減法測試 (1)運(yùn)算結(jié)果如下: (2)運(yùn)算結(jié)果如下: 4.4.3 乘法測試 (1)()運(yùn)算結(jié)果
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 彩鋼板開洞施工方案
- 露營基地設(shè)備租賃方案
- 巖板上墻鋪貼施工方案
- 海南瓊口口腔醫(yī)院項(xiàng)目環(huán)境影響報(bào)告表環(huán)評報(bào)告表
- 銅陵安全人臉識別施工方案
- 濟(jì)南玻璃鋼纖維布施工方案
- 滁州家用車庫地坪施工方案
- 氣象站防電涌入侵施工方案
- 臨沂古建施工方案公司
- 壓花地坪施工方案
- 2009-2022歷年上海市公安機(jī)關(guān)勤務(wù)輔警招聘考試《職業(yè)能力傾向測驗(yàn)》真題含答案2022-2023上岸必備匯編3
- 小學(xué)人教版四年級下冊數(shù)學(xué)租船問題25題
- 大連市小升初手冊
- 醫(yī)療垃圾管理及手衛(wèi)生培訓(xùn)PPT課件
- 放射物理與防護(hù)全套ppt課件
- 嚇數(shù)基礎(chǔ)知識共20
- 鋰電池安全知識培訓(xùn)-課件
- 電子產(chǎn)品高可靠性裝聯(lián)工藝下
- 越南北部工業(yè)區(qū)資料(1060707)
- 東亞文明的歷史進(jìn)程課件
- 三洋波輪洗衣機(jī)說明書
評論
0/150
提交評論