你当前的位置:首页 > 教学教研 > 理工类论文
实用计算器之程序设计
时间:2012-12-02 19:22:06  来源:本站  作者:周文忠

  [摘 要]多用计算器的构思及设计代码
  [关键词]多用计算器;设计
  数值计算可以说是日常最频繁的工作了,WIN98提供了“计算器”软件供用户使用,该软件可以处理一般的一步四则运算,例如:3+2、5/3等等,但在日常中用户经常遇到多步四则运算问题,例如:3+4*5-4/2,45*34/2+18*7等等,那么该个计算器就无法胜任了,作者制作了一个实用的计算器,该计算器新增不少功能:(程序界面如图)
  1.可以实现连续的四则运算
  2.可以实现输入式子的显示
  3.可以方便计算个人所得税
  4.鼠标、键盘均可输入数据
  5.操作界面友好
  6.击键可发声
  构建该个计算器所需研究及解决的核心问题有如下几个:1、连乘求值?2、字符显示 3、键盘输入?4、击键发声?5、个人所得税法规,为了使大家对程序有更一步认识,现将代码提供给读者参考:
  *定义数组及窗体变量
  Dim number2(0 To 50) As Double
  Dim number(0 To 50) As Double
  Dim z As Integer
  Dim k As Integer, r As Integer
  Dim j As Integer
  Dim str As String
  *调用名为“playsound”的API函数
  Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
  Private Const SND_FILENAME = &H20000?
  Private Const SND_ASYNC = &H1?
  Private Const SND_SYNC = &H0
  *判断通用过程
  Sub pianduan(p As String)
  r = 0
  Dim i As Integer, l As Integer, h As Integer
  h = 0
  i = 1
  If InStr(Trim$(p), "*") <> 0 Then
  k = k + 1
  End If
  If InStr(Trim$(p), "/") <> 0 Then
  r = r + 1
  End If
  End Sub
  *连乘通用过程(略)
  *各按钮事件过程
  Private sub Command1_Click(Index As Integer)
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Text1.Text = Text1.Text + Command1(Index)。Caption
  Text2.Text = Text2.Text + Command1(Index)。Caption
  Text1.SetFocus
  End Sub
  rivate sub Command10_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  str = Text3.Text
  End Sub
  Private sub Command11_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Text3.Text = str
  End Sub
  rivate sub Command2_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Dim totle As Double
  Dim n As Integer
  Call pianduan(Text1.Text)
  If k >= 1 Or r >= 1 Then
  Call liancheng(totle)
  number2(z) = totle
  If Mid$(Trim$(Text1.Text), 1, 1) = "-" Then
  number2(z) = -totle
  End If
  k = 0: r = 0
  Else
  number2(z) = Val(Text1.Text)
  End If
  Text1.Text = ""
  Text2.Text = Text2 + "+"
  z = z + 1
  Text1.SetFocus
  End Sub
  rivate sub Command3_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Dim totle As Double
  Dim n As Integer
  Call pianduan(Text1.Text)
  If k >= 1 Or r >= 1 Then
  Call liancheng(totle)
  number2(z) = totle
  If Mid$(Trim$(Text1.Text), 1, 1) = "-" Then
  number2(z) = -totle
  End If
  k = 0: r = 0
  Else
  number2(z) = Val(Text1.Text)
  End If
  Text1.Text = ""
  Text2.Text = Text2 + "-"
  Text1.Text = Text1.Text & "-"
  z = z + 1
  Text1.SetFocus
  End Sub
  Private sub Command4_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Text2.Text = Text2.Text + "*"
  Text1.Text = Text1.Text + "*"
  Text1.SetFocus
  End Sub
  rivate sub Command5_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Text2.Text = Text2 + "/"
  Text1.Text = Text1 + "/"
  Text1.SetFocus
  End Sub
  Private sub Command6_Click()
  PlaySound App.Path & "\sound.wav", 0, SND_SYNC
  Dim totle As Double
  Dim n As Integer
  Call pianduan(Text1.Text)
  If k >= 1 Or r >= 1 Then
  Call liancheng(totle)
  number2(z) = totle
  If Mid$(Trim$(Text1.Text), 1, 1) = "-" Then
  number2(z) = -totle
  End If
  k = 0: r = 0
  Else
  number2(z) = Val(Text1.Text)
  End If
  Text1.Text = ""
  z = z + 1
  Dim dengyu As Double
  Dim v As Integer
  For v = 0 To 50
  dengyu = dengyu + number2(v)
  Next v
  If dengyu < 0 Then
  Text3.ForeColor = &HFF&
  Else
  Text3.ForeColor = &HFF0000
  End If
  Text3.Text = dengyu
  Text1.SetFocus
  If Len(Text3.Text) >= 14 Then
  calcresult.Show
  End If
  End Sub
  rivate sub Command7_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  z = 0: k = 0: r = 0: j = 0
  Dim i As Integer
  For i = 0 To 50
  number(i) = 0
  number2(i) = 0
  Next i
  Text1.Text = ""
  Text2.Text = ""
  Text3.Text = ""
  Text1.SetFocus
  End Sub
  rivate sub Command8_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  If Val(Text3.Text) = 0 Then
  MsgBox "除数不能为0!"
  Exit Sub
  End If
  Text3.Text = 1 / Val(Text3.Text)
  End Sub
  Private sub Command9_Click()
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Text3.ForeColor = &HFF0000
  Text3.Text = Val(Text3.Text) * Val(Text3.Text)
  End Sub
  rivate sub muninternet_Click()
  Dim i
  i = Shell("C:\Program Files\InternetExplorer\iexplore.exe", vbMaximizedFocus)
  End Sub
  rivate sub munmp3_Click()
  Dim i
  i = Shell("C:\Program Files\Windows Media Player\mplayer2", vbNormalNoFocus)
  End Sub
  Private sub munsm_Click()
  Dialog.Show
  End Sub
  rivate sub muntax_Click()
  tax.Show
  End Sub
  rivate sub munver_Click()
  ver.Show
  End Sub
  rivate sub notepad_Click()
  Dim i
  i = Shell("c:\windows\notepad", vbNormalFocus)
  End Sub
  Private sub Text1_KeyPress(KeyAscii As Integer)
  PlaySound App.Path & "\start.wav", 0, SND_SYNC
  Dim num As Integer
  num = Val(KeyAscii)
  If num > 47 And num < 58 Then
  Text1.Text = Text1.Text + CStr(num - 48)
  Text2.Text = Text2.Text + CStr(num - 48)
  End If
  If num = 46 Then
  Text1.Text = Text1.Text + "."
  Text2.Text = Text2.Text + "."
  End If
  If KeyAscii = 43 Then
  Dim totle As Double
  Dim n As Integer
  Call pianduan(Text1.Text)
  If k >= 1 Or r >= 1 Then
  Call liancheng(totle)
  number2(z) = totle
  If Mid$(Trim$(Text1.Text), 1, 1) = "-" Then
  number2(z) = -totle
  End If
  k = 0: r = 0
  Else
  number2(z) = Val(Text1.Text)
  End If
  Text1.Text = ""
  Text2.Text = Text2 + "+"
  z = z + 1
  End If
  If KeyAscii = 45 Then
  Call pianduan(Text1.Text)
  If k >= 1 Or r >= 1 Then
  Call liancheng(totle)
  number2(z) = totle
  If Mid$(Trim$(Text1.Text), 1, 1) = "-" Then
  number2(z) = -totle
  End If
  k = 0: r = 0
  Else
  number2(z) = Val(Text1.Text)
  End If
  Text1.Text = ""
  Text2.Text = Text2 + "-"
  Text1.Text = Text1.Text & "-"
  z = z + 1
  End If
  If KeyAscii = 42 Then
  Text2.Text = Text2.Text + "*"
  Text1.Text = Text1.Text + "*"
  End If
  If KeyAscii = 47 Then
  Text2.Text = Text2.Text + "/"
  Text1.Text = Text1.Text + "/"
  End If
  If KeyAscii = vbKeyReturn Then
  PlaySound App.Path & "\sound.wav", 0, SND_SYNC
  Call pianduan(Text1.Text)
  If k >= 1 Or r >= 1 Then
  Call liancheng(totle)
  number2(z) = totle
  If Mid$(Trim$(Text1.Text), 1, 1) = "-" Then
  number2(z) = -totle
  End If
  k = 0: r = 0
  Else
  number2(z) = Val(Text1.Text)
  End If
  Text1.Text = ""
  z = z + 1
  Dim dengyu As Double
  Dim v As Integer
  For v = 0 To 50
  dengyu = dengyu + number2(v)
  Next v
  If dengyu < 0 Then
  Text3.ForeColor = &HFF&
  Else
  Text3.ForeColor = &HFF0000
  End If
  Text3.Text = dengyu
  End If
  If KeyAscii = vbKeyEscape Then
  z = 0: k = 0: r = 0: j = 0
  Dim i As Integer
  For i = 0 To 50
  number(i) = 0
  number2(i) = 0
  Next i
  Text1.Text = ""
  Text2.Text = ""
  Text3.Text = ""
  Text1.SetFocus
  End If
  If Len(Text3.Text) >= 14 Then
  calcresult.Show
  End If
  End Sub
  rivate sub Text3_Change()
  tax2.Text1 = Text3.Text
  End Sub
  由于连乘求值及个人所得税计算的代码较繁杂,限于篇幅,代码将在以后发表,对程序有好的建议,请发电子邮件至 manmanman@21cn.com