首页 > 其他分享 >简易计算器的设计

简易计算器的设计

时间:2023-10-13 20:33:20浏览次数:35  
标签:numbershow toString 计算器 简易 number2 number1 operator 设计 append

[实验目的]

1.掌握软件开发的基本流程

2.掌握软件设计和开发的基本工具

3.理解集成软件开发环境在软件开发过程中的作用

[实验内容]

1.设计一个可实现加、减、乘、除功能的计算器软件

2.使用牛顿迭代法完成算术开方的运算

3.将自己编写的算术开方功能集成到计算器程序中,使计算器软件除了具备加、减、乘、除功能外,还具备算术开方功能

 

实验环境

1.操作系统:Windows11

2.开发工具:eclipse

 

四、基本功能描述

简易计算器包括基本的四则运算(加、减、乘、除)及开方运算。

 

五、软件设计

设计思路

1. 在开始写计算器之前,用笔在纸上画出计算器的草图,显示屏的位置,每个按钮的位置及大小比列。

2. 创建容器框框,通过之前的草图将按钮位置排好,这样计算器的外部形状也Ok。

3. 图形边框解决了之后开始通过 getSource () == “”去的事件源对象,进行实现按钮的输入。

4. 这是计算器最关键的一步——实现计算器的运算,首先定义四则运算的符号。通过符号实现加减乘除。如:

switch (operator.toString()) {      

case ("+"): {

         number2.append(number1.toString());//1=2

         double d = Double.parseDouble(number1.toString())+ Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;

 

5.最后进行最后的测试,改正一些编写中的小错误,实现最后的结果。

(二)设计流程图

 

 

 

(三)实验结果

输入99+9=

 

 

输入-9开根号:

 

 

输入9开根号:

 

 

输入989-456=

 

 

输入94/8=

 

 

 

六、实现代码

package calculation4;

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class calculation4 extends JFrame {

private static final long serialVersionUID = 1L;

//实现序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性

 

 Container c = getContentPane();                   //用于固定宽度并支持响应式布局的容器

  StringBuilder number1  = new StringBuilder("");  // 储存第1个数字字符串

  StringBuilder number2  = new StringBuilder("");  // 储存第2个数字字符串

  StringBuilder operator = new StringBuilder("");  // 储存运算符

  StringBuilder result   = new StringBuilder("");  // 储存运算结果

  JTextField numbershow  = new JTextField("0");    // 数字显示区域,初始显示为"0"

 

  public static void main(String[] args) {       // 主方法

//除键(C):在计算中按下此键将清除除存储器内容外的所有数值和计算符号,即可以重新开始输入计算.

    //清除键(CE):在计算中按下此键将清除除存储器内容外的上一步内容,即可以重新输入按CE前输入的数字(含多位数)或计算符号.

  calculation4 c1 = new calculation4();

      c1.setVisible(true);}

 

  public calculation4() {                        // 计算器构造方法

   setTitle("计算器");

   setBounds(100, 100, 260, 245);

   setResizable(false);

   setLayout(null);

   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    createNumberShow();  // 创建数字显示区域

    createClearButtons();// 创建Backspace,CE,C等三个按钮

    createButtonArea();  // 创建数字按钮区域

     }

  

  private void createNumberShow() {               // 创建数字显示区域的方法

 

   numbershow.setHorizontalAlignment(JTextField.RIGHT);

   numbershow.setBounds(5, 0, 245, 22);

   numbershow.setEnabled(false);

   numbershow.setDisabledTextColor(Color.BLACK);

   c.add(numbershow);}

 

  private void createClearButtons() {             // 创建Backspace,CE,C等三个按钮的方法

 

   JButton[] clearbutton = new JButton[3];

   String[] clearbuttontext = { "Backspace", "CE", "C" };

    for (int i = 0; i < 3; i++) {

    clearbutton[i] = new JButton();

    clearbutton[i].setText(clearbuttontext[i]);

    clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);

    clearbutton[i].setMargin(new Insets(0, 0, 0, 0));

    clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));

    clearbutton[i].setForeground(Color.blue);

    clearbutton[i].setBounds(48 + i * 68, 30, 63, 22);

    clearbutton[i].setForeground(Color.red);

    c.add(clearbutton[i]);}

 

   clearbutton[0].addActionListener(new ActionListener() {// 为Backspace按钮添加监听器

 

      public void actionPerformed(ActionEvent e) {

        if (number1.toString().equals("")) {                  // 如果未做任何输入

        showNumber(numbershow, number1);                      // 显示number1

       } else if (operator.toString().equals("")) {           // 如果只输入了number1

 

        number1.deleteCharAt(number1.toString().length() - 1);// 将number1的最后一个字符去掉

        showNumber(numbershow, number1);                      // 显示number1

 

      } else if (number2.toString().equals("")) {             // 如果只输入了number1和operator

        showNumber(numbershow, number1);                      // 不作任何处理,显示number1

 

       } else {                                               // 如果输入了number1、operator、number2

 

        number2.deleteCharAt(number2.toString().length() - 1);// 将number2的最后一个字符去掉

        showNumber(numbershow, number2);                      // 显示number2

      }  }});

 

   clearbutton[1].addActionListener(new ActionListener() {// 为CE按钮添加监听器

 

      public void actionPerformed(ActionEvent e) {

        if (number1.toString().equals("")) {              // 如果未做任何输入

       showNumber(numbershow, number1);                   // 显示number1

      } else if (operator.toString().equals("")) {        // 如果只输入了number1

       

        number1.setLength(0);                             // 清除number1

        showNumber(numbershow, number1);                  // 显示number1

        

      } else if (number2.toString().equals("")) {         // 如果输入了number1和operator

 

       showNumber(numbershow, number2);                   // 不作任何处理,显示number2

 

      } else {                                            // 如果输入了number1、operator、number2

        number2.setLength(0);                             // 清除number2

        showNumber(numbershow, number2);                  // 显示number2

      }    }  });

 

   clearbutton[2].addActionListener(new ActionListener() {// 为C按钮添加监听器

      public void actionPerformed(ActionEvent e) {        // 将所有储存清零

       number1.setLength(0);

       number2.setLength(0);

       operator.setLength(0);

       numbershow.setText("0.");

       result.setLength(0);

     }   });}

 

  private void createButtonArea() {               // 创建数字按钮区域的方法

   JPanel ButtonArea = new JPanel();

   ButtonArea.setBounds(5, 55, 245, 125);

   ButtonArea.setLayout(new GridLayout(4, 5, 5, 5));

   c.add(ButtonArea);

   JButton[] numberbutton = new JButton[20];

   String[] numberbuttontext = { "7", "8", "9", "/", "sqrt",

                         "4", "5", "6","*", "%",

                         "1", "2", "3", "-", "1/X",

                         "0", "+/-", ".", "+", "=" };

 

   for (int i = 0; i <= 19; i++) {              // 使用循环为这20个按钮添加标识

    numberbutton[i] = new JButton(numberbuttontext[i]);

    ButtonArea.add(numberbutton[i]);

     if (i % 5 == 3 || i == 19) {// 操作符按钮设置为红色

      numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);//文本居中

      numberbutton[i].setMargin(new Insets(0, 0, 0, 0));//构件在显示区的上,左,下,右的空白区0

      numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));

      //name表示的是字体的样式,常用的字体有Times New Roman、Symbol、宋体、楷体等。

      //style表示的是字体的风格,默认是正常Font.PLAIN,有加粗Font.BLOD,有斜体Font.INTALIC

      //可以加粗+斜体Font.BLOD + Font.INTALIC

      numberbutton[i].setForeground(Color.red);

 } else {                                       // 其它设置为蓝色

 

     numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);

     numberbutton[i].setMargin(new Insets(0, 0, 0, 0));

     numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));

     numberbutton[i].setForeground(Color.blue);

   }}

 

   int[] numbers = { 15, 10, 11, 12, 5, 6, 7, 0, 1, 2 };// 该数组分别代表0-9等数字在numberbuttontext数组中序号

   for (int i = 0; i <= 9; i++) {                       // 使用循环为这0-9这十个数字按钮添加监听器

    final String str = String.valueOf(i);               //封装,将括号里面这个 i 的值转换成一个‘String’类型的值

    

   numberbutton[numbers[i]].addActionListener(new ActionListener() {// 为0-9按钮添加监听器

   

       public void actionPerformed(ActionEvent e) {

        if (operator.toString().equals("")) {                           // 没有输入operator之前

         add(number1, str);                                             // 只设置number1的值

         showNumber(numbershow, number1);                               // 只显示number1的值

        }

       else {                                                           // 输入operator之后

        add(number2, str);                                              // 只设置number2的值

        showNumber(numbershow, number2);                                // 只显示number2的值

       } }}); }

 

   numberbutton[16].addActionListener(new ActionListener() {            // 为"+/-"按钮添加监听器

       public void actionPerformed(ActionEvent e) {

        if (operator.toString().equals("")) {                            // 没有输入operator之前

        add(number1, "+/-");                                             // 只设置number1的值

        showNumber(numbershow, number1);                                 // 只显示number1的值

        }

       else {                                                            // 输入operator之后

       add(number2, "+/-");                                              // 只设置number2的值

       showNumber(numbershow, number2);                                  // 只显示number2的值

        }    }});

   

   numberbutton[17].addActionListener(new ActionListener() {             // 为"."按钮添加监听器

       public void actionPerformed(ActionEvent e) {

        if (operator.toString().equals("")) {                            // 在输入operator之前,只显示number1的值

        add(number1, ".");

        showNumber(numbershow, number1);

        }

       else {                                                            // 在输入operator之后,只显示number2的值

        add(number2, ".");

        showNumber(numbershow, number2);    }  } });

   

   numberbutton[18].addActionListener(new ActionListener() { // 为"+"按钮添加监听器

       public void actionPerformed(ActionEvent e) {

        operator.setLength(0);

        operator.append("+");  }});

   

   numberbutton[13].addActionListener(new ActionListener() { // 为"-"按钮添加监听器

 

       public void actionPerformed(ActionEvent e) {

        operator.setLength(0);

        operator.append("-");} });

 

   numberbutton[8].addActionListener(new ActionListener() { // 为"*"按钮添加监听器

 

       public void actionPerformed(ActionEvent e) {

        operator.setLength(0);

        operator.append("*");}});

 

   numberbutton[3].addActionListener(new ActionListener() { // 为"/"按钮添加监听器

 

       public void actionPerformed(ActionEvent e) {

        operator.setLength(0);

        operator.append("/");}});

 

   numberbutton[19].addActionListener(new ActionListener() { // 为"="按钮添加监听器

   

       public void actionPerformed(ActionEvent e) {

        if (number1.toString().equals("")) {// 当number1为空时

         showNumber(numbershow, number1);

      } else if 

        (operator.toString().equals("")) {  // 当number1不为空,而operator为空时

        showNumber(numbershow, number1);

       } else if 

        (number2.toString().equals("")) {

        

// 当number1、operator均不为空,而number2为空时        

        switch (operator.toString()) {      

case ("+"): {

         number2.append(number1.toString());//1=2

         double d = Double.parseDouble(number1.toString())+ Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;

          

case ("-"): {

          number2.append(number1.toString());

          double d = Double.parseDouble(number1.toString())- Double.parseDouble(number2.toString());

          result.setLength(0);

          result.append(d);

          showNumber(numbershow, result);

          number1.setLength(0);

          number1.append(d);}

          break;

        

case ("*"): {

         number2.append(number1.toString());

         double d = Double.parseDouble(number1.toString())* Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;

 

case ("/"): {

         number2.append(number1.toString());

         double d = Double.parseDouble(number1.toString())/ Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;}} else {         

          

// 当number1、operator、number2均不为空时

        switch (operator.toString()) {

case ("+"): {

         double d = Double.parseDouble(number1.toString())+ Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;

 

case ("-"): {

         double d = Double.parseDouble(number1.toString())- Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;

 

case ("*"): {

         double d = Double.parseDouble(number1.toString())* Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;

 

case ("/"): {

         double d = Double.parseDouble(number1.toString())/ Double.parseDouble(number2.toString());

         result.setLength(0);

         result.append(d);

         showNumber(numbershow, result);

         number1.setLength(0);

         number1.append(d);}

         break;}}}});

 

  numberbutton[14].addActionListener(new ActionListener() {  // 为"1/x"按钮添加监听器

 

      public void actionPerformed(ActionEvent e) {

        if (number1.toString().equals("")) {                  // 没有输入number1时

         numbershow.setText("输入非法0");

       } else if (operator.toString().equals("")) {           // 输入了number1,但没有输入operator

            

       if (Double.parseDouble(number1.toString()) == 0) {  // 如果number1的值为零

          numbershow.setText("除数不能为零");

       } else {                                               // 如果number1的值不为零

        

        double d = 1 / (Double.parseDouble(number1.toString()));

        number1.setLength(0);

        number1.append(d);                                    // 将number1的值开放并存储

        showNumber(numbershow, number1);}

       } else if (number2.toString().equals("")) {            // 输入了number1、operator,但没有输入number2

 

        double d = 1 / (Double.parseDouble(number1.toString()));

        number2.append(d);// 将number1的值开放并存储

        showNumber(numbershow, number2);

       } else {                                               // 输入了number1、operator,number2

 

        double d = 1 / (Double.parseDouble(number2.toString()));

        number2.setLength(0);

        number2.append(d);// 将number2的值开放并存储

        showNumber(numbershow, number2);}}});

 

   numberbutton[9].addActionListener(new ActionListener() { // 为"%"按钮添加监听器

 

      public void actionPerformed(ActionEvent e) {

       if (number1.toString().equals("")) {                  // 没有输入number1时

              numbershow.setText("输入非法0");

            } else if (operator.toString().equals("")) {           // 输入了number1,但没有输入operator

                 

            if (Double.parseDouble(number1.toString()) == 0) {  // 如果number1的值为零

               numbershow.setText("0");

            } else {                                               // 如果number1的值不为零

             

             double d = (Double.parseDouble(number1.toString())/100);

             number1.setLength(0);

             number1.append(d);                                    // 将number1的值开放并存储

             showNumber(numbershow, number1);}

            } else if (number2.toString().equals("")) {            // 输入了number1、operator,但没有输入number2

 

             double d =  (Double.parseDouble(number1.toString())/100);

             number2.append(d);// 将number1的值开放并存储

             showNumber(numbershow, number2);

            } else {                                               // 输入了number1、operator,number2

 

             double d = (Double.parseDouble(number2.toString())/100);

             number2.setLength(0);

             number2.append(d);// 将number2的值开放并存储

             showNumber(numbershow, number2);}}});

 

   numberbutton[4].addActionListener(new ActionListener() { // 为"sqrt"按钮添加监听器

 

      public void actionPerformed(ActionEvent e) {

 

        if (number1.toString().equals("")) {// 没有输入number1时

        showNumber(numbershow, number1);

       } else if (operator.toString().equals("")) {// 输入了number1,但没有输入operator

 

         if (Double.parseDouble(number1.toString()) < 0) {// number1小于0

         numbershow.setText("函数输入无效");

        } else {// number1大于0

 

         double d = Math.sqrt(Double.parseDouble(number1.toString()));

         number1.setLength(0);

         number1.append(d);// 将number1的值开放并存储

         showNumber(numbershow, number1);}

      } else if (number2.toString().equals("")) {// 输入了number1、operator,但没有输入number2

 

        double d = Math.sqrt(Double.parseDouble(number1.toString()));

        number2.append(d);// 将number1的值开放并存储

        showNumber(numbershow, number2);

       } else {// 输入了number1、operator、number2

 

        double d = Math.sqrt(Double.parseDouble(number2.toString()));

        number2.setLength(0);

        number2.append(d);// 将number2的值开放并存储

        showNumber(numbershow, number2);}}});}

 

 

  public void add(StringBuilder s1, String s2) {  // 定义按钮输入后数字字符串变化的方法

   if (s2.equals("+/-")) {// 定义输入"+/-"后数字字符串的变化

    if (s1.toString().equals("") || s1.toString().equals("0")) {// 如果数字字符串为空或者0,那么不发生变化

     s1.append("");

    } else {// 如果数字字符串不为空也不为0,那么在数字字符串前增加或删除"-"字符

 

     if (s1.toString().startsWith("-")) {

       s1.deleteCharAt(0);

     } else {

     s1.insert(0, "-");}}}

 

   if (s2.equals(".")) {// 定义输入"."后数字字符串的变化

    if (s1.toString().indexOf(".") == -1) {// 查找数字字符串中是否含有"."字符,如果没有则执行以下代码

     if (s1.toString().equals("")) {// 如果数字字符串为空,那么将数字字符串设置为"0."

      s1.setLength(0);

      s1.append("0");

       } else {

      s1.append(".");}} else {// 如果有,则不发生变化

 

     s1.append("");}}

   if (s2.equals("0")) {// 定义输入"0"后数字字符串的变化

    if (s1.toString().equals("0")) {// 当数字的字符串为"0"时,不发生变化

     s1.append("");

    } else {// 当数字的字符串吧为"0"时,在其字符串后增加"0"

    

     s1.append("0");}}

   for (int i = 1; i < 10; i++) {// 通过循环,定义输入1-9后数字字符串的变化

    String str = String.valueOf(i);

    

     if (s2.equals(str)) {// 定义输入1-9后数字字符串的变化

     if (s1.toString().equals("0")) {

      s1.setLength(0);

      s1.append(str);

     } else

    

     s1.append(str);}}}

 

  public void showNumber(JTextField j, StringBuilder s) {// 定义数字显示区域如何显示数字字符串的方法

 

   if (s.toString().equals("") == true || s.toString().equals("0") == true) {

   j.setText("0.");}

   else if (s.toString().indexOf(".") == -1) {

 

   j.setText(s.toString() + ".");}

   else {

   j.setText(s.toString());}}}

 

标签:numbershow,toString,计算器,简易,number2,number1,operator,设计,append
From: https://www.cnblogs.com/Shift123/p/17763075.html

相关文章

  • 2023-2024-1 20231413 《计算机基础与程序设计》第三周学习总结
    班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:计算机科学概论第2、3章并完成云班课测试《C语言程序设计》第2章并完成云班课测试教材学习内容总结:了解了进制转换、图像/音频压缩,计算机数学的基础知识教材学习中的......
  • 2023-2024-1 20231301 《计算机基础与程序设计》第三周学习总结
    2023-2024-120231301《计算机基础与程序设计》第三周学习总结作业信息作业链接作业课程<班级>(2023-2024-1-计算机基础与程序设计)作业要求<作业>(2023-2024-1计算机基础与程序设计第三周学习总结)作业目标<《计算机基础与程序设计》预习第二、三章>《计算机......
  • C#软件架构设计原则
    软件架构设计原则学习设计原则是学习设计模式的基础。在实际的开发过程中,并不是一定要求所有的代码都遵循设计原则,而是要综合考虑人力、成本、时间、质量,不刻意追求完美,要在适当的场景遵循设计原则。这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码结构。分别用一句话......
  • 计算器软件开发
    用Java实现计算器软件设计Java编写个人计算器软件一、所需要实现的功能1.该计算器需要实现加、减、乘、除、开平方功能。2.需要有一个运行的UI界面,可以和电脑自带的计算器相比较。该界面要有一个文本输入框,用来显示输入的表达式;若干个按钮,用来用来显示数字以及操作符;当点击......
  • Java设计模式-策略模式-基于Spring实现
    1、策略模式1.1、概述策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它将算法封装在独立的策略类中,使得它们可以相互替换,而不影响客户端代码。这种模式通过将算法的选择从客户端代码中分离出来,提供了更大的灵活性和可维护性。在Java中,策略模式的设计理念可以通过以......
  • 计算器软件开发
    用Java实现计算器软件设计Java编写个人计算器软件一、所需要实现的功能1.该计算器需要实现加、减、乘、除、开平方功能。2.需要有一个运行的UI界面,可以和电脑自带的计算器相比较。该界面要有一个文本输入框,用来显示输入的表达式;若干个按钮,用来用来显示数字以及操作符;当点击......
  • 深入探讨 C# 和 .NET 中 async/await 的历史、背后的设计决策和实现细节
    前言对`async/await`的支持已经存在了十多年。它的出现,改变了为.NET编写可伸缩代码的方式,你在不了解幕后的情况下也可以非常普遍地使用该功能。从如下所示的同步方法开始(此方法是“同步的”,因为在整个操作完成并将控制权返回给调用方之前,调用方将无法执行任何其他操作)://Syn......
  • 百度飞桨AI4S亮相全国动力学设计与反问题研讨会,助力汽车底盘智能设计
    2023年9月15-18日,第二届全国动力学设计与反问题研讨会暨第一届全国动力学载荷与设计学术会议在南京顺利召开。会议由国家自然科学基金委员会数理科学部指导,中国力学学会动力学与控制专业委员会主办,中国振动工程学会动力学载荷与设计专业委员会、江苏省力学学会、江苏省振动工程学会......
  • 聊聊企业级消息推送的架构设计(001)
    最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格,遇到一几个很重要的面试题:企业级消息通知系统有哪些需求?如何满足?企业级消息通知系统,该如何做架构设计?所以,这里今天给大家做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚......
  • 用设计模式优雅干掉 if-else,真香...
    鲁讯曾说:"高端的代码,只需要最朴素的编写方式",简单的业务使用if-else或switchcase,确实直观明了,但是一旦功能复杂,业务流程长了之后,使用传统的if-else或switchcase方式,就会让代码结构变的异常冗余、混乱,过一段时间之后,哪怕是自己写的代码,读起来也会忍不住想喷上几句,这时候,如......