Java实现简单计算器的探索性做法

Experiment Content

  Use Java GUI and event handler to realize a simple calculator. This calculator can compute addition, subtraction, multiplication and division of two integer numbers. Besides the above functions, you can realize more functions as possible.

  Requirement: GUI Java application.

 

1 Requirements Analysis

  In addition to the basic functions of addition, subtraction, multiplication, and division, the calculator program also has a clear key C and a backspace key, as well as some scientific calculation methods, including square root, reverse, and percentage.

  1.1 Basic functions of calculator:

    1.1.1 Addition operation: use the number buttons and the "+" button to perform operations;

    1.1.2 Subtraction operation: use the number buttons and the "-" button to perform operations;

    1.1.3 Multiplication operation: use the number buttons and the "*" button to perform operations;

    1.1.4 Division operation: use the number buttons and the "/" button to perform operations;

  1.2 Backspace key and clear key: Use "Backspace" and "C" buttons to achieve ";

  1.3 Scientific calculation method of calculator:

    1.3.1 Prescribing: Use the number buttons and "Sqrt" button to perform calculations;

    1.3.2 Percentage: Use the number buttons and the "%" button to perform calculations;

    1.3.3 Countdown: use the number buttons and the "1/x" button to perform calculations;

    1.3.4 Negate: use the number buttons and "-/+" buttons to perform operations

 

2 Design

  2.1 User interface design

  2.1.1 The design of the calculator program: The user interface includes Swing components, but most of the programs use AWT components.

  

 

 

  2.1.2 In the AWT component,

  (1) The panel text box is used:

    JPanel panel1, panel2, panel3, panel4;JTextField result;

  2.1.3 In program design, layout management is used: (1) Use GridLayout to set the panel

   

 

  2.2 Outline design The entire program of the calculator includes: a Calculator class

  2.2.1 Its function is to use graphical users to realize the interface design and calculation functions of the calculator, and some scientific calculation methods include the Calculator() construction method, and other important member methods, and finally instantiate one in the main method The calculator object implements the functions of a calculator.

 

3 Code(autuor by Ziwei Li) 

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class calculator extends JFrame {
   //设置按钮,包括运算数字和运算符号 
   JButton b0 = new JButton("0");
   JButton b1 = new JButton("1");
   JButton b2 = new JButton("2");
   JButton b3 = new JButton("3");
   JButton b4 = new JButton("4");
   JButton b5 = new JButton("5");
   JButton b6 = new JButton("6");
   JButton b7 = new JButton("7");
   JButton b8 = new JButton("8");
   JButton b9 = new JButton("9");
   JButton jiaButton = new JButton("+");//
   JButton jianButton = new JButton("-");//
   JButton chengButton = new JButton("*");//
   JButton chuButton = new JButton("/");//
   JButton yuButton = new JButton("%");//求余
   JButton jjButton = new JButton("+/-");//正负
   JButton sqrtButton = new JButton("sqrt");//求根
   JButton dianButton = new JButton(".");//小数点
   JButton dengButton = new JButton("=");//等号
   JButton daoButton = new JButton("1/x");//求1/输入数
   JButton backButton = new JButton("Backpace");//回退
   JButton cButton = new JButton("C");//清除
   public double op1;
   public double op2;
   public static final int JIA = 0;
   public static final int JIAN = 1;
   public static final int CHENG = 2;
   public static final int CHU = 3;
   public static final int YU = 4;
   public int currentop = 0;
   private boolean opEnd = false;
   //创建面板并进行基本设置
   JPanel panel1 = new JPanel();
   JPanel panel2 = new JPanel();
   JPanel panel3 = new JPanel();
   JPanel panel4 = new JPanel();
   JTextField result = new JTextField(20);
   public calculator() {
      initPanel2();
      initPanel3();
      panel2.setLayout(new GridLayout(5, 4)); //设置总面板边框
      panel1.setLayout(new BorderLayout(0,0));
      panel1.add(panel3, BorderLayout.NORTH);// 设置位置
      panel1.add(panel2, BorderLayout.CENTER);// 设置位置
      getContentPane().add(panel1);
      addActionListeners();//按钮监听器
      setSize(600,400);//窗体大小
      setLocation(500, 300);//窗体位置
      setVisible(true);//窗体显示
      setDefaultCloseOperation(calculator.EXIT_ON_CLOSE);//窗体关闭
      this.setResizable(false);
      this.setTitle("计算器");
   }


   private void initPanel2() {
      // 把组件添加相应panel上
      panel2.add(b7);
      panel2.add(b8);
      panel2.add(b9);
      panel2.add(chuButton);
      panel2.add(b4);
      panel2.add(b5);
      panel2.add(b6);
      panel2.add(chengButton);
      panel2.add(b1);
      panel2.add(b2);
      panel2.add(b3);
      panel2.add(jianButton);
      panel2.add(b0);
      panel2.add(jjButton);
      panel2.add(dianButton);
      panel2.add(jiaButton);
      panel2.add(daoButton);
      panel2.add(yuButton);
      panel2.add(sqrtButton);
      panel2.add(dengButton);
   }
   private void addActionListeners() {
      ActionHandler c = new ActionHandler();
      //按钮监听
      b0.addActionListener(c);
      b1.addActionListener(c);
      b2.addActionListener(c);
      b3.addActionListener(c);
      b4.addActionListener(c);
      b5.addActionListener(c);
      b6.addActionListener(c);
      b7.addActionListener(c);
      b8.addActionListener(c);
      b9.addActionListener(c);
      jiaButton.addActionListener(c);
      dengButton.addActionListener(c);
      chengButton.addActionListener(c);
      chuButton.addActionListener(c);
      jianButton.addActionListener(c);
      jjButton.addActionListener(c);
      dianButton.addActionListener(c);
      sqrtButton.addActionListener(c);
      yuButton.addActionListener(c);
      daoButton.addActionListener(c);
      backButton.addActionListener(c);
      cButton.addActionListener(c);
   }
   private void initPanel3() {
      //输入和结果显示
      panel3.setLayout(new GridLayout(2, 1));
      panel3.add(result);
      panel3.add(panel4);
      panel3.setPreferredSize(new Dimension(100,100));
      //清除和回退
      panel4.setLayout(new GridLayout(1, 2));
      panel4.add(backButton);
      panel4.add(cButton);
   }
//运算类
class ActionHandler implements ActionListener {
   public void actionPerformed(ActionEvent e) {
      //输入数字
      if (e.getSource() == b0) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "0");
      }
      if (e.getSource() == b1) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "1");
         opEnd = true;
      }
      if (e.getSource() == b2) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "2");
         opEnd = true;
      }
      if (e.getSource() == b3) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "3");
         opEnd = true;
      }
      if (e.getSource() == b4) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "4");
         opEnd = true;
      }
      if (e.getSource() == b5) {
         if (opEnd == false) {
            result.setText("");
            }
         result.setText(result.getText() + "5");
         opEnd = true;
      }
      if (e.getSource() == b6) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "6");
         opEnd = true;
      }
      if (e.getSource() == b7) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "7");
         opEnd = true;
      }
      if (e.getSource() == b8) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "8");
         opEnd = true;
      }
      if (e.getSource() == b9) {
         if (opEnd == false) {
            result.setText("");
         }
         result.setText(result.getText() + "9");
         opEnd = true;
      }
      try {
         if (e.getSource() == jiaButton) {//点击+按钮,下同
            op1 = Double.parseDouble(result.getText());
            //说明操作数已经输入完毕
            opEnd = false;
            currentop = JIA;
         }
         if (e.getSource() == chengButton) {//
            op1 = Double.parseDouble(result.getText());
            //说明操作数已经输入完毕
            opEnd = false;
            currentop = CHENG;
         }
         if (e.getSource() == chuButton) {//
            op1 = Double.parseDouble(result.getText());
            //说明操作数已经输入完毕
            opEnd = false;
            currentop = CHU;
         }
         if (e.getSource() == jianButton) {//
            op1 = Double.parseDouble(result.getText());
            //说明操作数已经输入完毕
            opEnd = false;
            currentop = JIAN;
         }
         if (e.getSource() == yuButton) {//
            op1 = Double.parseDouble(result.getText());
            //说明操作数已经输入完毕
            opEnd = false;
            currentop = YU;
         }
         if (e.getSource() == jjButton) {//正负
            String tmp = result.getText();
            if (tmp.equals("") || tmp.equals("0")) {
               return;
            }
            if (tmp.charAt(0) == '-') {
               tmp = tmp.substring(1);
            } else {
               tmp = '-' + tmp;
            }
            result.setText(tmp);
         }
         if (e.getSource() == dianButton) {//小数点
            String tmp = result.getText();
            if (tmp.equals("")) {
               return;
            }
            if (tmp.indexOf(".") != -1) {
               return;
            }
            tmp = tmp + ".";
            result.setText(tmp);
         }
         if(e.getSource() == daoButton) {//1/x
            String tmp = result.getText();
            if (tmp.equals(" ")) {
               return;
            }
            double d; // 先定义d
            d = Double.parseDouble(tmp);
            if(d==0) {
               result.setText("被除数不能为零");
               return;
            }
            op2 = 1/d;
            result.setText(op2 + "");
         }
         if (e.getSource() == sqrtButton) {//求根
            String tmp = result.getText();
            if (tmp.equals(" ")) {
               return;
            }
            double d;
            d = Double.parseDouble(tmp);
            if (d < 0) {
               result.setText("不能对负数求平方根");
               return;
            }
            op2 = Math.sqrt(d);
            result.setText(op2 + "");
         }
         if (e.getSource() == backButton) {//回退
            String s = result.getText();
            result.setText("");
            for (int i = 0; i < s.length() - 1; i++) {
               char a = s.charAt(i);
               result.setText(result.getText() + a);
            }
         }
         if (e.getSource() == cButton) {//清除
            result.setText("0");
            opEnd = false;
         }
         if (e.getSource() == dengButton) { //点击“=”按钮
            op2 = Double.parseDouble(result.getText());
            switch (currentop) {
            case JIA:
               result.setText(op1 + op2 + "");
               break;
            case JIAN:
               result.setText(op1 - op2 + "");
               break;
            case CHENG:
               result.setText(op1 * op2 + "");
               break;
            case CHU:
               if (op2 == 0) {
                  result.setText("0不能为除数");
                  break;
               }
               result.setText(op1 / op2 + "");
               break;
            case YU:
               if (op2 == 0) {
                  result.setText("0不能为除数");
                  break;
               }
               result.setText(op1 % op2 + "");
               break;
            }
            opEnd = false;
         }
      } catch (Exception e1) {
         result.setText("输入有误,请重新输入");
         opEnd = false;
      }
      }
   }
   public static void main(String[] args) {
      new calculator();// 生成类实例
   }
 

 

4 Test

4.1 Implement addition: 1+2+3=6

 

 

Return:5

Error

 

posted @ 2020-11-30 12:21  唐雕  阅读(129)  评论(0编辑  收藏  举报