# 计算器例程
gui = GUI()
gui.HideConsoleWindow()
# 设计计算机界面
title = "计算器"
size = [40,8,38,20]
text = ["|微软雅黑|22|255|0|0","text",8,2,20,1]
button0 = ["C|楷体|20|0|0|255","button",5,5,5,1]
button1 = ["<--|楷体|20|0|0|255","button",26,5,5,1]
button2 = ["1","button",5,7,5,1]
button3 = ["2","button",12,7,5,1]
button4 = ["3","button",19,7,5,1]
button5 = ["÷","button",26,7,5,1]
button6 = ["4","button",5,9,5,1]
button7 = ["5","button",12,9,5,1]
button8 = ["6","button",19,9,5,1]
button9 = ["×","button",26,9,5,1]
button10 = ["7","button",5,11,5,1]
button11 = ["8","button",12,11,5,1]
button12 = ["9","button",19,11,5,1]
button13 = ["-","button",26,11,5,1]
button14 = [".","button",5,13,5,1]
button15 = ["0","button",12,13,5,1]
button16 = ["+","button",19,13,5,1]
button17 = ["=","button",26,13,5,1]
# 设计元素打包
list = [title,size,text,button0,button1,button2,button3,button4,\
button5,button6,button7,button8,\
button9,button10,button11,button12,\
button13,button14,button15,button16,button17]
num = gui.Fine(list) # 创建界面,返回资源ID
result = "" # 输入的数字字符串
have_number = 0 # 0表明没有被运算数,1表示被运算数已经存在
symbol = "" # 保存运算符号
while gui.FineClosed(num) != -1 # 检测界面关闭消息
{
PowerDown(3) # 低功耗设置
if gui.FineReady(num) == -1 {continue} # 如果没有检测到字符输入,跳转到while循环
xlist = gui.FineRead(num) # 至此说明有按钮被按下,读取按钮键值
x = xlist[0]
if x == "button-0" # 如果按钮键值为0,说明是C清除键
{
gui.SendText(num,[""]) # 清除屏幕内容
result = "" # 复位变量值
symbol = "" # 复位变量值
have_number = 0 # 复位变量值
}
elif x == "button-1" # 如果按钮键值为1,对应退格健
{
result.pop() # 抛弃掉result的最后一个字符
gui.SendText(num,[result]) # 显示字符串
}
elif x == "button-2" # 如果按钮键值为2,对应数字1
{
result = result + "1" # 拼接字符串
gui.SendText(num,[result]) # 显示字符串
}
elif x == "button-3" # 如果按钮键值为3,对应数字2
{
result = result + "2"
gui.SendText(num,[result])
}
elif x == "button-4" # 如果按钮键值为4,对应数字3
{
result = result + "3"
gui.SendText(num,[result])
}
elif x == "button-6" # 如果按钮键值为6,对应数字4
{
result = result + "4"
gui.SendText(num,[result])
}
elif x == "button-7" # 如果按钮键值为7,对应数字5
{
result = result + "5"
gui.SendText(num,[result])
}
elif x == "button-8" # 如果按钮键值为8,对应数字7
{
result = result + "6"
gui.SendText(num,[result])
}
elif x == "button-10" # 如果按钮键值为10,对应数字7
{
result = result + "7"
gui.SendText(num,[result])
}
elif x == "button-11" # 如果按钮键值为11,对应数字8
{
result = result + "8"
gui.SendText(num,[result])
}
elif x == "button-12" # 如果按钮键值为12,对应数字9
{
result = result + "9"
gui.SendText(num,[result])
}
elif x == "button-14" # 如果按钮键值为14,对应小数点.
{
result = result + "."
gui.SendText(num,[result])
}
elif x == "button-15" # 如果按钮键值为15,对应数字0
{
result = result + "0"
gui.SendText(num,[result])
}
elif x == "button-5" # 如果按钮键值为5,对应除法运算符÷
{
if have_number == 0 # 如果被运算数不存在
{
if result == "" {continue} # 如果在输入运算符之前,没有输入数字,跳转到while循环起点,等待输入数字
if result[0] == "."
{
boxnum = gui.MessageBox("小数点前面的0不可省略!","确定")
while gui.MessageBoxClosed(boxnum) != -1 {PowerDown(3)}
result = ""
gui.SendText(num,[""])
continue
}
number1 = ctoi(result) # 将当前result转化为数字
symbol = "÷" # 赋值运算符变量
result = ""
have_number = 1 # 标记被运算数已存在
}
else # 如果被运算数已存在
{
if result == "" # 进一步检查字符串result是否为空
{
symbol = "÷" # 如果number1已经存在,并且result为空,赋值symbol
}
else # 虽然number1已经存在,并且result不为空
{
number1 = ctoi(result) # 将result转化为数字,替换掉原来的number1
symbol = "÷" # 赋值symbol
result = ""
}
}
}
elif x == "button-9" # 如果按钮键值为9,对应乘法运算符×
{
if have_number == 0
{
if result == "" {continue}
if result[0] == "."
{
boxnum = gui.MessageBox("小数点前面的0不可省略!","确定")
while gui.MessageBoxClosed(boxnum) != -1 {PowerDown(3)}
result = ""
gui.SendText(num,[""])
continue
}
number1 = ctoi(result)
symbol = "×"
result = ""
have_number = 1
}
else
{
if result == ""
{
symbol = "×"
}
else
{
number1 = ctoi(result)
symbol = "×"
result = ""
}
}
}
elif x == "button-13" # 如果按钮键值为13,对应减法运算符-
{
if have_number == 0
{
if result == "" {continue}
if result[0] == "."
{
boxnum = gui.MessageBox("小数点前面的0不可省略!","确定")
while gui.MessageBoxClosed(boxnum) != -1 {PowerDown(3)}
result = ""
gui.SendText(num,[""])
continue
}
number1 = ctoi(result)
symbol = "-"
result = ""
have_number = 1
}
else
{
if result == ""
{
symbol = "-"
}
else
{
number1 = ctoi(result)
symbol = "-"
result = ""
}
}
}
elif x == "button-16" # 如果按钮键值为16,对应加法运算符+
{
if have_number == 0
{
if result == "" {continue}
if result[0] == "."
{
boxnum = gui.MessageBox("小数点前面的0不可省略!","确定")
while gui.MessageBoxClosed(boxnum) != -1 {PowerDown(3)}
result = ""
gui.SendText(num,[""])
continue
}
number1 = ctoi(result)
symbol = "+"
result = ""
have_number = 1
}
else
{
if result == ""
{
symbol = "+"
}
else
{
number1 = ctoi(result)
symbol = "+"
result = ""
}
}
}
elif x == "button-17" # 如果按钮键值为17,对应等号运算符=
{
if symbol == "" {continue} # 如果symbol运算符为空,按等号按钮不作任何反应,跳转到循环起点
if result[0] == "."
{
boxnum = gui.MessageBox("小数点前面的0不可省略!","确定")
while gui.MessageBoxClosed(boxnum) != -1 {PowerDown(3)}
continue
}
number2 = ctoi(result) # 将字符串转化为第二个运算数
if symbol == "÷"
{
if number2 == 0 # 如果是除法,除数不能为0,否则弹出提示,并清除result和屏幕
{
boxnum = gui.MessageBox("除数不能为0!","确定")
while gui.MessageBoxClosed(boxnum) != -1 {PowerDown(3)}
continue
}
number3 = number1 / number2 # 计算运算结果
}
elif symbol == "×"
{
number3 = number1 * number2
}
elif symbol == "+"
{
number3 = number1 + number2
}
elif symbol == "-"
{
number3 = number1 - number2
}
number1 = number3 # 计算结果作为下一次的被运算数
temp = sprint("%.10f",number3) # 将运算结果转化为字符串
gui.SendText(num,[temp]) # 显示在text控件上
result = "" # 复位result和symbol
symbol = ""
have_number = 1 # 计算结果作为被运算数
}
}