

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p> 基礎(chǔ) 學(xué) 院 信息與計(jì)算科學(xué) 專 業(yè) 2010—1 班 </p><p> 一、課程設(shè)計(jì)(論文)題目 計(jì)算器的設(shè)計(jì) </p><p> 二、課程設(shè)計(jì)(論文)工作自 2013 年 6 月23日起至 2013 年6月 27日止。</p><p> 三、課程設(shè)計(jì)
2、(論文) 地點(diǎn): 計(jì)算機(jī)中心 </p><p> 四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p> 1.本課程設(shè)計(jì)的目的</p><p> ?。?)使學(xué)生掌握系統(tǒng)各功能模塊的基本工作原理; </p><p> ?。?)掌握J(rèn)ava的基本編程原理和基本的編程方法; </p><p> ?。?)使學(xué)生學(xué)會系統(tǒng)調(diào)試;&
3、lt;/p><p> ?。?)培養(yǎng)學(xué)生分析、解決問題的能力;</p><p> (5)提高學(xué)生的軟件文檔寫作能力和團(tuán)隊(duì)合作精神。 </p><p> 2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b> 1)基本要求:</b></p><p> (1)分析系統(tǒng)各功能模塊的工作原理;</
4、p><p> (2)提出系統(tǒng)的設(shè)計(jì)方案; </p><p> ?。?)對所進(jìn)行編程、調(diào)試、修改。 </p><p><b> 2)創(chuàng)新要求: </b></p><p> 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì),如:用虛函數(shù),文件流,重載流插入運(yùn)算符等。 </p><p> 3)課程設(shè)計(jì)論文編寫要求&
5、lt;/p><p> (1)要按照書稿的規(guī)格打印謄寫設(shè)計(jì)論文;</p><p> ?。?)論文包括目錄、摘要、正文、總結(jié)等;</p><p> (3)畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成。</p><p> 4)答辯與評分標(biāo)準(zhǔn): </p><p> (1)達(dá)到課程設(shè)計(jì)的目的與要求,程序的可讀性較好,并調(diào)試正確,60分;
6、</p><p> ?。?)能正確回答老師所提問題,可增加10分;</p><p> ?。?)課程設(shè)計(jì)報告書寫規(guī)范整齊,可增加10分;</p><p> ?。?)心得體會認(rèn)真總結(jié),可增加10分;</p><p> (5)程序有創(chuàng)新性,可增加10分;</p><p> 成績評定實(shí)行優(yōu)秀、良好、中等、及格和不及格五個等
7、級。不及格者需重做。</p><p><b> 5)參考文獻(xiàn):</b></p><p> ?。?)丁振凡.《J ava語言程序設(shè)計(jì)》 清華大學(xué)出版社 </p><p> ?。?)丁振凡.《J ava語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與習(xí)題解析》清華大學(xué)出版社</p><p> ?。?)http:/ /mvcpro.cloudfoun
8、dry.com</p><p> 6)課程設(shè)計(jì)進(jìn)度安排</p><p> 內(nèi)容 天數(shù) 地點(diǎn)</p><p> 總體需求與分析構(gòu)思及收集資料 1 圖書館</p><p> 各模塊的編程實(shí)現(xiàn),調(diào)試與修改 3 機(jī)房</p>
9、<p> 撰寫論文與答辯 1 圖書館,機(jī)房</p><p> 學(xué)生簽名: </p><p> 2013 年6 月18 日</p><p> 課程設(shè)計(jì)(論文)評審意見</p><p> ?。?)態(tài)度評價(20分):優(yōu)(?。⒘迹ā。?、中(?。?、
10、一般(?。?、差( ); </p><p> (2)任務(wù)難度(20分):優(yōu)(?。?、良(?。?、中(?。?、一般(?。⒉睿ā。?</p><p> ?。?)設(shè)計(jì)分析(20分):優(yōu)(?。⒘迹ā。?、中( )、一般(?。?、差(?。?;</p><p> (4)創(chuàng)新性評價(20分):優(yōu)(?。?、良(?。⒅校ā。⒁话悖ā。?、差(?。?;</p><p>
11、; ?。?)回答問題(20分):優(yōu)(?。?、良(?。⒅校ā。⒁话悖ā。?、差( );</p><p> ?。?)論文格式規(guī)范性及考勤是否降等級:是( )、否( )</p><p> 評閱人簽名: 職稱: 教授</p><p> 2013 年6 月25日</p><p><b> 目 錄</
12、b></p><p> 第1章 系統(tǒng)概要- 1 -</p><p> 1.1系統(tǒng)介紹- 1 -</p><p> 1.2 基本功能要求- 1 -</p><p> 第2章 設(shè)計(jì)思路與算法- 2 -</p><p> 2.1 應(yīng)用的基本工作流程- 2 -</p><p>
13、 2.2 類設(shè)計(jì)- 3 -</p><p> 2.3 應(yīng)用界面的設(shè)計(jì)- 3 -</p><p> 2.4 事件處理原理、具體設(shè)計(jì)- 3 -</p><p> 2.5 算法考慮- 4 -</p><p> 第3章 源程序代碼- 5 -</p><p> 第4章 運(yùn)行結(jié)果及分析- 15 -</
14、p><p> 第5章 心得體會- 17 -</p><p> 5.1系統(tǒng)需要完善的地方- 17 -</p><p> 5.2課程設(shè)計(jì)感想- 17 -</p><p> 參考文獻(xiàn)- 17 -</p><p><b> 第1章 系統(tǒng)概要</b></p><p>&
15、lt;b> 1.1系統(tǒng)介紹 </b></p><p> 編寫一個簡易計(jì)算器,實(shí)現(xiàn)Windows計(jì)算器的主要功能。</p><p> 本次課程設(shè)計(jì)就是利用java語言來編寫簡單計(jì)算器的應(yīng)用程序,模擬Windows計(jì)算器的功能,能進(jìn)行加、減、乘、除四則算術(shù)運(yùn)算和求倒數(shù)、求平方根等簡單函數(shù)運(yùn)算,且有小數(shù)點(diǎn)、清零和存儲等功能。</p><p>&l
16、t;b> 1.2基本功能要求</b></p><p> 通過計(jì)算器的設(shè)計(jì),掌握J(rèn)ava編程的基本知識點(diǎn)。</p><p> (1)掌握基于AWT的圖形用戶界面的設(shè)計(jì),如常用的的布局設(shè)計(jì),容器中面板、按鈕、文本框等組件的添加和布局。</p><p> ?。?)掌握圖形界面的事件處理方法,注冊動作事件監(jiān)聽者。</p><p&g
17、t; ?。?)掌握各類功能的實(shí)現(xiàn)思路,及程序表達(dá)。熟悉實(shí)例變量、類變量與局部變量的差異。</p><p> (4)掌握方法的封裝與調(diào)用。盡量將重復(fù)用到的一段功能設(shè)計(jì)為方法。</p><p> ?。?)掌握if和switch等語句的使用。</p><p> ?。?)掌握如何給按鈕設(shè)置顏色及給頁面背景設(shè)計(jì)顏色。</p><p> (7)掌握j
18、ava中“對象”和“類”的知識,類的設(shè)計(jì)及成員的控制訪問</p><p> 第2章 設(shè)計(jì)思路與算法</p><p> 2.1 應(yīng)用的基本工作流程</p><p> 打開命令提示符和記事本;</p><p><b> 輸入源程序代碼;</b></p><p><b> 保存并運(yùn)行
19、源程序;</b></p><p> 運(yùn)行,檢查是否有誤;</p><p> 修改錯誤并再次運(yùn)行;</p><p> 測試計(jì)算器的工作狀況。</p><p><b> 2.2 類設(shè)計(jì)</b></p><p> 本次計(jì)算器的設(shè)計(jì),主要用到的是GUI編程的相關(guān)方法。所以我們所用到的
20、類和方法主要有:</p><p> 主類:Calculation類</p><p> 繼承的父類為WindowAdapter類,實(shí)現(xiàn)了ActionListener接口,定義了一個窗體f和多個面板,按鈕和文本框。</p><p> (1)方法名:display方法</p><p> 作用:構(gòu)建計(jì)算器的主界面</p><
21、;p> 在方法display中,定義了窗體的標(biāo)題,設(shè)置了窗體的大小并通過setVisible(true)方法使窗體可見,setBackground()方法設(shè)置背景顏色,setResizable(false)方法使窗體大小不可變。用setLayout()方法給容器指定按BorderLayout布局排列部件: </p><p> 通過容器的add()方法將面板放置在North區(qū)域:f.add(p5,Bo
22、rderLayout.NORTH),通過add方法用來向面板中加入部件。</p><p> 添加GUI部件并給各個部件各自不同的標(biāo)識,創(chuàng)建中間面板時,如面板p1,p1=new Panel(new GridLayout(1,3,5,5)),設(shè)置為GridLayout布局,再用add方法把按鈕都加進(jìn)去,按(1,3,5,5)方式排列</p><p> 通過按鈕對象的addActionList
23、ener方法為其注冊事件監(jiān)聽處理者。 </p><p> (2)方法名:actionPerformed方法</p><p> 作用:設(shè)置各個GUI部件的事件處理</p><p> 在 actionPerformed方法中,分別設(shè)置了不同按鈕的操作事件,當(dāng)不同按鈕單擊發(fā)生動作時自動調(diào)用執(zhí)行相應(yīng)的動作,從而實(shí)現(xiàn)計(jì)算器的多種運(yùn)算功能。</p><
24、p> 通過e.getActionCommand()獲得按鈕事件對象的命令名,再在if語句中根據(jù)操作命令符按情況分別處理事件,進(jìn)行相應(yīng)運(yùn)算。通過setText()方法將結(jié)果轉(zhuǎn)化為數(shù)字串寫入文本輸入框中。</p><p> 事件監(jiān)聽器中的事件處理方法void actionPerformed(ActionEvent e)完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件(“0”,“1”,“2”,“
25、3”···“8”,“9”),小數(shù)點(diǎn)按鈕事件(“.”),運(yùn)算符按鈕處理事件(“+”,“-”,“*”,“/”),正負(fù)號按鈕事件(“+/-”),退格按鈕事件(“Backspace”),清除按鈕事件(“C”),等號按鈕事件(“=”),存儲按鈕事件(“MS”,“MC”,“MR” ,“M+”)等。</p><p> (3)方法名:main方法</p><p> 在該方
26、法中,通過new運(yùn)算符創(chuàng)建一個類Calculation的對象Cal,通過調(diào)用display()方法。</p><p> (4)方法名:windowClosing方法</p><p> 在該方法中,在處理窗體的“關(guān)閉”事件的監(jiān)聽者采用繼承WindowsAdapter的方式。</p><p> 2.3 應(yīng)用界面的設(shè)計(jì)</p><p> 參
27、考了windows計(jì)算器的布局,我們把總體界面采用BorderLayout布局,文本框所在的面板p5位于最上方(North區(qū)域),存儲按鈕及顯示M狀態(tài)文本框所在的面板p3在最左邊(West區(qū)域),而Backspace,CE,C所在的面板p1和數(shù)字按鈕、運(yùn)算符按鈕等所在面板p2放置在面板p4中,面板p4統(tǒng)一分布在中央(Center區(qū)域),同時面板中又按GridLayout布局分布多行多列。具體如下圖所示。</p><p
28、> 2.4 事件處理原理、具體設(shè)計(jì)</p><p> 首先,對計(jì)算器的整體布局構(gòu)思清楚,將整個計(jì)算器分成多行多列組成的單元,使得整個計(jì)算器的布局更加合理、有序。采用網(wǎng)格塊布局,整體分為6行,第一行為輸入及顯示框,第二行為退格鍵和清零鍵,下面幾行分別為數(shù)字按鈕與運(yùn)算符按鈕,以及MC,MR,MS,M+等存儲按鈕。</p><p> 第二,設(shè)計(jì)依次添加GUI部件。</p>
29、<p> 第三,為各個部件注冊監(jiān)聽者,考慮到數(shù)字鍵,運(yùn)算符,等于,小數(shù)點(diǎn),求平方根等的不同以及程序的調(diào)理清晰,我們分別為其設(shè)置了不同的監(jiān)聽者。</p><p> 第四,設(shè)置相應(yīng)的各類算法。</p><p> 第五,設(shè)置主程序和退出方法。</p><p> 在編寫完源程序代碼后,進(jìn)行運(yùn)行,發(fā)現(xiàn)錯誤并更正。</p><p>
30、 最后,測試制作的計(jì)算器運(yùn)行狀況即計(jì)算能力。</p><p> 動作事件的各方關(guān)系,結(jié)合代碼大致如下圖所示:</p><p><b> 2.5 算法考慮</b></p><p> 在 actionPerformed方法中,分別設(shè)置了不同按鈕的操作事件,當(dāng)不同按鈕單擊發(fā)生動作時自動調(diào)用執(zhí)行相應(yīng)的動作,從而實(shí)現(xiàn)計(jì)算器的多種運(yùn)算功能。<
31、/p><p> 數(shù)字按鈕與其他按鈕作為事件源都注冊了監(jiān)聽者,且監(jiān)聽者符合ActionListener接口的要求。數(shù)據(jù)與運(yùn)算符的鍵入通過點(diǎn)擊按鈕來觸發(fā)事件,在按下“=”按鈕時通過調(diào)用之前按下的相應(yīng)運(yùn)算符所表示的運(yùn)算函數(shù)進(jìn)行運(yùn)算,將所的結(jié)果保存在dResult中,并顯示在文本框內(nèi)。求平方根、求倒數(shù)等運(yùn)算時,調(diào)用了Math類的方法進(jìn)行運(yùn)算。當(dāng)輸入小數(shù)時,將小數(shù)點(diǎn)拼接到數(shù)字串中。按下清除按鈕時,變量初始化。</p&g
32、t;<p><b> 第3章 源程序代碼</b></p><p> //用JAVA編寫簡易計(jì)算器的程序(模擬Windows計(jì)算器)</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> public class
33、 Calculation extends WindowAdapter implements ActionListener</p><p><b> {</b></p><p> double dResult=0;</p><p> double dNowInput=0;</p><p> double dMemo
34、ry; //記載內(nèi)存中存儲的數(shù)據(jù)</p><p> int n=0; //記載小數(shù)位數(shù)</p><p> int nOperation=1; // 記錄運(yùn)算符類型</p><p> int nBitsNum=0; //記錄總共輸入的位數(shù)</p><p> boolean alreadyHaveDot=f
35、alse; //是否已經(jīng)有小數(shù)點(diǎn)</p><p> boolean keyAvailable=true;</p><p> boolean alreadyClickedEqueal=false; //是否已經(jīng)按下過"="按鈕</p><p> boolean isTempNowInput=false; //是否在計(jì)算出結(jié)果后直
36、接按運(yùn)算符將結(jié)果賦給了當(dāng)前輸入值</p><p><b> Frame f;</b></p><p> Panel p1,p2,p3,p4,p5,p6;</p><p> TextField tf1,tf2;</p><p> Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0;</p
37、><p> Button bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative;</p><p> Button bBackspace,bCE,bC,bMR,bMS,bMC,bM;</p><p> public void display()</p><
38、;p><b> {</b></p><p> f=new Frame("計(jì)算器");</p><p> f.setSize(280,213);</p><p> f.setLocation(200,200);</p><p> f.setBackground(Color.LIGHT_G
39、RAY);</p><p> f.setResizable(false);</p><p> f.setLayout(new BorderLayout(3,3)); //采用方位布局排列部件</p><p> p1=new Panel(new GridLayout(1,3,5,5)); //用于存放Backspace,CE,C三鍵</p>
40、<p> p2=new Panel(new GridLayout(4,5,5,5)); //用于存放數(shù)字區(qū)及附近共20鍵</p><p> p3=new Panel(new GridLayout(5,1,5,5)); //用于存放MC,MR,MS,M+鍵及顯示M狀態(tài)文本框</p><p> p4=new Panel(new FlowLayout());
41、 //用于存放p1,p2</p><p> p5=new Panel(new FlowLayout());</p><p> p6=new Panel(new FlowLayout());</p><p> p4.add(p1);</p><p> p4.add(p2);</p><p> tf1=new
42、TextField(35); //存放顯示區(qū)</p><p> tf1.setText("0.");</p><p> tf1.setEditable(false); //判斷輸入框是否可編輯,非編輯狀態(tài)不能輸入數(shù)據(jù)</p><p> p5.add(tf1);</p><p> f.add(p5,Bo
43、rderLayout.NORTH);</p><p> f.add(p4,BorderLayout.CENTER);</p><p> f.add(p3,BorderLayout.WEST);</p><p> b1=new Button("1"); //數(shù)字按鈕</p><p> b2=new But
44、ton("2");</p><p> b3=new Button("3");</p><p> b4=new Button("4");</p><p> b5=new Button("5");</p><p> b6=new Button("6&
45、quot;);</p><p> b7=new Button("7");</p><p> b8=new Button("8");</p><p> b9=new Button("9");</p><p> b0=new Button("0");</
46、p><p> b1.addActionListener(this);</p><p> b2.addActionListener(this);</p><p> b3.addActionListener(this);</p><p> b4.addActionListener(this);</p><p> b5
47、.addActionListener(this);</p><p> b6.addActionListener(this);</p><p> b7.addActionListener(this);</p><p> b8.addActionListener(this);</p><p> b9.addActionListener(t
48、his);</p><p> b0.addActionListener(this);</p><p> bDiv=new Button("/"); //運(yùn)算符按鈕</p><p> bSqrt=new Button("sqrt");</p><p> bMulti=n
49、ew Button("*");</p><p> bMinus=new Button("-");</p><p> bPercent=new Button("%");</p><p> bPlus=new Button("+");</p><p> bRe
50、ciprocal=new Button("1/x");</p><p> bEqual=new Button("=");</p><p> bDot=new Button(".");</p><p> bNegative=new Button("+/-");</p>
51、<p> bDiv.addActionListener(this);</p><p> bSqrt.addActionListener(this);</p><p> bMulti.addActionListener(this);</p><p> bMinus.addActionListener(this);</p><p&g
52、t; bPercent.addActionListener(this);</p><p> bPlus.addActionListener(this);</p><p> bReciprocal.addActionListener(this);</p><p> bEqual.addActionListener(this);</p><p
53、> bDot.addActionListener(this);</p><p> bNegative.addActionListener(this);</p><p> p2.add(b7); //將按鈕依次添加到面板</p><p> p2.add(b8);</p><p> p2.add(b9
54、);</p><p> p2.add(bDiv);</p><p> p2.add(bSqrt);</p><p> p2.add(b4);</p><p> p2.add(b5);</p><p> p2.add(b6);</p><p> p2.add(bMulti);</
55、p><p> p2.add(bPercent);</p><p> p2.add(b1);</p><p> p2.add(b2);</p><p> p2.add(b3);</p><p> p2.add(bMinus);</p><p> p2.add(bReciprocal);&l
56、t;/p><p> p2.add(b0);</p><p> p2.add(bNegative);</p><p> p2.add(bDot);</p><p> p2.add(bPlus);</p><p> p2.add(bEqual);</p><p> bBackspace=ne
57、w Button("Backspace");</p><p> bCE=new Button("CE");</p><p> bC=new Button("C");</p><p> bBackspace.addActionListener(this);</p><p> b
58、CE.addActionListener(this);</p><p> bC.addActionListener(this);</p><p> p1.add(bBackspace); </p><p> p1.add(bCE);</p><p> p1.add(bC);</p><p> tf2=new
59、TextField(2);</p><p> tf2.setEnabled(false);</p><p> tf2.setBackground(Color.LIGHT_GRAY);</p><p> bMC=new Button("MC");</p><p> bMR=new Button("MR&qu
60、ot;);</p><p> bMS=new Button("MS");</p><p> bM=new Button("M+");</p><p> bMC.addActionListener(this);</p><p> bMR.addActionListener(this);</p
61、><p> bMS.addActionListener(this);</p><p> bM.addActionListener(this);</p><p> p6.add(tf2);</p><p> p3.add(p6);</p><p> p3.add(bMC);</p><p>
62、 p3.add(bMR);</p><p> p3.add(bMS);</p><p> p3.add(bM);</p><p> f.setVisible(true);</p><p> f.addWindowListener(this);</p><p><b> }</b><
63、;/p><p> public void actionPerformed(ActionEvent e)</p><p><b> { </b></p><p> //key 0 to 9</p><p> if(this.keyAvailable&&e.getActionCommand().lengt
64、h()==1&&e.getActionCommand().compareTo("0")>=0 && e.getActionCommand().compareTo("9")<=0)</p><p><b> {</b></p><p> if(this.isTempNowInput)
65、</p><p><b> {</b></p><p> this.dNowInput=0;</p><p> this.isTempNowInput=false;</p><p><b> }</b></p><p> this.nBitsNum++; </
66、p><p> if(this.alreadyHaveDot==false)</p><p> this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand());</p><p><b> else</b></p><p><b>
67、; { </b></p><p> double temp=Double.parseDouble(e.getActionCommand());</p><p> for(int i=this.n;i<0;i++)</p><p><b> { </b></p><p> temp*=0
68、.1;</p><p><b> }</b></p><p> this.dNowInput+=temp;</p><p><b> this.n--;</b></p><p><b> }</b></p><p> this.tf1.setT
69、ext(Double.toString(this.dNowInput));</p><p><b> }</b></p><p> // key dot</p><p> if(this.keyAvailable && e.getActionCommand()==".")</p><
70、p><b> {</b></p><p> if(this.alreadyHaveDot==false)</p><p><b> {</b></p><p> this.nBitsNum++;</p><p> this.alreadyHaveDot=true;</p>
71、<p> this.n=-1; </p><p><b> }</b></p><p><b> }</b></p><p> //key "+","-","*","/"</p><p> if(
72、this.keyAvailable && e.getActionCommand()=="+" || e.getActionCommand()=="-" || e.getActionCommand()=="*" || e.getActionCommand()=="/")</p><p><b> { <
73、/b></p><p> if(this.alreadyClickedEqueal)</p><p><b> {</b></p><p> this.dNowInput=this.dResult;</p><p> this.isTempNowInput=true;</p><p>
74、;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> switch(this.nOperation)</p><p><b> {</b></p><p&g
75、t; case 1: this.dResult+=this.dNowInput; break;</p><p> case 2: this.dResult-=this.dNowInput; break;</p><p> case 3: this.dResult*=this.dNowInput; break;</p><p><b> case 4
76、:</b></p><p><b> {</b></p><p> if(this.dNowInput==0)</p><p><b> {</b></p><p> tf1.setText("除數(shù)不能為零");</p><p> t
77、his.keyAvailable=false;</p><p><b> }</b></p><p> else this.dResult=this.dResult/this.dNowInput;</p><p><b> }</b></p><p><b> }</b>
78、;</p><p> if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));</p><p> this.dNowInput=0; </p><p><b> } </b></p><p> if(e.getActionCommand(
79、)=="+")</p><p><b> { </b></p><p> this.nOperation=1; </p><p><b> }</b></p><p> if(e.getActionCommand()=="-")</p>
80、<p><b> { </b></p><p> this.nOperation=2;</p><p><b> }</b></p><p> if(e.getActionCommand()=="*")</p><p><b> {</b>
81、;</p><p> this.nOperation=3;</p><p><b> }</b></p><p> if(e.getActionCommand()=="/")</p><p><b> {</b></p><p> this.nO
82、peration=4;</p><p><b> }</b></p><p> this.nBitsNum=0;</p><p> this.alreadyClickedEqueal=false;</p><p><b> }</b></p><p> // key
83、 "+/-" </p><p> if(this.keyAvailable && e.getActionCommand()=="+/-")</p><p><b> {</b></p><p> this.dNowInput=0-this.dNowInput;</p>
84、<p> tf1.setText(Double.toString(this.dNowInput)); </p><p><b> }</b></p><p> // key "C" </p><p> if(e.getActionCommand()=="C")</p>
85、<p><b> {</b></p><p> this.nBitsNum=0;</p><p> this.dResult=0;</p><p> this.dNowInput=0;</p><p> this.alreadyHaveDot=false;</p><p>&l
86、t;b> this.n=0;</b></p><p> this.nOperation=1;</p><p> this.keyAvailable=true;</p><p> this.alreadyClickedEqueal=false;</p><p> tf1.setText("0.")
87、;</p><p><b> }</b></p><p> // key "CE"</p><p> if(e.getActionCommand()=="CE")</p><p><b> {</b></p><p> thi
88、s.nBitsNum=0;</p><p> this.dNowInput=0;</p><p> this.alreadyHaveDot=false;</p><p><b> this.n=0;</b></p><p> this.nOperation=1;</p><p> thi
89、s.keyAvailable=true;</p><p> tf1.setText("0.");</p><p><b> }</b></p><p> // key "sqrt"</p><p> if(this.keyAvailable && e.get
90、ActionCommand()=="sqrt")</p><p><b> {</b></p><p> if(this.alreadyClickedEqueal)</p><p><b> {</b></p><p> if(this.dResult>=0)<
91、;/p><p><b> {</b></p><p> this.dResult=Math.sqrt(this.dResult);</p><p> tf1.setText(Double.toString(this.dResult));</p><p><b> }</b></p>
92、<p><b> else</b></p><p><b> {</b></p><p> tf1.setText("函數(shù)輸入無效");</p><p> this.keyAvailable=false;</p><p><b> }</b&
93、gt;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(this.dNowInput>=0)</p><p><b> {</
94、b></p><p> this.dNowInput=Math.sqrt(this.dNowInput);</p><p> tf1.setText(Double.toString(this.dNowInput));</p><p><b> }</b></p><p><b> else<
95、/b></p><p><b> {</b></p><p> tf1.setText("函數(shù)輸入無效");</p><p> this.keyAvailable=false;</p><p><b> }</b></p><p><b
96、> } </b></p><p><b> }</b></p><p> // key "1/x"</p><p> if(this.keyAvailable && e.getActionCommand()=="1/x")</p><p>
97、<b> {</b></p><p> if(this.dNowInput==0)</p><p><b> {</b></p><p> tf1.setText("除數(shù)不能為零");</p><p> this.keyAvailable=false;</p>
98、;<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> this.dNowInput=1/this.dNowInput;</p><p> tf1.setText(Double.
99、toString(this.dNowInput));</p><p><b> }</b></p><p><b> }</b></p><p> // key "="</p><p> if(this.keyAvailable && e.getActio
100、nCommand()=="=")</p><p><b> {</b></p><p> this.alreadyClickedEqueal=true;</p><p> switch(this.nOperation)</p><p><b> {</b></p&g
101、t;<p> case 1: this.dResult+=this.dNowInput; break;</p><p> case 2: this.dResult-=this.dNowInput; break;</p><p> case 3: this.dResult*=this.dNowInput; break;</p><p><b&
102、gt; case 4:</b></p><p><b> {</b></p><p> if(this.dNowInput==0)</p><p><b> {</b></p><p> tf1.setText("除數(shù)不能為零");</p>&
103、lt;p> this.keyAvailable=false;</p><p><b> }</b></p><p> else this.dResult=this.dResult/this.dNowInput;</p><p><b> }</b></p><p><b>
104、 }</b></p><p> if(this.keyAvailable)tf1.setText(Double.toString(this.dResult)); </p><p><b> }</b></p><p> // key "MS"</p><p> if(this.k
105、eyAvailable && e.getActionCommand()=="MS")</p><p><b> {</b></p><p> this.dMemory=this.dNowInput;</p><p> if(this.dMemory!=0)</p><p> t
106、f2.setText("M");</p><p><b> }</b></p><p> // key "MC"</p><p> if(this.keyAvailable && e.getActionCommand()=="MC")</p><
107、;p><b> {</b></p><p> this.dMemory=0;</p><p> tf2.setText("");</p><p><b> }</b></p><p> // key "MR"</p><p&
108、gt; if(this.keyAvailable && e.getActionCommand()=="MR")</p><p><b> {</b></p><p> this.dNowInput=this.dMemory;</p><p> tf1.setText(Double.toString(t
109、his.dNowInput));</p><p><b> }</b></p><p> // key "M+"</p><p> if(this.keyAvailable && e.getActionCommand()=="M+")</p><p><
110、b> {</b></p><p> this.dMemory+=this.dNowInput;</p><p> if(this.dMemory!=0)</p><p> tf2.setText("M");</p><p> else tf2.setText("");<
111、/p><p><b> }</b></p><p> // key "%"</p><p> if(this.keyAvailable && e.getActionCommand()=="%")</p><p><b> {</b><
112、/p><p> this.dNowInput=(this.dResult*this.dNowInput)/100;</p><p> tf1.setText(Double.toString(this.dNowInput));</p><p><b> }</b></p><p> // key "Backs
113、pace"</p><p> if(this.keyAvailable && e.getActionCommand()=="Backspace")</p><p><b> {</b></p><p> if(!this.alreadyClickedEqueal){</p>&l
114、t;p> if(this.dNowInput!=0)</p><p><b> {</b></p><p> if(this.alreadyHaveDot)</p><p><b> {</b></p><p> if(this.n==-1)</p><p>
115、<b> {</b></p><p> this.alreadyHaveDot=false;</p><p> this.n=0; </p><p><b> }</b></p><p><b> else</b></p><p><b&
116、gt; {</b></p><p> String str,str1;</p><p> str=tf1.getText();</p><p> str1=str.substring(0,this.nBitsNum-1);</p><p> this.nBitsNum--;</p><p><
117、;b> this.n++;</b></p><p> this.dNowInput=Double.parseDouble(str1);</p><p> tf1.setText(Double.toString(this.dNowInput)); </p><p><b> }</b></p>&
118、lt;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> int temp;</b></p><p> temp=(int)(this.dNowInput/1
119、0);</p><p> this.dNowInput=(double)temp;</p><p> tf1.setText(Double.toString(this.dNowInput));</p><p><b> }</b></p><p><b> }</b></p>
120、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> public static void main(String args[])</p><p><b> {</b>
121、;</p><p> Calculation cal=new Calculation();</p><p> cal.display();</p><p><b> }</b></p><p> public void windowClosing(WindowEvent e)</p><p&g
122、t;<b> {</b></p><p> System.exit(0);</p><p><b> }</b></p><p><b> }</b></p><p> 第4章 運(yùn)行結(jié)果及分析</p><p> 如圖1所示,以下就是我們設(shè)計(jì)出
123、的計(jì)算器的運(yùn)行界面截圖,這一計(jì)算器采用的是BorderLayout布局,能夠?qū)崿F(xiàn)十進(jìn)制下正負(fù)數(shù)的加法、減法、乘法、除法四則運(yùn)算以及求平方根、百分號、求倒數(shù)、清零、退格等簡單操作。Backspace表示退格,CE表示將當(dāng)前文本框內(nèi)數(shù)據(jù)清空,C表示文本框內(nèi)數(shù)據(jù)清除。相應(yīng)按鈕上的名稱代表了相應(yīng)的數(shù)字或運(yùn)算,最終通過“=”按鈕將運(yùn)算結(jié)果顯示在第一行的文本框內(nèi),整體上說設(shè)計(jì)還成功。</p><p> 圖4-1 計(jì)算器
124、界面</p><p> 我們發(fā)現(xiàn)了程序能夠準(zhǔn)確地進(jìn)行運(yùn)算,并顯示出正確結(jié)果,同時發(fā)現(xiàn)該計(jì)算器可進(jìn)行一般的語法分析,例如如果除數(shù)為零,計(jì)算結(jié)果顯示“除數(shù)不能為零”。</p><p> 例如如果對超過八位的數(shù)據(jù)進(jìn)行操作,計(jì)算結(jié)果用科學(xué)表示法表示。</p><p> 例如如果對非負(fù)數(shù)進(jìn)行求平方根,計(jì)算結(jié)果顯示“函數(shù)輸入無效”。</p><p>
125、; 但是也發(fā)現(xiàn)了計(jì)算器對于類似5+6*3的運(yùn)算不能判斷運(yùn)算順序。</p><p> 如圖4-2所示,5+6*3計(jì)算器計(jì)算結(jié)果為33,而正確結(jié)果應(yīng)為23。</p><p> 圖4-2 5+6*3的運(yùn)算結(jié)果</p><p><b> 第5章 心得體會</b></p><p> 5.1系統(tǒng)需要完善的地方</
126、p><p> 1.在第四章提到的不能對類似5+6*3的運(yùn)算判斷運(yùn)算順序。</p><p> 2.程序比較長,還可以進(jìn)行簡化。</p><p> 3.對于運(yùn)算方法等方面仍可以進(jìn)行一些改進(jìn)。</p><p> 4.這界面還可設(shè)有菜單操作(包括:“編輯”,“查看”,“幫助”三個菜單項(xiàng))</p><p> 5.2 課程設(shè)
127、計(jì)感想</p><p> 本計(jì)算器模擬Windows計(jì)算器的界面和功能,由于時間倉促和能力有限等問題,只能實(shí)現(xiàn)以上功能。本次課程設(shè)計(jì)到此算是告一段落了,經(jīng)過這次的學(xué)習(xí),我學(xué)到了很多東西,在此基礎(chǔ)上更加鞏固了自己對java的認(rèn)識與了解。</p><p> 在做本項(xiàng)目是時候,會遇到很多小問題,比如說,在整個運(yùn)算過程中要如何確保輸入的計(jì)算數(shù)據(jù)哪個是第一個計(jì)算數(shù)據(jù)的,哪個是第二個計(jì)算數(shù)據(jù)的,同
128、時也要區(qū)分運(yùn)算符,因?yàn)樵撚?jì)算器程序應(yīng)用的都是利用字符串來完成計(jì)算的,而且不能重復(fù)輸出運(yùn)算符,更不能將運(yùn)算符錯誤的存儲在了第一個計(jì)算數(shù)據(jù)的數(shù)值中,也得考慮到萬一不小心重復(fù)點(diǎn)擊了運(yùn)算符按鈕會不會造成第一個計(jì)算數(shù)據(jù)的重新賦值等等問題,最后想到利用布爾類型來很好的控制運(yùn)算符的應(yīng)用!</p><p> 此次課程設(shè)計(jì)讓我更了解熟悉了Java中的圖形用戶界面和它的編程方式。在完成課題的過程中也不斷充實(shí)了自己,學(xué)習(xí)到了很多以前
129、沒有學(xué)習(xí)到的知識,收獲很大。最大的收獲就是對大學(xué)學(xué)習(xí)的總結(jié)和培養(yǎng)了解決困難的信心和能力,使我對所學(xué)知識能夠融會貫通,又不斷豐富了新知識。Java計(jì)算器設(shè)計(jì)使得我們對所學(xué)的專業(yè)課有了更為深刻的認(rèn)識,使得知識得到了鞏固和提高。</p><p> 在以前,我們只是對書上已經(jīng)給出的程序進(jìn)行編譯和運(yùn)行,而這次我們算是真正自己編寫了一個程序(雖然參考了書上的程序),覺得自己對于java的應(yīng)用得到了很大的提高,也體會到了編寫
130、一個程序是一個十分艱辛的過程,需要不斷的調(diào)試,改進(jìn),以及小組成員的努力思考。</p><p> 在制作簡易計(jì)算器的過程中,很容易打錯源程序代碼而導(dǎo)致編譯通不過。這是一個細(xì)心程度的問題,做什么事都必須細(xì)心嚴(yán)謹(jǐn),這樣才不容易出錯。在編譯通過運(yùn)行程序出現(xiàn)了一個計(jì)算器界面時心里非常高興,迫不及待地使用制作出來的計(jì)算器。編一個程序真心不容易啊,程序員都是偉大的人啊,向他們看齊。這次的課設(shè)作業(yè)讓我明白了無論多復(fù)雜的東西都是
131、由好多基礎(chǔ)的東西組合在一起的。</p><p> 在接下來的時間里,我覺得我要更加努力的往深一層次的方面看齊,了解更多有關(guān)java的知識,對java有更深一步的了解,我會一步一步的走下去!</p><p><b> 參考文獻(xiàn)</b></p><p> ?。?)丁振凡.《J ava語言程序設(shè)計(jì)》 清華大學(xué)出版社 </p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java計(jì)算器課程設(shè)計(jì)報告
- java課程設(shè)計(jì)報告--計(jì)算器設(shè)計(jì)
- java課程設(shè)計(jì)---java計(jì)算器
- java計(jì)算器課程設(shè)計(jì)報告---模擬科學(xué)計(jì)算器
- java課程設(shè)計(jì)—計(jì)算器
- java課程設(shè)計(jì)計(jì)算器
- java計(jì)算器課程設(shè)計(jì)
- java課程設(shè)計(jì)---計(jì)算器
- java課程設(shè)計(jì)--計(jì)算器
- java課程設(shè)計(jì)計(jì)算器
- 計(jì)算器java課程設(shè)計(jì)--簡單計(jì)算器
- java課程設(shè)計(jì)報告----計(jì)算器軟件設(shè)計(jì)
- java課程設(shè)計(jì)----簡易計(jì)算器
- java_計(jì)算器課程設(shè)計(jì)
- java課程設(shè)計(jì)-計(jì)算器系統(tǒng)
- java課程設(shè)計(jì)---科學(xué)計(jì)算器
- java實(shí)現(xiàn)計(jì)算器課程設(shè)計(jì)
- java課程設(shè)計(jì)-計(jì)算器系統(tǒng)
- java計(jì)算器課程設(shè)計(jì)-- 計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)
- java計(jì)算器課程設(shè)計(jì)---計(jì)算器模擬程序
評論
0/150
提交評論