迷你計(jì)算器設(shè)計(jì)面向?qū)ο缶幊逃?xùn)練課程設(shè)計(jì).doc_第1頁
迷你計(jì)算器設(shè)計(jì)面向?qū)ο缶幊逃?xùn)練課程設(shè)計(jì).doc_第2頁
迷你計(jì)算器設(shè)計(jì)面向?qū)ο缶幊逃?xùn)練課程設(shè)計(jì).doc_第3頁
迷你計(jì)算器設(shè)計(jì)面向?qū)ο缶幊逃?xùn)練課程設(shè)計(jì).doc_第4頁
迷你計(jì)算器設(shè)計(jì)面向?qū)ο缶幊逃?xùn)練課程設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

計(jì)算器的設(shè)計(jì)*實(shí)踐教學(xué)*蘭州理工大學(xué)計(jì)算機(jī)與通信學(xué)院2009年秋季學(xué)期面向?qū)ο缶幊逃?xùn)練課程設(shè)計(jì)題 目:迷你計(jì)算器設(shè)計(jì) 專業(yè)班級:07級計(jì)算機(jī)1班姓 名: 學(xué) 號: 指導(dǎo)教師: 張紅 成 績:_目錄第一章 緒論11.1 開發(fā)環(huán)境11.2 基本功能介紹2第二章 系統(tǒng)設(shè)計(jì)22.1 系統(tǒng)流程圖22.2 系統(tǒng)功能框圖32.3 需求分析4第三章 軟件設(shè)計(jì)43.1 界面設(shè)計(jì)53.2 代碼設(shè)計(jì)5第四章 測試分析103.1 程序運(yùn)行情況:103.2 程序異常處理:103.3 測試用例103.3.1 加法測試103.3.2 減法測試113.3.3 乘法測試123.3.4 除法測試13第五章 結(jié)束語14第六章 參考文獻(xiàn)14第一章 緒論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、JCreator等開發(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)了一個(gè)簡單而實(shí)用的計(jì)算器,通過這個(gè)計(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)即可,界面為灰白對稱。它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面、必要的交互信息和較好的健壯性;醒目美觀的軟件封面。使用人員能快捷簡單地進(jìn)行操作。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間,對人們的生活有一定的幫助。第二章 系統(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)。反之則不然。2.3 需求分析首先分析這個(gè)說要完成的功能,它的主要任務(wù)是完成十六進(jìn)制、十進(jìn)制、八進(jìn)制和二進(jìn)制之間的相互轉(zhuǎn)化,需要包含負(fù)數(shù),但不用考慮小數(shù)。 其次,確定接口參數(shù)。根據(jù)功能可知,它傳遞給外部的就是一個(gè)轉(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)绾沃肋@個(gè)數(shù)的最高位是第幾位呢,也許有人會說,那就用轉(zhuǎn)化后的前面再加上一位,好,即使這樣可以成立,那么-1轉(zhuǎn)化后就是11,3轉(zhuǎn)化后也為11,現(xiàn)在如果需要現(xiàn)在的把這個(gè)數(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)該有另外一個(gè)參數(shù)二進(jìn)制時(shí)的寬度,只有這樣才能知道誰是最高位,因此就稱這個(gè)參數(shù)為位寬。 最后,設(shè)計(jì)類。根據(jù)第二步的分析,因?yàn)槲粚拰γ恳粋€(gè)方法都是一樣,所以可能把它作為類的成員變量,而另外兩個(gè)參數(shù)轉(zhuǎn)化前的值和轉(zhuǎn)化后的值就分別作為輸入?yún)?shù)和返回值。而類對外的接口只有各個(gè)轉(zhuǎn)化的方法,因此這幾個(gè)方法設(shè)計(jì)為public權(quán)限,而其它所有的輔助方法都為private權(quán)限。位寬通過構(gòu)造函數(shù)傳遞,外部不能直接訪問和修改,設(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ì)這個(gè)就是計(jì)算器界面,簡潔易用,我們可以從中的數(shù)字按鍵和運(yùn)算符按鈕進(jìn)行相應(yīng)的數(shù)學(xué)計(jì)算,總共由個(gè)按鈕(個(gè)數(shù)字符+個(gè)運(yùn)算符號+個(gè)小數(shù)點(diǎn)+個(gè)“clear”按鈕),一個(gè)標(biāo)簽、再加一個(gè)文本框組成。3.2 代碼設(shè)計(jì)import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Caculator public static void 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 resultField; 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); ButtonListener 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.addActionListener(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 JButton(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(listener); 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); numberPanel.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); toolPanel.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().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); else 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); 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 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=false; 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)算的時(shí)候,結(jié)果如果不是很大,可以正常顯示,但如果結(jié)果很大,就可能采用科學(xué)記數(shù)方式,這樣帶來了進(jìn)制轉(zhuǎn)換時(shí)的麻煩,需要特殊的處理科學(xué)記數(shù)里的E ,當(dāng)結(jié)果太大的時(shí)候,有可能超出可能表示的最大值,(結(jié)果溢出),這個(gè)時(shí)候就要對結(jié)果進(jìn)行必要的異常處理,我在輸出結(jié)果的方法內(nèi)設(shè)置if 語句,如果結(jié)果大于某一個(gè)值就拋出一個(gè)This_number_too_big 類型的類,再使用try-catch,捕捉輸出結(jié)果的方法拋出的異常對象。然后進(jìn)行,重制歸零的處理。4.2 程序異常處理:當(dāng)結(jié)果超出Double.MAX_VALUE時(shí),將拋出一個(gè)This_number_too_big 類的異常對象,這個(gè)是我自定義的一個(gè)異常類它繼承自Exception 類,然后使用try-catch去捕捉這個(gè)異常,異常的處理如下: 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é)果如下:(2)運(yùn)算結(jié)果如下:4.4.4 除法測試(1)運(yùn)算結(jié)果如下:(2)運(yùn)算結(jié)果如下:(3) 運(yùn)算結(jié)果如下:第五章 結(jié)束語 終于做完了這次的作業(yè),有一種如釋重?fù)?dān)的感覺,但還是有一點(diǎn)點(diǎn)的留戀。這次做的計(jì)算器的實(shí)現(xiàn)算是一個(gè)比較簡單的設(shè)計(jì),它牽涉的知識面并不是很多,實(shí)現(xiàn)的功能簡單,對界面要求也不高,很適合我們做一些個(gè)人的程序開發(fā)。做起來雖然不是很吃力但有時(shí)還是比較煩躁的,可是在精力完全投入之后又發(fā)現(xiàn)自己已經(jīng)被它深深吸引住,它有一股莫名的魅力在吸引我去完善。從緒論到最后的總結(jié),都是一步一個(gè)腳印走過來的,在這

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論