前端实现科学计算器

这篇具有很好参考价值的文章主要介绍了前端实现科学计算器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Calculator

这个作业属于哪个课程 https://bbs.csdn.net/forums/ssynkqtd-05
这个作业要求在哪里 https://bbs.csdn.net/topics/617294583
这个作业的目标 完成一个具有可视化界面的计算器
其他参考文献

源代码链接

0. 界面展示

前端实现科学计算器,Front,前端

1. PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 40
• Estimate • 估计这个任务需要多少时间 15 10
Development 开发 700 850
• Analysis • 需求分析 (包括学习新技术) 100 150
• Design Spec • 生成设计文档 60 75
• Design Review • 设计复审 30 45
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 40
• Design • 具体设计 60 90
• Coding • 具体编码 300 350
• Code Review • 代码复审 45 60
• Test • 测试(自我测试,修改代码,提交修改) 60 75
Reporting 报告 90 60
• Test Repor • 测试报告 30 20
• Size Measurement • 计算工作量 15 10
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 45 30
合计 850 950

2. 解题思路描述

要求实现一个具有图形化界面简易计算器

  1. 编程语言选择。原本打算使用 Java,Python 等的 GUI 框架来实现一个简单图形化界面,但是界面要实现的好看比较困难,最后选择 html + css + js 来实现。
  2. 界面设计。一般的计算器都比较简陋,要做一个比较好看的计算器需要花点时间来设计 UI 界面,以前有开发移动端的经验,看过比较多的 UI 设计,这点比较容易。
  3. 核心功能。实现计算功能用 js 其实就是字符串的计算,计算逻辑的实现是比较困难的,特别是加上了科学计算以后。这点可以去 github 和 stackflow 上看看。
  4. exe打包。作业要求要生成 exe 文件,第一次遇到 html 生成 exe 的情况。查找到软件 HTML2EXE 可以实现此需求(超好用)。

3. 设计与实现过程

项目由 html、css、js 完成。

  1. 将所有的按键及属性装在一个数组内,便于后续代码的编写

    let calculator_buttons = [
        {
            name: "square-root", symbol: "√", formula: "Math.sqrt(", type: "math_function"
        }, {
            name: "square", symbol: "x²", formula: POWER, type: "math_function"
        }
        .....
        ];
    
  2. 将输入的字符分为 operation (显示的字符串) 和 formula (计算使用的字符串)

    let data = {
        operation: [], formula: [],
    }
    
  3. 点击等于的时候进行计算

    function calculator(button) {
        if (button.type === 'operator') {
            data.operation.push(button.symbol)
            data.formula.push(button.formula)
        }
        	......
        else if (button.type === 'math_function') {
            let symbol, formula;
            if (button.name === 'factorial') {
                symbol = "!"
                formula = button.formula
                data.operation.push(symbol)
                data.formula.push(formula)
            } 
            ......
        } else if (button.type === 'key') {
            if (button.name === 'clear') {
                data.operation = []
                data.formula = []
                updateOutputResult(0)
            } 
            ......
        } else if (button.type === 'calculate') {
            formula_str = data.formula.join('')
            // 生成计算使用的字符串
            ......
            let result
            try {
                // 计算结果
                ......
            } catch (error) {
                if (error instanceof SyntaxError) {
                    result = "SyntaxError"
                    updateOutputResult(result)
                    return
                }
            }
            ans = result  // 保存上一次计算结果
            data.operation = [result]
            data.formula = [result]
            updateOutputResult(result)
            return
        }
        updateOutputOperation(data.operation.join(''))
    }
    
  4. 将 formula 生成计算使用的字符串

    let POWER_SEARCH_RESULT = search(data.formula, POWER)
            let FACTORIAL_SEARCH_RESULT = search(data.formula, FACTORIAL)
            const BASES = powerBaseGetter(data.formula, POWER_SEARCH_RESULT)
            BASES.forEach(base => {
                let toreplace = base + POWER
                let replacement = "Math.pow(" + base + ",";
                formula_str = formula_str.replace(toreplace, replacement)
            })
            const NUMBERS = factorialNumGetter(data.formula, FACTORIAL_SEARCH_RESULT)
            NUMBERS.forEach(number => {
                formula_str = formula_str.replace(number.toReplace, number.replacement)
            })
    

    前端实现科学计算器,Front,前端

  5. 由于 js 的 eval 产生的结果会有多数的小数,这里进行优化,对小数取两位小数,对整数则正常输入

    const r = /^\+?[1-9][0-9]*$/;
                result = eval(formula_str);
                if (!r.test(result)) {
                    result = parseFloat(result.toFixed(2));
                }
    

    前端实现科学计算器,Front,前端
    前端实现科学计算器,Front,前端

    1. html 生成 exe

    前端实现科学计算器,Front,前端

4. 程序性能改进

  1. 字符串处理改进

    在刚开始,对输入的数字或者运算符进行简单的拼接字符串仅仅可以实现简单的加减乘除,难以实现三角函数等科学运算。改进之后,将显示和计算的字符串分开存储,这样便于计算操作。

  2. 减少DOM操作

    尽量减少对DOM的频繁操作,将多个DOM操作合并成一个,使用DocumentFragment来减少DOM重绘。

5. 单元测试展示

  1. 本项目采用 jest 进行单元测试,这个测试框架用起来十分便利

    {
      "devDependencies": {
        "jest": "^29.7.0",
        "jsdom": "^22.1.0"
      },
      "scripts": {
        "test": "jest",
        "coverage": "jest --coverage"
      }
    }
    
    
  2. 测试代码

    test("7 + 8 = 15", () => {
        calculator(calculator_buttons[4]) // clear
        calculator(calculator_buttons[10])  // 7
        calculator(calculator_buttons[36]) // +
        calculator(calculator_buttons[11])  // 8
        expect(document.querySelector('.operation .value').innerHTML).toBe("7+8")
        calculator(calculator_buttons[35]) // equal
        expect(document.querySelector('.result .value').innerHTML).toBe("15")
    })
    test("√(16) = 4", () => { ...... }
    test("(2 + 2)^(3) = 64", () => { ...... }
    test("exp(2) ≈ 7.39", () => { ...... }
    test("+2^(3) = 8", () => { ...... }
    
  3. 构造数据及优化覆盖率

    构造测试数据主要是计算器的运算符都要用上,另外要注意一下比较少见的数据,比如 “+2^(3) = 8”。比较偏的地方注意到了,覆盖率就上去了

  4. 覆盖率结果

前端实现科学计算器,Front,前端

6. 心路历程与收获

​ 项目的初衷是创建一个科学计算器的Web应用,使用户能够执行基本的数学运算,如加减乘除,以及更高级的科学计算。在实现过程中我意识到用户界面对于计算器的吸引力和可用性至关重要,因此,我花了一些时间完成了一个直观且美观的UI。

​ 通过这个项目,我学到了很多关于前端开发的知识和技巧,提高了HTML、CSS和JavaScript编程的能力,学会了如何创建具有可视化界面的Web应用。此外,我还学会了如何设计用户友好的界面,并如何进行测试和调试以确保应用的质量。文章来源地址https://www.toymoban.com/news/detail-722229.html

到了这里,关于前端实现科学计算器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 前端——编写一个简易网页计算器

    如下图效果所示,输入两个运算数,点击不同的运算符,会在下方得到不同的运算结果 分析与代码实现 在HTML部分,定义了一个标题为\\\"网页计算器\\\"的网页,并创建了两个输入框和四个按钮。最后,创建了一个只读的结果显示框,便于计算结果的输出 在JavaScript部分,定义了一

    2024年01月24日
    浏览(53)
  • Web前端开发 小实训(二) 简易计算器

    学生能够使用函数完成简易计算器编写 中文 英语 加法 add 减法 subtract 乘法 multi 除法 division 次幂 pow() 平方根 sqrt() 提示: 除法中的除数不能为0! 参考代码: 参考代码 步骤3-4参考代码 申明方法后,在每个分支后调用 最后直接调用运行页面 因面向的是初学Web前端课程的学生

    2024年04月28日
    浏览(48)
  • pyqt 实现计算器

    文件名为:untitled.py QApplication: QApplication 类管理图形用户界面应用程序的控制流和主要设置。 可以说 QApplication是Qt的整个后台管理的命脉 app = QApplication(sys.argv)这句作用用来初始化窗口系统  app.exec(): app.exec_()的作用是运行主循环,必须调用此函数才能开始事件处理,调用该

    2024年02月16日
    浏览(42)
  • Java 实现计算器

    *使用Java语言编写一个能实现“加、减、乘、除”四则运算的计算器程序。* 要求: (1)在程序中要体现面向对象编程语言的三大特征:封装、继承和多态。 (2)该程序要易于扩展和复用。以后可以方便地增加新的运算;程序的业务逻辑与界面部分要实现分离,便于业务逻

    2024年02月12日
    浏览(39)
  • 实现复数计算器

            本论文描述了一个复数计算器的设计和实现,旨在扩展传统计算器的功能,以支持复数的加法、减法、乘法和除法。通过使用Java编程语言和Swing图形用户界面库,我们创建了一个直观、易于使用的界面,允许用户输入复数,并执行基本的算术运算。         计

    2024年02月02日
    浏览(67)
  • Android计算器实现

    这个项目是一个简单的计算器应用,它可以执行加、减、乘、除四种基本运算等计算器的基本功能。我们将使用Android Studio作为开发工具。 1. 在Android Studio中创建新的Android项目。 2. 在布局文件(`activity_main.xml`)中,我们将添加一个按钮和一个用于显示结果的文本视图。 3. 在

    2024年02月07日
    浏览(38)
  • Qt实现简单计算器

    三级项目想用Qt做界面。 为了熟悉一下Qt操作,历时8h做了个计算器。 没用到数据库,布的控件也比较简单。 所以calculator.pro和widget.ui就不放了(太长了占地方) 文件压缩包放在下一篇了,需要自取。 自学时间较短,有很多不足欢迎指正。 ⭐:del按键上的图片用的是绝对路

    2024年02月11日
    浏览(48)
  • verilog实现计算器设计

    该实验为用verilog编写的一个运算系统,其功能是实现4位整数的加、减、乘、除运算。运算时通过矩阵键盘输入运算类型和运算所需要的数据,然后通过内部电路处理,将计算的结果送于数码管或LCD1602显示。 工程截图如下: 本设计分为两个子模块,按键输入和数码管输出。

    2024年01月16日
    浏览(43)
  • 【Python】简单计算器实现(四)

    解决思路: 最后,我们来看看最简单的运算函数和判断运算符函数。 定义函数: def calculate(n1, n2, operator) param n1: float param n2: float param operator: + - * / return: float 定义函数: def is_operator(e) param e: str return: bool 最后的调用 这里定义了两个变量 result 和 _ 来接收 final_calc 返回的两个

    2024年02月16日
    浏览(41)
  • C语言实现贷款计算器

    等额本金,等额本息数学推导:贷款 买房,利息怎么算?不要被忽悠了!李永乐老师讲等额本金和等额本息 一个心血来潮的研究,避免以后买房被坑。 捣鼓了半天才发现原来支付宝的那个利率是年利率不是月利率,坑了我半天。。。 程序输出: 等额本金: 等额本息:

    2024年02月12日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包