简易计算机的做法

今天给大家分享下简易计算机的做法,简易计算机是在JS里面比较综合的一个程序,,在这里逻辑有那么绕,其主要是运算还有就是运算符号的一个问题,话部多说,上代码:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        #content {
            margin: 100px auto auto auto;
            width: 400px;
            height: 500px;
            border: 5px solid black;
        }

#show {
            margin: 10px auto 10px auto;
            width: 380px;
            height: 80px;
            font-size: 40px;
            text-align: right;
            border: 2px solid black;
            line-height: 80px;
            font-weight: bolder;
            overflow: hidden;
        }

* {
            padding: 0px;
            margin: 0px;
        }

ul {
            width: 100%;
        }

li {
            list-style: none;
            width: 85px;
            height: 85px;
            margin-left: 10px;
            margin-bottom: 10px;
            border: 1px solid red;
            float: left;
            text-align: center;
            line-height: 85px;
            font-size: 35px;
            border-radius: 20px;
        }

li:hover {
            background-color: grey;
            cursor: pointer;
        }
    </style>

<script type="text/javascript">
        var flag = false
        var OPERStr = "+-*/=";

window.onload = function () {

document.onkeydown = fun1;

var lis = document.getElementsByTagName("li");
            for (var i = 0; i < lis.length; i++) {

lis[i].onclick = function () {
                    //获得显示框的文档对象
                    var div = document.getElementById("show");
                    //获得显示框的文本
                    var divText = div.textContent;
                    //获得点击按钮的文本
                    var liText = this.textContent;
                    //获得显示框里文本的最后一个字符
                    var lastChar = divText.charAt(divText.length - 1);
                    if (liText == "=") {
                        if (isContent(lastChar, OPERStr)) {
                            div.innerHTML = divText.substring(0, divText.length - 1)
                        } else {
                            var arr = divText.split(/[+-\/*]/);//切出来的数字
                            var operater = divText.match(/[+-\/*]/);//切出来的操作符
                            var re = jisuan(parseInt(arr[0]), operater[0], parseInt(arr[1]));
                            div.innerHTML = re;
                        }
                        flag = true;

} else {
                        //如果显示框里的最后一个字符为(“+-*/=”)其中一个并且当前点击的按钮的文本也为  (“+-*/=”)
                        //其中一个那么将显示框里的最后一个字符替换为当前点击的按钮的文本。
                        if (isContent(lastChar, OPERStr) && isContent(liText, OPERStr) && divText.length > 0) {
                            div.innerHTML = divText.substring(0, divText.length - 1) + liText;

} else {

if (liText == "<-") {
                                div.innerHTML = ""
                            } else if ((divText.length == 0 && isContent(liText, OPERStr))
                                    || (flag && isContent(liText, OPERStr))) {

div.innerHTML = ""
                            }
                            else if (flag) {
                                div.innerHTML = liText;
                            } else {
                                div.innerHTML = divText + liText;
                            }
                        }

flag = false;
                    }

}
            }
        }

function fun1(ee) {
            var div = document.getElementById("show");
            var divText = div.textContent;
            var keyText;
            var oper;

if ((ee.keyCode >= 96 && ee.keyCode <= 105)) {
                keyText = ee.keyCode - 96;
                div.innerHTML = divText + keyText;
            } else if ((ee.keyCode >= 48 && ee.keyCode <= 57)) {
                keyText = ee.keyCode - 48;
                div.innerHTML = divText + keyText;

}

switch (ee.keyCode) {
                case 13:
                    div.innerHTML = eval(divText)
                    break;
                case 107:
                    if (!isOper(divText))
                        div.innerHTML = divText + "+";
                    break;
                case 109:
                    if (!isOper(divText))
                        div.innerHTML = divText + "-";
                    break;
                case 106:
                    if (!isOper(divText))
                        div.innerHTML = divText + "*";
                    break;
                case 111:
                    if (!isOper(divText))
                        div.innerHTML = divText + "/";
                    break;
                case 46:
                    div.innerHTML = "";
                    break;
                case 8:
                    div.innerHTML = divText.substring(0, divText.length - 1);
            }
        }

//23423+
        function isOper(str) {
            return isContent(str.charAt(str.length - 1), OPERStr);
        }

function isContent(subStr, str) {
            if (str.indexOf(subStr) >= 0) {
                return true;
            } else {
                return false;
            }
        }

function jisuan(num1, oper, num2) {
            switch (oper) {
                case "+":
                    return num1 + num2;
                    break;
                case "-":
                    return num1 - num2;
                    break;
                case "*":
                    return num1 * num2;
                    break;
                case "/":
                    return num1 / num2;
                    break;
            }
        }
    </script>

</head>
<body>
<div id="content">
    <div id="show"></div>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>+</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>-</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>*</li>
        <li>0</li>
        <li><-</li>
        <li>=</li>
        <li>/</li>

</ul>
</div>
</body>
 在做这个程序的时候特别谨记要分清楚这个符号和数字要切出来方便使用,逻辑要分明,先做那一步后做那一步是很作用的,免得最后忘记你自己写的进程是最痛苦的看,还有如果要求完美的话我们还需要加各种美化,其中计算部分我们并没用EVAL这个函数来做,虽然麻烦点但是这个运算逻辑还是要搞清楚,这样便于我们学习。

时间: 2024-10-15 03:03:07

简易计算机的做法的相关文章

简易计算机

2015-10-05 一.需求分析: 编写一个能对0-10之间的整数进行四则运算的“软件”程序能接收用户输入的整数答案,并判断对错程序结束,统计出答对.答错的题目数量. 二.设计思路 1创建windows窗体应用程序.设计窗体. 2编写代码三. 三.代码实现 四.测试 五.总结 大约做啦5个多小时!发现以前的好多东西都没学好,很多知识都没完全掌握,参考了很多别人的例子:学习啦很多东西,发现这个学科,还有很多的知识需要掌握.学习

计算机的实现的理论基础

计算机的实现 作者:佳嵌工作室(交流QQ群:528495258) 网站:http://www.plusembed.com 转载请说明源地址. 1.1 计算机理论提出 1.1.1 图林机理 1936年,阿兰.图灵提出了一种数学上的抽象的计算机模型,这个模型被称为图灵机,并在数学上验证了其理论上的可能性,现在所有的计算机运行原理都符合图林机的运作原理,图灵也因为在计算机上巨大成就,计算机科学界的最高奖也被称为"图灵奖",这个奖有计算机科学界的"诺贝尔奖"之称. 1.1.

编码——隐匿在计算机软硬件背后的语言(上回)

很早就听说Charles Petzold的<编码>非常值得一看,特地趁着京东6.18下单,现将阅读收获进行整理,大致分为三篇进行讲解. 第一章   至亲密友 编码的含义:一种传递信息的方式. 思路转换过程:手电筒写字母(难理解)→手电筒闪烁次数表示字母(繁琐)→莫尔斯电码. 莫尔斯电码规则:1~4个元素表示字母,5个元素表示数字,6个元素表示标点.字母之间间隔是一个划的长度,单词之间间隔是两个划的长度.缺点:没有区分大小写. 第二章   编码与组合 对莫尔斯电码的解析进行分析,给出按元素多少分

云计算

IDC市场增速云计算产生背景与概念云计算部署模式云计算商业应用模式 业务上云的复杂性与平滑过程可靠性或SLA的支持性工作负载可迁移性数据安全性厂商锁定看不到投资回报云计算的价值体现:智能资源调度基于策略的调度 实现负载均衡或通过热迁移节能减排没有超过服务器的阈值将二胎服务器关机以实现节能减排-------------------------------------------------------提高资源的利用率:资源共享.虚拟化前每台服务器利用率仅5%-10%,虚拟化后虚拟服务器的整合比通常

08.17 js 1 2 3 4回顾

2.简易计算机 3. 4. 5.

struts 配置过程 -一个计算器程序

1.新建一个java web项目 2.引入jar包.jar包路径:struts-1.2.9-bin\lib 3.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/

怎么快速对DB里的所有email进行校验

问题 由于业务上的需求,重新改写了校验email的正则表达式,同时DB里又迁移了其他数据库的数据,现在需要重新对DB里的所有email再校验一次,以排除掉不合法的email. DB里的数据很多,手动去一个个校验的做法显然是不靠谱的,这种机械的重复性操作,自然是要用程序来解决才是最简易的. 做法 拼接字符串 首先是将DB里所有的email都拼接成一个字符串,由于用的是PostgreSQL,所以直接使用现有的字符串拼接函数string_agg(). 具体用法如下: select string_agg

第一部分 神经网络如何工作(1.1-1.2)

1.1 尺有所短,寸有所长 总结来说,就是一些任务比如数百万数字乘法运算这种对于计算机很容易,而图像识别这种对人类来说很容易. 1.2 一台简单的预测机 书中举了一个例子:假设不知道千米和英里之间的转换方式,仅仅知道两者关系是线性的,并且有两组正确的千米/英里匹配的数值对示例,如下所示. 真实示例 千米 英里 1 0 0 2 100 62.137 线性关系的形式应该为"英里 = 千米 * C",其中C为常数,但是现在还不知C是多少. 其实如果是用人类的思维,马上可以想出两点确定一条直线

校园IP网络广播系统概况

北京恒星科通科技发展有限公司 http://www.bjhxkt.com 010-82565576校园IP网络广播系统概述校园I P网络广播系统,是构建在当前广泛使用的TCP/IP通讯网络基础上的新一代交互式公共广播系统.系统采用分布式服务器架构,容量可以根据需要不断扩展,可以在局域网或者广域网内运行.整个应急广播系统采用B/S构架加C/S构架的系统平台,采用WEB方式管理和控制,方便快捷:采用客户端的形式进行播放控制界面,更加人性化,可操作性强.完全做到管理与控制分开,让播控与设置管理分离,让