软件注册站
热情软件屋

 
如何编写计算器程序
编号: QA003062    
建立日期: 2000年6月19日 最后修改日期: 2005年4月17日
所属类别: Visual Basic - 新手问题
   
    你好请教你一个VB的问题!!
    我是个初学者,在书上遇到一个很菜很菜的问题,昨晚搞了好久,摆不平.....我是昨天下午开始学VB的,书上的习题叫我编个计算器,只要求0-9,+,—,=
    我是这么做的
    Private Sub c0_Click()
    t1.Text = t1.Text & c0.Caption
    End Sub
    
    Private Sub c1_Click()
    t1.Text = t1.Text & c1.Caption
    End Sub
    
    Private Sub c11_Click()
    t1.Text = t1.Text & c11.Caption
    End Sub
    
    Private Sub c12_Click() { 这搞不懂!!}
    t1.Text = t3.Text & t4.text & t1.Text
    t3.Text = ""
    t2.Text = ""
    End Sub
    
    Private Sub c13_Click()
    t2.Text = t1.Text {这+法也搞不懂}
    t1.Text = ""
    t3.Text = t2.Text + t1.Text
    t4.Text = "+"
    End Sub
    
    Private Sub c15_Click()
    t1.Text = ""
    End Sub
    
    Private Sub c2_Click()
    t1.Text = t1.Text & c2.Caption
    End Sub
    
    Private Sub c3_Click()
    t1.Text = t1.Text & c3.Caption
    End Sub
    
    Private Sub c4_Click()
    t1.Text = t1.Text & c4.Caption
    End Sub
    
    Private Sub c5_Click()
    t1.Text = t1.Text & c5.Caption
    End Sub
    
    Private Sub c6_Click()
    t1.Text = t1.Text & c6.Caption
    End Sub
    
    Private Sub c7_Click()
    t1.Text = t1.Text & c7.Caption
    End Sub
    
    Private Sub c8_Click()
    t1.Text = t1.Text & c8.Caption
    End Sub
    
    Private Sub c9_Click()
    t1.Text = t1.Text & c9.Caption
    End Sub
    

    在c13_click()时遇到的问题不知该怎么办老是+不了。cxx就是Commandbutton。请各位大侠帮帮忙,我可是整宿没睡,可我高不定又睡不着我明天还要上课呢, 多谢了!!! (tootall6)
   
    你编程的思路非常混乱,简直不知道你的程序在干什么。要进行计算,你必须先使用Val函数将字符型的Text属性转换为数字型,否则你进行“+”运算只能是字符串加法而不是你想要的数学运算。
    下面是葡萄提供的一个例子:
    1、建立14个按钮,按钮的名字都要Command1,设置Index属性,0~9分别对应数字0~9,10为小数点,11为等号,12~14分别对应+、-、*和/。
    2、输入如下代码:
    Dim Num1, Num2 As Single
    Dim StrNum1, StrNum2 As String
    Dim FirstNum As Boolean
    Dim PointFlag As Boolean
    Dim Runsign As Integer
    Dim SignFlag As Boolean
    Private Sub Command1_Click(Index As Integer)
    Select Case Index
     Case 0 To 9
     If FirstNum Then
     StrNum1 = Str(Index)
     FirstNum = False
     Else
     StrNum1 = LTrim(StrNum1) + LTrim(Str(Index))
     End If
     Text1.Text = Val(StrNum1)
     Case 10
     If Not PointFlag Then
     If FirstNum Then
     StrNum1 = "0."
     FirstNum = False
     Else
     StrNum1 = LTrim(StrNum1) + LTrim(".")
     End If
     Else
     Exit Sub
     End If
     PointFlag = True
     Text1.Text = Val(StrNum1)
     Case 12 To 15
     FirstNum = True
     PointFlag = False
     If SignFlag Then
     Call Run
     Else
     SignFlag = True
     StrNum2 = StrNum1
     StrNum1 = ""
     End If
     Runsign = Index - 11
     Case 11
     On Error Resume Next
     If Not SignFlag Then
     Text1.Text = StrNum1
     equal = Val(StrNum1)
     FirstNum = True
     PointFlag = False
     Else
     Call Run
     SignFlag = False
     End If
     Case Else
     Call ClearData
    End Select
    End Sub
    Private Sub Form_Load()
    If App.PrevInstance Then MsgBox "请不要多次运行此程序,谢谢!", vbAbortRetryIgnore: Unload Me
    Num1 = 0
    Num2 = 0
    StrNum1 = ""
    StrNum2 = ""
    FirstNum = True
    PointFlag = False
    Runsign = 0
    SignFlag = False
    End Sub
    Sub Run()
     On Error Resume Next
     Dim equal As Single
     Dim equal2 As Double
     Num1 = Val(StrNum2)
     Num2 = Val(StrNum1)
     Select Case Runsign
     Case 1
     equal = Num1 + Num2
     If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
     equal = 0
     equal2 = Num1 + Num2
     End If
     Case 2
     equal = Num1 - Num2
     If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
     equal = 0
     equal2 = Num1 - Num2
     End If
     Case 3
     equal = Num1 * Num2
     If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
     equal = 0
     equal2 = Num1 * Num2
     End If
     Case 4
     equal = Num1 / Num2
     If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
     equal = 0
     equal2 = Num1 / Num2
     End If
     End Select
     If equal = 0 Then a = equal2 Else a = equal
     StrNum2 = Str(a)
     StrNum1 = StrNum2
     Text1.Text = Val(StrNum2)
    End Sub
    Sub ClearData()
     Num1 = 0
     Num2 = 0
     StrNum1 = ""
     StrNum2 = ""
     FirstNum = True
     PointFlag = False
     Runsign = 0
     SignFlag = False
     Text1.Text = 0
    End Sub
    

    程序运行效果如下图所示,完整程序下载:Calc.zip
    

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 新手问题, newbie, faq

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio