实验项目一:支持算数表达式求解的计算器

该实验项目旨在设计一个支持算术表达式求解的计算器,使用Java Swing/Awt进行图形界面设计。计算器需能接收加、减、乘、除及括号等运算符,检查表达式合法性,显示运算结果,并保存历史记录。此外,选做部分还包括扩展三角函数、对数、指数运算及进制转换等功能。
摘要由CSDN通过智能技术生成

一、实验要求
1)能通过设计的按钮控件输入并实现算术表达式,表达式在文本框中显示,运算结果输出显示;保存和浏览历史运算记录;
2)能够检验算术表达式的合法性;
3)能够实现混合运算的求解,算术表达式中包括加、减、乘、除、括号等运算符;
4) 要求交互界面友好,程序健壮。
二、实验内容
1)学习GUI图形界面的设计,Python Tinker或 Java Swing/Awt 或C++ QT框架,创建交互友好的应用程序;
2)能通过界面按钮控件输入并实现算术表达式,输入的表达式即时在控件中显示,按下“=”按钮能实现运算,并将运算结果输出在控件中显示;要求能保存和浏览历史表达式的运算记录。
3)算术表达式求解,是指算术表达式中包括加、减、乘、除、括号等运算符,能求解包含括号的四则混合运算;并且能够检验表达式的合法性。
4)选做:①实现三角函数的运算、对数运算、指数运算、进制转换等;
②设计函数,分别求两个一元多项式的乘积与和。

二、Java图形界面设计

public class Calculate extends JFrame implements ActionListener {
   
    private String[] KEYS = {
   "c", "(", ")", "->","7", "8", "9","/", "4", "5", "6", "*",  "1", "2", "3","-", ".", "0", "=","+",};
    private JButton keys[] = new JButton[KEYS.length];
    private JTextField resultText = new JTextField("0.0");
    private String b = "";
    /**
     * @point 若正在输入运算数(即非运算符),则point生效,
     * 用于标记当前运算数是否已经输入小数点,以保证
     * 每个运算数只能有一个小数点。
     */
    private boolean point = false;
    private JTextArea History = new JTextArea();// 历史记录文本框初始值设为空
    private JLabel label = new JLabel("历史记录");
    public Calculate() {
   

        super("计算器");
        this.setLayout(null);//设置布局管理器为默认值
        resultText.setBounds(20, 85, 255, 40);
        resultText.setHorizontalAlignment(JTextField.RIGHT);//右对齐
        resultText.setEditable(false);
        this.add(resultText);
        History.setBounds(20, 25, 255, 60);// 设置文本框大小
        History.setAlignmentX(LEFT_ALIGNMENT);// 文本框内容左对齐
        History.setEditable(false);// 文本框不允许修改结果
        label.setBounds(20, 5, 100, 20);//设置标签位置及大小
        History.setLineWrap(true);//自动换行
        History.setWrapStyleWord(true);//换行不断字
        this.add(History);//将面板添加到总窗体中
        this.setLayout(null);
        this.add(label);
        /**设置按钮
         *
         */
        int x = 20, y = 125;//按钮布局
        for (int i = 0; i < KEYS.length; i++) {
   
            keys[i] = new JButton();
            keys[i].setText(KEYS[i]);
            keys[i].setBounds(x, y, 60, 40);
            if (x < 215) {
   
                x += 65;
            } else {
   
                x = 20;
                y += 45;
            }
            this.add(keys[i]);
        }
        for (int i = 0; i < KEYS.length; i++) {
   
            keys[i].addActionListener(this);//设置监听
        }
        this.setResizable(false);
        this.setBounds(500, 200, 300, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }

计算界面:

三、内部类实现按钮响应

//内部类实现按钮响应
    public void actionPerformed(ActionEvent e) {
   
        String label = e.getActionCommand();//命令实现
        if (label == "=") {
   
            resultText.setText(this.b);
            History.setText(History.getText() + resultText.getText());
            String s[] = operation(this.b);
            String result = Result(s);
            this.b = result + "";
            resultText.setText(this.b);
            History.setText(History.getText() + "=" + resultText.getText() + "\n");//同步历史记录
        } else if (label == "c") {
   
            this.b = "";
            resultText.setText("0");
        }
        //删除单个字符
        else if(label.equals("->")) {
   
            b=b.substring(0, b.length()-1);
            resultText.setText(b);
        }
        //"."
        else if (label == ".") {
   
            char a = label.charAt(0);
            if (point) {
   //按钮失效
                return;
            }
            else if (b.isEmpty()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值