微信小程序--超简单的非二叉树结构计算器
版权声明:本文为CSDN博主「1275012490」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ACoolnight/article/details/103465829
wx.js
// An highlighted block
Page({
data:
{
idb: "back",
idc: "clear",
ht: "ht",
id9: "9",
id8: "8",
id7: "7",
id6: "6",
id5: "5",
id4: "4",
id3: "3",
id2: "2",
id1: "1",
id0: "0",
idadd: "+",
idj: "-",
idx: "×",
iddiv: "/",
sum:"", // 数值
sun:"", //点存数
point:0, //有无小数点
control:0, // 0 无运算符 1运算符
idd: ".",
ide: "=",
screenData: "0",
screentopData:"0",
iconType: 'waiting_circle',
iconColor: 'white',
arr: [],
logs:[],
temps: []
},
onLoad: function (options) {
// 页面初始化 options为页面跳转所带来的参数
},
onReady: function () {
// 页面渲染完成
},
onShow: function () {
// 页面显示
},
onHide: function () {
// 页面隐藏
},
onUnload: function () {
// 页面关闭
},
clickBtn: function (event) {
const app = getApp();
let arr=this.data.arr;
var id = event.target.id;
if (id == this.data.idb)
{ //退格←
var data = this.data.screenData+""
if (data == "0")
{
return;
}
data = data.substring(0,data.length-2)
if (data == "" || data == "-")
{
data = 0;
}
this.setData({ "screenData": data });
}
if (id == this.data.idc) //清屏C
{
arr.length = 0;
this.data.temps.length=0;
this.setData({ "screenData": "0","screentopData": "0",sum:0,control:0});
}
//输入的数字的字符
if(!isNaN(id))
{
if(id == this.data.id0)
{
var sums=this.data.sum*10+0;
}
else if(id == this.data.id1)
{
sums=this.data.sum*10+1;
}
else if(id == this.data.id2)
{
sums=this.data.sum*10+2;
}
else if(id == this.data.id3)
{
sums = this.data.sum * 10 + 3;
}
else if(id == this.data.id4)
{
sums = this.data.sum * 10 + 4;
}
else if(id == this.data.id5)
{
sums = this.data.sum * 10 + 5;
}
else if(id == this.data.id6)
{
sums = this.data.sum * 10 + 6;
}
else if(id == this.data.id7)
{
sums = this.data.sum * 10 + 7;
}
else if(id == this.data.id8)
{
sums = this.data.sum * 10 + 8;
}
else if(id == this.data.id9)
{
sums = this.data.sum * 10 + 9;
}
this.setData({sum: sums})
if(this.data.point==1){sums=this.data.screenData+sums+""}
var str=arr.join("")
this.setData({screenData:sums,screentopData:str});
this.data.control=0
}
if(id == this.data.idd)
{
let sum=this.data.sum
let sun=sum+"."
this.setData({ "sun":sum,"sum":0,"point":1,screenData:sun})
}
//四则运算
if(this.data.control==0)
{
if(id == this.data.idadd||id == this.data.idj||id == this.data.idx||id == this.data.iddiv)
{
if(this.data.point==1){
this.data.sum=this.data.sum+""
this.data.sum=this.data.sun+this.data.sum/Math.pow(10,this.data.sum.length);
this.data.point=0;
this.data.sun=0;
}
arr.push(this.data.sum)
if(id == this.data.iddiv)
{
if(arr[arr.length-1]==""){arr.pop(),arr.push("/")}else{arr.push("/")}
}
if(id == this.data.idx)
{
if(arr[arr.length-1]==""){arr.pop(),arr.push("*")}else{arr.push("*")}
}
if(id == this.data.idj)
{
if(arr[arr.length-1]==""){arr.pop(),arr.push("-")}else{arr.push("-")}
}
if(id == this.data.idadd)
{
if(arr[arr.length-1]==""){arr.pop(),arr.push("+")}else{arr.push("+")}
}
var str=arr.join("")
this.setData({ screenData:str })
this.data.control=1
this.data.sum=0
}
}
if (id == this.data.ide) // ===
{
if(arr.length>=1)//C键导致screendata为空
{
this.data.temps.length=0;
arr.push(this.data.sum)
var str=arr.join("")
this.setData({ screentopData:str,sum:""})
}
else if(arr.length=0)
{
this.data.screenData="0"
this.data.screentopData="0"
}
//调用运算函数
var result=operation(this.data)
arr.length=0
arr.push(result)
this.setData({ screenData:result })
//存储记录
app.globalData.logs.push(this.data.screenData + '=' + this.data.screentopData);
//wx.setStorageSync("calclogs", this.data.logs);
}
function operation(data)
{
let i=0,temp=1,sum=0;
let arr=data.arr
let temps=data.temps
//乘除块
for(i=0;i<arr.length;i++)
{
try{
if(arr[i]=="*"||arr[i]=="/")
{
if(arr[i-2]=="-")
{
temp=-1;
}//矫正乘除块的正负
if(arr[i]=="*")
{
temp*=arr[i-1]*arr[i+1]
}
if(arr[i]=="/")
{
temp*=arr[i-1]/arr[i+1]
}
for(;i<arr.length;i=i+2)
{
if(arr[i]=="-"||arr[i]=="+"){break;}//遇到加减乘除衔接 停止遍历
if(arr[i+2]=="*"){temp*=arr[i+3];}
if(arr[i+2]=="/"){temp/=arr[i+3];}
}
temps.push(temp)
temp=1
}
}catch(err){}
}
//加减块
for(i=0;i<arr.length;i++)
{
if(arr[i]=="-"||arr[i]=="+")
{
if(arr[i+2]=="-"||arr[i+2]=="+")
{
if(arr[i]=="-")
{
sum+=0-arr[i+1]
}
if(arr[i]=="+")
{
sum+=arr[i+1]
}
}
else if(arr[i+2]==""||arr[i+2]==null)//处理数组超界
{
if(arr[i]=="-")
{
sum+=0-arr[i+1]
}
if(arr[i]=="+")
{
sum+=arr[i+1]
}
}
}
}
if (arr[1] == "-"||arr[1] == "+") { sum += arr[0];}//加减是向前推的,唯独下标 0
//结果
for (i = 0; i <temps.length; i++)
{
sum += temps[i];
}
return sum
}
},
//历史记录按键
history:function(event)
{
wx.navigateTo({
url: '../history/history'
})
}
})
wxml
// An highlighted block
<view class="content">
<view class="layout-top">
<view class="screen" >
{{screentopData}}
</view>
<view class="screen">
{{screenData}}
</view>
</view>
<view class="layout-bottom">
<view class="btnGroup">
<view class="item orange" bindtap="clickBtn" id="{{idc}}">С</view>
<view class="item orange" bindtap="clickBtn" id="{{idb}}">←</view>
<view class="item orange iconBtn" bindtap="history" id="{{ht}}">
<icon type="{{iconType}}" color="{{iconColor}}" class="icon" size="25"/>
</view>
<view class="item orange" bindtap="clickBtn" id="{{idadd}}">+</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickBtn" id="{{id7}}">7</view>
<view class="item blue" bindtap="clickBtn" id="{{id8}}">8</view>
<view class="item blue" bindtap="clickBtn" id="{{id9}}">9</view>
<view class="item orange" bindtap="clickBtn" id="{{idj}}">-</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickBtn" id="{{id4}}">4</view>
<view class="item blue" bindtap="clickBtn" id="{{id5}}">5</view>
<view class="item blue" bindtap="clickBtn" id="{{id6}}">6</view>
<view class="item orange" bindtap="clickBtn" id="{{idx}}">x</view>
</view>
<view class="btnGroup">
<view class="item blue" bindtap="clickBtn" id="{{id1}}">1</view>
<view class="item blue" bindtap="clickBtn" id="{{id2}}">2</view>
<view class="item blue" bindtap="clickBtn" id="{{id3}}">3</view>
<view class="item orange" bindtap="clickBtn" id="{{iddiv}}">/</view>
</view>
<view class="btnGroup">
<view class="item blue zero" bindtap="clickBtn" id="{{id0}}">0</view>
<view class="item blue" bindtap="clickBtn" id="{{idd}}" style="width:25%">.</view>
<view class="item orange" bindtap="clickBtn" id="{{ide}}" style="width:50%">=</view>
</view>
</view>
</view>
wxss
// An highlighted block
.content {
display: flex;
flex-direction: column;
align-items: center;
background-color: #ccc;
font-family: "Microsoft YaHei";
overflow-x: hidden;
}
.layout-top{
width: 100%;
margin-bottom: 10rpx;
}
.layout-bottom{
width: 100%;
}
.screen {
text-align: right;
width: 100%;
line-height: 100rpx;
padding: 10rpx 10rpx;
font-weight: bold;
font-size: 100rpx;
box-sizing: border-box;
border-top: 1px solid #fff;
}
.btnGroup {
display: flex;
flex-direction: row;
flex: 1;
width: 100%;
height: 170rpx;
background-color: #fff;
}
.item {
border-radius: 15rpx;
width:25%;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
margin-top: 1px;
margin-right: 1px;
}
.item:active {
background-color: #ff0000;
}
.zero{
width: 25%;
}
.orange {
color: #fef4e9;
background: black;
font-weight: bold;
}
.blue {
color:#d9eef7;
background-color: #0095cd;
}
.iconBtn{
display: flex;
}
.icon{
display: flex;
align-items: center;
width:100%;
justify-content: center;
}
记录页,退出程序后记录会消失
App.js
history.js
history wxml