vb 制作简易计算器
功能要求: 1、 能进行加减乘除4种运算 2、 可以清除运行结果 3、 输错的数字可以退格改正
追问:写一下 做这题的感受 遇到什么问题 什么的 谢谢 老师留得作业
功能要求: 1、 能进行加减乘除4种运算 2、 可以清除运行结果 3、 输错的数字可以退格改正
追问:写一下 做这题的感受 遇到什么问题 什么的 谢谢 老师留得作业
答案:初学者的VB计算器
窗体代码如下
Option Explicit
Dim blnStratrOperationFlag As Boolean '是否开始运算
Dim lngOperationFlag As Long '运算标志
Dim dblFirstOperationValue As Double '先前的操作数
Private Sub cmdValuedDecimal_Click(Index As Integer) '数字及小数点
Select Case Index
Case 0
AddTextOperationValue "0"
Case 1
AddTextOperationValue "1"
Case 2
AddTextOperationValue "2"
Case 3
AddTextOperationValue "3"
Case 4
AddTextOperationValue "4"
Case 5
AddTextOperationValue "5"
Case 6
AddTextOperationValue "6"
Case 7
AddTextOperationValue "7"
Case 8
AddTextOperationValue "8"
Case 9
AddTextOperationValue "9"
Case 10
AddTextOperationValue "."
End Select
End Sub
Private Sub AddTextOperationValue(strOperationValue As String)
If Len(txtOperationValue) > 8 And blnStratrOperationFlag = False Then Exit Sub '判断是否输入数字超过9个
If txtOperationValue = "0" And strOperationValue = "0" Then Exit Sub '是否什么也没输入或为0时候输入0则退出
If lngOperationFlag <> 0 And blnStratrOperationFlag = True Then '如果有操作符且开始运算为真则
txtOperationValue = ""
blnStratrOperationFlag = False
End If
If txtOperationValue = "0" And strOperationValue <> "." Then txtOperationValue = "" '头次输入数字
If Right$(txtOperationValue, 1) = "." And strOperationValue = "." Then Exit Sub '避免多次输入小数点
txtOperationValue = txtOperationValue & strOperationValue '累加字符
End Sub
Private Sub cmdOperation_Click(Index As Integer) '+ - * / =
Select Case Index
Case 0
lngOperationFlag = 1
Evaluate
Case 1
lngOperationFlag = 2
Evaluate
Case 2
lngOperationFlag = 3
Evaluate
Case 3
lngOperationFlag = 4
Evaluate
Case 4
DisposeResult
End Select
End Sub
Private Sub Evaluate() '四则运算赋值
dblFirstOperationValue = Val(txtOperationValue)
blnStratrOperationFlag = True
txtOperationValue = ""
End Sub
Private Sub DisposeResult() '处理计算结果
On Error GoTo ToExit '打开错误陷阱
Select Case lngOperationFlag '操作标志
Case 1
txtOperationValue = dblFirstOperationValue + Val(txtOperationValue)
Case 2
txtOperationValue = dblFirstOperationValue - Val(txtOperationValue)
Case 3
txtOperationValue = dblFirstOperationValue * Val(txtOperationValue)
Case 4
txtOperationValue = dblFirstOperationValue / Val(txtOperationValue)
End Select
lngOperationFlag = 0 '操作标志清0
Exit Sub
ToExit:
MsgBox "除数不能为0!", vbOKOnly, "错误"
Resume Next
End Sub
Private Sub cmdClearAll_Click() 'C按钮清除所有的运算结果
lngOperationFlag = 0
txtOperationValue = "0"
End Sub
Private Sub cmdClearLastInput_Click() 'CE按钮清除最后一次输入的数字
txtOperationValue = "0"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set frmCalculator = Nothing
End Sub
其他:这里有篇源码参考 http://wenku.zhaoxi.net/view/b46311c52cc58bd63186bd0f.html 关键你是得先熟悉计算器的计算过程 这要完全做好可不是个简单的事,你参考一下我以前做的一个例子。如果要源代码的话给我邮箱,我把这个例子发给你! 设计时使用了控件数组 cmdnum 0-9 数字 cmdCaculate 0-3 表示+-*/ 还用数组记录运算数据,考虑了括号 布局是在form_load() 中进行的,如果在窗体中做好了,可以考虑不要部分代码 下面是代码 Private number() As Double, i As Integer Private strcalculate() As String Private Sub CALCULATE(strFuhao As String) If strFuhao = "=" And strcalculate(0, i) = "" Then Exit Sub Select Case strFuhao '判断当前是什么运算符 Case "+" '刚输入+ *************************************************************************************************** strcalculate(1, i) = strFuhao Select Case strcalculate(0, i) '判断前面是什么运算 Case "+" number(0, i) = number(0, i) + Val(txtshow.Text) txtshow.Text = number(0, i) Case "-" number(0, i) = number(0, i) - Val(txtshow.Text) txtshow.Text = number(0, i) Case "*" number(0, i) = number(0, i) * Val(txtshow.Text) Select Case strcalculate(2, i) '判断乘除法前面有没有加减法要计算,有计算 Case "+" number(0, i) = number(1, i) + number(0, i) number(1, i) = 0 strcalculate(2, i) = "" Case "-" number(0, i) = number(1, i) - number(0, i) number(1, i) = 0 strcalculate(2, i) = "" End Select txtshow.Text = number(0, i) Case "/" number(0, i) = number(0, i) / Val(txtshow.Text) Select Case strcalculate(2, i) '判断乘除法前面有没有加减法要计算,有计算 Case "+" number(0, i) = number(1, i) + number(0, i) number(1, i) = 0 strcalculate(2, i) = "" Case "-" number(0, i) = number(1, i) - number(0, i) number(1, i) = 0 strcalculate(2, i) = "" End Select txtshow.Text = number(0, i) Case Else number(0, i) = txtshow.Text End Select Case "-" '刚输入- ******************************************************************************************* strcalculate(1, i) = strFuhao Select Case strcalculate(0, i) '判断前面是什么运算 Case "+" number(0, i) = number(0, i) + Val(txtshow.Text) txtshow.Text = number(0, i) Case "-" number(0, i) = number(0, i) - Val(txtshow.Text) txtshow.Text = number(0, i) Case "*" number(0, i) = number(0, i) * Val(txtshow.Text) Select Case strcalculate(2, i) '判断乘除法前面有没有加减法要计算,有计算 Case "+" number(0, i) = number(1, i) + number(0, i) number(1, i) = 0 strcalculate(2, i) = "" Case "-" number(0, i) = number(1, i) - number(0, i) number(1, i) = 0 strcalculate(2, i) = "" End Select txtshow.Text = number(0, i) Case "/" number(0, i) = number(0, i) / Val(txtshow.Text) Select Case strcalculate(2, i) '判断乘除法前面有没有加减法要计算,有计算 Case "+" number(0, i) = number(1, i) + number(0, i) number(1, i) = 0 strcalculate(2, i) = "" Case "-" number(0, i) = number(1, i) - number(0, i) number(1, i) = 0 strcalculate(2, i) = "" End Select txtshow.Text = number(0, i) Case Else number(0, i) = txtshow.Text End Select Case "*" '刚输入* ******************************************************************************************* strcalculate(1, i) = strFuhao Select Case strcalculate(0, i) Case "*" number(0, i) = number(0, i) * Val(txtshow.Text) txtshow.Text = number(0, i) Case "/" number(0, i) = number(0, i) / Val(txtshow.Text) txtshow.Text = number(0, i) Case "+", "-" number(1, i) = number(0, i) number(0, i) = Val(txtshow.Text) strcalculate(2, i) = strcalculate(0, i) Case Else number(0, i) = Val(txtshow.Text) End Select Case "/" '刚输入/ ******************************************************************************************* strcalculate(1, i) = strFuhao Select Case strcalculate(0, i) Case "*" number(0, i) = number(0, i) * Val(txtshow.Text) txtshow.Text = number(0, i) Case "/" number(0, i) = number(0, i) / Val(txtshow.Text) txtshow.Text = number(0, i) Case "+", "-" number(1, i) = number(0, i) number(0, i) = Val(txtshow.Text) strcalculate(2, i) = strcalculate(0, i) Case Else number(0, i) = txtshow.Text End Select Case "(" '刚输入前括号 ******************************************************************************************* i = i + 1 ReDim Preserve number(2, i) As Double ReDim Preserve strcalculate(2, i) As String txtshow.Text = 0 Case ")" ' 刚输入后括号 ******************************************************************************************* Select Case strcalculate(0, i) Case "+" number(0, i) = number(0, i) + Val(txtshow.Text) txtshow.Text = number(0, i) i = i - 1 '让数组最后一纬减1 ReDim Preserve number(2, i) As Double ReDim Preserve strcalculate(2, i) As String Case "-" number(0, i) = number(0, i) - Val(txtshow.Text) txtshow.Text = number(0, i) i = i - 1 '让数组最后一纬减1 ReDim Preserve number(2, i) As Double ReDim Preserve strcalculate(2, i) As String Case "*" number(0, i) = number(0, i) * Val(txtshow.Text) Select Case strcalculate(2, i) Case "+" number(0, i) = number(1, i) + number(0, i) txtshow.Text = number(0, i) i = i - 1 '让数组最后一纬减1 ReDim Preserve number(2, i) As Double ReDim Preserve strcalculate(2, i) As String Case "-" number(0, i) = number(1, i) - number(0, i) txtshow.Text = number(0, i) i = i - 1 '让数组最后一纬减1 ReDim Preserve number(2, i) As Double ReDim Preserve strcalculate(2, i) As String End Select Case Else MsgBox "括号里没有表达式!", vbSystemModal + vbInformation, "输入有误码" Exit Sub End Select Case "=" Select Case strcalculate(0, i) '判断前面是什么运算 Case "+" number(0, i) = number(0, i) + Val(txtshow.Text) txtshow.Text = number(0, i) Case "-" number(0, i) = number(0, i) - Val(txtshow.Text) txtshow.Text = number(0, i) Case "*" number(0, i) = number(0, i) * Val(txtshow.Text) Select Case strcalculate(2, i) '判断乘除法前面有没有加减法要计算,有计算 Case "+" number(0, i) = number(1, i) + number(0, i) number(1, i) = 0 strcalculate(2, i) = "" Case "-" number(0, i) = number(1, i) - number(0, i) number(1, i) = 0 strcalculate(2, i) = "" End Select txtshow.Text = number(0, i) Case "/" number(0, i) = number(0, i) / Val(txtshow.Text) Select Case strcalculate(2, i) '判断乘除法前面有没有加减法要计算,有计算 Case "+" number(0, i) = number(1, i) + number(0, i) number(1, i) = 0 strcalculate(2, i) = "" Case "-" number(0, i) = number(1, i) - number(0, i) number(1, i) = 0 strcalculate(2, i) = "" End Select txtshow.Text = number(0, i) End Select End Select strcalculate(0, i) = strcalculate(1, i) 'Case 5 ' i = i + 1 ' ReDim Preserve number(2, i) As Double ' ReDim Preserve strcalculate(2, i) As Integer ' strcalculate(1, i) = strcalculate(1, i - 1) ' GoTo calc1234 'Case 6 'End Select 'txtshow.Text = number(0, i) 'strcalculate(0, i) = strcalculate(1, i) End Sub Private Sub cmdBackspace_Click() If Len(txtshow.Text) > 1 Then txtshow.Text = Left(txtshow.Text, Len(txtshow.Text) - 1) ElseIf txtshow.Text <> "0" Then txtshow.Text = "0" End If End Sub Private Sub cmdC_Click() ReDim number(2, 0) As Double ReDim strcalculate(2, 0) As String txtshow.Text = "0" i = 0 End Sub Private Sub cmdcalculate_Click(Index As Integer) CALCULATE (cmdcalculate(Index).Caption) End Sub Private Sub cmdCE_Click() txtshow.Text = "0" End Sub Private Sub cmdnegative_Click() txtshow.Text = -Val(txtshow.Text) number(0, i) = txtshow.Text End Sub Private Sub cmdnum_Click(Index As Integer) If CStr(number(0, i)) = txtshow.Text Then txtshow.Text = "0" End If If Index = 0 And txtshow.Text = "0" Then ElseIf txtshow.Text = "0" Then txtshow.Text = Index Else txtshow.Text = txtshow.Text & Index End If End Sub Private Sub cmdparentheses_Click(Index As Integer) CALCULATE (cmdparentheses(Index).Caption) Dim intkuohao As Integer Dim strkuohao As String For intkuohao = 1 To i strkuohao = strkuohao & " (" Next intkuohao Label1.Caption = strkuohao Label1.Refresh End Sub Private Sub cmdpoint_Click() If InStr(txtshow.Text, ".") = 0 Then txtshow.Text = txtshow.Text & "." End Sub Private Sub cmdResult_Click() If i = 0 Then For intkuohao = i To 1 Step -1 CALCULATE (")") Next intkuohao End If CALCULATE (cmdResult.Caption) ReDim strcalculate(2, 0) As String ReDim number(2, 0) As Double i = 0 End Sub Private Sub Form_Load() Dim intwidth As Integer, intheight As Integer intwidth = cmdnum(0).Width + 50 intheight = cmdnum(0).Height + 50 For i = 1 To 9 cmdnum(i).Caption = i cmdnum(i).Move cmdnum(0).Left + intwidth * ((i - 1) Mod 3), cmdnum(0).Top - intheight * ((i - 1) \ 3) - intheight Next i For i = 0 To 3 cmdcalculate(i).Move cmdnum(9).Left + intwidth, cmdnum(9).Top + intheight * i Next i cmdnegative.Move cmdnum(0).Left + intwidth, cmdnum(0).Top cmdpoint.Move cmdnum(0).Left + intwidth * 2, cmdnum(0).Top cmdCE.Move cmdnum(0).Left + intwidth * 2, cmdnum(0).Top - 4 * intheight cmdC.Move cmdnum(0).Left + intwidth * 3, cmdnum(0).Top - 4 * intheight cmdResult.Move cmdnum(0).Left + intwidth * 4, cmdnum(0).Top - 4 * intheight cmdBackspace.Move cmdnum(0).Left + intwidth * 4, cmdnum(0).Top - 2 * intheight For i = 0 To 1 cmdparentheses(i).Move cmdnum(0).Left + i * intwidth, cmdnum(0).Top - 4 * intheight Next i txtshow.Move cmdnum(0).Left, cmdnum(7).Top - 3 * intheight, 5 * intwidth Label1.Move cmdnum(0).Left, cmdnum(7).Top - 3 * intheight - Label1.Height, 5 * intwidth txtshow.Text = "0" i = 0 ReDim strcalculate(2, i) As String ReDim number(2, i) As Double End Sub
上一个:跪求一个VB小游戏的代码,如俄罗斯方块,贪吃蛇等,本人初学者504977685@qq.com,
下一个:昨晚下面关于vb的题目的,我再加50!