搜档网
当前位置:搜档网 › VB设计计算器实验报告

VB设计计算器实验报告

VB设计计算器实验报告
VB设计计算器实验报告

VB设计计算器实验报告

姓名:

专业:

学号:

二〇一一年十一月七日

设计功能完整的计算器,实现如下图所示按钮(除“MC”,“MR”,“MS”,“M+”)及菜单功能,如图:

一、解题思路、分析:

对于我来说,设置一个完整的计算器是一个艰巨的任务,一开始想了一小段时间,自己试着编了一些,但就是无法达到一个完整的计算器,于是,就到网上去下载了一些有关计算器的程序进行参考分析。首先先定义一些量,比如说前后两个操作数op1、op2,小数点是否真存在的量DecimalFlag,操作数个数NumOps,上一次按键的类型等。接着对窗体进行初始化,同时设置所有变量为其初始。然后对各个键盘的命令进行编写程序,对0---9按键设置为一个按键命令组,编写一个程序,同时加减乘除设置一个命令组,也编写一个程序,其他按键都各自设置为一个命令,分别单独进行编写程序。同时在多个命令中都要对显示器中的小数点进行分析,看它是否是真实存在。同时对于除法分母是否为0,也要加以考虑。

二、源程序:

Option Explicit

Dim Op1, Op2 ' 前面输入的操作数

Dim DecimalFlag As Integer ' 小数点仍然存在吗?

Dim NumOps As Integer ' 操作数个数

Dim LastInput ' 指示上一次按键事件的类型

Dim OpFlag ' 指示未完成的操作

Dim TempReadout

' 窗体的初始化过程

' 设置所有变量为其初始值

Private Sub Form_Load()

DecimalFlag = False

NumOps = 0

LastInput = "NONE"

OpFlag = " "

Text1.Text = Format(0, "0.")

'Decimal.Caption = Format(0, ".")

End Sub

' 退格键

Private Sub Command1_Click()

If Len(Text1.Text) = 1 Then

Text1.Text = Format(0, "0.")

DecimalFlag = False

LastInput = "NONE"

Else

If Text1.Text = "0." Then

Text1.Text = "0."

DecimalFlag = False

LastInput = "NONE"

Else

Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)

End If

End If

End Sub

Private Sub Command2_Click()

' CE (取消输入) 按钮的 Click 事件过程

Text1.Text = Format(0, "0.")

DecimalFlag = False

LastInput = "CE"

End Sub

Private Sub Command3_Click()

' C (取消) 按钮的 Click 事件过程

' 重新设置显示并初始化变量

Text1.Text = Format(0, "0.")

Op1 = 0

Op2 = 0

Form_Load

End Sub

Private Sub Command8_Click(Index As Integer)

' 数字键 (0-9) 的 Click 事件过程

' 向显示中的数追加新数

If LastInput <> "NUMS" Then

Text1.Text = Format(0, ".")

DecimalFlag = False

End If

If DecimalFlag Then

Text1.Text = Text1.Text + Command8(Index).Caption

Else

Text1.Text = Left(Text1.Text, InStr(Text1.Text, Format(0, ".")) - 1) + Command8(Index).Caption + Format(0, ".") End If

If LastInput = "NEG" Then Text1.Text = "-" & Text1.Text

LastInput = "NUMS"

End Sub

Private Sub Command11_Click(Index As Integer)

' 运算符 (+, -, x, /, =) 的 Click 事件过程

' 如果接下来的按键是数字键,增加 NumOps。

' 如果有一个操作数,则设置 Op1。

' 如果有两个操作数,则将 Op1 设置为 Op1 与

' 当前输入字符串的运算结果,并显示结果( CDbl 或 CSng 函数强制进行双精度或单精度算术运算)

TempReadout = Text1.Text

If LastInput = "NUMS" Then

NumOps = NumOps + 1

End If

Select Case NumOps

Case 0

If Command11(Index).Caption = "-" And LastInput <> "NEG" Then

Text1.Text = "-" & Text1.Text

LastInput = "NEG"

End If

Case 1

Op1 = Text1.Text

If Command11(Index).Caption = "-" And LastInput <> "NUMS" And OpFlag <> "=" Then

Text1.Text = "-"

LastInput = "NEG"

End If ' 3--3=6

Case 2

Op2 = TempReadout

Select Case OpFlag

Case "+"

Op1 = CDbl(Op1) + CDbl(Op2)

Case "-"

Op1 = CDbl(Op1) - CDbl(Op2)

Case "*"

Op1 = CDbl(Op1) * CDbl(Op2)

Case "/"

If Op2 = 0 Then

MsgBox "除数不能为 0", 48, "计算器"

Else

Op1 = CDbl(Op1) / CDbl(Op2)

End If

Case "="

Op1 = CDbl(Op2)

Case "%"

Op1 = CDbl(Op1) * CDbl(Op2) End Select

Text1.Text = Op1

Text1.Text = Format(Text1.Text, "0.########")

NumOps = 1

End Select

If LastInput <> "NEG" Then

LastInput = "OPS"

OpFlag = Command11(Index).Caption

End If

End Sub

Private Sub Command9_Click()

Text1.Text = -Text1.Text

Text1.Text = Format(Text1.Text, "0.########")

End Sub

Private Sub Command10_Click()

' 小数点 (.) 按钮的 Click 事件过程

' 如果上一次按键为运算符,初始化 Text1.Text 为 "0."; ' 否则显示时追加一个小数点

If LastInput = "NEG" Then

Text1.Text = Format(0, "-0.")

ElseIf LastInput <> "NUMS" Then

Text1.Text = Format(0, "0.")

End If

DecimalFlag = True

LastInput = "NUMS"

End Sub

Private Sub Command12_Click()

Text1.Text = Sqr(Val(Text1.Text))

Text1.Text = Format(Text1.Text, "0.########")

End Sub

Private Sub Command13_Click()

' 百分比键 (%) 的 Click 事件过程

' 计算并显示第一个操作数的百分数

Text1.Text = Text1.Text / 100

Text1.Text = Format(Text1.Text, "0.########")

LastInput = "Ops"

OpFlag = "%"

NumOps = NumOps + 1

DecimalFlag = True

End Sub

Private Sub Command14_Click()

If Val(Text1.Text) = 0 Then

MsgBox ("分母不能为零")

Else

Text1.Text = 1 / Val(Text1.Text)

Text1.Text = Format(Text1.Text, "0.########")

End If

End Sub

三、实验心得:

通过这次实验将书本上的知识掌握的更加透彻,不仅仅是简单的记忆,更是将知识融会贯通,学以致用!看着自己将一个完整的计算器编译出来,心中很是激动,感觉计算机的神奇,而在这之前是未曾想过的,所以更加强了我学习VB程序设计这门课程的爱好。在未来学习的日子里我依然会继续努力学习这门课程,因为它的实用、“神奇”深深的吸引了我!

如有侵权请联系告知删除,感谢你们的配合!

相关主题