美文网首页操作系统大学编程实验代码程序员
java实现多功能科学计算器(包括进制转换,三角函数,四则运算等

java实现多功能科学计算器(包括进制转换,三角函数,四则运算等

作者: Pursuer96 | 来源:发表于2017-12-07 08:46 被阅读27次
    qwe.jpgqwe.jpg

    多功能科学计算器(包括进制转换,三角函数,四则运算等)

    Basic Framework

    屏幕快照 2017-12-06 08.45.28.png屏幕快照 2017-12-06 08.45.28.png

    calculator.java

    package myCalculator;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class calculator extends Frame implements ActionListener, WindowListener
    {
        private Container container;
        private GridBagLayout layout;
        private GridBagConstraints constraints; 
        private JTextField displayField;         //计算结果显示区
        private String lastCommand;           //保存+,-,*,/,=命令0
        private double result;               //保存计算结果
        private boolean start;           //判断是否为数字的开始
        private JMenuBar menubar;
        private JMenuItem m_exit;
        private JMenuItem m2_ejz;
        private JMenuItem m2_bjz;
        private Dialog dialog;
        private Label label_dialog;
        private JButton button_sqrt;
        private JButton button_plusminus;
        private JButton button_CE;
        private JButton button_cancel;
        private JButton button_1;
        private JButton button_2;
        private JButton button_3;
        private JButton button_4;
        private JButton button_5;
        private JButton button_6;
        private JButton button_7;
        private JButton button_8;
        private JButton button_9;
        private JButton button_0;
        private JButton button_plus;
        private JButton button_minus;
        private JButton button_multiply;
        private JButton button_divide;
        private JButton button_point;
        private JButton button_equal;
        private JButton button_log;
        private JButton button_tan;
        private JButton button_cos;
        private JButton button_sin;
        private JButton button_exp;
        
        public calculator()       //构造方法设置布局、为按钮注册事件监听器
        {
            super( "My Calculator" );
            this.setLocation( 350,150 );
            this.setSize( 450,400 );
            this.setResizable( true );
            this.setLayout( new GridLayout( 7,1 ) );
            this.addmyMenu();                   //调用成员方法添加菜单
            displayField = new JTextField( 30 );
            this.add( displayField );
            displayField.setEditable( true );
    
            start = true;
            result = 0;
            lastCommand = "=";
    
            JPanel panel0 = new JPanel();
            panel0.setLayout( new GridLayout( 1,4,4,4 ) );
            
            
            JPanel panel1 = new JPanel();
            panel1.setLayout( new GridLayout( 1,5,4,4 ) );
            this.add( panel1 );
            button_sqrt = new JButton( "sqrt" );//根号
            button_plusminus = new JButton( "+/-" );
            button_exp = new JButton( "exp" );//底数e的n次幂
            button_CE = new JButton( "退位");
            button_cancel = new JButton( "c" );//清除
    
            JPanel panel2 = new  JPanel();
            panel2.setLayout( new GridLayout( 1,5,4,4 ) );
            this.add( panel2 );
            button_7 = new JButton( "7" );
            button_8 = new JButton( "8" );
            button_9 = new JButton( "9" );
            button_log = new JButton( "log" );//对数
            button_divide = new JButton( "/" );//除
    
            JPanel panel3 = new JPanel();
            panel3.setLayout( new GridLayout(1,5,4,4) );
            this.add( panel3 );
            button_4 = new JButton( "4" );
            button_5 = new JButton( "5" );
            button_6 = new JButton( "6" );
            button_tan = new JButton( "tan" );//正切
            button_multiply = new JButton( "*" );//乘法
    
            JPanel panel4=new  JPanel();
            panel4.setLayout( new GridLayout( 1,5,4,4 ) );
            this.add(panel4);
            button_1 = new JButton( "1" );
            button_2 = new JButton( "2" );
            button_3 = new JButton( "3" );
            button_cos = new JButton( "cos");//余弦
            button_minus = new JButton( "-" );
    
            JPanel panel5 = new  JPanel();
            panel5.setLayout( new GridLayout( 1,5,4,4 ) );
            this.add( panel5 ); 
            button_0 = new JButton( "0" );
            button_point=new JButton( "." );
            button_equal = new JButton( "=" );
            button_sin = new JButton( "sin" );//正弦
            button_plus = new JButton( "+" );
    
            panel1.add( button_sqrt );
            panel1.add( button_plusminus );
            panel1.add( button_exp );
            panel1.add( button_CE );
            panel1.add( button_cancel );
            panel2.add( button_7 );
            panel2.add( button_8 );
            panel2.add( button_9 );
            panel2.add( button_log );
            panel2.add( button_divide );
            panel3.add( button_4 );
            panel3.add( button_5 );
            panel3.add( button_6 );
            panel3.add( button_tan );
            panel3.add( button_multiply );
            panel4.add( button_1 );
            panel4.add( button_2 ); 
            panel4.add( button_3 );
            panel4.add( button_cos );
            panel4.add( button_minus );
            panel5.add( button_0 );
            panel5.add( button_point );
            panel5.add( button_equal );
            panel5.add( button_sin );
            panel5.add( button_plus) ;
    
            button_sqrt.addActionListener( this );
            button_plusminus.addActionListener( this );
            button_exp.addActionListener( this );
            button_CE.addActionListener( this );
            button_cancel.addActionListener( this );
            button_7.addActionListener( this );
            button_8.addActionListener( this );
            button_9.addActionListener( this );
            button_log.addActionListener( this );
            button_divide.addActionListener( this );
            button_4.addActionListener( this );
            button_5.addActionListener( this );
            button_6.addActionListener( this );
            button_tan.addActionListener( this );
            button_multiply.addActionListener( this );
            button_1.addActionListener( this );
            button_2.addActionListener( this );
            button_3.addActionListener( this );
            button_cos.addActionListener( this );
            button_minus.addActionListener( this );
            button_0.addActionListener( this );
            button_point.addActionListener( this );
            button_equal.addActionListener( this );
            button_sin.addActionListener( this );
            button_plus.addActionListener( this );
                    
            this.addWindowListener( new WinClose() );      //注册窗口监听器
            this.setVisible( true );
        }
        
        private void addmyMenu()        //菜单的添加
        {   
            JMenuBar menubar = new JMenuBar(); 
            this.add( menubar );
            JMenu m1 = new JMenu( "选项" );
            JMenu m2 = new JMenu( "进制转换" );
    
            JMenuItem m1_exit = new JMenuItem( "退出" );
            m1_exit.addActionListener( this );
            JMenuItem m2_ejz = new JMenuItem( "二进制" );
            m2_ejz.addActionListener( this );
            JMenuItem m2_bjz = new JMenuItem("八进制");
            m2_bjz.addActionListener( this );
            JMenuItem m2_sljz = new JMenuItem("十六进制");
            m2_sljz.addActionListener( this );
    
            JMenu m3 = new JMenu( "帮助" ); 
            JMenuItem m3_Help = new JMenuItem( "用法" ); 
            m3_Help.addActionListener( this ); 
    
            dialog = new Dialog( this, "提示" , true );     //模式窗口
            dialog.setSize( 240,80 );
            label_dialog = new Label("", Label.CENTER );   //标签的字符串为空,居中对齐
            dialog.add( label_dialog ); 
            dialog.addWindowListener( this );          //为对话框注册窗口事件监听器
            
            m1.add( m1_exit );  
            menubar.add( m1 );
            m2.add( m2_ejz );
            m2.add( m2_bjz );
            m2.add( m2_sljz );
            menubar.add( m2 );
            m3.add( m3_Help ); 
            menubar.add( m3 );  
        }
    
        public void actionPerformed(ActionEvent e)       //按钮的单击事件处理方法
        {
            if(
                    e.getSource().equals( button_1 )||e.getSource().equals( button_2 )|| 
                    e.getSource().equals( button_3 )||e.getSource().equals( button_4 )||
                    e.getSource().equals( button_5 )|| e.getSource().equals( button_6 )||
                    e.getSource().equals( button_7 )|| e.getSource().equals( button_8 )||
                    e.getSource().equals( button_9 ) ||e.getSource().equals( button_0 )||
                    e.getSource().equals( button_point )||e.getSource().equals( button_plusminus )||    
                    e.getSource().equals( button_cancel )||e.getSource().equals( button_CE )
              )
            {      //非运算符的处理方法
                String input = e.getActionCommand();
                
                if ( start )
                {
                    displayField.setText("");
                    start = false;
                    if( input.equals( "+/-" ) )
                        displayField.setText( displayField.getText()+ "-" ); 
                }
                if( !input.equals( "+/-" ) )
                {
                    String str = displayField.getText();
                    if( input.equals( "退格" ) )          //退格键的实现方法
                    {       
                        if( str.length() > 0 )
                            displayField.setText( str.substring( 0,str.length() - 1 ) );
                    }
                    else if( input.equals( "C" ) )         //清零键的实现方法
                    {
                        displayField.setText( "0" );
                        start = true;
                    }   
                    else
                        displayField.setText( displayField.getText() + input );
                }
            }
            else if ( e.getActionCommand() == "二进制" )   //二进制的转换
            {
                int n = Integer.parseInt( displayField.getText() );
                displayField.setText( Integer.toBinaryString( n ) );
            }
            else if ( e.getActionCommand() == "八进制" )    //八进制的转换
            {
                int n = Integer.parseInt( displayField.getText() );
                displayField.setText( Integer.toOctalString( n ) );
            }
            else if ( e.getActionCommand() == "十六进制" )    //十六进制的转换
            {
                int n = Integer.parseInt( displayField.getText() );
                displayField.setText( Integer.toHexString( n ) );
            }
    
            else if ( e.getActionCommand() == "退出" )      //选项中退出的处理方法
            {
                System.exit( 0 );
            }
            else if ( e.getActionCommand() == "用法" )      //按下'帮助'菜单栏中用法的处理方法
            {   
                label_dialog.setText( "sqrt,exp等键是先输运算符再输数字\n" ); 
                dialog.setLocation( 400,250 );
                dialog.setVisible( true );  
            }
            else        //各运算符的识别
            {
                String command = e.getActionCommand();        
                if( start )
                {
                    lastCommand = command;
                }
                else
                {
                    calculate( Double.parseDouble( displayField.getText() ) );
                    lastCommand = command;
                    start = true;
                }
             }
        }
        
        public void calculate( double x )          //各运算符的具体运算方法
        {
            double d = 0;
            if ( lastCommand.equals( "+" ) ) 
                result += x;    
            else if (lastCommand.equals( "-" ) ) 
                result -= x;
            else if ( lastCommand.equals( "*" ) ) 
                result *= x;   
            else if ( lastCommand.equals( "/" ) ) 
                result /= x;
            else if ( lastCommand.equals( "=" ) ) 
                result = x;
            else if ( lastCommand.equals( "sqrt" ) ) 
            {
                d = Math.sqrt( x );
                result = d;
            }
            else if ( lastCommand.equals( "exp" ) )
            {
                d = Math.exp( x );
                result = d;
            }
            else if ( lastCommand.equals( "log" ) )
            {
                d = Math.log( x );
                result = d;
            }
            else if ( lastCommand.equals( "tan" ) )
            {
                d = Math.tan(x);
                result = d;
            }
            else if ( lastCommand.equals( "cos" ) )
            {
                d = Math.cos( x );
                result = d;
            }
            else if ( lastCommand.equals( "sin" ) )
            {
                d = Math.sin( x );
                result = d;
            }
            displayField.setText( ""+ result );
         }   
        
        public void windowClosing( WindowEvent e )
        {
            if( e.getSource() == dialog )
                dialog.setVisible( false );           //隐藏对话框
            else
                System.exit( 0 ); 
        }
    
        public void windowOpened( WindowEvent e )         {  }
        public void windowActivated( WindowEvent e )      {  }
        public void windowDeactivated( WindowEvent e )    {  }
        public void windowClosed( WindowEvent e )         {  }
        public void windowIconified( WindowEvent e )      {  }
        public void windowDeiconified( WindowEvent e )    {  }
            
        public static void main( String args[] )          
        {
            calculator calculator = new calculator();
        }
    }
    
    class WinClose implements WindowListener
    {
        public void windowClosing( WindowEvent e )    //单击窗口关闭按钮时触发并执行实现窗口监听器接口中的方法
        {
            System.exit( 0 );          //结束程序运行
        }
        public void windowOpened( WindowEvent e ){ }
        public void windowActivated( WindowEvent e ){}
        public void windowDeactivated( WindowEvent e){ }
        public void windowClosed( WindowEvent e ){ }
        public void windowIconified( WindowEvent e ){ }
        public void windowDeiconified( WindowEvent e ){ }
    }
    

    Running Effect

    屏幕快照 2017-12-06 08.48.57.png屏幕快照 2017-12-06 08.48.57.png
    屏幕快照 2017-12-06 08.49.15.png屏幕快照 2017-12-06 08.49.15.png

    Source Download

    Please click the address->My Calculator

    Summarize

    1. 运用两个面板的叠加做出界面。
    2. 通过在按钮的单击事件处理方法中调用类的成员方法calculate()来进行简易计算器的各种运算,并正确实现运算功能。
    3. 调用Math包中的方法实现各函数功能。
    4. 添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制、十六进制的转换,‘帮助’菜单栏中‘用法’的提示对话框。
    5. 整个程序对话框可实现最小化、最大化、关闭。

    #个人主页:www.iooy.com

    相关文章

      网友评论

        本文标题:java实现多功能科学计算器(包括进制转换,三角函数,四则运算等

        本文链接:https://www.haomeiwen.com/subject/vvgrixtx.html