软件工程第二次作业

代码运行如下:

mport javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
 
public class heya1 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 heya1() 
    { 
        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) 
    { 
        heya1 calc = new heya1(); 
        calc.setSize(290, 400); 
        calc.setVisible(true); 
    } 
}

加法运行如下:

1:4+5的代码如下

减法运行如下

2:5-4的运行结果

:

3:乘法运行

4*5的运行结果

4:除法的运行

5/4的结果

 

posted @ 2015-04-12 21:48  何亚  阅读(148)  评论(1编辑  收藏  举报