百位计算器设计

本文详细介绍了如何设计并实现一个能够处理百位数运算的计算器,涵盖了加减乘除四则运算,同时讨论了进位和借位的处理策略,以及错误处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*the main calculate function*/
 
import java.math.*;
public class calc {
    static calc cal = null;
    double result = 1 ;
    BigDecimal num1 ;
    BigDecimal num2;
    BigDecimal value;
     
    /* CONSTRUCTOR*/
    private calc(){
    }
    /*SINGLETON MODLE*/
    public static calc  singleton(){
        if(cal == null){
            cal = new calc();
            return cal;
        }else{
            return cal;
        }
    }
    /* THE ADD OPERTATION*/
    public String add(String a , String b){
        num1 = new BigDecimal(a);
        num2 = new BigDecimal(b);
        value = num1.add(num2);
        num1 = null;
        num2 = null;
        return (value.toPlainString());
    }
    /* THE SUB OPERATION*/
    public String sub(String a , String b){
        num1 = new BigDecimal(a);
        num2 = new BigDecimal(b);
        value = num1.subtract(num2);
        num1 = null;
        num2 = null;
        return (value.toPlainString());
    }
    /* THE MULTIPLY OPERATION*/
    public String multiply(String a , String b){
        num1 = new BigDecimal(a);
        num2 = new BigDecimal(b);
        value = num1.multiply(num2);
        num1 = null;
        num2 = null;
        return (value.toPlainString());
    }
    /* THE DIV OPERATION*/
    public String div(String a , String b){
        num1 = new BigDecimal(a);
        num2 = new BigDecimal(b);
        value = num1.divide(num2,100,BigDecimal.ROUND_HALF_UP);
        num1 = null;
        num2 = null;
        return (value.toPlainString());
    }
    /* THE ROOT OPERATION*/
    public String root(String a){
         
        return Math.sqrt(Double.parseDouble(a))+"";
         
    }
    /* THE FACTORIAL OPERATION阶乘*/
    public double factorial(Double a){
        for(int i = 1 ; i<=a ; i++){
            result = result*i;
        }
        return result;
         
    }
    /* THE SQUARE OPERATION*/
    public String square(String d){
        num1 = new BigDecimal(d);
        value = num1.multiply(num1);
        num1 = null;
        return (value.toPlainString());
    }
    /*THE CUBIC OPERATION*/
    public String cubic(String a){
        num1 = new BigDecimal(a);
        value = num1.multiply(num1);
        value = value.multiply(num1);
        num1 = null;
        return (value.toPlainString());
    }
    /* THE POWER OPERATION幂次*/
    public String power(String a , int e){
        num1 = new BigDecimal(a);
        value = num1.pow(e);
        num1 = null;
        return value.toPlainString();
    }
    /*THE RECIPROCAL OPERATION倒数*/
    public String reciprocal(String a){
        num1 = new BigDecimal("1.0");
        num2 = new BigDecimal(a);
        value = num1.divide(num2,100,BigDecimal.ROUND_HALF_UP);
        num1 = null;
        num2 = null;
        return value.toPlainString();
    }
     
    public String mod(String a, String b){
        num1 = new BigDecimal(a);
        num2 = new BigDecimal(b);
        value = num1.remainder(num2);
        num1 = null;
        num2 = null;
        return value.toPlainString();
    }
}
 
 
 
/* the main implements function*/
 
 
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class myframe extends Frame {
     
    TextField text = null;
     
    /*THE CONSTRUCTOR */
    public myframe(String topic , int x , int y , int height , int width){
        super(topic);
        this.setVisible(true);
        this.addWindowListener(new windowmonitor());
        this.setBounds(x,y,height,width);
        this.setResizable(false);
    }
     
    /*THE WINDOW MONITOR WHICH IS USED TO CLOSE THE WINDOW*/
    class windowmonitor extends WindowAdapter {
        public void windowClosing(WindowEvent e){
            setVisible(false);
            System.exit(0);
        }
    }
     
    /*THE SINGLETON MODEL*/
    static myframe one = new myframe("calculator" , 200 , 200 , 400 , 350);
    public static myframe getme(){
        return one;
    }
     
    public static void main(String args[]){
        /*it is used to screen the number*/
        Panel panel1 = new Panel();
        /*it is used to contain the button */
        Panel panel2 = new Panel();
         
        panel2.setLayout(new BorderLayout());
        panel1.setBounds(0,100,400,240);
        panel2.setBounds(200,200,400,125);
        panel1.setBackground(Color.GREEN);
        panel2.setBackground(Color.BLUE);
        panel1.setLayout(new GridLayout(5,5,5,5));
        one.add(panel1);
        one.add(panel2);
        myframe.getme().text = new TextField(50);
        panel2.add(myframe.getme().text);
        myframe.getme().text.setBackground(Color.PINK);
         
        /*THE BUTTONS , I THINK WE CAN USE ARRAY TO IMPLEMENTS THIS FUNCTION  */
        Button button1 = new Button("1");
        Button button2 = new Button("2");
        Button button3 = new Button("3");
        Button button4 = new Button("4");
        Button button5 = new Button("5");
        Button button6 = new Button("6");
        Button button7 = new Button("7");
        Button button8 = new Button("8");
        Button button9 = new Button("9");
        Button button10 = new Button("0");
        Button button11 = new Button("+");
        Button button12= new Button("-");
        Button button13= new Button("*");
        Button button14= new Button("/");
        Button button15= new Button("cubic");
        Button button16= new Button("square");
        Button button17= new Button("root");
        Button button18= new Button("factorial");
        Button button19= new Button("reciprocal");
        Button button20= new Button("power");
        Button button21= new Button(".");
        Button button22= new Button("=");
        Button button23= new Button("clc");
        Button button24= new Button("mod");
/*     
        Button button25= new Button();
        Button button26= new Button();
        Button button27= new Button();
        Button button28= new Button();
        Button button29= new Button();
        Button button30= new Button();
*/
        /*THE ADD THE BUTTONS TO THE PANEL*/
        panel1.add(button1);
        panel1.add(button2);
        panel1.add(button3);
        panel1.add(button4);
        panel1.add(button5);
        panel1.add(button6);
        panel1.add(button7);
        panel1.add(button8);
        panel1.add(button9);
        panel1.add(button10);
        panel1.add(button11);
        panel1.add(button12);
        panel1.add(button13);
        panel1.add(button14);
        panel1.add(button15);
        panel1.add(button16);
        panel1.add(button17);
        panel1.add(button18);
        panel1.add(button19);
        panel1.add(button20);
        panel1.add(button21);
        panel1.add(button22);
        panel1.add(button23);
        panel1.add(button24);
/*
         
        panel1.add(button25);
        panel1.add(button26);
        panel1.add(button27);
        panel1.add(button28);
        panel1.add(button29);
        panel1.add(button30);
*/
        /*ADD MONITOR TO THE BUTTON*/
        monitor mymonitor = new monitor();
        button1.addActionListener(mymonitor);
        button2.addActionListener(mymonitor);
        button3.addActionListener(mymonitor);
        button4.addActionListener(mymonitor);
        button5.addActionListener(mymonitor);
        button6.addActionListener(mymonitor);
        button7.addActionListener(mymonitor);
        button8.addActionListener(mymonitor);
        button9.addActionListener(mymonitor);
        button10.addActionListener(mymonitor);
        button11.addActionListener(mymonitor);
        button12.addActionListener(mymonitor);
        button13.addActionListener(mymonitor);
        button14.addActionListener(mymonitor);
        button15.addActionListener(mymonitor);
        button16.addActionListener(mymonitor);
        button17.addActionListener(mymonitor);
        button18.addActionListener(mymonitor);
        button19.addActionListener(mymonitor);
        button20.addActionListener(mymonitor);
        button21.addActionListener(mymonitor);
        button22.addActionListener(mymonitor);
        button23.addActionListener(mymonitor);
        button24.addActionListener(mymonitor);
    }
     
}
 
/*THE MONITOR WHICH IS USED TO IMPLEMENT THE FUNCTION OF A CALCULATOR*/
class monitor implements ActionListener{
     
    String command = null;
    String str1 = null;
    String str2 = null;
    TextField text1 =null;
    String backvalue = null;
     
    /*THE FLAG WHICH IS USED TO DISTINGUISH THE FUNCTION*/
    int flag = -1;
     
    @Override
    public void actionPerformed(ActionEvent e) {
        /*GET THE INFORMATION OF THE TEXT*/
        text1 = myframe.getme().text;
        str1 = text1.getText();
        /*RETURN THE COMMAND OF THE BUTTON*/
        command = e.getActionCommand();
        /*TO SCREEN THE NUMBER */
        if(command.equals("0")||command.equals("1")||command.equals("2")||command.equals("3")
                ||command.equals("4")||command.equals("5")||command.equals("6")||command.equals("7")
                ||command.equals("8")||command.equals("9")||command.equals(".")){
            text1.setText(str1+command);
            /*PLUS FUNCTION*/
        }else if(command.equals("+")){
            backvalue = str1;
            text1.setText("");
            flag = 0;
            /*THE MINUS FUNCTION*/
        }else if(command.equals("-")){
            backvalue = str1;
            text1.setText("");
            flag = 1;
            /*THE MUTIPLY FUNCTION*/
        }else if(command.equals("*")){
            backvalue = str1;
            text1.setText("");
            flag = 2;
            /*THE DEVIDE FUNCTION*/
        }else if(command.equals("/")){
            backvalue = str1;
            text1.setText("");
            flag = 3;
            /*THE CUBIC FUNCTION*/
        }else if(command.equals("cubic")){
            backvalue = str1;
            text1.setText("");
            flag = 4;
            /*THE SQUARE FUNCTION*/
        }else if(command.equals("square")){
            backvalue = str1;
            text1.setText("");
            flag = 5;
            /*THE ROOT FUNCTION*/
        }else if(command.equals("root")){
            backvalue = str1;
            text1.setText("");
            flag = 6;
            /*THE FACTORIAL FUNCTION*/
        }else if(command.equals("factorial")){
            backvalue = str1;
            text1.setText("");
            flag = 7;
            /*THE RECIPROCAL FUNCTION*/
        }else if(command.equals("reciprocal")){
            backvalue = str1;
            text1.setText("");
            flag = 8;
            /*THE POWER FUNCTION*/
        }else if(command.equals("power")){
            backvalue = str1;
            text1.setText("");
            flag = 9;
            /*TO DELETE THE CHAR WHICH IS SHOWED IN THE TEXT*/
        }else if(command.equals("mod")){
            text1.setText("");
            text1.setText("");
            flag = 10;
        }else if(command.equals("clc")){
            text1.setText("");
            backvalue = "";
            flag = -1;
            /*IMPLEMENTS THE FUNCTION*/
        }else if(command.equals("=")){
             
            switch(flag){
            case 0: str1 = text1.getText();
                    backvalue = calc.singleton().add(backvalue, str1);
                    flag =-1;
                    break;
            case 1:str1 = text1.getText();
                   backvalue = calc.singleton().sub(backvalue, str1);
                   flag =-1;
                   break;
            case 2:str1 = text1.getText();
                   backvalue = calc.singleton().multiply(backvalue, str1);
                   flag =-1;
                   break;
            case 3:str1 = text1.getText();
                   backvalue = calc.singleton().div(backvalue, str1);
                   flag =-1;
                   break;
            case 4:str1 = text1.getText();
                   backvalue = calc.singleton().cubic(backvalue);
                   flag =-1;
                   break;
            case 5:str1 = text1.getText();
                   backvalue = calc.singleton().square(backvalue);
                   flag =-1;
                   break;
            case 6:str1 = text1.getText();
                   backvalue = calc.singleton().root(backvalue);
                   flag =-1;
                   break;
            case 7:str1 = text1.getText();
                   backvalue = ""+calc.singleton().factorial(Double.parseDouble(backvalue));
                   flag =-1;
                   break;
            case 8:str1 = text1.getText();
                   backvalue = calc.singleton().reciprocal(backvalue);
                   flag =-1;
                   break;
            case 9:str1 = text1.getText();
                   backvalue = calc.singleton().power(backvalue, Integer.parseInt(str1));
                   flag =-1;
                   break;
            case 10:str1 = text1.getText();
                    backvalue = calc.singleton().mod(backvalue,str1);
                    flag =-1;
                    break;
            }
             text1.setText(""+backvalue);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值