优秀作品

#  计算器例程


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                             # 计算结果作为被运算数

  }

}


0