java_計算器課程設(shè)計_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  該程序是一個圖形界面的java計算器,其界面主要采用了swing包,利用eclipse工具并采用網(wǎng)格包布局開發(fā) 程序?qū)崿F(xiàn)了:</p><p>  (1)實現(xiàn)簡單加、減、乘、除的運算。</p><p> ?。?)實現(xiàn)除了加、減、乘、除按鈕外其他按鈕功能。</p>&

2、lt;p> ?。?)在數(shù)據(jù)輸入方面,可以輸入負數(shù)</p><p>  (4)可以取余數(shù),開根號等運算</p><p> ?。?)實現(xiàn)了小數(shù)的算術(shù)運算</p><p>  關(guān)鍵字:java程序 網(wǎng)格包布局 面向?qū)ο?計算器</p><p><b>  目 錄</b></p><p>&l

3、t;b>  一、問題描述3</b></p><p><b>  1.1課設(shè)任務(wù)3</b></p><p><b>  1.2設(shè)計要求3</b></p><p><b>  二、分析與設(shè)計4</b></p><p><b>  2.1功能描述

4、4</b></p><p><b>  2.2算法思路4</b></p><p>  2.3程序流程圖5</p><p>  2.4程序預(yù)期結(jié)果6</p><p><b>  2.5模塊實現(xiàn)7</b></p><p>  三、源代碼選摘11</p&

5、gt;<p>  3.1 源代碼11</p><p><b>  四、總結(jié)16</b></p><p>  4.1設(shè)計體會16</p><p>  4.2設(shè)計中遇到的重點及難點16</p><p><b>  五、參考文獻17</b></p><p>

6、<b>  一、問題描述</b></p><p><b>  1.1課設(shè)任務(wù):</b></p><p>  設(shè)計GUI界面的計算器程序,用戶可以通過鼠標依次輸入?yún)⒓佑嬎愕臄?shù)值,進行加、減、乘、除等混合運算。</p><p><b>  1.2設(shè)計要求</b></p><p> 

7、 設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法、取余運算及開根號。且有小數(shù)點、正負號、退格和清零功能。</p><p>  課程設(shè)計可用Eclipse作為開發(fā)平臺以提高開發(fā)效率,通過資料查閱和學(xué)習盡可能熟練掌握</p><p>  保持代碼簡潔,復(fù)雜代碼寫后不易理解,在修改和重寫上難度比較大,使工作更加復(fù)雜,所以編寫代碼時應(yīng)保持代碼的簡潔易懂。</p><p>

8、;  認真按時完成課程設(shè)計報告,課程設(shè)計報告內(nèi)容包括:問題描述、分析與設(shè)計、源代碼選摘、總結(jié)、參考文獻五個部分。</p><p><b>  二、分析與設(shè)計</b></p><p><b>  2.1 功能描述:</b></p><p>  這是一個簡單的計算器,里面所涉及到的功能就是加、減、乘、除、開根號運算、等基本功能

9、。對于單運算操作要進一步判斷是否符合要求,如果是就進入下步計算,如果不是就彈出相應(yīng)的提示: “負數(shù)不能開根號"; ";在進行開根號(√)運算時,如果輸入數(shù)為負數(shù),則彈出"負數(shù)不能開根號",中止運算。對于加減乘除等雙運算操作,用lastCommand來判斷最后一個輸入的操作符是什么,是“+”就執(zhí)行加法,是“=”就計算結(jié)果。運用事件監(jiān)聽來監(jiān)聽按鈕事件。定義一個布爾值start來實現(xiàn)負號,初始置為tru

10、e,command=event.getActionCommand();來取得事件的值 ,當?shù)谝粋€操作符為“-”時顯示出來“-”, start置為false,這是不能輸入操作符了,只能輸入數(shù)字,輸入數(shù)字后,顯示出來,start置為true,這是又可以輸入操作符了。這樣就實現(xiàn)負號。</p><p><b>  2.2 算法思路:</b></p><p> ?、?、本應(yīng)用程序

11、繼承自框架類(JFrame),容器Container c采用GridLayout網(wǎng)格布局,將單行文本框加入到“North”區(qū)域,包含各種按鈕的面板JPanel panel加入到”Center”區(qū)域。包含各種按鈕的面板JPanel panel采用5行4列的網(wǎng)格布局,然后將數(shù)字按鈕和運算符按鈕以及控制按鈕添加到面板中同時注冊按鈕事件監(jiān)聽器。如:</p><p>  private void addButton(Str

12、ing label,ActionListener listener){</p><p>  JButton btn=new JButton(label);</p><p>  btn.addActionListener(listener); (事件監(jiān)聽器);</p><p>  panel.add(btn);</p><p><b>

13、;  }</b></p><p> ?、啤⑹录O(jiān)聽器中的事件處理方法void actionPerformed(ActionEvent event)完成主要的按鈕事件的處理。事件處理分以下幾種情況:操作數(shù)按鈕事件(”0”,”1”,”2”…”8”,”9”)、操作符按鈕事件(”+”,”-“,”*”,”/”,”%”)、正負號按鈕事件(”+/-“)、小數(shù)點按鈕事件(”.”)、等號按鈕事件(”=”)、退格按鈕事件

14、(”←”)、清除按鈕事件(“C”) 、以及求平方根(”√”) </p><p>  (3)、計算器完成的是一個數(shù)學(xué)表達式,如:3+2,所以先輸入一個數(shù)字存儲,輸入操作符,利用循環(huán)再次輸入數(shù)字如:</p><p>  private void calcultor(double x) {</p><p>  // TODO 自動生成的方法存根</p>&l

15、t;p>  if(lastCommand.equals("+")) result+=x;</p><p>  else if(lastCommand.equals("-")) result -=x;</p><p>  else if(lastCommand.equals("*")) result *=x;</p>

16、;<p>  else if(lastCommand.equals("/")) result /=x;</p><p>  else if(lastCommand.equals("%")) result %=x;</p><p>  else if(lastCommand.equals("=")) result =x

17、;</p><p>  btn1.setText(""+result);</p><p><b>  }</b></p><p>  ⑸、利用按鈕設(shè)計計算器的各個操作數(shù)和操作符,通過按鈕的事件處理實現(xiàn)按鈕計算功能。</p><p> ?、?、利用文本框顯示操作數(shù)和運算結(jié)果。</p><

18、;p><b>  2.3程序流程圖</b></p><p>  2.4程序預(yù)期結(jié)果:</p><p><b>  程序界面</b></p><p>  計算2+3,結(jié)果應(yīng)為5.</p><p>  負號開根號 結(jié)果輸出負數(shù)不能開根號</p><p><b>

19、  2.5模塊實現(xiàn)</b></p><p>  2.5.1 顯示窗口</p><p>  btn1=new JButton(" ");</p><p>  btn1.setEnabled(false); //該顯現(xiàn)區(qū)域不能輸入,只能顯示</p><p>  add(btn1,BorderLayout.NORT

20、H);</p><p>  2.5.2 窗口布局</p><p>  panel=new JPanel();</p><p>  panel.setLayout(new GridLayout(5,4));</p><p>  addButton("C",insert);</p><p>  add

21、Button("←",insert);</p><p>  addButton("√",insert);</p><p>  addButton("%",command);</p><p>  addButton("7",insert);</p><p>  ad

22、dButton("8",insert);</p><p>  addButton("9",insert);</p><p>  addButton("/",command);</p><p>  addButton("4",insert);</p><p>  a

23、ddButton("5",insert);</p><p>  addButton("6",insert);</p><p>  addButton("*",command);</p><p>  addButton("1",insert);</p><p>  

24、addButton("2",insert);</p><p>  addButton("3",insert);</p><p>  addButton("-",command);</p><p>  addButton("0",insert);</p><p> 

25、 addButton(".",insert);</p><p>  addButton("=",command);</p><p>  addButton("+",command);</p><p>  add(panel,BorderLayout.CENTER);</p><p>

26、  2.5.3 加減乘除 取余運算</p><p>  private void calcultor(double x) {</p><p>  // TODO 自動生成的方法存根</p><p>  if(lastCommand.equals("+")) result+=x;</p><p>  else if(las

27、tCommand.equals("-")) result -=x;</p><p>  else if(lastCommand.equals("*")) result *=x;</p><p>  else if(lastCommand.equals("/")) result /=x;</p><p>  

28、else if(lastCommand.equals("%")) result %=x;</p><p>  else if(lastCommand.equals("=")) result =x;</p><p>  btn1.setText(""+result);</p><p><b>  }

29、</b></p><p>  2.5.4退格“←”實現(xiàn)</p><p>  if(input.equals("←")){ // ← 事件執(zhí)行backspace()</p><p>  backspace();}</p><p>  public void backspace(){ //退格</p>

30、;<p>  String s=btn1.getText();</p><p>  btn1.setText(s.substring(0,s.length()-1));</p><p><b>  }</b></p><p>  2.5.5清除功能實現(xiàn)</p><p>  else if(input.equ

31、als("C")){ // C 事件執(zhí)行clear()</p><p>  clear(); </p><p>  void clear(){ //清除 </p><p>  btn1.setText(""); </p><p><b>  result=0;</b><

32、/p><p><b>  }</b></p><p>  2.5.6開根號功能實現(xiàn)</p><p>  else if(input.equals("√")){ // √ 事件執(zhí)行sqrt()</p><p><b>  sqrt();</b></p><p>

33、;<b>  }</b></p><p>  void sqrt(){ //開根號</p><p>  double m=Double.parseDouble(btn1.getText()); </p><p><b>  if (m<0) </b></p><p>  btn1.setTex

34、t("負數(shù)不能開根號"); </p><p><b>  else </b></p><p>  btn1.setText(""+Math.sqrt(m)); }</p><p>  2.5.7 負號實現(xiàn)</p><p>  private class CommandActi

35、on implements ActionListener{</p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent event) {</p><p>  // TODO 自動生成的方法存根</p><p>  String

36、 command=event.getActionCommand();</p><p>  if(start){</p><p>  if(command.equals("-")){ //負號設(shè)定</p><p>  btn1.setText(command);</p><p>  start=false;</p&

37、gt;<p><b>  }</b></p><p>  else lastCommand=command;</p><p><b>  }</b></p><p><b>  else{</b></p><p>  calcultor(Double.parseD

38、ouble(btn1.getText()));</p><p>  lastCommand=command;</p><p>  start=true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  2.5.8 數(shù)字0~9

39、實現(xiàn)</p><p>  private class InsertAction implements ActionListener{</p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent event){</p><p>

40、;  // TODO 自動生成的方法存根</p><p>  String input=event.getActionCommand();</p><p>  if(start){</p><p>  btn1.setText("");</p><p>  start=false;</p><p>

41、<b>  }</b></p><p>  if(input.equals("←")){ // ← 事件執(zhí)行backspace()</p><p>  backspace();}</p><p>  else if(input.equals("C")){ // C 事件執(zhí)行clear()</p

42、><p>  clear(); </p><p><b>  }</b></p><p>  else if(input.equals("√")){ // √ 事件執(zhí)行sqrt()</p><p><b>  sqrt();</b></p><p><

43、;b>  }</b></p><p><b>  else</b></p><p>  btn1.setText(btn1.getText()+input);</p><p><b>  }</b></p><p><b>  }</b></p>

44、<p><b>  三 、源代碼摘選</b></p><p><b>  3.1 源代碼</b></p><p>  package calculator;</p><p>  import java.awt.BorderLayout;</p><p>  import java.awt

45、.Dimension;</p><p>  import java.awt.Event;</p><p>  import java.awt.Frame;</p><p>  import java.awt.GridLayout;</p><p>  import java.awt.Toolkit;</p><p> 

46、 import java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p>  import javax.swing.JButton;</p><p>  import javax.swing.JFrame;</p><p>  imp

47、ort javax.swing.JPanel;</p><p>  public class CalculatorPanel extends JPanel{</p><p>  //設(shè)計計算機的界面</p><p>  private JButton btn1;</p><p>  private JPanel panel;</p>

48、;<p>  private double result;</p><p>  private String lastCommand;</p><p>  private boolean start;</p><p>  public CalculatorPanel(){</p><p>  setLayout(new Bord

49、erLayout());</p><p><b>  result=0;</b></p><p>  lastCommand="=";</p><p>  start=true;//設(shè)置布爾值為true</p><p>  //添加面板panel</p><p>  btn1=

50、new JButton(" ");</p><p>  btn1.setEnabled(false);</p><p>  add(btn1,BorderLayout.NORTH);</p><p>  ActionListener insert=new InsertAction();</p><p>  ActionLi

51、stener command=new CommandAction();</p><p>  //添加按鈕進5*4網(wǎng)格布局</p><p>  panel=new JPanel();</p><p>  panel.setLayout(new GridLayout(5,4));//采用網(wǎng)格布局</p><p><b>  //添加第一

52、排按鈕</b></p><p>  addButton("C",insert);</p><p>  addButton("←",insert);</p><p>  addButton("√",insert);</p><p>  addButton("%&q

53、uot;,command);</p><p><b>  //添加第二排按鈕</b></p><p>  addButton("7",insert);</p><p>  addButton("8",insert);</p><p>  addButton("9"

54、;,insert);</p><p>  addButton("/",command);</p><p><b>  //添加第三排按鈕</b></p><p>  addButton("4",insert);</p><p>  addButton("5",i

55、nsert);</p><p>  addButton("6",insert);</p><p>  addButton("*",command);</p><p><b>  //添加第四排按鈕</b></p><p>  addButton("1",inse

56、rt);</p><p>  addButton("2",insert);</p><p>  addButton("3",insert);</p><p>  addButton("-",command);</p><p><b>  //添加第五排按鈕</b>

57、;</p><p>  addButton("0",insert);</p><p>  addButton(".",insert);</p><p>  addButton("=",command);</p><p>  addButton("+",comman

58、d);</p><p>  add(panel,BorderLayout.CENTER);</p><p><b>  }</b></p><p>  private void addButton(String label,ActionListener listener){ </p><p>  //把按鈕添加進面

59、板</p><p>  JButton btn=new JButton(label);</p><p>  btn.addActionListener(listener);</p><p>  panel.add(btn);</p><p><b>  }</b></p><p><b>

60、;  //鼠標事件監(jiān)聽</b></p><p>  private class InsertAction implements ActionListener{</p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent event){&

61、lt;/p><p>  // TODO 自動生成的方法存根</p><p>  String input=event.getActionCommand();</p><p>  if(start){</p><p>  btn1.setText("");</p><p>  start=false;&l

62、t;/p><p><b>  }</b></p><p>  if(input.equals("←")){ // ← 事件執(zhí)行backspace()</p><p>  backspace();}</p><p>  else if(input.equals("C")){ //

63、C 事件執(zhí)行clear()</p><p>  clear(); </p><p><b>  }</b></p><p>  else if(input.equals("√")){ // √ 事件執(zhí)行sqrt()</p><p><b>  sqrt();</b></

64、p><p><b>  }</b></p><p><b>  else</b></p><p>  btn1.setText(btn1.getText()+input);//獲得數(shù)字</p><p><b>  }</b></p><p><b>

65、;  }</b></p><p>  //+ - * / %操作符事件監(jiān)聽</p><p>  private class CommandAction implements ActionListener{</p><p><b>  @Override</b></p><p>  public void ac

66、tionPerformed(ActionEvent event) {</p><p>  // TODO 自動生成的方法存根</p><p>  String command=event.getActionCommand();</p><p>  if(start){</p><p>  if(command.equals("-&q

67、uot;)){ //負號設(shè)定</p><p>  btn1.setText(command);</p><p>  start=false;</p><p><b>  }</b></p><p>  else lastCommand=command;</p><p><b>  }

68、</b></p><p><b>  else{</b></p><p>  calcultor(Double.parseDouble(btn1.getText()));</p><p>  lastCommand=command;</p><p>  start=true;</p><p

69、><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //計算</b></p><p>  private void calcultor(double x) {</

70、p><p>  // TODO 自動生成的方法存根</p><p>  if(lastCommand.equals("+")) result+=x; //執(zhí)行加法</p><p>  else if(lastCommand.equals("-")) result -=x; //執(zhí)行減法</p>

71、<p>  else if(lastCommand.equals("*")) result *=x; //執(zhí)行乘法</p><p>  else if(lastCommand.equals("/")) result /=x; //執(zhí)行除法</p><p>  else if(lastCommand.equals("%&qu

72、ot;)) result %=x; //執(zhí)行取余</p><p>  else if(lastCommand.equals("=")) result =x;</p><p>  btn1.setText(""+result);</p><p><b>  }</b></p><p&

73、gt;  public void backspace(){ //退格</p><p>  String s=btn1.getText();</p><p>  btn1.setText(s.substring(0,s.length()-1));</p><p><b>  }</b></p><p>  void cle

74、ar(){ //清除 </p><p>  btn1.setText(""); </p><p><b>  result=0;</b></p><p><b>  }</b></p><p>  void sqrt(){ //開根號</p><p> 

75、 double m=Double.parseDouble(btn1.getText()); </p><p><b>  if (m<0) </b></p><p>  btn1.setText("負數(shù)不能開根號"); </p><p><b>  else </b></p>&l

76、t;p>  btn1.setText(""+Math.sqrt(m)); </p><p><b>  }</b></p><p>  public static void main(String[] args){</p><p>  JFrame f=new JFrame();</p><p&

77、gt;  f.setTitle("計算器");</p><p><b>  //計算器居中</b></p><p>  Toolkit toolkit=Toolkit.getDefaultToolkit();</p><p>  Dimension Screen=toolkit.getScreenSize();</p&

78、gt;<p>  int x=(Screen.width-f.getWidth())/2-150;</p><p>  int y=(Screen.height-f.getHeight())/2-150;</p><p>  f.setLocation(x,y);</p><p>  f.setSize(300,200);//設(shè)置大小</p>

79、;<p>  f.add(new CalculatorPanel());</p><p>  f.setVisible(true);</p><p>  //不允許用戶修改大小</p><p>  f.setResizable(false);</p><p>  f.setDefaultCloseOperation(JFrame

80、.EXIT_ON_CLOSE); //設(shè)置關(guān)閉屬性</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  四、總結(jié)</b></p><p><b>  4.1 設(shè)計體會</b></p>

81、<p>  這次做的課程設(shè)計Java計算器。運行java計算器以后出現(xiàn)的那個框架圖就是我們所說的java圖形用戶界面(GUI),它是程序與用戶進行交流的圖像窗口,為應(yīng)用程序提供一個圖形化的界面,程序通過GUI與用戶交互,GUI通過事件機制響應(yīng)用戶和程序的交互。如當用戶單擊某個按鈕時就會產(chǎn)生動作事件,要處理產(chǎn)生的事件,需要在特定的方法中編寫處理事件的程序。這樣,當產(chǎn)生某種事件時就會調(diào)用處理這種事件的方法,從而實現(xiàn)用戶與程序的交互

82、。另外GUI能使一個應(yīng)用程序具有與眾不同的“外觀”與“感覺”。有了GUI,用戶就不用花很多時間去記憶各個鍵盤序列的功能,從而把更多的時間投入到有效地使用應(yīng)用程序本身上。</p><p>  這次課程設(shè)計,除了全面系統(tǒng)的理解了JAVA面向?qū)ο缶幊淘淼囊话阍砗突緦崿F(xiàn)方法,還把死板的課本知識變得生動有趣,激發(fā)了學(xué)習的積極性。把學(xué)過的編程原理的知識強化,把課堂上學(xué)的知識通過自己設(shè)計的程序表示出來,這加深了對理論知識

83、的理解。課程設(shè)計中程序比較復(fù)雜,在調(diào)試時應(yīng)該仔細,在程序調(diào)試時,注意盡力尋找程序中存在的不足之處,進而使功能更加完善。</p><p>  當然在做課程設(shè)計要有很大的耐心,做的過程就是不斷的調(diào)試—修改—調(diào)試過程,只有靜下心來才能把問題解決。</p><p>  4.2設(shè)計中遇到的重點及難點</p><p>  (1)Java計算器在進行混合運算時,不能準備的進行計算

84、,后面輸入的數(shù)值會覆蓋先前輸入的數(shù)據(jù),造成數(shù)據(jù)丟失 ,</p><p>  主要的解決步驟分為以下幾點:</p><p>  在文件開頭部分定義一個標志性布爾型變量start,并賦初值為true;</p><p>  在操作數(shù)事件處理里添加if判斷語句,如果start值為false,就得到輸入的數(shù),如果start值為false,不輸出,并改變start的值為true

85、;</p><p>  String input=event.getActionCommand();</p><p>  if(start){</p><p>  btn1.setText("");</p><p>  start=false;</p><p><b>  else<

86、/b></p><p>  btn1.setText(btn1.getText()+input);</p><p><b>  }</b></p><p>  (2)Java計算器實現(xiàn)負號</p><p> ?、僭谖募_頭部分定義一個標志性布爾型變量start,并賦初值為true;</p><p

87、> ?、谌绻鹲tart的值為true,看輸入的操作符是否為“-”。如果是“-”號,則輸出負號并把start的值為false</p><p>  if(start){</p><p>  if(command.equals("-")){ //負號設(shè)定</p><p>  btn1.setText(command);</p>

88、<p>  start=false;</p><p><b>  }</b></p><p>  else lastCommand=command;</p><p><b>  }</b></p><p><b>  else{</b></p><

89、p>  calcultor(Double.parseDouble(btn1.getText()));</p><p>  lastCommand=command;</p><p>  start=true;</p><p><b>  }</b></p><p><b>  }</b><

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論