|
<火山程序 类型 = "通常" 版本 = 1 />
包 火山.计算器
类 启动类 <公开 基础类 = 窗口程序类>
{
变量 主窗口对象 <类型 = 计算器窗口类 标题 = "简易计算器">
方法 启动方法 <公开 类型 = 整数>
{
主窗口对象.创建主窗口 () // 作为程序的主窗口创建并显示所定义窗口
返回 (1)
}
}
类 计算器窗口类 <基础类 = 窗口 @视窗.布局 = "client_size = \"300, 450\"" 标题 = "计算器">
{
// 显示结果的文本框
变量 文本框_显示 <类型 = 编辑框 @视窗.布局 = "id = 100\r\npos = \"20, 60, 260, 60\"" 只读 = 真>
// 内存和历史按钮
变量 按钮_MC <类型 = 按钮 @视窗.布局 = "id = 101\r\npos = \"20, 130, 40, 30\"" 标题 = "MC">
变量 按钮_MR <类型 = 按钮 @视窗.布局 = "id = 102\r\npos = \"70, 130, 40, 30\"" 标题 = "MR">
变量 按钮_M加 <类型 = 按钮 @视窗.布局 = "id = 103\r\npos = \"120, 130, 40, 30\"" 标题 = "M+">
变量 按钮_M减 <类型 = 按钮 @视窗.布局 = "id = 104\r\npos = \"170, 130, 40, 30\"" 标题 = "M-">
变量 按钮_MS <类型 = 按钮 @视窗.布局 = "id = 105\r\npos = \"220, 130, 40, 30\"" 标题 = "MS">
变量 按钮_M <类型 = 按钮 @视窗.布局 = "id = 106\r\npos = \"270, 130, 40, 30\"" 标题 = "M^">
// 特殊功能按钮
变量 按钮_百分比 <类型 = 按钮 @视窗.布局 = "id = 107\r\npos = \"20, 170, 60, 50\"" 标题 = "%">
变量 按钮_CE <类型 = 按钮 @视窗.布局 = "id = 108\r\npos = \"90, 170, 60, 50\"" 标题 = "CE">
变量 按钮_C <类型 = 按钮 @视窗.布局 = "id = 109\r\npos = \"160, 170, 60, 50\"" 标题 = "C">
变量 按钮_退格 <类型 = 按钮 @视窗.布局 = "id = 110\r\npos = \"230, 170, 60, 50\"" 标题 = "⌫">
变量 按钮_倒数 <类型 = 按钮 @视窗.布局 = "id = 111\r\npos = \"20, 230, 60, 50\"" 标题 = "¹/ₓ">
变量 按钮_平方 <类型 = 按钮 @视窗.布局 = "id = 112\r\npos = \"90, 230, 60, 50\"" 标题 = "x²">
变量 按钮_开方 <类型 = 按钮 @视窗.布局 = "id = 113\r\npos = \"160, 230, 60, 50\"" 标题 = "√x">
变量 按钮_除 <类型 = 按钮 @视窗.布局 = "id = 114\r\npos = \"230, 230, 60, 50\"" 标题 = "÷">
// 数字按钮
变量 按钮_7 <类型 = 按钮 @视窗.布局 = "id = 115\r\npos = \"20, 290, 60, 50\"" 标题 = "7">
变量 按钮_8 <类型 = 按钮 @视窗.布局 = "id = 116\r\npos = \"90, 290, 60, 50\"" 标题 = "8">
变量 按钮_9 <类型 = 按钮 @视窗.布局 = "id = 117\r\npos = \"160, 290, 60, 50\"" 标题 = "9">
变量 按钮_乘 <类型 = 按钮 @视窗.布局 = "id = 118\r\npos = \"230, 290, 60, 50\"" 标题 = "×">
变量 按钮_4 <类型 = 按钮 @视窗.布局 = "id = 119\r\npos = \"20, 350, 60, 50\"" 标题 = "4">
变量 按钮_5 <类型 = 按钮 @视窗.布局 = "id = 120\r\npos = \"90, 350, 60, 50\"" 标题 = "5">
变量 按钮_6 <类型 = 按钮 @视窗.布局 = "id = 121\r\npos = \"160, 350, 60, 50\"" 标题 = "6">
变量 按钮_减 <类型 = 按钮 @视窗.布局 = "id = 122\r\npos = \"230, 350, 60, 50\"" 标题 = "-">
变量 按钮_1 <类型 = 按钮 @视窗.布局 = "id = 123\r\npos = \"20, 410, 60, 50\"" 标题 = "1">
变量 按钮_2 <类型 = 按钮 @视窗.布局 = "id = 124\r\npos = \"90, 410, 60, 50\"" 标题 = "2">
变量 按钮_3 <类型 = 按钮 @视窗.布局 = "id = 125\r\npos = \"160, 410, 60, 50\"" 标题 = "3">
变量 按钮_加 <类型 = 按钮 @视窗.布局 = "id = 126\r\npos = \"230, 410, 60, 50\"" 标题 = "+">
变量 按钮_正负号 <类型 = 按钮 @视窗.布局 = "id = 127\r\npos = \"20, 470, 60, 50\"" 标题 = "+/-">
变量 按钮_0 <类型 = 按钮 @视窗.布局 = "id = 128\r\npos = \"90, 470, 60, 50\"" 标题 = "0">
变量 按钮_小数点 <类型 = 按钮 @视窗.布局 = "id = 129\r\npos = \"160, 470, 60, 50\"" 标题 = ".">
变量 按钮_等于 <类型 = 按钮 @视窗.布局 = "id = 130\r\npos = \"230, 470, 60, 50\"" 标题 = "=">
// 存储计算数据的变量
变量 第一个数 <类型 = 小数>
变量 第二个数 <类型 = 小数>
变量 运算符 <类型 = 文本型>
变量 显示文本 <类型 = 文本型>
变量 需要清除显示 <类型 = 逻辑型>
变量 内存值 <类型 = 小数>
方法 窗口_创建 <接收事件 类型 = 整数>
参数 来源对象 <类型 = 窗口>
参数 标记值 <类型 = 整数>
{
// 初始化计算器
清除计算 ()
返回 (0)
}
方法 按钮_单击 <接收事件 类型 = 整数>
参数 来源对象 <类型 = 按钮>
参数 标记值 <类型 = 整数>
{
变量 按钮标题 <类型 = 文本型>
按钮标题 = 来源对象.标题
// 处理数字按钮
如果 (按钮标题 >= "0" && 按钮标题 <= "9")
{
如果 (需要清除显示)
{
显示文本 = ""
需要清除显示 = 假
}
显示文本 = 显示文本 + 按钮标题
文本框_显示.标题 = 显示文本
}
// 处理小数点
否则 如果 (按钮标题 == ".")
{
如果 (需要清除显示)
{
显示文本 = "0"
需要清除显示 = 假
}
// 检查是否已有小数点
如果 (文本位置 (显示文本, ".") == 0)
{
显示文本 = 显示文本 + "."
}
文本框_显示.标题 = 显示文本
}
// 处理运算符按钮
否则 如果 (按钮标题 == "+" || 按钮标题 == "-" || 按钮标题 == "×" || 按钮标题 == "÷")
{
第一个数 = 文本到小数 (显示文本)
如果 (按钮标题 == "×")
{
运算符 = "*"
}
否则 如果 (按钮标题 == "÷")
{
运算符 = "/"
}
否则
{
运算符 = 按钮标题
}
需要清除显示 = 真
}
// 处理等于按钮
否则 如果 (按钮标题 == "=")
{
第二个数 = 文本到小数 (显示文本)
计算结果 ()
}
// 处理清除按钮
否则 如果 (按钮标题 == "C")
{
清除计算 ()
}
// 处理CE按钮 (只清除当前输入)
否则 如果 (按钮标题 == "CE")
{
显示文本 = "0"
文本框_显示.标题 = 显示文本
需要清除显示 = 真
}
// 处理退格按钮
否则 如果 (按钮标题 == "⌫")
{
如果 (文本长度 (显示文本) > 1)
{
显示文本 = 文本左边 (显示文本, 文本长度 (显示文本) - 1)
}
否则
{
显示文本 = "0"
需要清除显示 = 真
}
文本框_显示.标题 = 显示文本
}
// 处理正负号按钮
否则 如果 (按钮标题 == "+/-")
{
如果 (显示文本 != "0")
{
如果 (文本左边 (显示文本, 1) == "-")
{
显示文本 = 文本右边 (显示文本, 文本长度 (显示文本) - 1)
}
否则
{
显示文本 = "-" + 显示文本
}
文本框_显示.标题 = 显示文本
}
}
// 处理百分比按钮
否则 如果 (按钮标题 == "%")
{
变量 当前值 <类型 = 小数>
当前值 = 文本到小数 (显示文本)
当前值 = 当前值 / 100
显示文本 = 小数到文本 (当前值)
文本框_显示.标题 = 显示文本
}
// 处理平方按钮
否则 如果 (按钮标题 == "x²")
{
变量 当前值 <类型 = 小数>
当前值 = 文本到小数 (显示文本)
当前值 = 当前值 * 当前值
显示文本 = 小数到文本 (当前值)
文本框_显示.标题 = 显示文本
需要清除显示 = 真
}
// 处理开方按钮
否则 如果 (按钮标题 == "√x")
{
变量 当前值 <类型 = 小数>
当前值 = 文本到小数 (显示文本)
如果 (当前值 < 0)
{
信息框 ("错误: 不能对负数开平方根!")
}
否则
{
当前值 = 平方根 (当前值)
显示文本 = 小数到文本 (当前值)
文本框_显示.标题 = 显示文本
需要清除显示 = 真
}
}
// 处理倒数按钮
否则 如果 (按钮标题 == "¹/ₓ")
{
变量 当前值 <类型 = 小数>
当前值 = 文本到小数 (显示文本)
如果 (当前值 == 0)
{
信息框 ("错误: 不能除以零!")
}
否则
{
当前值 = 1 / 当前值
显示文本 = 小数到文本 (当前值)
文本框_显示.标题 = 显示文本
需要清除显示 = 真
}
}
// 处理内存按钮
否则 如果 (按钮标题 == "MC")
{
内存值 = 0
}
否则 如果 (按钮标题 == "MR")
{
显示文本 = 小数到文本 (内存值)
文本框_显示.标题 = 显示文本
需要清除显示 = 真
}
否则 如果 (按钮标题 == "M+")
{
内存值 = 内存值 + 文本到小数 (显示文本)
需要清除显示 = 真
}
否则 如果 (按钮标题 == "M-")
{
内存值 = 内存值 - 文本到小数 (显示文本)
需要清除显示 = 真
}
否则 如果 (按钮标题 == "MS")
{
内存值 = 文本到小数 (显示文本)
需要清除显示 = 真
}
返回 (0)
}
方法 计算结果 <类型 = 整数>
{
变量 结果 <类型 = 小数>
如果 (运算符 == "+")
{
结果 = 第一个数 + 第二个数
}
否则 如果 (运算符 == "-")
{
结果 = 第一个数 - 第二个数
}
否则 如果 (运算符 == "*")
{
结果 = 第一个数 * 第二个数
}
否则 如果 (运算符 == "/")
{
// 检查除数是否为0
如果 (第二个数 == 0)
{
信息框 ("错误: 不能除以零!")
清除计算 ()
返回 (0)
}
结果 = 第一个数 / 第二个数
}
否则
{
// 如果没有运算符,结果就是当前显示的数字
结果 = 第二个数
}
显示文本 = 小数到文本 (结果)
文本框_显示.标题 = 显示文本
需要清除显示 = 真
返回 (0)
}
方法 清除计算 <类型 = 整数>
{
第一个数 = 0
第二个数 = 0
运算符 = ""
显示文本 = "0"
文本框_显示.标题 = 显示文本
需要清除显示 = 真
返回 (0)
}
方法 平方根 <类型 = 小数>
参数 数值 <类型 = 小数>
{
// 简单的平方根实现
返回 (数值 ^ 0.5)
}
} |
|