VB计算器项目算法结构分析

还是做得不太好,多多指教啊,关注这方面的

 

初始化:显示屏数字【dataout.Caption】为0

1.第一个因数的提取

当是第一次点击数字时(程序初始化时,结果已经计算出准备下一次时,清零键按下时)

   --dataout.Caption=””

   --dataout.Caption=dataout.Caption& Index

解释:此处的目的是:点击后初始的显示屏数字变为点击的数字,之后点击的进行拼接

当不是第一次点击时

 --dataout.Caption=dataout.Caption& Index

 

需要考虑的问题是:此处计算机工作标准resflag是未完成的

此出预先解释下,数字0-9,符号+-*/是两个数字数组按钮控制的,关于如何做出来,以数字0-9按钮为例:

这 10 个按钮使用的名称都是num

只是 Index 属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建

立一个按钮(num),然后在 num上击鼠标右键,选择复制(Copy),

然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,

选择“是”,重复上面步骤,直至创立 10个按钮为止。

 

2关于符号的提取

符号数组sign对应的每一个元素都有唯一的Index

当触发时,完成两件事:

1.情况:需考虑【dataout.Caption】的非法性,

 行为:将【dataout.Caption】赋值给全局变量Num1,需要字符串到数值的转换,有  value,clng,cint各种。考虑到小数的计算,使用了value

 办法:【dataout.Caption】!=“”

2.情况:需考虑当+-*/点击多次时

 行为:将每个符号对应的index赋值给全局变量signope(rate)

 办法:当点击多次时,直接不管他,使用exit sub

 

3.关于结果的结算

利用”=”按钮的点击操作

3.1对第二个因数的取值

首先解释为什么上图中为什么在将第一个因数提取后将【dataout.Caption】清空?

因为这个版本的计算器是利用显示屏的字符串来转换为浮点型数字来确定的,如果为了   效果将+-*/(其他符号如(),sin,con,tan等)显示在屏上的话,第二个因数很难提取, 迄今还未想好,(大神看到的话,提示下,谢啦)不得不用这种方法来提取

Eg:     Num2=valdataout.Caption);

3.2要考虑该操作是在计算状态下的操作,否则结果已经计算完成,当你不停点击”=”    按钮,内存中的因数:num1Num2仍不停操作

    解决办法:利用resflag标志位:

          If  not resflag  then

              计算

          Else 

显示屏显示上一个计算结果

3.2根据全局变量符号标志来确定+-*/操作

   在符号按钮数组中,利用Index(是不是和上2类似)确定,使用VB中的select语句。

   问题1:考虑分母为0的情况

      办法:在是除法且分母为零时,特别输出为“无穷”

   问题2:当只用一个因数,却按下一个符号时,令显示屏显示第一个因数

           当直接按下=按钮,令显示屏显示上一个结果

 

注意的地方:结果计算完成后、清零按钮后,就要像程序刚启动时思考了:

 

计算完成后的状态改变标志位:计算完成标志resflag0,小数点标志清0,第一个数标志清0

 

额外按钮,直接贴代码吧,晕了

Backspace按钮:

 

清零C按钮

 

小数点按钮.

避免多次出现小数点

 

   

 

          

 

 

 

 

代码如下 <%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Class Ent Public Shared total, num1, num2 As String Public Shared sign As String Public Shared Sub click(ByVal a As String) total = total + a End Sub End Class Sub Count() Ent.num2 = TextBox1.Text Try Select Case Ent.sign Case "+" TextBox1.Text = CStr(CDbl(Ent.num1) + CDbl(Ent.num2)) Case "-" TextBox1.Text = CStr(CDbl(Ent.num1) - CDbl(Ent.num2)) Case "*" TextBox1.Text = CStr(CDbl(Ent.num1) * CDbl(Ent.num2)) Case "/" TextBox1.Text = CStr(CDbl(Ent.num1) / CDbl(Ent.num2)) End Select Catch ex As Exception Label1.Text = "同志请不要那数字以外的字符开计算器的玩笑!" TextBox1.Text = "0" Ent.total = "0" Ent.sign = "" End Try Ent.total = "" Ent.sign = "" End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("1") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("2") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("3") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("4") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("5") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("6") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("7") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button8_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("8") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button9_Click(ByVal sender As Object, ByVal e As System.EventArgs) Ent.click("9") TextBox1.Text = Ent.total Call CleanLabel() End Sub Protected Sub Button10_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(Ent.total) > 0 Then Call CleanLabel() Ent.click("0") TextBox1.Text = Ent.total End If End Sub Protected Sub Button18_Click(ByVal sender As Object, ByVal e As System.EventArgs) Call CleanLabel() Ent.total = "" Ent.sign = "" TextBox1.Text = "0" End Sub Protected Sub Button11_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(Ent.total) >= 0 Then If InStr(Ent.total, ".") = 0 Then Ent.click(".") TextBox1.Text = Ent.total End If End If Call CleanLabel() End Sub Protected Sub Button12_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(Ent.sign) = 1 Then Call Count() Ent.num1 = TextBox1.Text Ent.sign = "+" Else Ent.num1 = TextBox1.Text TextBox1.Text = "0" Ent.total = "" Ent.sign = "+" End If End Sub Protected Sub Button16_Click(ByVal sender As Object, ByVal e As System.EventArgs) Call Count() End Sub Protected Sub Button13_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(Ent.sign) = 1 Then Call Count() Ent.num1 = TextBox1.Text Ent.sign = "-" Else Ent.num1 = TextBox1.Text TextBox1.Text = "0" Ent.total = "" Ent.sign = "-" End If End Sub Protected Sub Button14_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(Ent.sign) = 1 Then Call Count() Ent.num1 = TextBox1.Text Ent.sign = "*" Else Ent.num1 = TextBox1.Text TextBox1.Text = "0" Ent.total = "" Ent.sign = "*" End If End Sub Protected Sub Button15_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(Ent.sign) = 1 Then Call Count() Ent.num1 = TextBox1.Text Ent.sign = "/" Else Ent.num1 = TextBox1.Text TextBox1.Text = "0" Ent.total = "" Ent.sign = "/" End If End Sub Protected Sub Button17_Click(ByVal sender As Object, ByVal e As System.EventArgs) TextBox1.Text = "0" Ent.total = "" Call CleanLabel() End Sub Protected Sub Button19_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(TextBox1.Text) > 1 Then TextBox1.Text = Left(TextBox1.Text, (Len(TextBox1.Text) - 1)) Ent.total = TextBox1.Text Else : TextBox1.Text = "0" End If End Sub Protected Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim a As Double Try a = CDbl(TextBox1.Text) Call CleanLabel() Catch ex As Exception Label1.Text = "同志请不要那数字以外的字符开计算器的玩笑!" TextBox1.Text = "0" Ent.total = "0" Ent.sign = "" End Try End Sub Sub CleanLabel() Label1.Text = "" End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>计算器</title> </head> <body> <form id="form1" runat="server"> <div style=" text-align :center "><h3>计算器</h3></div> <div style=" text-align :center "> <asp:Label ID="Label1" runat="server" ForeColor="Red"></asp:Label>  <table style=" width: 164px; border :ridge 1px #000000"> <tr> <td style="width: 187px"> <div style=" text-align :center "> <asp:TextBox ID="TextBox1" runat="server" BorderStyle="Solid" BorderWidth="1px" Width="180px" CausesValidation="True" OnTextChanged="TextBox1_TextChanged" ForeColor="Transparent">0</asp:TextBox> </div> </td> </tr> <tr> <td style="width: 187px; height: 23px;"> <asp:Button ID="Button19" runat="server" OnClick="Button19_Click" Text="BackSpace" Width="72px" UseSubmitBehavior="False" /> <asp:Button ID="Button17" runat="server" Text="CE" OnClick="Button17_Click" Width="48px" UseSubmitBehavior="False" /> <asp:Button ID="Button18" runat="server" Text="C" OnClick="Button18_Click" Width="47px" UseSubmitBehavior="False" /> </td> </tr> <tr><td style="width: 187px;"><asp:Button ID="Button7" runat="server" Text="7" OnClick="Button7_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button8" runat="server" Text="8" OnClick="Button8_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button9" runat="server" Text="9" OnClick="Button9_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button15" runat="server" Text="/" OnClick="Button15_Click" Width="40px" UseSubmitBehavior="False" /></td></tr> <tr><td style="width: 187px;"> <asp:Button ID="Button4" runat="server" Text="4" OnClick="Button4_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button5" runat="server" Text="5" OnClick="Button5_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button6" runat="server" Text="6" OnClick="Button6_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button14" runat="server" Text="*" OnClick="Button14_Click" Width="40px" UseSubmitBehavior="False" /></td></tr> <tr><td style="width: 187px;"> <asp:Button ID="Button1" runat="server" Text="1" OnClick="Button1_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button2" runat="server" Text="2" OnClick="Button2_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button3" runat="server" Text="3" OnClick="Button3_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button13" runat="server" Text="-" OnClick="Button13_Click" Width="40px" UseSubmitBehavior="False" /></td></tr> <tr><td style="width: 187px;"> <asp:Button ID="Button10" runat="server" Text="0" OnClick="Button10_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button11" runat="server" Text="." OnClick="Button11_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button12" runat="server" Text="+" OnClick="Button12_Click" Width="40px" UseSubmitBehavior="False" /> <asp:Button ID="Button16" runat="server" Text="=" OnClick="Button16_Click" Width="40px" UseSubmitBehavior="False" /></td></tr> </table> </div> </form> </body> </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值