java課程設(shè)計(jì)報(bào)告--計(jì)算器設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論