程序能实现基本的算术运算,并能够对运算结果的精度进行有效控制,并且实现了存储器相关功能
功能如下:
MC:清除存储数据
MR:读取存储数据显示在屏幕上
MS:将显示的数据覆盖存储到存储器中
M+:用存储的数据加上屏幕上显示的数并更新存储器里的值
M-: 用存储的数据减去屏幕上显示的数并更新存储器里的值
←: 删除输入数的尾数
C: 清除计算器数据,下一次输入数据开始新的运算
CE: 清除当前输入的数
±: 正负数转换
√: 开平方
+,-,*,/ 加减乘除,将结果
%:取模
1/x:取倒数
程序流程图:
代码实现:
class operateNum {//操作数类
public double value;//操作数的实际值
public int dotWei;//操作数如果是小数,记录小数点后的位数
public String invertedString;//1/x字符串
public String sqrtedString;//sqrt(x)字符串
public boolean isSqrted,isInverted;//做标记是否√,1/x过,用于后续判断
public boolean clear;//clear为真表示是否重置操作数
public boolean isFloat;//isFloat为真,表示操作数是小数
public operateNum()
{
value=0;
dotWei=0;
sqrtedString=null;
invertedString=null;
isSqrted=false;
isInverted=false;
clear=false;
isFloat=false;
}
public void reset()//重置操作数
{
value=0;
dotWei=0;
sqrtedString=null;
invertedString=null;
isSqrted=false;
isInverted=false;
clear=false;
isFloat=false;
}
}
class storageField {//存储区
public double storageNum;//存储区存储的数据
public boolean storageMode;//是否启动存储区
public storageField()
{
storageNum=0;
storageMode=false;
}
}
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.math.BigDecimal;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
public class calc extends JFrame{
private JTextField display1,display2,display3;
private JButton num[],operate[];
private String name[]={"MC","MR","MS","M+","M-","←","CE","C","±","√","7","8","9","/","%","4","5","6","*","1/x","1","2","3","-","=","0",".","+"};
private operateNum op1=new operateNum(),op2=new operateNum();//操作数1,操作数2
private storageField storage=new storageField();//存储区
private String action="op1";//表示要操作的对象 "op1"操作第一个操作数,"op2"操作第二个操作数
private String sign="";//运算符,默认为空
private String screen1,screen2;
private boolean Disable=false;
public calc()
{
super("计算器");
this.setLayout(null);
this.setSize(228, 324);
this.setResizable(false);
JPanel jp=new JPanel(null);
jp.setBounds(10,15,getWidth()-24,getHeight());
jp.setBackground(new Color(217,228,241));
this.getContentPane().setBackground(new Color(217,228,241));
/**显示屏**/
display1=new JTextField("");
display2=new JTextField("0");
display3=new JTextField("");
display1.setEnabled(false);
display2.setEnabled(false);
display3.setEnabled(false);
display1.setBounds(0, 0, 204, 26);
display2.setBounds(20, 20, 184, 34);
display3.setBounds(0, 20, 20, 34);
display1.setHorizontalAlignment(JLabel.RIGHT);
display2.setHorizontalAlignment(JLabel.RIGHT);
display3.setHorizontalAlignment(JLabel.CENTER);
display1.setFont(new Font("宋体",Font.PLAIN,12));
display2.setFont(new Font("宋体",Font.BOLD,20));
display3.setFont(new Font("宋体",Font.PLAIN,20));
display1.setDisabledTextColor(Color.BLACK);
display2.setDisabledTextColor(Color.BLACK);
display3.setDisabledTextColor(Color.BLACK);
display1.setBorder(new LineBorder(new Color(242,247,252)));
display2.setBorder(new LineBorder(new Color(242,247,252)));
display3.setBorder(new LineBorder(new Color(242,247,252)));
display1.setBackground(n