/*
软件作者:https://xuhss.com/oxox/pro
*/
/**
* name: 一个图形界面计算器
* by: 板神
* time: 2019.6.21
*/
"ui";
var btnTextSize = 20;
ui.layout(
<vertical h="*" margin="8">
<card layout_weight="1">
<text id="in" gravity="center" textSize="36" textStyle="bold">0</text>
</card>
<vertical layout_weight="1">
<horizontal layout_weight="1">
<button id="ce" h="*" layout_weight="1" textSize="{{btnTextSize}}">CE</button>
<button id="leftparen" h="*" layout_weight="1" textSize="{{btnTextSize}}">(</button>
<button id="rightparen" h="*" layout_weight="1" textSize="{{btnTextSize}}">)</button>
<button id="div" h="*" layout_weight="1" textSize="{{btnTextSize}}">÷</button>
</horizontal>
<horizontal layout_weight="1">
<button id="n7" h="*" layout_weight="1" textSize="{{btnTextSize}}">7</button>
<button id="n8" h="*" layout_weight="1" textSize="{{btnTextSize}}">8</button>
<button id="n9" h="*" layout_weight="1" textSize="{{btnTextSize}}">9</button>
<button id="mul" h="*" layout_weight="1" textSize="{{btnTextSize}}">×</button>
</horizontal>
<horizontal layout_weight="1">
<button id="n4" h="*" layout_weight="1" textSize="{{btnTextSize}}">4</button>
<button id="n5" h="*" layout_weight="1" textSize="{{btnTextSize}}">5</button>
<button id="n6" h="*" layout_weight="1" textSize="{{btnTextSize}}">6</button>
<button id="sub" h="*" layout_weight="1" textSize="{{btnTextSize}}">-</button>
</horizontal>
<horizontal layout_weight="1">
<button id="n1" h="*" layout_weight="1" textSize="{{btnTextSize}}">1</button>
<button id="n2" h="*" layout_weight="1" textSize="{{btnTextSize}}">2</button>
<button id="n3" h="*" layout_weight="1" textSize="{{btnTextSize}}">3</button>
<button id="plus" h="*" layout_weight="1" textSize="{{btnTextSize}}">+</button>
</horizontal>
<horizontal layout_weight="1">
<button id="n0" h="*" layout_weight="3" textSize="{{btnTextSize}}">0</button>
<button id="eq" h="*" layout_weight="1" textSize="{{btnTextSize}}">=</button>
</horizontal>
</vertical>
</vertical>
);
/**
* @param {控件} out 输出控件
*/
function Calculator(out) {
this.out = out; // 输出控件
this.middle = []; // 中缀表达式
/**
* 向计算器输入一个数
*/
this.input = function (num) {
var index = this.middle.length - 1;
if (this.middle.length == 0) {
this.middle.push(num);
} else if (typeof(this.middle[index]) == typeof(1)) {
this.middle[index] = this.middle[index] * 10 + num;
} else {
this.middle.push(num);
}
this.show();
}
/**
* 向计算器输入一个符号
*/
this.inputSymbol = function (symbol) {
switch (symbol) {
case "(":
this.middle.push(symbol);
break;
case ")":
this.middle.push(symbol);
break;
case "=":
this.cal();
break;
case "ce":
this.middle = [0];
break;
default:
var index = this.middle.length - 1;
if (this.middle[index] in {"+": 0, "-": 0, "*": 0, "/": 0}) {
this.middle[index] = symbol;
} else {
this.middle.push(symbol);
}
}
this.show();
}
/**
* 展示输入或输出值
*/
this.show = function () {
var info = "";
this.middle.forEach(ele => {
info += ele;
});
log("info:" + info);
this.out.text(info);
}
/**
* 计算当前中缀表达式的结果
*/
this.cal = function () {
// 生成中缀表达式
var n = this.middle.length;
var middle = this.middle; // 中缀表达式
log("中缀表达式: " + JSON.stringify(middle));
// 生成后缀表达式
var end = [];
var stack = ["#"];
var lv = {
"#": 0,
"+": 1,
"-": 1,
"*": 2,
"/": 2,
"(": 0,
};
while (middle.length > 0) {
var ele = middle.shift();
if (typeof(ele) == typeof(1)) {
end.push(ele);
continue;
}
if (ele == "(") {
stack.unshift(ele);
continue;
}
if (ele == ")") {
while (stack[0] != "(") {
end.push(stack.shift());
}
stack.shift();
continue;
}
if (lv[ele] > lv[stack[0]]) {
stack.unshift(ele);
continue;
}
while (lv[ele] <= lv[stack[0]]) {
end.push(stack.shift());
}
stack.unshift(ele);
}
while (stack[0] != "#") {
end.push(stack.shift());
}
log("后缀表达式: " + JSON.stringify(end));
// 计算
var cc = function (num1, num2, operator) {
switch (operator) {
case "+":
return num1 + num2;
case "-":
return num1 - num2;
case "*":
return num1 * num2;
case "/":
return num1 / num2;
}
}
stack = [];
end.forEach(ele => {
if (typeof(ele) == typeof(1)) {
stack.push(ele);
} else {
var num2 = stack.pop();
var num1 = stack.pop();
stack.push(cc(num1, num2, ele));
}
});
if (stack.length != 1) {
throw new Error("stack invalid: stack = " + JSON.stringify(stack));
}
this.middle = [stack[0]];
}
}
var cal = new Calculator(ui.in);
ui.n0.click(() => {
cal.input(0);
});
ui.n1.click(() => {
cal.input(1);
});
ui.n2.click(() => {
cal.input(2);
});
ui.n3.click(() => {
cal.input(3);
});
ui.n4.click(() => {
cal.input(4);
});
ui.n5.click(() => {
cal.input(5);
});
ui.n6.click(() => {
cal.input(6);
});
ui.n7.click(() => {
cal.input(7);
});
ui.n8.click(() => {
cal.input(8);
});
ui.n9.click(() => {
cal.input(9);
});
ui.plus.click(() => {
cal.inputSymbol("+");
});
ui.sub.click(() => {
cal.inputSymbol("-");
});
ui.mul.click(() => {
cal.inputSymbol("*");
});
ui.div.click(() => {
cal.inputSymbol("/");
});
ui.eq.click(() => {
cal.inputSymbol("=");
});
ui.leftparen.click(() => {
cal.inputSymbol("(");
});
ui.rightparen.click(() => {
cal.inputSymbol(")");
});
ui.ce.click(() => {
cal.inputSymbol("ce");
});
没有合适的资源?快使用搜索试试~ 我知道了~
AutoJs源码-190620-计算器
共1个文件
js:1个
需积分: 1 0 下载量 8 浏览量
2022-11-14
21:48:23
上传
评论
收藏 2KB 7Z 举报
温馨提示
AutoJs源码-190620_计算器。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3、安装过程详见具体资源,不会使用autojs谨慎下载
资源推荐
资源详情
资源评论
收起资源包目录
AutoJs源码-190620_计算器.7z (1个子文件)
AutoJs源码-190620_计算器.js 7KB
共 1 条
- 1
资源评论
[虚幻私塾】
- 粉丝: 337
- 资源: 1558
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (174298652)基于QT的酒店管理系统设计
- (175720404)安卓期末大作业(AndroidStudio开发),垃圾分类助手app,分为前台后台,代码有注释,均能正常运行
- wireshark抓包-OSPF
- (176182006)python小游戏(免费)
- (176485414)基于servlet+jsp+mysql的图书馆管理系统.zip
- (176703248)QT图书管理系统的源代码
- (177098224)安卓期末大作业Android Studio 简易计算器实现
- (177234252)单片机LCD滚动显示汉字proteus仿真实例.rar
- (177294410)数据库课设医药信息管理系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功