| 
 | 
 
<火山程序 类型 = "通常" 版本 = 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) 
    } 
} |   
 
 
 
 |