基于HTML,CSS,JS实现基本计算器

目录

解题思路

PSP表格

设计实现过程

程序性能改进

单元测试展示

结论与收获


画面展示

作业链接

解题思路

1.本想着使用java实现,但认为java实现不如html,css,js来的方便,而且界面也更好看

2.将网页打包成exe可执行文件上传(作业要求)

在开始编写代码之前,让我们首先梳理一下解题思路:

  1. 创建一个HTML页面,包括显示屏和按钮。
  2. 使用CSS样式来设计页面,使其外观漂亮。
  3. 使用JavaScript编写逻辑,实现计算器的基本功能。
  4. 添加按钮点击事件处理程序,以便用户可以与计算器进行交互。
  5. 测试计算器的各种功能,确保它可以正确执行各种计算。

PSP表格

在项目的不同阶段,我使用了PSP(Personal Software Process)表格来跟踪工作量和时间分配。以下是一个简化的PSP表格示例:

PSP 阶段描述预估耗时(分钟)实际耗时(分钟)
Planning计划2015
• Estimate估计这个任务需要多少时间2020
Development开发600650
65• Analysis需求分析 (包括学习新技术)110120
• Design Spec生成设计文档3050
• Design Review设计复审3040
• Coding Standard代码规范 (为目前的开发制定合适的规范)2020
• Design具体设计4055
• Coding具体编码300325
• Code Review代码复审3045
• Test测试(自我测试,修改代码,提交修改)6060
Reporting报告10075
• Test Report测试报告3030
• Size Measurement计算工作量2015
• Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划5030

设计实现过程

       HTML结构

我们首先创建了一个基本的HTML页面结构,其中包括显示屏和各种按钮,每个按钮都有一个点击事件处理程序。这是页面的基本布局。

<!-- HTML结构 -->
<div id="calculator">
    <!-- 输入框 -->
    <input type="text" id="display" disabled>
    <!-- 按钮部分 -->
</div>

        CSS样式

       这里对按钮的css样式做了特殊处理,当鼠标悬停时和非悬停时做了处理,当用户将鼠标悬停在按钮元素上时,样式规则将会应用。这允许你在用户与按钮交互时应用特定的样式,此时按钮会变成深蓝色,交互式体验更好!。

        /* 非鼠标悬停时 */
        input[type="button"] {
            width: 50px;
            height: 50px;
            font-size: 20px;
            margin: 5px;
            cursor: pointer;
            background-color: #007BFF;
            color: #fff;
            border: none;
            border-radius: 5px;
        }
        /* 鼠标悬停时 */
        input[type="button"]:hover {
            background-color: #0056b3;
        }

        JavaScript逻辑

编写JavaScript代码来实现计算器的各种功能。我们定义了一些关键的函数,例如 appendToDisplay 用于向显示屏添加内容,calculate 用于执行计算,calculatePower 用于幂运算,以及三角函数的计算函数。

<script>
        // 将点击的字符拼接到display的后面
        function appendToDisplay(value) {
            document.getElementById('display').value += value;
        }
        // 清除display中的内容,即清空
        function clearDisplay() {
            document.getElementById('display').value = '';
        }

        function calculate() {
            try {
                // 获取显示框中的表达式
                const expression = document.getElementById('display').value;
                //eval 函数用于执行用户在计算器中输入的数学表达式,将其解释为JavaScript代码并计算结果
                const result = eval(expression);
                document.getElementById('display').value = result;
            } catch (error) {
                // 计算出现的错误直接catch并在显示框中显示错误,提示用户
                document.getElementById('display').value = '错误';
            }
        }
        // 次幂的计算
        function calculatePower(power) {
            const value = document.getElementById('display').value;
            // 利用Math.pow()
            document.getElementById('display').value = Math.pow(parseFloat(value), power);
        }
        // 三角函数的计算
        function calculateTrigFunction(func) {
            // 简单使用系统自带的sin,cos,tan来进行计算
            const value = document.getElementById('display').value;
            if (func === 'sin') {
                document.getElementById('display').value = Math.sin(parseFloat(value));
            } else if (func === 'cos') {
                document.getElementById('display').value = Math.cos(parseFloat(value));
            } else if (func === 'tan') {
                document.getElementById('display').value = Math.tan(parseFloat(value));
            }
        }
    </script>

利用eval函数来对字符串表达式进行数学运算

// 获取显示框中的表达式
                const expression = document.getElementById('display').value;
                //eval 函数用于执行用户在计算器中输入的数学表达式,将其解释为JavaScript代码并计算结果
                const result = eval(expression);
                document.getElementById('display').value = result;

 利用js自带函数计算幂次和三角函数

// 次幂的计算
        function calculatePower(power) {
            const value = document.getElementById('display').value;
            // 利用Math.pow()
            document.getElementById('display').value = Math.pow(parseFloat(value), power);
        }
        // 三角函数的计算
        function calculateTrigFunction(func) {
            // 简单使用系统自带的sin,cos,tan来进行计算
            const value = document.getElementById('display').value;
            if (func === 'sin') {
                document.getElementById('display').value = Math.sin(parseFloat(value));
            } else if (func === 'cos') {
                document.getElementById('display').value = Math.cos(parseFloat(value));
            } else if (func === 'tan') {
                document.getElementById('display').value = Math.tan(parseFloat(value));
            }
        }

程序性能改进

1.避免全局变量

        尽量减少全局变量的使用,因为它们可以导致命名冲突和不必要的内存占用。

2.CSS和JavaScript的内联

        CSS和JavaScript代码内联到HTML文件中,而不是将它们作为外部文件加载。这可以减少HTTP请求次数,从而加快页面加载速度。

单元测试展示

在编写代码时,我使用了单元测试来验证每个函数的正确性

测试

<script>
        function runSimpleTests() {
            testClearDisplay();
            testCalculate();
            testCalculatePower();
            testCalculateTrigFunction();
        }

        // 测试清空是否成功
        function testClearDisplay() {
            document.getElementById('display').value = '123';
            clearDisplay();
            if (document.getElementById('display').value === '') {
                console.log('clearDisplay test passed');
            } else {
                console.error('clearDisplay test failed');
            }
        }
        // 测试简单加法计算
        function testCalculate() {
            document.getElementById('display').value = '2+3';
            calculate();
            if (document.getElementById('display').value === '5') {
                console.log('calculate test passed');
            } else {
                console.error('calculate test failed');
            }
        }
        
        // 测试次方的结果
        function testCalculatePower() {
            document.getElementById('display').value = '4';
            calculatePower(2);
            if (document.getElementById('display').value === '16') {
                console.log('calculatePower test passed');
            } else {
                console.error('calculatePower test failed');
            }
        }
    
        // 测试计算三角函数是否正确
        function testCalculateTrigFunction() {
            document.getElementById('display').value = '0';
            calculateTrigFunction('sin');
            if (document.getElementById('display').value === '0') {
                console.log('calculateTrigFunction (sin) test passed');
            } else {
                console.error('calculateTrigFunction (sin) test failed');
            }

            document.getElementById('display').value = '45';
            calculateTrigFunction('cos');
            if (document.getElementById('display').value === '0.5253219888177297') {
                console.log('calculateTrigFunction (cos) test passed');
            } else {
                console.error('calculateTrigFunction (cos) test failed');
            }

            document.getElementById('display').value = '45';
            calculateTrigFunction('tan');
            if (document.getElementById('display').value === '1.6197751905438615') {
                console.log('calculateTrigFunction (tan) test passed');
            } else {
                console.error('calculateTrigFunction (tan) test failed');
            }
        }
        // 当页面加载时执行这些函数,通过控制台输出判断结果
        window.onload = runSimpleTests;
</script>

结论与收获

在这个项目中,我学到了如何使用HTML、CSS和JavaScript构建一个简单的科学计算器。通过实际的项目实践,我加深了对前端开发的理解,学到了如何设计页面、处理用户交互以及进行单元测试。

同时我也学会了如何将web页面打包成exe可执行文件,可谓是收获颇多!

使用HTML2EXE

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值