第三次作业

                 组员:杨家堂,吴金

  • 题目

          请编写一个能自动生成小学四则运算题目的 “软件”。

          让程序能接受用户输入答案,并进行计算。 

          最后给出正确的答案。

  • 需求分析

        - 基本功能

           - 显示每次测试题目数量

           - 用户可以逐个题目解答

 

        - 扩展功能

           -用户答题结束以后,程序可以显示用户答题所用的时间

  • 代码实现
     
    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; 
    
    public class Calculator extends JFrame implements ActionListener 
    { 
        private boolean dotExist, operated, equaled; // 帮助运算的布尔变量 
        private double storedNumber; // 目前的结果 
        private char lastOperator; // 表示上一运算符 
        private JTextField operation; // 结果栏 
        private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符 
        private JButton[] numbers; // 数字 
        
        // 构造者 
        public Calculator() 
        { 
            setTitle("Calculator"); 
            // 初始化变量 
            dotExist = false; // 表示当前的数是否有小数点 
            operated = false; // 表示任意运算符是否被按下 
            equaled = false; // 表示等号是否被按下 
            storedNumber = 0; 
            lastOperator = '?'; 
            // 初始化窗口变量 
            operation = new JTextField("0"); 
            operation.setEditable(false); 
            numbers = new JButton[10]; 
            for (int i = 0; i < 10; i++) 
            numbers[i] = new JButton("" + i); 
            dot = new JButton("."); 
            plus = new JButton("+"); 
            minus = new JButton("-"); 
            multi = new JButton("*"); 
            div = new JButton("/"); 
            sqrt = new JButton("√"); 
            equal = new JButton("="); 
            changePN = new JButton("±"); 
            clear = new JButton("AC"); 
            // 将窗口物体放入窗口 
            GridBagLayout layout = new GridBagLayout(); 
            getContentPane().setLayout(layout); 
            addComponent(layout, operation, 0, 0, 4, 1); 
            addComponent(layout, numbers[1], 1, 0, 1, 1); 
            addComponent(layout, numbers[2], 1, 1, 1, 1); 
            addComponent(layout, numbers[3], 1, 2, 1, 1); 
            addComponent(layout, numbers[4], 2, 0, 1, 1); 
            addComponent(layout, numbers[5], 2, 1, 1, 1); 
            addComponent(layout, numbers[6], 2, 2, 1, 1); 
            addComponent(layout, numbers[7], 3, 0, 1, 1); 
            addComponent(layout, numbers[8], 3, 1, 1, 1); 
            addComponent(layout, numbers[9], 3, 2, 1, 1); 
            addComponent(layout, dot, 4, 0, 1, 1); 
            addComponent(layout, numbers[0], 4, 1, 1, 1); 
            addComponent(layout, sqrt, 4, 2, 1, 1); 
            addComponent(layout, plus, 1, 3, 1, 1); 
            addComponent(layout, minus, 2, 3, 1, 1); 
            addComponent(layout, multi, 3, 3, 1, 1); 
            addComponent(layout, div, 4, 3, 1, 1); 
            addComponent(layout, equal, 5, 0, 2, 1); 
            addComponent(layout, changePN, 5, 2, 1, 1); 
            addComponent(layout, clear, 5, 3, 1, 1); 
        } 
     // 对按钮进行反应的方法 
        public void actionPerformed(ActionEvent e) 
        { 
            JButton btn = (JButton)e.getSource(); 
            if (btn == clear) 
            { 
                operation.setText("0"); 
                dotExist = false; 
                storedNumber = 0; 
                lastOperator = '?'; 
            } 
            else if (btn == equal) 
            { 
                operate('='); 
                equaled = true; 
            } 
            else if (btn == plus) 
            { 
                operate('+'); 
                equaled = false; 
            } 
            else if (btn == minus) 
            { 
                operate('-'); 
                equaled = false; 
            } 
            else if (btn == multi) 
            { 
                operate('*'); 
                equaled = false; 
            } 
            else if (btn == div) 
            { 
                operate('/'); 
                equaled = false; 
            } 
            else if (btn == changePN) 
            { 
                operate('p'); 
                operate('='); 
                equaled = true; 
            } 
            else if (btn == sqrt) 
            { 
                operate('s'); 
                operate('='); 
                equaled = true; 
            } 
            else 
            { 
                if (equaled) 
                storedNumber = 0; 
                for (int i = 0; i < 10; i++) 
                if (btn == numbers[i]) 
                { 
                    if (operation.getText().equals("0")) 
                        operation.setText("" + i); 
                    else if(! operated) 
                        operation.setText(operation.getText() + i); 
                    else 
                    { 
                        operation.setText("" + i); 
                        operated = false; 
                    } 
                } 
                if (btn == dot && ! dotExist) 
                { 
                    operation.setText(operation.getText() + "."); 
                    dotExist = true; 
                } 
            } 
        } 
        // 进行运算的方法 
        private void operate(char operator) 
        { 
            double currentNumber = Double.valueOf(operation.getText()).doubleValue(); 
            if (lastOperator == '?') 
            storedNumber = currentNumber; 
            else if (lastOperator == '+') 
            storedNumber += currentNumber; 
            else if (lastOperator == '-') 
            storedNumber -= currentNumber; 
            else if (lastOperator == '*') 
            storedNumber *= currentNumber; 
            else if (lastOperator == '/') 
            storedNumber /= currentNumber; 
            else if (lastOperator == 'p') 
            storedNumber *= -1; 
            else if (lastOperator == 's') 
            storedNumber = Math.sqrt(currentNumber); 
            else if (lastOperator == '=' && equaled) 
            storedNumber = currentNumber; 
            operation.setText("" + storedNumber); 
            operated = true; 
            lastOperator = operator; 
        } 
        
        // 快捷使用GridBagLayout的方法 
        private void addComponent(GridBagLayout layout, Component component, int row, int col, int width, int height) 
        { 
            GridBagConstraints constraints = new GridBagConstraints(); 
            constraints.fill = GridBagConstraints.BOTH; 
            constraints.insets = new Insets(10, 2, 10, 2); 
            constraints.weightx = 100; 
            constraints.weighty = 100; 
            constraints.gridx = col; 
            constraints.gridy = row; 
            constraints.gridwidth = width; 
            constraints.gridheight = height; 
            layout.setConstraints(component, constraints); 
            if (component instanceof JButton) 
            ((JButton)component).addActionListener(this); 
            getContentPane().add(component); 
        } 
        
        // 主方法初始化并显示窗口 
        public static void main(String[] args) 
        { 
            Calculator calc = new Calculator(); 
            calc.setSize(290, 400); 
            calc.setVisible(true); 
        } 
    }
    
     

     



posted @ 2015-04-23 15:40  杨家堂  阅读(143)  评论(1编辑  收藏  举报