如何在VB计算器程序中显示中间结果

时间:2014-10-06 20:17:49

标签: vb.net calculator

我正在编写一个简单的Visual Basic四函数计算器(加,减,乘和除)应用程序,我想在按下操作符时显示中间结果。

我创建的Windows窗体包含按钮,因此只需通过鼠标点击GUI(无键盘输入)即可输入

根据要求中的定义,将根据以下顺序规则输入完整的“问题”:

  1. 一个数字,然后是
  2. 操作员密钥,后跟
  3. 另一个号码,后跟
  4. 可选择重复步骤2(按下操作员时显示中间结果)或等号按钮。
  5. 我知道需要在操作员click_events中进行更改以满足此要求,但我不知道如何操作。

    这里是加,减,乘,除和等于按钮的代码

    Dim txtNumber As String
    Dim variable1 As Decimal
    Dim variable2 As Decimal
    Dim answerResult As Decimal
    Dim arithmeticProcess As String
    
     Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
        If answerResult <> 0 Then
            answerResult = variable1 + variable2
            variable1 = CDec(lblDisplay.Text)
            lblDisplay.Text = ""
            arithmeticProcess = "+"
        Else
            variable1 = CDec(lblDisplay.Text)
            lblDisplay.Text = ""
            arithmeticProcess = "+"
        End If
    
    
    End Sub
    
    Private Sub btnSubtract_Click(sender As System.Object, e As System.EventArgs) Handles btnSubtract.Click
        variable1 = CDec(lblDisplay.Text)
        lblDisplay.Text = ""
        arithmeticProcess = "-"
    End Sub
    
    Private Sub btnMultiply_Click(sender As System.Object, e As System.EventArgs) Handles btnMultiply.Click
        variable1 = CDec(lblDisplay.Text)
        lblDisplay.Text = ""
        arithmeticProcess = "*"
    End Sub
    
    Private Sub btnDivide_Click(sender As System.Object, e As System.EventArgs) Handles btnDivide.Click
        variable1 = CDec(lblDisplay.Text)
        lblDisplay.Text = ""
        arithmeticProcess = "/"
    End Sub
    
    Private Sub btnEqual_Click(sender As System.Object, e As System.EventArgs) Handles btnEqual.Click
        variable2 = lblDisplay.Text
        If arithmeticProcess = "+" Then
            answerResult = variable1 + variable2
        ElseIf arithmeticProcess = "-" Then
            answerResult = variable1 - variable2
        ElseIf arithmeticProcess = "*" Then
            answerResult = variable1 * variable2
        Else
            answerResult = variable1 / variable2
        End If
    
        answerResult = Math.Round(answerResult, 9)
        Select Case answerResult
            Case Is > 4000000000
                MessageBox.Show("The answer is too large to be displayed.")
                variable1 = 0
                variable2 = 0
                lblDisplay.Text = ""
            Case Is < -4000000000
                MessageBox.Show("The answer is too small to be displayed.")
                variable1 = 0
                variable2 = 0
                lblDisplay.Text = ""
            Case Else
                lblDisplay.Text = CStr(answerResult)
        End Select
    
    
    End Sub
    

1 个答案:

答案 0 :(得分:0)

首先,我需要礼貌地指出,当你继续这个程序时,我认为你会遇到逻辑上的问题,但是弄清楚这是编程乐趣的一部分。您可能需要退一步并对计算器应用程序进行流程图,然后再返回它。

现在,您的数字按钮(0-9)的代码是什么样的,具体来说,您如何知道用户是在键入variable1还是variable2?假设您以“逻辑”的方式执行该操作,这就是我要做的事情:

  1. Dim variable1 As Decimal = 0为您的数字提供各种类型的“默认值”,并为variable2执行相同操作。
  2. btnEqual_Click中提取代码并将其置于自己的方法中,我们将其称为Public Sub DoMaths(),然后将DoMaths()放入btnEqual_Click(...)
  3. 对于每个'arithmeticProcess'按钮(加号,减号,......),您在完成现有操作后也会调用DoMaths()
  4. 现在这里是棘手的部分。您必须仔细跟踪您在指定时间在屏幕上显示的variableX

    1. DoMaths()中,执行计算后,您需要将answerResult的值移至variable1,并将variable2重置为零。我会把它放在Case Else块的末尾。

      Case Else
          lblDisplay.Text = CStr(answerResult)
          variable1 = answerResult
          variable2 = 0
      
    2. 这会让您回到用户刚刚输入第一个数字(variable1)并准备按下一个算术运算符键的状态。


      编辑,以响应您的数字按钮代码:

      首先,建议:txtNumber += "1"应该是txtNumber &= "1"。虽然有其他参数,但加上数字是加号,而且用于连接两个字符串。

      其次,为了实现您所希望的中间计算,您将不得不跟踪是否已执行“最终计算”(使用“等于”键)。我建议您使用variable1来完成此操作。当按下任何加/减/等于/等等按钮时,只要variable1为零,你[通常]可以假设没有任何事情要做。

      1. 用户键入数字,然后按下算术键。您存储算术运算符(如您所示)并将数字移动到variable1
      2. 现在,用户输入了第二个号码,您存储在variable2中,因为variable1非零。
      3. 然后用户有两个选项:1。按Equals键并正常执行逻辑,或按另一个算术键继续计算。在第二种情况下,对两个变量执行操作,显示结果并将其存储在variable1中,并清除variable2arithmeticProcess的值。
      4. 现在,如果用户刚刚启动应用程序,您基本上回到了相同的位置,并在计算中输入了第一个数字。你应该可以从这里继续正常。