计算数学表达式的程序(Java课程设计)

这篇具有很好参考价值的文章主要介绍了计算数学表达式的程序(Java课程设计)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 课设团队介绍

团队名称

团队成

员介绍

任务分配

团队成员博客

XQ Warriors

徐维辉

负责计算器数据的算法操作,如平方数、加减乘除,显示历史计算记录

邱良厦(组长)

负责计算器的图形设计,把输入和结果显示在最上面的文本框

2. 参考代码及博客链接与工具

1)图形界面设计参考:Java Swing界面设计UI(全)_swing ui-CSDN博客

Java Swing界面设计UI(全)_swing ui-CSDN博客

2)使用的查询工具:Chatgpt和文心一言,询问相关操作的实现,查询方法具体使用等

3)文心一言链接:文心一言 (baidu.com) 

Chatgpt镜像:AIchatOS

3. 本项目的git地址

Issues · 则戈/Simple-Calculator - Gitee.com

4. 项目的git提交记录截图

1)邱良厦:

1.图片资源和代码资源分成两个部分

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

2.添加UI界面设计文件,完善图形界面设计,查看图形界面操作是否有误

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

3.添加UI程序的图片

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

2)徐维辉:

1.完成Calculator类,实现了常见的数学算法,完成了一元操作符和二元操作符的相关操作

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

2.完成历史计算记录记录算法

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

5. 前期调查相关

想看看是否能通过按钮实现数学表达式的运算,实现图形化界面,制作一个简单计算器。

看bilibili视频:java计算器程序_哔哩哔哩_bilibili

6.项目功能架构图、主要功能流程图

项目功能架构图

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

主要功能流程图

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

7. 面向对象设计包图、类图

1.包图:UI包、sumpleculator包、

2.类图:Calulator类、Main类、UI类、HistoryDialog类

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

8.项目运行截图或屏幕录制

1)运行程序,打开简单计算器的界面

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

2)操作视频

简单计算机的运算操作

9.项目关键代码分模块描述

1. class UI:创建了窗口、各个面板、文本框,字体对象,添加了各个按钮。

public class UI implements ActionListener {

   
   private  JFrame frame;

   private  JPanel panel;
   private  JPanel panelSub1;//子面板
   private  JPanel panelSub2;
   ...
   private  JTextArea text;//文本框
   // JButton 数组,存储数字按钮
   private  JButton button[], butAdd, butMinus, butMultiply, butDivide,
           butEqual, butCancel, butSquareRoot, butSquare, butOneDividedBy,
           butCos, butSin, butTan, butXPowerOfY, butLog, butRate, butabs, butBinary, butln;
    private  Font font;
    private  Font textFont;
   ...
}

2. init():设计窗口的的布局,为各个按钮添加字体,给各个子面板流水体布局,把按钮添加到各个子面板,最后把子面板添加到面板,窗口最后在采用面板来实现界面

public void init() {
      frame.setSize(450, 450);
      frame.setLocationRelativeTo(null);
      frame.setResizable(false);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      for (int i = 0; i < 10; i++) {
         button[i].setFont(font);
      }
      butAdd.setFont(font);
      butMinus.setFont(font);
      butMultiply.setFont(font);
     ...
      panelSub2.add(button[1]);
      panelSub2.add(button[2]);
      panelSub2.add(button[3]);
      //在数字和运算符之间空出一点距离
      panelSub2.add(Box.createHorizontalStrut(15));
      panelSub2.add(butAdd);
      panelSub2.add(butMinus);
      ...
      for (int i = 0; i < 10; i++) {//添加监听器
         button[i].addActionListener(this);
      }
      butAdd.addActionListener(this);
      butMinus.addActionListener(this);
      butMultiply.addActionListener(this);
      butDivide.addActionListener(this);
     ...
      panel.add(panelSub2);
      frame.add(panel);//添加面板
      frame.setVisible(true);
}

3.  actionPerformed():点击按钮进行操作时,根据不同的事件源(e.getSource())执行不同的功能,如果是数字按钮,将对应的值添加到文本框中,并返回,如果是符合按钮,就会进行对应符号的运算

public void actionPerformed(ActionEvent e) {
      Object source = e.getSource();
      Double checkNum = null;

      for (int i = 0; i < 10; i++) {//数字按钮
         if (source == button[i]) {
            text.replaceSelection(buttonValue[i]);
            return;
         }
      }
      if (source == butAdd) {
            //把数字读出来进行相加
            write(calc.binCalculate(Calculator.binaryOperatorModes.add, reader()));
            text.replaceSelection(butAdd.getText());
         }

         // 处理减法操作
         if (source == butMinus) {
            write(calc.binCalculate(Calculator.binaryOperatorModes.minus, reader()));
            text.replaceSelection(butMinus.getText());
         }
        ...
}

4.Calculator类的基本属性和构造函数:主要包含Calculator类的基本属性和构造函数,包括操作数num1、num2,记录运算结果的result,记录当前运算符号的mode,以及记录一元运算和二元运算会用到的list

public enum binaryOperatorModes {
        normal, add, minus, multiply, divide , xPowerOfY
    }

    //一元运算
    public enum unaryOperatorModes {
        square, squareRoot, oneDivided, cos, sin, tan, log, rate, abs, ln,
    }


    private Double num1, num2;
    private Double result;
    //默认状态normal
    private binaryOperatorModes mode = binaryOperatorModes.normal;
    private List<String> unaryHistory = new ArrayList<>();
    private List<String> binaryHistory = new ArrayList<>();

5 二元运算模块:包含了二元运算相关的方法。binCalculateImpl方法用于执行实际的二元运算,binCalculate方法是对外的接口,处理用户输入的二元运算。calculateEqual方法用于处理等号操作。将运算结果返回到num1,用于下次运算。保存到result,用于记录的显示

//二元运算的具体实现
    private Double binCalculateImpl() {
        if (mode == binaryOperatorModes.normal) {
            return num2;
        }
        if (mode == binaryOperatorModes.add) {
            if (num2 != 0) {
                result = num1 + num2;
                return num1 + num2;
            }
            return num1;
        }
        if (mode == binaryOperatorModes.minus) {
            result = num1 - num2;
            return num1 - num2;
        }
        if (mode == binaryOperatorModes.multiply) {
            result = num1 * num2;
            return num1 * num2;
        }
        if (mode == binaryOperatorModes.divide) {
            result = num1 / num2;
            return num1 / num2;
        }
        if (mode == binaryOperatorModes.xPowerOfY) {
            result = Math.pow(num1, num2);
            return Math.pow(num1, num2);
        }
        throw new Error("没有该运算");
    }

    // 二元运算的对外接口
    public Double binCalculate(binaryOperatorModes newMode, Double num) {
        if (mode == binaryOperatorModes.normal) {
            num2 = 0.0;
            num1 = num;
            mode = newMode;
            return NaN;
        } else {
            Double temp = num1;
            num2 = num;
            num1 = binCalculateImpl();
            mode = newMode;
            String opr = null;

            binaryHistory.add("操作数: " + temp + " " + getOperatorSymbol(mode) + " " + num2 + " 结果 " + result);
            return num1;
        }

    }

6.一元运算模块、重置运算器模块:重置计算器,将num1、num2置零,状态mode置为normal
实现简单的一元运算,并且将运算记录保存

 // 重置计算器状态的方法
    public Double reset() {
        num2 = 0.0;
        num1 = 0.0;
        mode = binaryOperatorModes.normal;
        //无效字符
        return NaN;
    }


    // 执行单元操作的方法
    public Double unaryCalculate(unaryOperatorModes newMode, Double num) {
        if (newMode == unaryOperatorModes.square) {
            result = num * num;
        }
        if (newMode == unaryOperatorModes.squareRoot) {
            result = Math.sqrt(num);
        }
        if (newMode == unaryOperatorModes.oneDivided) {
            result =  1 / num;
        }
        if (newMode == unaryOperatorModes.cos) {
            result = Math.cos(Math.toRadians(num));
        }
        if (newMode == unaryOperatorModes.sin) {
            result = Math.sin(Math.toRadians(num));
        }
        if (newMode == unaryOperatorModes.tan) {
            if (num == 0 || num % 180 == 0) {
                result =  0.0;
            }
            if (num % 90 == 0 && num % 180 != 0) {
                result = NaN;
            }
            result = Math.tan(Math.toRadians(num));
        }
        if (newMode == unaryOperatorModes.log) {
            result = Math.log10(num);
        }
        if (newMode == unaryOperatorModes.ln) {
            result = Math.log(num);
        }
        if (newMode == unaryOperatorModes.rate) {
            result = num / 100;
        }
        if (newMode == unaryOperatorModes.abs){
            result = Math.abs(num);
        }
        unaryHistory.add("表达式: " + getOperatorSymbol(newMode) + "(" + num + ") = " + result);
        return result;
    }

7.获取操作符符号模块:将当前的mode转化为其对应的符号字符串,用于写入计算的历史记录中

  public static String getOperatorSymbol(binaryOperatorModes mode) {
        return switch (mode) {
            case add -> "+";
            case minus -> "-";
            case multiply -> "*";
            case divide -> "/";
            case xPowerOfY -> "^";
            default -> "";
        };
    }

    public static String getOperatorSymbol(unaryOperatorModes mode) {
        return switch (mode) {
            case square -> "^";
            case squareRoot -> "sqrt()";
            case oneDivided -> "1/x";
            case cos -> "cos";
            case sin -> "sin";
            case tan -> "tan";
            case log -> "log()";
            case rate -> "rate()";
            case abs -> "abs()";
            case ln -> "ln()";
            default -> "";
        };
    }

10.项目代码扫描结果及改正。

结果:计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

1.变量命名错误:

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

将butXPowerOfY改为butXpowerOfY

2.包名命名错误

计算数学表达式的程序(Java课程设计),java,课程设计,简单计算器,图形界面,ui

改为Ui

11. 项目总结(包括不足与展望、想要进一步完成的任务)

1. 不足:

界面布局使用了多个 JPanel 进行组合,没有使用更灵活的布局管理器,如BorderLayout或 GridBagLayout,部分代码重复,没有优化界面布局和颜色。计算器中没有实现小数点功能,不能直接添加小数,操作历史记录没有完全实现,有时候不能记录符号。

2. 展望:

增加支持复数计算、矩阵计算和小数点运算等,可以继续优化界面,使用更灵活的布局管理器,如BorderLayout,优化颜色布局等文章来源地址https://www.toymoban.com/news/detail-810530.html

到了这里,关于计算数学表达式的程序(Java课程设计)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java算法题 给一个字符串表达式,实现一个基本计算器,返回计算结果

    题目: 考点:栈 解题思路: 使用 2 个栈,一个 stack_nums 用来保存计算过程的操作数,一个 stack_symbol 用来保存运算符。 在HashMap中,指定加减优先级为1,乘除优先级为2 循环遍历字符串s, 操作符入栈: 若当前字符为\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 时,压入运算符栈 stack_symbol, 操作数入

    2024年02月07日
    浏览(36)
  • Mathcad使用数学表达式

    1.1:可以在 Mathcad 工作表中任意位置放置数学表达式。 1.2:键入数字、 字母和数学运算符, 或通过单击 Mathcad 数学工具栏上的按钮来插入它们, 从而创建数学区域。在默认设置下, Mathcad 将在十字光标处所键入的任何内容当作数学表达式。 1.3:该计算示范了 Mathcad 的工作

    2023年04月24日
    浏览(22)
  • 《数据结构》:中缀表达式转后缀表达式 + 后缀表达式的计算

    补充了一个判断输入中缀表达式 合法性 的代码: 《数据结构》:中缀表达式合法性判断_Amentos的博客-CSDN博客   目录 一、基本概念 二、中缀表达式转后缀表达式    例       中缀表达式  2*(3+5)+7/1-4  转换为后缀表达式 三、后缀表达式的计算    例       后缀表达式

    2024年02月03日
    浏览(49)
  • 中缀表达式转后缀表达式,使用逆波兰计算。可以计算小数

    传递一个分开保存符号与数字的List即可:List SumNumber; 获取参数的构造方法如下: 要求的List保存数据的方式如下: 例如:1+2+3 然后使用 EvaluatePostfixExpressions 方法传递出一个保存好结果的String。

    2024年02月15日
    浏览(43)
  • 用Python优雅地写出数学表达式的LaTeX代码

    目录 Latexify LaTeX 安装方法 版本要求 使用方法 实例一 实例二 实例三 实例四 实例五 Latexify是一个Python库,它可以将数学表达式转换为 LaTeX 代码。通过使用latexify-py,可以将数学表达式、函数、方程和公式等等,都优雅地转换为LaTeX代码,方便人们在文档或幻灯片中以纯正的格

    2024年01月23日
    浏览(33)
  • 【算法】远方来信,从数学表达式算法到汇编语法解释器

    在繁华的都市中,小悦作为一名软件工程师,每天都在这座钢筋水泥的森林里忙碌。她的生活似乎被工作和各种琐碎的事情填满了,但在这个繁忙的生活中,她总能在工作之余找到一些小小的乐趣。 这天下班后,小悦收到了一封来自国外同学苏菲的email。邮件的内容让她的思

    2024年02月05日
    浏览(31)
  • 【LeetCode专题#基本计算器】基本计算器I,图解中序表达式转逆波兰表达式,太难了

    https://leetcode.cn/problems/basic-calculator/?envType=listenvId=cKNEfNsF 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 示例 1: 输入:s = \\\"1 + 1\\\" 输出:2 示例 2: 输入:s = \\\" 2-1 + 2 \\\" 输出

    2024年02月08日
    浏览(34)
  • jexl3动态计算表达式

    Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。JEXL 受Velocity 和 JSP 标签库 1.1 (JSTL) 的影响而产生的。需要注意的是, JEXL 并不是 JSTL 中的表达式语言的实现。 实时引擎里 动态逻辑计算分离 计算逻辑经常变化或者可视化逻辑配置 引入JAR包

    2024年02月11日
    浏览(33)
  • Java 之正则表达式语法及常用正则表达式汇总

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称

    2024年02月09日
    浏览(57)
  • 【JAVA】包装类、正则表达式、Arrays类、Lambda表达式

    包装类是8种基本数据类型对应的引用类型 作用:后期的集合和泛型不支持基本类型,只能使用包装类 基本数据类型和其对应的引用数据类型的变量可以互相赋值 基本数据类型 引用数据类型 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 包装类

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包