2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  高級編程技術課程設計</p><p><b>  模擬科學計算器</b></p><p><b>  一.概述</b></p><p>  1.程序具備的功能:</p><p> ?。?)使用圖形用戶界面:一個文本框;0-9數字按鈕;加、減、乘、除運算符;“等于”符號;復位按鈕

2、;</p><p> ?。?)完成整數、實數的四則運算(加、減、乘、除)以及三角函數的運算等等;</p><p> ?。?)通過按鈕點擊實現數據的復位(清零);</p><p> ?。?)實數運算中小數位的精度一致。</p><p>  實現要點:添加相關組件并進行按鈕事件處理。要求提交源程序。</p><p>  2

3、.課程設計的主要設計思想</p><p>  對于此計算器程序,首先要設計其GUI界面,總體界面有一個文本,總體界面用布局管理器布局。</p><p>  布局設計好后再添加按鈕事件。對于此程序要考慮到點擊加、減、乘、除按鈕時是否有點擊數字按鈕,如果是第一次點擊數字按鈕或者是點擊數字按鈕前點擊了加、減、乘、除按鈕則直接把數字按鈕的數值設置到文本框中,否則則應把文本框中的內容加上你所點擊按鈕

4、的數值設置到文本框中。</p><p>  在進行加、減、乘、除計算時要把點擊加、減、乘、除按鈕之前的數值保存下來,運算時是這個被保存下來的數值和文本框中的數值加、減、乘、除以及三角函數等一系列的運算。</p><p><b>  二.課程設計思路</b></p><p><b>  1.界面設計</b></p>

5、;<p>  界面設計要求用GUI,界面設計中有用到swing組件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其圖形界面如下:</p><p><b>  2.功能介紹</b></p><p>  這是計算器中的一種:簡單計算器,本項目用到了Java中的GUI界面和swing組件以及awt

6、布局,所以簡單易用,它能完成如下的幾個小功能:</p><p>  點擊按鈕中的數字鍵和運算符鍵就能進行簡單的加、乘、乘、除求模四則運算 ;</p><p>  還能通過用戶自己在文本框中輸入數字,進行簡單運算 ;</p><p>  如果輸入有誤時可以按Clear撤銷后重新輸入新數據 。</p><p>  三.設計過程以及源代碼</

7、p><p><b>  程序流程圖如下:</b></p><p><b>  UML圖如下:</b></p><p><b>  附錄源程序:</b></p><p>  import java.awt.*;</p><p>  import java.aw

8、t.event.*;</p><p>  import java.text.DecimalFormat;</p><p>  import javax.swing.*;</p><p>  public class Calucator extends JFrame {</p><p>  private JTextField tf;</

9、p><p>  private JPanel panel1, panel2, panel3, panel4;</p><p>  private JMenuBar myBar;</p><p>  private JMenu menu1, menu2, menu3;</p><p>  private JMenuItem editItem1, e

10、ditItem2, help1, help2, help3;</p><p>  private JRadioButtonMenuItem seeItem1, seeItem2;//單選框</p><p>  private JCheckBoxMenuItem seeItem3;//復選框</p><p>  private ButtonGroup bgb;<

11、/p><p>  private String back;</p><p>  private boolean IfResult = true, flag = false;</p><p>  private String oper = "=";</p><p>  private double result = 0;<

12、/p><p>  private Num numActionListener;</p><p>  private DecimalFormat df;</p><p>  public Calucator(){</p><p>  super("科學計算器");//設置標題欄</p><p>  df

13、= new DecimalFormat("#.####");//保留四位小數</p><p>  this.setLayout(new BorderLayout(10, 5));</p><p>  panel1 = new JPanel(new GridLayout(1, 3, 10, 10));</p><p>  panel2 = new

14、JPanel(new GridLayout(5, 6, 5, 5));//5行6列</p><p>  panel3 = new JPanel(new GridLayout(5, 1, 5, 5));</p><p>  panel4 = new JPanel(new BorderLayout(5, 5));</p><p><b>  /**</b

15、></p><p><b>  * 菜單欄</b></p><p><b>  */</b></p><p>  myBar = new JMenuBar();</p><p>  menu1 = new JMenu("編輯(E)");</p><p&g

16、t;  menu2 = new JMenu("查看(V)");</p><p>  menu3 = new JMenu("幫助(H)");</p><p>  menu1.setFont(new Font("宋體", Font.PLAIN, 12));</p><p>  menu2.setFont(new

17、 Font("宋體", Font.PLAIN, 12));</p><p>  menu3.setFont(new Font("宋體", Font.PLAIN, 12));</p><p><b>  /**</b></p><p><b>  * 編輯欄</b></p>

18、<p><b>  */</b></p><p>  editItem1 = new JMenuItem("復制(C) Ctrl+C");</p><p>  editItem2 = new JMenuItem("粘貼(P) Ctrl+V");</p><p>  editItem1.set

19、Font(new Font("宋體",Font.PLAIN,12));</p><p>  editItem2.setFont(new Font("宋體",Font.PLAIN,12));</p><p><b>  /**</b></p><p><b>  * 查看欄</b>&l

20、t;/p><p><b>  */</b></p><p>  seeItem1 = new JRadioButtonMenuItem("科學型(T)");</p><p>  seeItem2 = new JRadioButtonMenuItem("標準型(S)");</p><p>

21、;  seeItem3 = new JCheckBoxMenuItem("數字分組(I)");</p><p>  seeItem1.setFont(new Font("宋體",Font.PLAIN,12));</p><p>  seeItem2.setFont(new Font("宋體",Font.PLAIN,12));<

22、;/p><p>  seeItem3.setFont(new Font("宋體",Font.PLAIN,12));</p><p><b>  /**</b></p><p><b>  * 幫助欄</b></p><p><b>  */</b></p&

23、gt;<p>  help1 = new JMenuItem("幫助主題(H)");</p><p>  help2 = new JMenuItem("關于計算器(A)");</p><p>  help1.setFont(new Font("宋體",Font.PLAIN,12));</p><p

24、>  help2.setFont(new Font("宋體",Font.PLAIN,12));</p><p>  bgb = new ButtonGroup();//選項組</p><p>  menu1.add(editItem1);</p><p>  menu1.add(editItem2);</p><p>

25、;  menu2.add(seeItem1);</p><p>  menu2.add(seeItem2);</p><p>  menu2.addSeparator();//添加一條分割線</p><p>  menu2.add(seeItem3);</p><p>  menu3.add(help1);</p><p&

26、gt;  menu3.addSeparator();//添加一條分割線</p><p>  menu3.add(help2);</p><p>  myBar.add(menu1);</p><p>  myBar.add(menu2);</p><p>  myBar.add(menu3);</p><p>  th

27、is.setJMenuBar(myBar);</p><p>  numActionListener = new Num();//實現數字監聽</p><p><b>  /**</b></p><p>  * 文本域,即為計算器的屏幕顯示區域</p><p><b>  */</b></p&

28、gt;<p>  tf = new JTextField();</p><p>  tf.setEditable(false);//文本區域不可編輯</p><p>  tf.setBackground(Color.white);//文本區域的背景色</p><p>  tf.setHorizontalAlignment(JTextField.RIGH

29、T);//文字右對齊</p><p>  tf.setText("0");</p><p>  tf.setBorder(BorderFactory.createLoweredBevelBorder());</p><p>  init();//對計算器進行初始化</p><p><b>  }</b>

30、;</p><p><b>  /**</b></p><p><b>  * 初始化操作</b></p><p><b>  * 添加按鈕</b></p><p><b>  */</b></p><p>  private vo

31、id init(){</p><p>  addButton(panel1, "Backspace", new Clear(), Color.red);</p><p>  addButton(panel1, "CE", new Clear(), Color.red);</p><p>  addButton(panel1,

32、"C", new Clear(), Color.red);</p><p>  addButton(panel2, "1/x", new Signs(), Color.magenta);</p><p>  addButton(panel2, "log", new Signs(), Color.magenta);</p>

33、;<p>  addButton(panel2, "7", numActionListener, Color.blue);</p><p>  addButton(panel2, "8", numActionListener, Color.blue);</p><p>  addButton(panel2, "9",

34、 numActionListener, Color.blue);</p><p>  addButton(panel2, "÷", new Signs(), Color.red);</p><p>  addButton(panel2, "n!", new Signs(), Color.magenta);</p><p&

35、gt;  addButton(panel2, "sqrt", new Signs(), Color.magenta);</p><p>  addButton(panel2, "4", numActionListener, Color.blue);</p><p>  addButton(panel2, "5", numActio

36、nListener, Color.blue);</p><p>  addButton(panel2, "6", numActionListener, Color.blue);</p><p>  addButton(panel2, "×", new Signs(), Color.red);</p><p>  ad

37、dButton(panel2, "sin", new Signs(), Color.magenta);</p><p>  addButton(panel2, "x^2", new Signs(), Color.magenta);</p><p>  addButton(panel2, "1", numActionListener

38、, Color.blue);</p><p>  addButton(panel2, "2", numActionListener, Color.blue);</p><p>  addButton(panel2, "3", numActionListener, Color.blue);</p><p>  addButton

39、(panel2, "-", new Signs(), Color.red);</p><p>  addButton(panel2, "cos", new Signs(), Color.magenta);</p><p>  addButton(panel2, "x^3", new Signs(), Color.magenta);

40、</p><p>  addButton(panel2, "0", numActionListener, Color.blue);</p><p>  addButton(panel2, "-/+", new Clear(), Color.blue);</p><p>  addButton(panel2, ".&q

41、uot;, new Dot(), Color.blue);</p><p>  addButton(panel2, "+", new Signs(), Color.red);</p><p>  addButton(panel2, "tan", new Signs(), Color.magenta);</p><p>  ad

42、dButton(panel2, "%", new Signs(), Color.magenta);</p><p>  addButton(panel2, "π", numActionListener, Color.orange);</p><p>  addButton(panel2, "e", numActionListene

43、r, Color.orange);</p><p>  addButton(panel2, "′″", new Signs(), Color.orange);</p><p>  addButton(panel2, "=", new Signs(), Color.red);</p><p>  JButton btns = n

44、ew JButton("計算器");</p><p>  btns.setBorder(BorderFactory.createLoweredBevelBorder());</p><p>  btns.setEnabled(false);//按鈕不可操作</p><p>  btns.setPreferredSize(new Dimension

45、(20, 20));</p><p>  panel3.add(btns);//加入按鈕</p><p>  addButton(panel3, "MC", null, Color.red);//用于清除存儲區中的數值</p><p>  addButton(panel3, "MR", null, Color.red);//可

46、將存儲區中的數調出到顯示欄中</p><p>  addButton(panel3, "MS", null, Color.red);//存儲當前的顯示值</p><p>  addButton(panel3, "M+", null, Color.red);//將當前顯示的數與存儲區中的數相加</p><p>  panel4.

47、add(panel1, BorderLayout.NORTH);</p><p>  panel4.add(panel2, BorderLayout.CENTER);</p><p>  this.add(tf, BorderLayout.NORTH);</p><p>  this.add(panel3, BorderLayout.WEST);</p>

48、<p>  this.add(panel4);</p><p><b>  pack();</b></p><p>  this.setResizable(false);//窗口不可改變大小</p><p>  this.setLocation(300, 200);</p><p>  this.setDe

49、faultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 統一設置按鈕的的使用方式</p><p>  * @param panel</p><

50、p>  * @param name</p><p>  * @param action</p><p>  * @param color</p><p><b>  */</b></p><p>  private void addButton(JPanel panel, String name, ActionLi

51、stener action, Color color){</p><p>  JButton bt = new JButton(name);</p><p>  panel.add(bt);//在面板上增加按鈕</p><p>  bt.setForeground(color);//設置前景(字體)顏色</p><p>  bt.addAct

52、ionListener(action);//增加監聽事件</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 計算器的基礎操作(+ - × ÷)</p><p>  * @param x</p><p&g

53、t;<b>  */</b></p><p>  private void getResult (double x){</p><p>  if(oper == "+"){result += x;}</p><p>  else if(oper == "-"){result -= x;}</p>

54、;<p>  else if(oper == "×"){result *= x;}</p><p>  else if(oper == "÷"){result /= x;}</p><p>  else if(oper == "="){result = x;}</p><p&g

55、t;  tf.setText(df.format(result));</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 運算符號的事件監聽</p><p><b>  */</b></p><p>

56、;  class Signs implements ActionListener{</p><p>  public void actionPerformed(ActionEvent e) {</p><p><b>  /*</b></p><p>  * 用ActionEvent對象的getActionCommand()方法</p&g

57、t;<p>  * 取得與引發事件對象相關的字符串</p><p><b>  */</b></p><p>  String str = e.getActionCommand();</p><p>  /* sqrt求平方根 */</p><p>  if(str.equals("sqrt&qu

58、ot;)){</p><p>  double i = Double.parseDouble(tf.getText());</p><p><b>  if(i>=0){</b></p><p><b>  /*</b></p><p>  * String.valueOf() 轉換為字符串&

59、lt;/p><p>  * df.format() 按要求保留四位小數</p><p>  * Math.sqrt() 求算數平方根</p><p><b>  */</b></p><p>  tf.setText(String.valueOf(df.format(Math.sqrt(i))));</p>&

60、lt;p><b>  }</b></p><p><b>  else{</b></p><p>  tf.setText("負數不能開平方根");</p><p><b>  }</b></p><p><b>  }</b>&

61、lt;/p><p>  /* log求常用對數 */</p><p>  else if(str.equals("log")){</p><p>  double i = Double.parseDouble(tf.getText());</p><p><b>  if(i>0){</b><

62、/p><p>  tf.setText(String.valueOf(df.format(Math.log(i))));</p><p><b>  }else{</b></p><p>  tf.setText("負數不能求對數");</p><p><b>  }</b><

63、/p><p><b>  }</b></p><p>  /* %求百分比 */</p><p>  else if(str.equals("%")){</p><p>  tf.setText</p><p>  (df.format(Double.parseDouble(tf.

64、getText()) / 100));</p><p><b>  }</b></p><p>  /* 1/x求倒數 */</p><p>  else if(str.equals("1/x")){</p><p>  if(Double.parseDouble(tf.getText()) == 0

65、){</p><p>  tf.setText("除數不能為零");</p><p><b>  }else{</b></p><p>  tf.setText(df.format(1 / Double.parseDouble(tf.getText())));</p><p><b>  }

66、</b></p><p><b>  }</b></p><p>  /* sin求正弦函數 */</p><p>  else if(str.equals("sin")){</p><p>  double i = Double.parseDouble(tf.getText());<

67、;/p><p>  tf.setText(String.valueOf(df.format(Math.sin(i))));</p><p><b>  }</b></p><p>  /* cos求余弦函數 */</p><p>  else if(str.equals("cos")){</p>

68、;<p>  double i = Double.parseDouble(tf.getText());</p><p>  tf.setText(String.valueOf(df.format(Math.cos(i))));</p><p><b>  }</b></p><p>  /* tan求正切函數 */</p&g

69、t;<p>  else if(str.equals("tan")){</p><p>  double i = Double.parseDouble(tf.getText());</p><p>  tf.setText(String.valueOf(df.format(Math.tan(i))));</p><p><b&

70、gt;  }</b></p><p>  /* n!求階乘 */</p><p>  else if(str.equals("n!")){</p><p>  double i = Double.parseDouble(tf.getText());</p><p>  if((i%2==0)||(i%2==1)

71、)//判斷為整數放進行階乘操作</p><p><b>  {</b></p><p>  int j = (int)i;//強制類型轉換</p><p>  int result=1;</p><p>  for(int k=1;k<=j;k++)</p><p>  result *=

72、k;</p><p>  tf.setText(String.valueOf(result));</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  tf.se

73、tText("無法進行階乘");</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* x^2求平方 */</p><p>  else if(str.equals("x^2")){</p>&

74、lt;p>  double i = Double.parseDouble(tf.getText());</p><p>  tf.setText(String.valueOf(df.format(i*i)));</p><p><b>  }</b></p><p>  /* x^3求立方 */</p><p> 

75、 else if(str.equals("x^3")){</p><p>  double i = Double.parseDouble(tf.getText());</p><p>  tf.setText(String.valueOf(df.format(i*i*i)));</p><p><b>  }</b><

76、/p><p>  /* ′″角度轉換 */</p><p><b>  /**</b></p><p>  * 將角度值轉換成弧度值,方便三角函數的計算</p><p><b>  */</b></p><p>  else if(str.equals("′″"

77、;)){</p><p>  double i = Double.parseDouble(tf.getText());</p><p>  tf.setText(String.valueOf(i/180*Math.PI));</p><p><b>  }</b></p><p><b>  else{<

78、/b></p><p><b>  if(flag){</b></p><p>  IfResult = false;</p><p><b>  }</b></p><p>  if(IfResult){</p><p>  oper = str;</p>

79、<p><b>  }else{ </b></p><p>  getResult(Double.parseDouble(tf.getText()));</p><p>  oper = str;</p><p>  IfResult = true;</p><p><b>  }</b&g

80、t;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 清除按鈕的事件監聽</p>

81、<p><b>  */</b></p><p>  class Clear implements ActionListener{</p><p>  public void actionPerformed(ActionEvent e) {</p><p><b>  /*</b></p>&l

82、t;p>  * 用ActionEvent對象的getActionCommand()方法</p><p>  * 取得與引發事件對象相關的字符串</p><p><b>  */</b></p><p>  String str = e.getActionCommand();</p><p>  if(str ==

83、"C"){</p><p>  tf.setText("0");</p><p>  IfResult = true;</p><p>  result = 0;</p><p>  }else if(str == "-/+"){</p><p>  doub

84、le i = 0 - Double.parseDouble(tf.getText().trim());</p><p>  tf.setText(df.format(i));</p><p>  }else if(str == "Backspace"){</p><p>  if(Double.parseDouble(tf.getText())

85、> 0){</p><p>  if(tf.getText().length() > 1){</p><p>  tf.setText(tf.getText().substring(0, tf.getText().length() - 1));</p><p>  //使用退格刪除最后一位字符</p><p><b> 

86、 }else{</b></p><p>  tf.setText("0");</p><p>  IfResult = true;</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  i

87、f(tf.getText().length() > 2){</p><p>  tf.setText(tf.getText().substring(0, tf.getText().length() - 1));</p><p><b>  }else{</b></p><p>  tf.setText("0");<

88、;/p><p>  IfResult = true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  }else if(str == "CE"){</p><p>  tf.setText("0&q

89、uot;);</p><p>  IfResult = true;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b>&

90、lt;/p><p>  * 數字輸入的事件監聽</p><p><b>  */</b></p><p>  class Num implements ActionListener{</p><p>  public void actionPerformed(ActionEvent e) {</p><p

91、>  String str = e.getActionCommand();</p><p>  if(IfResult){</p><p>  tf.setText("");</p><p>  IfResult = false;</p><p><b>  }</b></p>&

92、lt;p>  if(str=="π")</p><p><b>  {</b></p><p>  tf.setText(String.valueOf(Math.PI));</p><p><b>  }</b></p><p>  else if(str=="e

93、")</p><p><b>  {</b></p><p>  tf.setText(String.valueOf(Math.E));</p><p><b>  }</b></p><p><b>  else{</b></p><p> 

94、 tf.setText(tf.getText().trim() + str);</p><p>  if(tf.getText().equals("0")){</p><p>  tf.setText("0");</p><p>  IfResult = true;</p><p>  flag = t

95、rue;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b>

96、;</p><p>  * 小數點的事件監聽</p><p><b>  */</b></p><p>  class Dot implements ActionListener{</p><p>  public void actionPerformed(ActionEvent e) {</p><

97、p>  IfResult = false;</p><p>  if(tf.getText().trim().indexOf(".") == -1){</p><p>  tf.setText(tf.getText() + ".");</p><p><b>  }</b></p>&

98、lt;p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * main方法</b></p><p><b>  */</b></p&g

99、t;<p>  public static void main(String[] args) {</p><p>  new Calucator().setVisible(true);</p><p><b>  }</b></p><p><b>  }</b></p><p>  

100、四.程序的調試與運行結果說明</p><p><b>  界面展示:</b></p><p>  實際運算結果展示:55+45</p><p>  當除數為0時,對應的輸出:“除數不能為0”的提示:</p><p><b>  五.課程設計總結</b></p><p>  在

101、做本項目是時候,會遇到很多小問題,比如說:如何保存輸入的數字和下一個數進行加、減、乘、除運算。還有如何判斷它是第幾個輸入的數字。后來進行多次研究和查詢才知道可以通過設運算符標志位來判斷是輸入的第幾個數值。</p><p>  此次課程設計讓我更了解熟悉了Java中的圖形用戶界面和它的編程方式。在完成課題的過程中也不斷充實了自己,學習到了很多以前沒有學習到的知識,收獲很大。最大的收獲就是對大學學習的總結和培養了解決

102、困難的信心和能力,使我對所學知識能夠融會貫通,又不斷豐富了新知識。Java計算器設計使得我們對所學的專業課有了更為深刻的認識,使得知識得到了鞏固和提高。</p><p>  感觸最深的是:學程序類的東西,光是看書時不行的,學的也吃力枯燥,實踐中學習,不斷的練習揣摩,這才是好方法。</p><p><b>  六.參考書籍資料</b></p><p&

103、gt;  1. 耿祥義、張躍平,Java2實用教程,清華大學出版社,2001</p><p>  2. (美)Bruce Eckel,java編程思想,機械工業出版社,2001</p><p><b>  3. </b></p><p>  4. 林邦杰,高級編程技術 程序設計入門教程,中國青年出版社,2001</p><p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論