【Android Studio】简易计算器

简易计算器要求:

1,操作简单,易于掌握,界面简单。
2.方便进行加,减,乘,除等操作。数字保留小数点后两位。
3.包含小数点运算和输入回退功能。
4.能够进行多次叠加运算。
5.系统能够进行多次叠加运算。
6.系统可以稳定运行。

功能图如下:
在这里插入图片描述
逻辑流程图如下:
在这里插入图片描述

项目建立

项目的创建。
新建项目:项目名称设置为MainActicity。
在Activity模板中选择Blank Activity或者empty Activity模板。
其余操作不变,完成项目的创建。

计算器主界面的实现

1.设计界面布局XML文件。
在Android Studio的工程中resllayout目录下,找到activity_main.xml文件,这是用来作为主界面布局的设置文件。在该布局文件中,添加一个AbsoluteLayout(绝对布局管理器)组件,用于显示功能图标和图标上的文本,在AbsoluteLayout(绝对布局管理器)中,定义一个TextView用于显示中间数字和结果,定义17个Button用于输入0-9的数字和+、-、*、1、=、.运算符号以及“Back”输入回退按钮,并用“android:onClick”属性绑定它们的响应函数,具体代码如下。
其代码如下:

<?xml version="1.0" encoding="utf-8"?>

<AbsoluteLayout android:id="@+id/widget0"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView android:id="@+id/txtResult"
        android:layout_width="460px"
        android:layout_height="80px"
        android:background="#ffffffff"
        android:text="0.0"
        android:textSize="28sp"
        android:textStyle="bold"
        android:textColor="#ff333333"
        android:layout_x="11dp"
        android:layout_y="16dp"
        android:gravity="end|right"
        android:padding="2px" />
    <Button android:id="@+id/btn1"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="1"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="15dp"
        android:layout_y="85dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btn2"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="2"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="85dp"
        android:layout_y="85dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btn3"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="3"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="155dp"
        android:layout_y="85dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btnAdd"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="+"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="225dp"
        android:layout_y="85dp"
        android:onClick="add"/>
    <Button android:id="@+id/btn4"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="4"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="15dp"
        android:layout_y="155dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btn5"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="5"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="85dp"
        android:layout_y="155dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btn6"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="6"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="155dp"
        android:layout_y="155dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btnsub"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="-"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="225dp"
        android:layout_y="155dp"
        android:onClick="sub"/>
    <Button android:id="@+id/btn7"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="7"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="15dp"
        android:layout_y="225dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btn8"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="8"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="85dp"
        android:layout_y="225dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btn9"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="9"
        android:textSize="20sp"
        android:background="#ff5599ff"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="155dp"
        android:layout_y="225dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btnMul"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="*"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="225dp"
        android:layout_y="225dp"
        android:onClick="mul"/>
    <Button android:id="@+id/btn0"
        android:layout_width="130px"
        android:layout_height="80px"
        android:text="0"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="15dp"
        android:layout_y="295dp"
        android:onClick="digital_click"/>
    <Button android:id="@+id/btnPoint"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="."
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="155dp"
        android:layout_y="295dp"
        android:onClick="point_click"/>
    <Button android:id="@+id/btnDiv"
        android:layout_width="80px"
        android:layout_height="80px"
        android:text="/"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="225dp"
        android:layout_y="295dp"
        android:onClick="div"/>
    <Button android:id="@+id/btndel"
        android:layout_width="80px"
        android:layout_height="85px"
        android:text="back"
        android:textSize="14sp"
        android:textStyle="bold"
        android:textColor="#ffff0000"
        android:gravity="center"
        android:layout_x="15dp"
        android:layout_y="365dp"
        android:onClick="del"/>
    <Button android:id="@+id/btnequ"
        android:layout_width="290px"
        android:layout_height="80px"
        android:text="="
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_x="85dp"
        android:layout_y="365dp"
        android:onClick="equ"/>
</AbsoluteLayout>

计算器逻辑的实现

由于程序需要使用到库函数中的模块定义,所以在编写程序时,需“import(导入)”相应的内容
来支持程序中对该类的使用。例如要使用AndroidStudio中的“按钮元件,就必须导入“Button”类,Android计算器的文件头如下:

package com.example.mainacticity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import java.text.NumberFormat;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

整体代码如下:

package com.example.mainacticity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import java.text.NumberFormat;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    double firstNum=0;//第一个输入的数据
    char currentSign='+';//记录第一次输入的符号
    StringBuffer currentNum=new StringBuffer();//得到textview中的数据
    boolean isFirstPoint=false;//第一个数据是否是小数点
    TextView txtResult;//输出结果

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtResult=(TextView) findViewById(R.id.txtResult);
    }

    //1.输入框恢复与初始化
    public void init(){
        currentNum.delete(0,currentNum.length());//设置当前textview中的值为0
        isFirstPoint=false;
    }

    //2.数制转换函数
    public double stringToDouble(){
        if(currentNum.length()==0){
            return 0;
        }
        double result=Double.parseDouble(currentNum.toString());
        return result;
    }

    //3.计算函数
    public double calcu(){
        double result=0;
        switch (currentSign){
            case '+':
                result=firstNum+stringToDouble();
                break;
            case '-':
                result=firstNum-stringToDouble();
                break;
            case '*':
                result=firstNum*stringToDouble();
                break;
            case '/':
                result=firstNum/stringToDouble();
                break;
            default:
                break;
        }
        //对小数点后的数据进行格式化
        NumberFormat format=NumberFormat.getInstance();
        format.setMaximumFractionDigits(2);
        result=Double.parseDouble(format.format(result));
        return result;
    }

    //4显示数据函数
    public void display(){
        txtResult.setText(currentNum.toString());
    }

    //5数字按钮单击响应函数
    public void digital_click(View view){
        Button btnDigital=(Button)view;
        char text= btnDigital.getText().charAt(0);
        currentNum.append(text);
        display();
    }

    //6.加法按钮单击
    public void add(View view){
        double result=calcu();
        txtResult.setText(String.valueOf(result));
        firstNum=result;
        currentSign='+';
        init();
    }
    //7.单击减法
    public void sub(View view) {
        double result = calcu();
        txtResult.setText(String.valueOf(result));
        firstNum = result;
        currentSign = '-';
        init();
    }
    //8.单击乘法
    public void mul(View view) {
        double result = calcu();
        txtResult.setText(String.valueOf(result));
        firstNum = result;
        currentSign = '*';
        init();
    }
    //9.单击除法
    public void div(View view) {
        double result = calcu();
        txtResult.setText(String.valueOf(result));
        firstNum = result;
        currentSign = '/';
        init();
    }
    //10.处理等于函数
    public void equ(View view){
        double result=calcu();
        txtResult.setText(String.valueOf(result));
        firstNum=result;
        currentSign='+';
        init();

    }
    //11.小数点按钮单击相应函数
    public void point_click(View view){
        if(isFirstPoint){
            return;//当第一个数据为小数点时,程序返回
        }
        if(currentNum.length()==0){
            return;//当没有输入的数据时返回
        }
        Button btnPoint=(Button) view;
        char text=btnPoint.getText().charAt(0);
        currentNum.append(text);
        isFirstPoint=true;
        display();
    }

    //12.删除按钮单击相应
    public void del(View view){
        if(currentNum.length()>=1){
            currentNum.delete(currentNum.length()-1,currentNum.length());
        }
        if(currentNum.length()==0){
            init();
            display();
        }
        txtResult.setText(currentNum);

    }
}

选择合适的设备运行:
在这里插入图片描述
点击绿色三角run运行,短暂的加载后出现计算器界面:
在这里插入图片描述
进行运算:
在这里插入图片描述
22+23=45
在这里插入图片描述
可以进行简单的加减乘除运算,会自动四舍五入,保留小数点后两位数字。
完成!