版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p> 基礎(chǔ) 學(xué) 院 信息與計(jì)算科學(xué) ?! I(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> (2)掌握J(rèn)ava的基本編程原理和基本的編程方法; </p><p> ?。?)使學(xué)生學(xué)會(huì)系統(tǒng)調(diào)試;&
3、lt;/p><p> ?。?)培養(yǎng)學(xué)生分析、解決問(wèn)題的能力;</p><p> (5)提高學(xué)生的軟件文檔寫作能力和團(tuán)隊(duì)合作精神。 </p><p> 2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b> 1)基本要求:</b></p><p> ?。?)分析系統(tǒng)各功能模塊的工作原理;</
4、p><p> ?。?)提出系統(tǒng)的設(shè)計(jì)方案; </p><p> (3)對(duì)所進(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> ?。?)要按照書稿的規(guī)格打印謄寫設(shè)計(jì)論文;</p><p> ?。?)論文包括目錄、摘要、正文、總結(jié)等;</p><p> ?。?)畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成。</p><p> 4)答辯與評(píng)分標(biāo)準(zhǔn): </p><p> (1)達(dá)到課程設(shè)計(jì)的目的與要求,程序的可讀性較好,并調(diào)試正確,60分;
6、</p><p> (2)能正確回答老師所提問(wèn)題,可增加10分;</p><p> ?。?)課程設(shè)計(jì)報(bào)告書寫規(guī)范整齊,可增加10分;</p><p> ?。?)心得體會(huì)認(rèn)真總結(jié),可增加10分;</p><p> (5)程序有創(chuàng)新性,可增加10分;</p><p> 成績(jī)?cè)u(píng)定實(shí)行優(yōu)秀、良好、中等、及格和不及格五個(gè)等
7、級(jí)。不及格者需重做。</p><p><b> 5)參考文獻(xiàn):</b></p><p> ?。?)丁振凡.《J ava語(yǔ)言程序設(shè)計(jì)》 清華大學(xué)出版社 </p><p> ?。?)丁振凡.《J ava語(yǔ)言程序設(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íng)審意見(jiàn)</p><p> ?。?)態(tài)度評(píng)價(jià)(20分):優(yōu)(?。?、良(?。?、中(?。?、
10、一般(?。?、差(?。?; </p><p> ?。?)任務(wù)難度(20分):優(yōu)(?。?、良( )、中(?。⒁话悖ā。⒉睿ā。?; </p><p> ?。?)設(shè)計(jì)分析(20分):優(yōu)(?。?、良( )、中(?。⒁话悖ā。⒉睿ā。?;</p><p> (4)創(chuàng)新性評(píng)價(jià)(20分):優(yōu)(?。?、良( )、中( )、一般(?。?、差(?。?lt;/p><p>
11、; ?。?)回答問(wèn)題(20分):優(yōu)( )、良(?。?、中( )、一般( )、差(?。?lt;/p><p> ?。?)論文格式規(guī)范性及考勤是否降等級(jí):是( )、否( )</p><p> 評(píng)閱人簽名: 職稱: 教授</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章 心得體會(huì)- 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> 編寫一個(gè)簡(jiǎn)易計(jì)算器,實(shí)現(xiàn)Windows計(jì)算器的主要功能。</p><p> 本次課程設(shè)計(jì)就是利用java語(yǔ)言來(lái)編寫簡(jiǎn)單計(jì)算器的應(yīng)用程序,模擬Windows計(jì)算器的功能,能進(jìn)行加、減、乘、除四則算術(shù)運(yùn)算和求倒數(shù)、求平方根等簡(jiǎn)單函數(shù)運(yùn)算,且有小數(shù)點(diǎn)、清零和存儲(chǔ)等功能。</p><p>&l
16、t;b> 1.2基本功能要求</b></p><p> 通過(guò)計(jì)算器的設(shè)計(jì),掌握J(rèn)ava編程的基本知識(shí)點(diǎn)。</p><p> ?。?)掌握基于AWT的圖形用戶界面的設(shè)計(jì),如常用的的布局設(shè)計(jì),容器中面板、按鈕、文本框等組件的添加和布局。</p><p> ?。?)掌握?qǐng)D形界面的事件處理方法,注冊(cè)動(dòng)作事件監(jiān)聽(tīng)者。</p><p&g
17、t; ?。?)掌握各類功能的實(shí)現(xiàn)思路,及程序表達(dá)。熟悉實(shí)例變量、類變量與局部變量的差異。</p><p> ?。?)掌握方法的封裝與調(diào)用。盡量將重復(fù)用到的一段功能設(shè)計(jì)為方法。</p><p> (5)掌握if和switch等語(yǔ)句的使用。</p><p> ?。?)掌握如何給按鈕設(shè)置顏色及給頁(yè)面背景設(shè)計(jì)顏色。</p><p> ?。?)掌握j
18、ava中“對(duì)象”和“類”的知識(shí),類的設(shè)計(jì)及成員的控制訪問(wèn)</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> 修改錯(cuò)誤并再次運(yùn)行;</p><p> 測(cè)試計(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接口,定義了一個(gè)窗體f和多個(gè)面板,按鈕和文本框。</p><p> (1)方法名:display方法</p><p> 作用:構(gòu)建計(jì)算器的主界面</p><
21、;p> 在方法display中,定義了窗體的標(biāo)題,設(shè)置了窗體的大小并通過(guò)setVisible(true)方法使窗體可見(jiàn),setBackground()方法設(shè)置背景顏色,setResizable(false)方法使窗體大小不可變。用setLayout()方法給容器指定按BorderLayout布局排列部件: </p><p> 通過(guò)容器的add()方法將面板放置在North區(qū)域:f.add(p5,Bo
22、rderLayout.NORTH),通過(guò)add方法用來(lái)向面板中加入部件。</p><p> 添加GUI部件并給各個(gè)部件各自不同的標(biāo)識(shí),創(chuàng)建中間面板時(shí),如面板p1,p1=new Panel(new GridLayout(1,3,5,5)),設(shè)置為GridLayout布局,再用add方法把按鈕都加進(jìn)去,按(1,3,5,5)方式排列</p><p> 通過(guò)按鈕對(duì)象的addActionList
23、ener方法為其注冊(cè)事件監(jiān)聽(tīng)處理者。 </p><p> (2)方法名:actionPerformed方法</p><p> 作用:設(shè)置各個(gè)GUI部件的事件處理</p><p> 在 actionPerformed方法中,分別設(shè)置了不同按鈕的操作事件,當(dāng)不同按鈕單擊發(fā)生動(dòng)作時(shí)自動(dòng)調(diào)用執(zhí)行相應(yīng)的動(dòng)作,從而實(shí)現(xiàn)計(jì)算器的多種運(yùn)算功能。</p><
24、p> 通過(guò)e.getActionCommand()獲得按鈕事件對(duì)象的命令名,再在if語(yǔ)句中根據(jù)操作命令符按情況分別處理事件,進(jìn)行相應(yīng)運(yùn)算。通過(guò)setText()方法將結(jié)果轉(zhuǎn)化為數(shù)字串寫入文本輸入框中。</p><p> 事件監(jiān)聽(tīng)器中的事件處理方法void actionPerformed(ActionEvent e)完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件(“0”,“1”,“2”,“
25、3”···“8”,“9”),小數(shù)點(diǎn)按鈕事件(“.”),運(yùn)算符按鈕處理事件(“+”,“-”,“*”,“/”),正負(fù)號(hào)按鈕事件(“+/-”),退格按鈕事件(“Backspace”),清除按鈕事件(“C”),等號(hào)按鈕事件(“=”),存儲(chǔ)按鈕事件(“MS”,“MC”,“MR” ,“M+”)等。</p><p> (3)方法名:main方法</p><p> 在該方
26、法中,通過(guò)new運(yùn)算符創(chuàng)建一個(gè)類Calculation的對(duì)象Cal,通過(guò)調(diào)用display()方法。</p><p> (4)方法名:windowClosing方法</p><p> 在該方法中,在處理窗體的“關(guān)閉”事件的監(jiān)聽(tīng)者采用繼承WindowsAdapter的方式。</p><p> 2.3 應(yīng)用界面的設(shè)計(jì)</p><p> 參
27、考了windows計(jì)算器的布局,我們把總體界面采用BorderLayout布局,文本框所在的面板p5位于最上方(North區(qū)域),存儲(chǔ)按鈕及顯示M狀態(tài)文本框所在的面板p3在最左邊(West區(qū)域),而Backspace,CE,C所在的面板p1和數(shù)字按鈕、運(yùn)算符按鈕等所在面板p2放置在面板p4中,面板p4統(tǒng)一分布在中央(Center區(qū)域),同時(shí)面板中又按GridLayout布局分布多行多列。具體如下圖所示。</p><p
28、> 2.4 事件處理原理、具體設(shè)計(jì)</p><p> 首先,對(duì)計(jì)算器的整體布局構(gòu)思清楚,將整個(gè)計(jì)算器分成多行多列組成的單元,使得整個(gè)計(jì)算器的布局更加合理、有序。采用網(wǎng)格塊布局,整體分為6行,第一行為輸入及顯示框,第二行為退格鍵和清零鍵,下面幾行分別為數(shù)字按鈕與運(yùn)算符按鈕,以及MC,MR,MS,M+等存儲(chǔ)按鈕。</p><p> 第二,設(shè)計(jì)依次添加GUI部件。</p>
29、<p> 第三,為各個(gè)部件注冊(cè)監(jiān)聽(tīng)者,考慮到數(shù)字鍵,運(yùn)算符,等于,小數(shù)點(diǎn),求平方根等的不同以及程序的調(diào)理清晰,我們分別為其設(shè)置了不同的監(jiān)聽(tīng)者。</p><p> 第四,設(shè)置相應(yīng)的各類算法。</p><p> 第五,設(shè)置主程序和退出方法。</p><p> 在編寫完源程序代碼后,進(jìn)行運(yùn)行,發(fā)現(xiàn)錯(cuò)誤并更正。</p><p>
30、 最后,測(cè)試制作的計(jì)算器運(yùn)行狀況即計(jì)算能力。</p><p> 動(dòng)作事件的各方關(guān)系,結(jié)合代碼大致如下圖所示:</p><p><b> 2.5 算法考慮</b></p><p> 在 actionPerformed方法中,分別設(shè)置了不同按鈕的操作事件,當(dāng)不同按鈕單擊發(fā)生動(dòng)作時(shí)自動(dòng)調(diào)用執(zhí)行相應(yīng)的動(dòng)作,從而實(shí)現(xiàn)計(jì)算器的多種運(yùn)算功能。<
31、/p><p> 數(shù)字按鈕與其他按鈕作為事件源都注冊(cè)了監(jiān)聽(tīng)者,且監(jiān)聽(tīng)者符合ActionListener接口的要求。數(shù)據(jù)與運(yùn)算符的鍵入通過(guò)點(diǎn)擊按鈕來(lái)觸發(fā)事件,在按下“=”按鈕時(shí)通過(guò)調(diào)用之前按下的相應(yīng)運(yùn)算符所表示的運(yùn)算函數(shù)進(jìn)行運(yùn)算,將所的結(jié)果保存在dResult中,并顯示在文本框內(nèi)。求平方根、求倒數(shù)等運(yùn)算時(shí),調(diào)用了Math類的方法進(jìn)行運(yùn)算。當(dāng)輸入小數(shù)時(shí),將小數(shù)點(diǎn)拼接到數(shù)字串中。按下清除按鈕時(shí),變量初始化。</p&g
32、t;<p><b> 第3章 源程序代碼</b></p><p> //用JAVA編寫簡(jiǎn)易計(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)存中存儲(chǔ)的數(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)按下過(guò)"="按鈕</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ù)輸入無(wú)效");</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ù)輸入無(wú)效");</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所示,以下就是我們?cè)O(shè)計(jì)出
123、的計(jì)算器的運(yùn)行界面截圖,這一計(jì)算器采用的是BorderLayout布局,能夠?qū)崿F(xiàn)十進(jìn)制下正負(fù)數(shù)的加法、減法、乘法、除法四則運(yùn)算以及求平方根、百分號(hào)、求倒數(shù)、清零、退格等簡(jiǎn)單操作。Backspace表示退格,CE表示將當(dāng)前文本框內(nèi)數(shù)據(jù)清空,C表示文本框內(nèi)數(shù)據(jù)清除。相應(yīng)按鈕上的名稱代表了相應(yīng)的數(shù)字或運(yùn)算,最終通過(guò)“=”按鈕將運(yùn)算結(jié)果顯示在第一行的文本框內(nèi),整體上說(shuō)設(shè)計(jì)還成功。</p><p> 圖4-1 計(jì)算器
124、界面</p><p> 我們發(fā)現(xiàn)了程序能夠準(zhǔn)確地進(jìn)行運(yùn)算,并顯示出正確結(jié)果,同時(shí)發(fā)現(xiàn)該計(jì)算器可進(jìn)行一般的語(yǔ)法分析,例如如果除數(shù)為零,計(jì)算結(jié)果顯示“除數(shù)不能為零”。</p><p> 例如如果對(duì)超過(guò)八位的數(shù)據(jù)進(jìn)行操作,計(jì)算結(jié)果用科學(xué)表示法表示。</p><p> 例如如果對(duì)非負(fù)數(shù)進(jìn)行求平方根,計(jì)算結(jié)果顯示“函數(shù)輸入無(wú)效”。</p><p>
125、; 但是也發(fā)現(xiàn)了計(jì)算器對(duì)于類似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章 心得體會(huì)</b></p><p> 5.1系統(tǒng)需要完善的地方</
126、p><p> 1.在第四章提到的不能對(duì)類似5+6*3的運(yùn)算判斷運(yùn)算順序。</p><p> 2.程序比較長(zhǎng),還可以進(jìn)行簡(jiǎn)化。</p><p> 3.對(duì)于運(yùn)算方法等方面仍可以進(jìn)行一些改進(jìn)。</p><p> 4.這界面還可設(shè)有菜單操作(包括:“編輯”,“查看”,“幫助”三個(gè)菜單項(xiàng))</p><p> 5.2 課程設(shè)
127、計(jì)感想</p><p> 本計(jì)算器模擬Windows計(jì)算器的界面和功能,由于時(shí)間倉(cāng)促和能力有限等問(wèn)題,只能實(shí)現(xiàn)以上功能。本次課程設(shè)計(jì)到此算是告一段落了,經(jīng)過(guò)這次的學(xué)習(xí),我學(xué)到了很多東西,在此基礎(chǔ)上更加鞏固了自己對(duì)java的認(rèn)識(shí)與了解。</p><p> 在做本項(xiàng)目是時(shí)候,會(huì)遇到很多小問(wèn)題,比如說(shuō),在整個(gè)運(yùn)算過(guò)程中要如何確保輸入的計(jì)算數(shù)據(jù)哪個(gè)是第一個(gè)計(jì)算數(shù)據(jù)的,哪個(gè)是第二個(gè)計(jì)算數(shù)據(jù)的,同
128、時(shí)也要區(qū)分運(yùn)算符,因?yàn)樵撚?jì)算器程序應(yīng)用的都是利用字符串來(lái)完成計(jì)算的,而且不能重復(fù)輸出運(yùn)算符,更不能將運(yùn)算符錯(cuò)誤的存儲(chǔ)在了第一個(gè)計(jì)算數(shù)據(jù)的數(shù)值中,也得考慮到萬(wàn)一不小心重復(fù)點(diǎn)擊了運(yùn)算符按鈕會(huì)不會(huì)造成第一個(gè)計(jì)算數(shù)據(jù)的重新賦值等等問(wèn)題,最后想到利用布爾類型來(lái)很好的控制運(yùn)算符的應(yīng)用!</p><p> 此次課程設(shè)計(jì)讓我更了解熟悉了Java中的圖形用戶界面和它的編程方式。在完成課題的過(guò)程中也不斷充實(shí)了自己,學(xué)習(xí)到了很多以前
129、沒(méi)有學(xué)習(xí)到的知識(shí),收獲很大。最大的收獲就是對(duì)大學(xué)學(xué)習(xí)的總結(jié)和培養(yǎng)了解決困難的信心和能力,使我對(duì)所學(xué)知識(shí)能夠融會(huì)貫通,又不斷豐富了新知識(shí)。Java計(jì)算器設(shè)計(jì)使得我們對(duì)所學(xué)的專業(yè)課有了更為深刻的認(rèn)識(shí),使得知識(shí)得到了鞏固和提高。</p><p> 在以前,我們只是對(duì)書上已經(jīng)給出的程序進(jìn)行編譯和運(yùn)行,而這次我們算是真正自己編寫了一個(gè)程序(雖然參考了書上的程序),覺(jué)得自己對(duì)于java的應(yīng)用得到了很大的提高,也體會(huì)到了編寫
130、一個(gè)程序是一個(gè)十分艱辛的過(guò)程,需要不斷的調(diào)試,改進(jìn),以及小組成員的努力思考。</p><p> 在制作簡(jiǎn)易計(jì)算器的過(guò)程中,很容易打錯(cuò)源程序代碼而導(dǎo)致編譯通不過(guò)。這是一個(gè)細(xì)心程度的問(wèn)題,做什么事都必須細(xì)心嚴(yán)謹(jǐn),這樣才不容易出錯(cuò)。在編譯通過(guò)運(yùn)行程序出現(xiàn)了一個(gè)計(jì)算器界面時(shí)心里非常高興,迫不及待地使用制作出來(lái)的計(jì)算器。編一個(gè)程序真心不容易啊,程序員都是偉大的人啊,向他們看齊。這次的課設(shè)作業(yè)讓我明白了無(wú)論多復(fù)雜的東西都是
131、由好多基礎(chǔ)的東西組合在一起的。</p><p> 在接下來(lái)的時(shí)間里,我覺(jué)得我要更加努力的往深一層次的方面看齊,了解更多有關(guān)java的知識(shí),對(duì)java有更深一步的了解,我會(huì)一步一步的走下去!</p><p><b> 參考文獻(xiàn)</b></p><p> ?。?)丁振凡.《J ava語(yǔ)言程序設(shè)計(jì)》 清華大學(xué)出版社 </p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java計(jì)算器課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告--計(jì)算器設(shè)計(jì)
- java課程設(shè)計(jì)---java計(jì)算器
- java計(jì)算器課程設(shè)計(jì)報(bào)告---模擬科學(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ì)--簡(jiǎn)單計(jì)算器
- java課程設(shè)計(jì)報(bào)告----計(jì)算器軟件設(shè)計(jì)
- java課程設(shè)計(jì)----簡(jiǎn)易計(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ì)算器模擬程序
評(píng)論
0/150
提交評(píng)論