如何制作一个vb计算器_第1页
如何制作一个vb计算器_第2页
如何制作一个vb计算器_第3页
如何制作一个vb计算器_第4页
如何制作一个vb计算器_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

- 1 -如何制作一个 VB 计算器功能说明:支持加、减、乘、除、取反、阶乘、x 的 y 次方、括号按键重新分配、提高了工作效率窗口过渡动画实时输入纠错,计算纠错其它经典实用的小功能期待发现与添加界面预览:前期准备:有 Microsoft Visual Basic 开发平台,懂基本的 VB 语法(有明白时查资料就行了)计算顺序为 () 、!、*/、取反、加减算法为:首先扫描出()内需要优先计算的部分,将这部分用来计算依照计算顺序进行计算用计算结果替换原()联同()内表达式循环直至只剩下一个数据- 2 -结果的处理主要内容:怎样扫描出各个计算符号和需要运算的数据,怎样纠错,后面会详细介绍开始动手之窗体设计:(1)新建工程标准 exeForm 属性:BordStyle=1,Caption=计算器,FillStyle=1,Height=4455,Width=7995, (近似的黄金分割)Picture 自己找一张图片(2)菜单工程部件控件勾选 Microsoft Forms 2.0 Object Library确定(3)在新出现的控件中添加一个 Textbox名称=tb,Backstyle=0,Boardstyle=1,Height=3615,Left=0,Top=0,Width=7995,Font 适当(4)一个 Image名称=img,Height=3615,Left=0,Top=0,Width=7995(尺寸位置与 Textbox 相同),visibal=false,stretch=true,Picture 自己找一张图片(5)在新出现的控件中添加一个 Label将长度调整为与窗体同长,高度刚好可以填补视界中两张图片的差,放过去填补这个差,这样应该懂了用意了吧,Backstyle=0,Boardstyle=0 , Caption 随意,Font 适当用鼠标点选这个标签,ctrl+c,ctrl+v 创建数组,放到适当位置,重复总共放置 5 个,包含原来的那个。把 它们依次排开吧,赋上不同的 Caption 作为区分,怕麻烦就 12345 吧,不怕麻烦就, , , , ,哎呀,自己想显示啥就写啥(6)在新出现的控件中添加再两个 Label所有 Label 的形状相同(为的是节约空间,简洁好看麻) , visable=false,名称分别为Label2 和 lb3(7)5 个 Timer按下 F5 欣赏到效果如下:写程序啦- 3 -本程序由标签循环显示动画、弹出按键分配动画、错误提示动画和计算部分四个部分组成,下面分别介绍如何实现上述部分。标签循环显示动画:首先是 Label()数组及时间控件的初始化,双击窗体,添加以下程序Private Sub Form_Load()For i = 0 To 4/把这个标签数组重叠,初始化显示的位置Label1(i).Visible = FalseLabel1(i).Top = 3600 Label1(i).Left = 0Next iLabel1(0).Visible = TrueTimer1.Interval = 2000/显示 2 秒钟后显示下一条提示Timer2.Interval = 50/移动时间间隔Timer1.Enabled = TrueTimer2.Enabled = FalseEnd Sub 要达到的效果就是。*按键循环滚动动画*再添加以下程序Private Sub Timer1_Timer()If i = 5 ThenLabel1(0).Visible = TrueLabel1(1).Visible = FalseLabel1(2).Visible = FalseLabel1(3).Visible = FalseLabel1(4).Visible = FalseLabel1(0).Top = 3600Label1(1).Top = 3600Label1(2).Top = 3600Label1(3).Top = 3600Label1(4).Top = 3600i = 0End IfTimer2.Enabled = Truei = i + 1End SubPrivate Sub Timer2_Timer()Label1(i - 1).Top = Label1(i - 1).Top + 50If i = 5 ThenLabel1(0).Visible = TrueLabel1(0).Top = 3600Exit Sub- 4 -End IfLabel1(i).Visible = TrueEnd Sub在代码窗口的顶端选通用声明加上Dim i As Integer/就定义了一个 i 的全局变量接下来就可以按下 F5 看看这个动画了。*错误提示动画添加以下程序Private Sub Timer5_Timer()If lb3.Top tb.Height Thenlb3.Top = lb3.Top - 150Elselb3.Top = tb.HeightIf c 0 ThenTimer3.Enabled = Falseimg.Top = 0End IfEnd SubPrivate Sub Timer4_Timer()img.Top = img.Top - 100If img.Top 0 ThenFor i = 1 To nans = ans * iNext ifac = ansElsefac = 1End IfEnd Function完整的 KeyDown 程序为Private Sub tb_KeyDown(KeyCode As MSForms.ReturnInteger, Shift As Integer)Dim i, j, p, q, m, flag, flag1, flag2, flag3 As IntegerDim b As DoubleDim s, inexp, expression, temp, s1, msg As String禁止修改已计算过的内容If tb.SelStart + cur_l 0 ThenFor i = tb.SelStart + cur_l To 1 Step -1Select Case Mid(tb.Text, i, 1)Case 0 To 9, “.“dot_s = Mid(tb.Text, i, 1) & dot_sCase Elseflag = iIf 光标位置+补偿(光标前一个字符位置) tb.SelStart + cur_l Or InStr(1, expression, “(“) = 0 Thenkeycode=noti( “)前无匹配的(“)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“Case Elsekeycode=noti( “)前缺少操作数“)End SelectEnd IfEnd IfCase vbKey6If Shift = 1 ThenIf tb.SelStart = 0 Thenkeycode=noti( “前缺少操作数 “)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“- 12 -Case Elsekeycode=noti( “前缺少操作数 “)End SelectEnd IfEnd IfCase vbKey1If Shift = 1 ThenIf tb.SelStart = 0 Thenkeycode=noti( “!前缺少操作数“)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“Case Elsekeycode=noti( “!前缺少操作数“)End SelectEnd IfEnd IfCase vbKeySpace, 190If InStr(1, dot_s, “.“) tb.SelStart + cur_l Or InStr(1, expression, “(“) = 0 Thenkeycode=noti( “)前无匹配的(“)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“KeyCode = 41SendKeys “+0“Case Elsekeycode=noti( “)前缺少操作数“)End SelectEnd IfCase vbKeyW, vbKeyE, vbKeyR, vbKeyTIf tb.SelStart = 0 Thenkeycode=noti( “语法错误:+前缺少操作数 “)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“KeyCode = vbKeyAddCase Elsekeycode=noti( “语法错误: +前缺少操作数“)End SelectEnd IfCase vbKeyZ, vbKeyX, vbKeyC, vbKeyV, 189If expression = “ Or tb.SelStart = 0 ThenKeyCode = vbKeySubtractElse- 14 -Select Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“, “(“KeyCode = vbKeySubtractCase Elsekeycode=noti(“语法错误:-前缺少操作数“)End SelectEnd IfCase vbKeyY, vbKeyU, vbKeyI, vbKeyOIf tb.SelStart = 0 Thenkeycode=noti(“语法错误:*前缺少操作数 “)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“KeyCode = vbKeyMultiplyCase Elsekeycode=noti( “语法错误: *前缺少操作数“)End SelectEnd IfCase vbKeyB, vbKeyN, vbKeyM, 188, 191If tb.SelStart = 0 Thenkeycode=noti( “语法错误:/ 前缺少操作数“)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“KeyCode = vbKeyDivideCase Elsekeycode=noti( “语法错误: /前缺少操作数“)End SelectEnd IfCase vbKeyP, 219, 220, 221If tb.SelStart = 0 Thenkeycode=noti( “语法错误:前缺少操作数 “)ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“KeyCode = 41SendKeys “+6“Case Elsekeycode=noti(“语法错误: 前缺少操作数“)End SelectEnd IfCase 192, 9, vbKeyQIf tb.SelStart = 0 Thenkeycode=noti( “语法错误:!前缺少操作数“)- 15 -ElseSelect Case Mid(tb.Text, tb.SelStart + cur_l, 1)Case 0 To 9, “!“, “)“KeyCode = 41SendKeys “+1“Case Elsekeycode=noti( “语法错误: !前缺少操作数“)End SelectEnd IfCase vbKey2, vbKey3, vbKey4, vbKey5, vbKey7, 189, 190, 191, 192, 219, 220, 221, 222, 186If Shift = 1 ThenKeyCode = 93End IfCase vbKeyDeletetb.Text = “store_s = 0cur_l = 0Case vbKeyEscapeEndEnd SelectIf KeyCode = 13 Or (KeyCode = 187 And Shift = 0) ThenIf expression “ Thenmsg = “不认识这些诶:“ & sGoTo skipEnd If结尾不为)或数字或阶乘Select Case Right(expression, 1)Case 0 To 9, “)“, “!“Case Elsemsg = “你可以给一个完整的表达式的吧“GoTo skipEnd Select- 16 -()匹配纠错If InStrRev(tb.Text, “(“) InStrRev(tb.Text, “)“) Thenmsg = “()对未匹配 “GoTo skipEnd Ifflag = 0flag1 = 0For i = 1 To Len(expression)Select Case Mid(expression, i, 1)Case “(“flag = flag + 1Case “)“flag1 = flag1 + 1Case ElseEnd SelectNext iIf flag 0 Then 有(flag = InStrRev(temp, “(“)flag1 = InStr(flag + 1, temp, “)“)inexp = Mid(temp, flag + 1, flag1 - flag - 1)If Left(inexp, 1) = “-“ And InStr(2, inexp, “?“) 0 Thens = “s1 = “flag = 0flag1 = 1flag2 = Len(inexp) + 1flag3 = 0For i = InStr(2, inexp, “) - 1 To 1 Step -1Select Case Mid(inexp, i, 1)Case “+“, “*“, “/“, “(“flag = ii = -1Case “)“flag1 = 0Case “-“If flag1 = 0 Thens = Mid(inexp, i, 1) & sElseflag = ii = -1End IfCase 0 To 9, “.“s = Mid(inexp, i, 1) & sEnd SelectNext iFor j = InStr(2, inexp, “) + 1 To Len(inexp)Select Case Mid(inexp, j, 1)Case “, “+“, “*“, “/“, “)“flag2 = jj = Len(inexp) + 1Case “)“flag2 = jj = Len(inexp) + 1Case “(“flag3 = 1Case “-“- 19 -If flag3 = 1 Thens1 = s1 & Mid(inexp, j, 1)Elseflag2 = jj = Len(inexp) + 1End IfCase 0 To 9, “.“s1 = s1 & Mid(inexp, j, 1)End SelectNext jmsg = “出现了无法计算的:(“ & s & “)“ & “(“ & s1 & “)“On Error GoTo skipIf s s1 0 Or InStr(2, inexp, “/“) 0 And Mid(inexp, Abs(InStr(q, inexp, “-“) - 1), 1) “(“)For p = 2 To Len(inexp)Select Case Mid(inexp, p, 1)计算加Case “+“s = “s1 = “- 23 -flag = 0flag1 = 1flag2 = Len(inexp) + 1flag3 = 0For i = InStr(2, inexp, “+“) - 1 To 1 Step -1Select Case Mid(inexp, i, 1)Case “+“, “*“, “/“, “(“flag = ii = -1Case “)“flag1 = 0Case “-“If flag1 = 0 Or i = 1 Thens = Mid(inexp, i, 1) & sElseflag = ii = -1End IfCase Elses = Mid(inexp, i, 1) & sEnd SelectNext is = Left(s, Len(s) - 1) 向前找出被加数For j = InStr(2, inexp, “+“) + 1 To Len(inexp)Select Case Mid(inexp, j, 1)Case “, “+“, “*“, “/“flag2 = jj = Len(inexp) + 1Case “)“flag2 = jj = Len(inexp) + 1Case “(“flag3 = 1Case “-“If flag3 = 1 Thens1 = s1 & Mid(inexp, j, 1)Elseflag2 = jj = Len(inexp) + 1End IfCase 0 To 9, “.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论