未完成【编译原理】科学计算器设计Java

作业要求

本次作业需要大家制作可编程计算器。
(1)其界面可参考下图,再加上‘(‘ 和 ’)’
可编程计算器界面
(2)点击 25.6 * 14.5 + 2 这11个符号,按‘=’,可输出结果373.2
(3)点击2 / (5.2 + 78) – 6这12个符号, 按‘=’,可输出结果 -5.97596
(4)若输入语法错误的串,如2 / 5.2 + 78 –, 则需报错。
(5)考虑整型和浮点型问题。对于浮点型,还需考虑精度问题。
(6)考虑除0问题。
(7)考虑键盘操作问题。

注意: 要想计算出值来,必须使用翻译模式。再考虑要计算整个算术表达式的值,则使用综合属性 val。本题翻译模式的提示如下:

E  TE’{E.val = T.val + E’.val}
E’  +TE’ {E’.val = T.val + E’.val}
E’  -TE’ {_________}
E’ ε {E’.val = 0}
T  FT’{T.val = F.val * T’.val}
T’  FT’ {T’.val = F.val T’.val}
T’  /FT’ {_________}
T’ ε {_______}
F  (E) {F.val = E.val}
F  i {F.val = i.lexval}

对于 E  TE’{E.val = T.val + E’.val}, 其代码经过更改如下:
代码

代码实现

package smartcalculator;
import java.awt.*;
import java.awt.event.*;

public class calculator {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        CalFrame f= new CalFrame();

    }

}
class CalFrame extends Frame{
    double d1,d2;
    int op=-1;
    TextField tf;
    CalPanelL p1;
    CalPanelR p2;

    CalFrame(){
        super("Smart Calculator");

        setLayout(new FlowLayout(FlowLayout.CENTER,8,10));
        setBackground(new Color(100,150,150));
        setForeground(Color.white);
        setResizable(false);
        setSize(300,200);

        tf = new TextField(22);
        tf.setEditable(false);
        tf.setBackground(new Color(108,118,103));
        tf.setForeground(Color.white);
        tf.setFont(new Font("Arial",Font.BOLD,16));
        add(tf);
        p1=new CalPanelL();
        p2=new CalPanelR();
        add(p1);
        add(p2);

        setVisible(true);
        addWindowListener(new Wclose());
    }

    class CalButton extends Button{
        CalButton(String s){
            super(s);
            setBackground(Color.gray);
        }
    }
    class CalPanelL extends Panel{
        CalButton b0,b1,b2,b3,
                  b4,b5,b6,b7,
                  b8,b9,bPN,bPoint;
        CalPanelL(){
            setLayout(new GridLayout(4,3));
            setFont(new Font("TimesRoman",Font.BOLD,16));
            b0=new CalButton("0");
            b1=new CalButton("1");
            b2=new CalButton("2");
            b3=new CalButton("3");
            b4=new CalButton("4");
            b5=new CalButton("5");
            b6=new CalButton("6");
            b7=new CalButton("7");
            b8=new CalButton("8");
            b9=new CalButton("9");
            bPN=new CalButton("+/-");
            bPoint=new CalButton(".");

            add(b7); b7.addActionListener(new PressB7());
            add(b8); b8.addActionListener(new PressB8());
            add(b9); b9.addActionListener(new PressB9());
            add(b4); b4.addActionListener(new PressB4());
            add(b5); b5.addActionListener(new PressB5());
            add(b6); b6.addActionListener(new PressB6());
            add(b1); b1.addActionListener(new PressB1());
            add(b2); b2.addActionListener(new PressB2());
            add(b3); b3.addActionListener(new PressB3());
            add(b0); b0.addActionListener(new PressB0());
            add(bPN); bPN.addActionListener(new PressBPN());
            add(bPoint); bPoint.addActionListener(new PressBPoint());

        }
    }
    class CalPanelR extends Panel{
        CalButton bAdd,bSub,bMul,bDiv,
                  bSqrt,bSin,bCos,bYx,
                  bLn,bEqual,bCE,bBack;
        CalPanelR(){
            setLayout(new GridLayout(4,3));
            setFont(new Font("TimesRoman",Font.BOLD,16));
            bAdd=new CalButton("+");
            bSub=new CalButton("-");
            bMul=new CalButton("*");
            bDiv=new CalButton("/");
            bSqrt=new CalButton("sqrt");
            bSin=new CalButton("sin");
            bCos=new CalButton("cos");
            bYx=new CalButton("y^x");
            bLn=new CalButton("ln");
            bEqual=new CalButton("=");
            bCE=new CalButton("CE");
            bBack=new CalButton("<-");

            add(bDiv);bDiv.addActionListener(new PressBDiv());
            add(bSqrt);bSqrt.addActionListener(new PressBSqrt());
            add(bLn);bLn.addActionListener(new PressBLn());
            add(bMul);bMul.addActionListener(new PressBMul());
            add(bSin);bSin.addActionListener(new PressBSin());
            add(bBack);bBack.addActionListener(new PressBBack());
            add(bSub);bSub.addActionListener(new PressBSub());
            add(bCos);bCos.addActionListener(new PressBCos());
            add(bCE);bCE.addActionListener(new PressBCE());
            add(bAdd);bAdd.addActionListener(new PressBAdd());
            add(bYx);bYx.addActionListener(new PressBYx());
            add(bEqual);bEqual.addActionListener(new PressBEqual());
        }
    }
    class PressBAdd implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                d1= Double.parseDouble(tf.getText());
                op=0;
                tf.setText("");
            }catch(Exception ee){}
        }
    }
    class PressBSub implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                d1= Double.parseDouble(tf.getText());
                op=1;
                tf.setText("");
            }catch(Exception ee){}
        }
    }
    class PressBMul implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                d1= Double.parseDouble(tf.getText());
                op=2;
                tf.setText("");
            }catch(Exception ee){}
        }
    }
    class PressBDiv implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                d1= Double.parseDouble(tf.getText());
                op=3;
                tf.setText("");
            }catch(Exception ee){}
        }
    }
    class PressBYx implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                d1= Double.parseDouble(tf.getText());
                op=4;
                tf.setText("");
            }catch(Exception ee){}
        }
    }
    class PressBEqual implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                double result=0;
                d2=Double.parseDouble(tf.getText());
                switch(op){
                case 0:
                    result=d1+d2;
                    break;
                case 1:
                    result=d1-d2;
                    break;
                case 2:
                    result=d1*d2;
                    break;
                case 3:
                    result=d1/d2;
                    break;
                case 4:
                    result=Math.pow(d1,d2);
                    break;
                default:
                }
                tf.setText(String.valueOf(result));
            }catch(Exception ee){}
        }
    }
    class PressBSqrt implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                double x= Double.parseDouble(tf.getText());
                double y;
                y=Math.sqrt(x);
                tf.setText(y+"");
            }catch(Exception ee){}
        }
    }
    class PressBLn implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                double x= Double.parseDouble(tf.getText());
                double y;
                y=Math.log(x);
                tf.setText(y+"");
            }catch(Exception ee){}
        }
    }
    class PressBSin implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                double x= Double.parseDouble(tf.getText());
                double y;
                y=Math.sin(x);
                tf.setText(y+"");
            }catch(Exception ee){}
        }
    }
    class PressBCos implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                double x= Double.parseDouble(tf.getText());
                double y;
                y=Math.cos(x);
                tf.setText(y+"");
            }catch(Exception ee){}
        }
    }
    class PressBBack implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                String text=tf.getText();
                text= text.substring(0, text.length()-1);
                tf.setText(text);
            }catch(Exception ee){}
        }
    }
    class PressBCE implements ActionListener{
        public void actionPerformed(ActionEvent e){ 
                tf.setText("");
        }
    }
    class PressBPN implements ActionListener{
        public void actionPerformed(ActionEvent e){
            try{
                String text=tf.getText();
                if(text != ""){
                    if(text.charAt(0)=='-')
                        tf.setText(text.substring(1));
                    else if (text.charAt(0)>='0'&&text.charAt(0)<='9')
                        tf.setText('-'+text.substring(0));
                    else if(text.charAt(0)=='.')
                        tf.setText("-0"+text.substring(0));
                }
            }catch(Exception ee){}
        }
    }
    class PressBPoint implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                if(text.lastIndexOf(".")==-1)
                    tf.setText(text+".");
        }
    }
    class PressB0 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"0");
        }
    }
    class PressB1 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"1");
        }
    }
    class PressB2 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"2");
        }
    }
    class PressB3 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"3");
        }
    }
    class PressB4 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"4");
        }
    }
    class PressB5 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"5");
        }
    }
    class PressB6 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"6");
        }
    }
    class PressB7 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"7");
        }
    }
    class PressB8 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"8");
        }
    }
    class PressB9 implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String text=tf.getText();
                    tf.setText(text+"9");
        }
    }
    class Wclose extends WindowAdapter{
        public void windowClosing(WindowEvent e){
                System.exit(0);;
        }
    }
}

运行结果

SC

猜你喜欢

转载自blog.csdn.net/ttangyyyy/article/details/80664681
今日推荐