D-Day +6 of .NET 传说中的计算器问题.有BUG,解决不了,第一个程序怎么就调不好呢,高手帮忙看看

本文介绍了一个简易网页计算器的设计与实现过程,包括按钮点击事件处理、运算逻辑等核心内容,并指出了当前存在的两个bug及其预期修复后的理想状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

http://www.vstoo.com/flyshufeman/calculator/Calculator.aspx

Bug to fix
理想状态:
1、如果操作输入数字指令时 前一次按下的是"等于"
则再按下数字时理应应该清空tbNumber(相当于btClear_Click事件)
2、如果输入等于时 前一次也是等于 则理应再进行前一次运算

这2条已经写进代码,自己设计的语句前也加进这2条注释,但是运行仍旧原样。

源码打包下载:http://www.vstoo.com/flyshufeman/calculator/calculator.rar

源程序 calculator.aspx.vb


Partial Class Calculator
    Inherits System.Web.UI.Page
    Private answer As Double
    Dim blEqualTriggered As Boolean


    Sub btOperator_Click(ByVal obj As Object, ByVal e As EventArgs)
        If (hiddenvalue.value <> "" And hiddenvalue.value <> "0") Then
            tbNumber.Text = OperateFunction(obj.Text, hiddenvalue.Value, tbNumber.Text)
            hiddenvalue.value = ""
            hiddenoperator.value = ""
        Else
            'save old number as hidden input field
            ' and clear text box
            hiddenvalue.value = tbNumber.Text
            hiddenoperator.value = obj.Text
            tbNumber.Text = "0"
        End If
    End Sub

    Sub btSpecOperator_Click(ByVal obj As Object, ByVal e As EventArgs) Handles btNegate.Click
        tbNumber.Text = OperateFunction(obj.Text, hiddenvalue.Value, tbNumber.Text)
        hiddenvalue.Value = ""
        hiddenoperator.Value = ""
    End Sub

    Sub btNumber_Click(ByVal obj As Object, ByVal e As EventArgs)
        '如果操作输入数字指令时 前一次按下的是"等于"
        '则再按下数字时清空tbNumber(相当于btClear_Click事件)
        If blEqualTriggered = True Then
            tbNumber.Text = "0"
            hiddenoperator.Value = ""
            hiddenvalue.Value = ""
        End If

        If tbNumber.Text <> "0" And blEqualTriggered = False Then

            tbNumber.Text = tbNumber.Text & obj.Text
        Else
            tbNumber.Text = obj.Text
            answer = Nothing
        End If

        blEqualTriggered = False
        Label1.Text = blEqualTriggered.ToString

    End Sub

    Sub btClear_Click(ByVal obj As Object, ByVal e As EventArgs)
        tbNumber.Text = "0"
        hiddenoperator.value = ""
        hiddenvalue.value = ""
    End Sub

    Sub btBS_Click(ByVal obj As Object, ByVal e As EventArgs)
        If tbNumber.Text <> "0" Then
            tbNumber.Text = Left(tbNumber.Text, len(tbNumber.Text) - 1)
        End If
    End Sub

    Sub btMemory_Click(ByVal obj As Object, ByVal e As EventArgs)
        Select Case obj.text
            Case "MC"
                Session("memory") = ""
                Indicator.Text = ""
            Case "MS"
                Session("memory") = tbNumber.Text
                Indicator.Text = "M"
            Case "MR"
                tbNumber.Text = Session("Memory")
            Case "M+"

        End Select
    End Sub

    Sub btEqual_Click(ByVal obj As Object, ByVal e As EventArgs)
        '如果输入等于时 前一次也是等于 则再进行前一次运算
        If blEqualTriggered = True Then
            tbNumber.Text = OperateFunction(hiddenoperator.Value, hiddenvalue.Value, tbNumber.Text)
        End If
        If hiddenvalue.Value <> "" Then
            If hiddenoperator.Value <> "" Then
                'operate numbers
                tbNumber.Text = OperateFunction(hiddenoperator.Value, hiddenvalue.Value, tbNumber.Text)
                hiddenvalue.Value = ""
                hiddenoperator.Value = ""
                answer = tbNumber.Text
            Else
                'do nothing
            End If
        Else
            'do nothing
        End If

        blEqualTriggered = True '表明"等于号"触发过
        Label1.Text = blEqualTriggered.ToString

    End Sub

    Private Function OperateFunction(ByVal operate As String, ByVal number1 As String, Optional ByVal number2 As String = "1") As Double
        Select Case operate
            Case "+"
                operate = CDbl(number1) + CDbl(number2)
            Case "-"
                operate = CDbl(number1) - CDbl(number2)
            Case "*"
                operate = CDbl(number1) * CDbl(number2)
            Case "/"
                operate = CDbl(number1) / CDbl(number2)
            Case "sqrt"
                operate = CDbl(Math.Sqrt(number2))
            Case "1/x"
                operate = CDbl(1 / CDbl(number2))
            Case "+/-"
                operate = CDbl((-1) * CDbl(number2))
        End Select
        Return operate.ToString
    End Function

    Protected Sub tbNumber_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbNumber.TextChanged

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Label1.Text = blEqualTriggered.ToString

    End Sub
End Class

 


 

calculator.aspx 这个没什么 组建如何填到网页里的而已 关键是哪个键对应触发哪个事件

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Calculator.aspx.vb" Inherits="Calculator" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>简易网页计算器</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Panel id="Frame" runat="server">
   <table width="250">
   <tr>
      <td width="100%" colspan="7">
         <asp:textbox id="tbNumber" runat="server"
            text="0"
            enabled="false"
            width="100%" />
      </td>
   </tr>
   <tr>
      <td align="right" width="100%" colspan="7">
         <asp:Label id="Indicator" text="" runat="server" />
         <asp:button id="btBS" Text="Backspace"
            OnClick="btBS_Click" runat="server" width="75"/>
         <asp:button id="btClear" Text="C"
            OnClick="btClear_Click" runat="server" width="35"/>
      </td>
   </tr> 
   <tr>
      <td width="32" valign="top">
         <asp:button id="btMC" Text="MC"
            OnClick="btMemory_Click" runat="server"
            width="35"/>
      </td>
      <td width="58"></td>
      <td width="32">
         <asp:button id="bt7" Text="7"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="bt8" Text="8"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="bt9" Text="9"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="btDivide" Text="/"
            OnClick="btOperator_Click" runat="server"
            width="35"/><p>
      </td>
      <td style="width: 32px">
         <asp:button id="btSqrt" Text="sqrt"
            OnClick="btSpecOperator_Click" runat="server"
            width="35"/><p>
      </td>
   </tr>
   <tr>
      <td width="32" valign="top">
         <asp:button id="btMR" Text="MR"
            OnClick="btMemory_Click" runat="server"
            width="35"/>
      </td>
      <td width="8"></td>
      <td width="32">
         <asp:button id="bt4" Text="4"
            OnClick="btNumber_Click"
            runat="server" width="35"/><p>  
      </td>
      <td width="32">
         <asp:button id="bt5" Text="5"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="bt6" Text="6"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="btMultiply" Text="*"
            OnClick="btOperator_Click" runat="server"
            width="35"/><p>
      </td>
      <td style="width: 32px">
         <asp:button id="btPercent" Text="%"
            OnClick="btOperator_Click" runat="server"
            width="35"/><p>
      </td>
   </tr> 
   <tr>
      <td width="32" valign="top">
         <asp:button id="btMS" Text="MS"
            OnClick="btMemory_Click" runat="server"
            width="35"/>
      </td>
      <td width="8"></td>
      <td width="32">
         <asp:button id="bt1" Text="1"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>  
      </td>
      <td width="32">
         <asp:button id="bt2" Text="2"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="bt3" Text="3"
            OnClick="btNumber_Click" runat="server"
            width="35"  /><p>
      </td>
      <td width="32">
         <asp:button id="btSubtract" Text="-"
            OnClick="btOperator_Click" runat="server"
            width="35"/><p>
      </td>
      <td style="width: 32px">
         <asp:button id="btOneOver" Text="1/x"
            OnClick="btSpecOperator_Click" runat="server"
            width="35"/><p>
      </td>
   </tr>
   <tr>
      <td width="32" valign="top">
         <asp:button id="btMP" Text="M+"
            OnClick="btMemory_Click" runat="server"
            width="35"/>
      </td>
      <td width="8"></td>
      <td width="32">
         <asp:button id="bt0" Text="0"
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>  
      </td>
      <td width="32">
         <asp:button id="btNegate" Text="+/-"
            OnClick="btSpecOperator_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="btDot" Text="."
            OnClick="btNumber_Click" runat="server"
            width="35"/><p>
      </td>
      <td width="32">
         <asp:button id="btAdd" Text="+"
            OnClick="btOperator_Click" runat="server"
            width="35"/><p>
      </td>
      <td style="width: 32px">
         <asp:button id="btEqual" Text="="
            OnClick="btEqual_Click" runat="server"
            width="35"/><p>
      </td>
   </tr>
   </table>
</asp:Panel>
<input type="hidden" id="hiddenvalue" value=""
   runat="server" />
<input type="hidden" id="hiddenoperator" value=""
   runat="server" />
        <br />
        前一次操作是否为“=”?<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
        <br />
        Bug to fix<br />
        理想状态:<br />
        1、如果操作输入数字指令时 前一次按下的是"等于"
        <br />
        则再按下数字时理应应该清空tbNumber(相当于btClear_Click事件)<br />
        2、如果输入等于时 前一次也是等于 则理应再进行前一次运算<br />
        <br />
        这2条已经写进代码,自己设计的语句前也加进这2条注释,但是运行仍旧原样。<br />
        <br />
        源码打包下载:<a href="calculator.rar">calculator.aspx&nbsp; _fcksavedurl=""calculator.rar">calculator.aspx&nbsp;" calculator.aspx.vb</a></div>
    </form>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值