⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java~1~

📁 此程序是用Java实现的一个图书管理系统,再加以可以做毕业设计用而,而且实现的工能相对效全.
💻 JAVA~1~
字号:
package bookmanager;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.math.BigDecimal;

class calculator extends JFrame implements ActionListener//这个类用来实现计算器
{
    final int INIT=0,RUN=1,ERROR=2,ADD=1,SUB=2,MUL=3,DIV=4;
     JTextField screen;
      JButton button[]=new JButton[20];
       JPanel panel;
       String buttonname[]={"7","8","9","/","C","4","5",
                        "6","*","S","1","2","3","-","%","0",".","←","+","="};
        BigDecimal accumulator=new BigDecimal(0);
        BigDecimal number=new BigDecimal(0);
        boolean decimal=false;
        int state=INIT,operate=INIT;
        boolean counfinish=true,inputfinish=true;
        public calculator()
        {
                super("计算器");
                Container container=getContentPane();
                screen=new JTextField();
                screen.addKeyListener(
                        new KeyAdapter()
                        {
                                public void KeyTyped(KeyEvent ke)
                                {
                                        char ch=ke.getKeyChar();
                                        JButton action=null;
                                        switch(ch)
                                        {
                                                case '7':action=button[0];break;
                                                case '8':action=button[1];break;
                                                case '9':action=button[2];break;
                                                case '/':action=button[3];break;
                                                case '4':action=button[5];break;
                                                case '5':action=button[6];break;
                                                case '6':action=button[7];break;
                                                case '*':action=button[8];break;
                                                case '1':action=button[10];break;
                                                case '2':action=button[11];break;
                                                case '3':action=button[12];break;
                                                case '-':action=button[13];break;
                                                case '0':action=button[15];break;
                                                case '.':action=button[16];break;
                                                case '+':action=button[18];break;
                                                default:action=null;
                                        }
                                        if(ke.getKeyChar()==KeyEvent.VK_ENTER)
                                                action=button[19];
                                        if(ke.getKeyChar()==KeyEvent.VK_BACK_SPACE)
                                                action=button[17];
                                        actionmanage(action,ch+"");
                                }
                        }
                        );
                        screen.setText("0.");
                        screen.setHorizontalAlignment(JTextField.RIGHT);
                        screen.setBackground(Color.white);
                        screen.setEditable(false);
                        container.add(screen,BorderLayout.NORTH);
                        Panel panel=new Panel();
                        panel.setLayout(new GridLayout(4,5,5,5));
                        for(int i=0;i<buttonname.length;i++)
                        {
                                button[i]=new JButton(buttonname[i]);
                                button[i].addActionListener(this);
                                panel.add(button[i]);
                        }
                        container.add(panel,BorderLayout.SOUTH);
                        setSize(270,190);
                        show();
        }
        public void actionPerformed(ActionEvent ae)
        {
                JButton action=(JButton)ae.getSource();
                actionmanage(action,ae.getActionCommand());
                screen.grabFocus();
        }
        private void actionmanage(JButton action,String num)
        {
                if(!(state==ERROR && action!=button[4]))
                {
                        for(int i=0;i<button.length;i++)
                        {
                                if(action==button[i])
                                {
                                        switch(i)
                                        {
                                                case 3:
                                                        {
                                                                manageoperation();
                                                                operate=DIV;
                                                        };
                                                        break;
                                                case 4:
                                                        {
                                                                screen.setText("0.");
                                                                operate=INIT;
                                                                state=INIT;
                                                                decimal=false;
                                                                accumulator=BigDecimal.valueOf(0);
                                                                number=BigDecimal.valueOf(0);
                                                                counfinish=true;
                                                                inputfinish=true;
                                                        };
                                                        break;
                                                case 8:
                                                        {
                                                                manageoperation();
                                                                operate=MUL;
                                                        };
                                                        break;
                                                case 9:
                                                        squareRoot();
                                                        break;
                                                case 13:
                                                        {
                                                                manageoperation();
                                                                operate=SUB;
                                                        };
                                                        break;
                                                case 14:
                                                        {
                                                                pressequals();
                                                                if(operate==DIV)
                                                                {
                                                                        accumulator=accumulator.movePointRight(2);
                                                                        setscreentext(accumulator);
                                                                }
                                                        };
                                                        break;
                                                case 16:
                                                        decimal=true;
                                                        break;
                                                case 17:
                                                        {
                                                                if(!counfinish)
                                                                        backspace();
                                                        };
                                                        break;
                                                case 18:
                                                        {
                                                                manageoperation();
                                                                operate=ADD;
                                                        };
                                                        break;
                                                case 19:
                                                        pressequals();
                                                        break;
                                                default:
                                                        pressnumber(num);
                                                        break;
                                        }
                                }
                        }
                }
        }
        private void squareRoot()
        {
                String result=screen.getText();
                double num=Double.parseDouble(result);
                if(num<0)
                {
                        state=ERROR;
                        screen.setText("负数不能开根号!");
                }
                else
                {
                        num=Math.sqrt(num);
                        result=num+"";
                        char ch=result.charAt(result.length()-1);
                        while(ch=='0')
                        {
                                result=result.substring(0,result.length()-1);
                                ch=result.charAt(result.length()-1);
                        }
                        screen.setText(result);
                }
                inputfinish=true;
        }
        private void pressequals()
        {
                inputfinish=true;
                decimal=false;
                if((!counfinish) || (counfinish && state==RUN))
                        number=new BigDecimal(screen.getText());
                state=INIT;
                count(operate);
        }
        private void manageoperation()
        {
                inputfinish=true;
                decimal=false;
                if(!counfinish)
                {
                        if(state!=INIT)
                        {
                                number=new BigDecimal(screen.getText());
                                count(operate);
                        }
                        else
                        {
                                state=RUN;
                                counfinish=true;
                                accumulator=new BigDecimal(screen.getText());
                        }
                }
        }
        private void count(int operate)
        {
                switch(operate)
                {
                        case 1:
                                accumulator=accumulator.add(number);
                                break;
                        case 2:
                                accumulator=accumulator.subtract(number);
                                break;
                        case 3:
                                accumulator=accumulator.multiply(number);
                                break;
                        case 4:
                                {
                                        try
                                        {
                                                accumulator=accumulator.divide(number,15,5);
                                        }catch(ArithmeticException ae){
                                                state=ERROR;
                                        }
                                };
                                break;
                }
                setscreentext(accumulator);
                if(state==ERROR)
                        screen.setText("除数不能为零!");
                counfinish=true;
        }
        private void setscreentext(BigDecimal number)
        {
                String result=number.toString();
                if(result.indexOf(".")!=(-1))
                {
                        char ch=result.charAt(result.length()-1);
                        while(ch=='0')
                        {
                                result=result.substring(0,result.length()-1);
                                ch=result.charAt(result.length()-1);
                        }
                }
                else
                {
                        result+=".";
                }
                screen.setText(result);
        }
        private void backspace()
        {
                try
                {
                        if(screen.getText().length()==2 || screen.getText().length()==3 && decimal==true)
                                screen.setText("0.");
                        else if(decimal==false)
                        {
                                screen.setText(screen.getText(0,screen.getText().length()-2)+".");
                        }
                        else if(decimal==true)
                        {
                                if(screen.getText(screen.getText().length()-1,1).equals("."))
                                        decimal=false;
                                else
                                        screen.setText(screen.getText(0,screen.getText().length()-1));
                        }
                }catch(Exception e){}
        }
        private void pressnumber(String num)
        {
                if(inputfinish)
                {
                        screen.setText("0.");
                        inputfinish=false;
                }
                counfinish=false;
                if(screen.getText().equals("0.") && decimal==false)
                        screen.setText(num+".");
                else
                {
                        if(decimal==false)
                        {
                                try
                                {
                                        screen.setText(screen.getText(0,screen.getText().length()-1)+num+".");
                                }catch(Exception e){}
                        }
                        else
                        {
                                screen.setText(screen.getText()+num);
                        }
                }
        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -