Visual Basic项目开发案例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第4章 科学计算器

随着电子技术的发展,计算器的功能越来越强大,精度越来越高,性能越来越好,可以实现复杂的科学计算,Windows系统也自带了一个功能强大的计算器。本章要设计一个科学计算器,除了基本的四则运算之外,还有三角与反三角、对数与反对数、乘方与幂运算等。

4.1 需求分析

科学计算器除了具有普通计算器的标准功能之外,还具有很多其他数据计算功能。本章设计的科学计算器包括以下功能。

(1)具有小数点后10位以上的精度。

(2)可以直接输出随机数、圆周率、自然对数的底数和重力加速度等常用常数。

(3)可以输入0~9、00、小数点等数字或数学符号,并能对数字取反。

(4)能够计算加、减、乘、除四则运算。

(5)可以计算倒数、平方、立方、开方和任意乘方或幂指运算,以及阶乘运算。

(6)能够计算以10为底的对数和自然对数,以及自然对数为底的幂运算。

(7)具有三角与反三角函数的计算功能,并能在角度、弧度和梯度之间进行换算。

(8)可以将数据记录到内存中,并能将输入的数据和内存中的数据进行四则运算。

(9)能够实现数据的统计计算,包括和、平均值和方差。

(10)可以对计算或输入的结果进行复制,也能通过粘贴方式向计算器输入数字。图4-1为科学计算器的界面图。

图4-1 科学计算器界面图

4.2 技术要点

本章设计的科学计算器具有开关功能,该功能是使用OptionButton控件实现的,分别是On和Off按钮。OptionButton控件可以实现“两者必,居其一”的功能,通过设置其Style属性,该控件的外观可以与CommandButton控件相同。2nd按钮用于选择二次功能,该按钮是CheckBox控件,其设置与OptionButton控件相同。

Back按钮是后退,CE按钮是清除屏幕和内存中的所有数据,C按钮是清除屏幕中的数据。

Deg、Rad和Grd按钮用于切换角度单位表示方法。Deg按钮表示度数、Rad按钮表示弧度、Grd按钮表示梯度。

Sin、Cos和Tan按钮是用于计算三角与反三角函数的。三角与反三角功能的切换是通过2nd按钮实现的。当3个按钮显示Sin、Cos和Tan时,计算三角函数。当3个按钮显示ArcSin、ArcCos和ArcTan时,计算反三角函数。角度单位的切换是由Deg、Rad和Grd按钮实现的。

MR按钮用于向内存中记录数据,MC按钮用于清除内存中的数据。M+、M-、M×和M/分别表示对内存中的数据进行加减乘除计算的运算符。

1/x、x^2、x^3、x^y、和e(x)按钮分别用于计算各种乘方和幂指运算。n!按钮用于计算阶乘。

Sta、Ave、Sum、s和Dat按钮用于统计计算。Sta按钮用于启动或关闭统计功能。Dat按钮用于输入统计数据,这些统计数据列在ListBox控件中。

Rnd、π、e和g按钮分别用于输入随机数、圆周率、自然对数的底数和重力加速度。

Log按钮用于计算以10为底的对数。Ln按钮用于计算自然对数。

+/-按钮用于对屏幕中的数据取反。00按钮可以连续输入两个0。使用0~9和00按钮输入数字时,需要分清是连续输入还是清除后输入两种情况。输入小数点时,也有类似的注意点。

此外,计算器的显示屏是Label控件,可以防止用户对其误输入。

4.3 系统结构

本章设计的科学计算器主要使用CommandButton、CheckBox和OptionButton控件作为按钮,Label控件作为显示屏。创建一个新的工程,添加一个Form窗体,根据图4-1在该Form窗体上添加相应控件。工程的对象及其属性值,如表4-1所示。

表4-1 工程的对象及其属性值

(续表)

此外,还要为Form窗体添加一个菜单栏,用于实现数据的复制和粘贴功能,Form窗体的菜单栏列表如表4-2 所示。其中,“编辑”菜单项为不可见,“复制”和“粘贴”菜单项为可见。

表4-2 菜单栏列表

4.4 实现过程

根据运算功能的不同,大致可以将科学计算器程序分为变量声明和初始化、清除数据、数据输入、四则运算、乘方和幂指运算、对数运算、阶乘运算、三角与反三角函数运算、内存中的数字运算、统计计算和数据复制与粘贴等。

4.4.1 程序初始化

在设计具体的计算程序之前,需要声明很多变量,并进行程序的初始化。在科学计算器程序中,各种计算功能都涉及一些存储变量,需要在通用代码段进行声明。程序代码如程序清单4-1所示。

清单4-1变量声明

        1.   Private strCalculateType As String    '存放运算类型
        2.   Private blnCalFlag As Boolean       '标记是否已经输入加数、或减数等
        3.
        4.   Private dblNum1 As Double         '存放被加数、或被减数、或被乘数、或被除数等
        5.   Private dblNum2 As Double         '存放加数、或减数、或乘数、或除数等
        6.
        7.   Private dblMemo As Double     '内存中的数
        8.
        9.   Private dblSum As Double          '统计中计算的和
        10.   Private dblAve As Double          '统计中计算的平均值
        11.   Private dbls As Double        '统计中计算的方差
       12.
        13.   Private dblAngle As Double         '三角计算中的角度
        14.
       15.   Const pi=3.1415926536           '常数π
        16.   Const e=2.7182818285            '自然对数的底数
        17.   Const g=9.86                  '重力加速度

程序说明:第1~2行声明的变量用于标记运算的类型和判断数字的输入情况,第4~11行声明的变量用于存放运算中的临时值或中间结果,第13行的变量用于存储三角和反三角函数计算中的角度的不同表示方法,第15~17行声明了三个常用的常数。

科学计算器程序中主要通过Label和CammandButton控件实现用户操作的。在程序加载的时候,需要初始化其中的部分控件,以及程序清单4-1 中声明的变量。程序代码如程序清单4-2所示。

清单4-2初始化控件和变量

        1.   Private Sub Form_Load()
        2.       Dim i As Integer
        3.
        4.       '初始化显示屏和关闭按钮
        5.       lblScreen="0"
        6.       lblScreen.BackColor=vbBlack
        7.       optOff.Value=True
        8.
        9.       '初始化运算符类型和标记变量
        10.      strCalculateType=""
        11.      blnCalFlag=False
        12.
        13.      '初始化内存变量
        14.      dblMemo=0
        15.
        16.      '初始化统计计算的控件及其变量
        17.      For i=1 To 4
        18.         cmdStatistic.Item(i).Enabled=False
        19.      Next
        20.      lstStatistic.Visible=False
        21.      dblSum=0
        22.      dblAve=0
        23.      dbls=0
        24.
        25.      '初始化角度控件及其变量
        26.      cmdAngle.Item(0).FontBold=True
        27.      cmdAngle.Item(1).FontBold=False
        28.      cmdAngle.Item(2).FontBold=False
        29.      cmdAngle.Item(0).FontItalic=True
        30.      cmdAngle.Item(1).FontItalic=False
        31.      cmdAngle.Item(2).FontItalic=False
        32.      dblAngle=pi/180
        33.   End Sub

程序说明:上述程序段主要是根据不同的计算功能来初始化控件和变量的,第26~32行初始化角度控件及其变量。角度的度量分为度数、弧度和梯度三种,三者之间存在固定的数学关系,系统默认的角度单位是度数。

4.4.2 清除数据

计算器通常都具备数据清除功能,最常用的是清除屏幕数据。本章设计的计算器具有3种清除数据的功能,分别是清除屏幕数据、清除屏幕和内存中的数据、输入错误时后退逐个清除数字。程序代码如程序清单4-3所示。

清单4-3清除数据

        1.   Private Sub cmdClear_Click(Index As Integer)            '清除数据
        2.       Select Case Index
        3.          Case 0                                  '清除屏幕数据
        4.              lblScreen="0"
        5.          Case 1                                  '清除所有数据
        6.              dblMemo=0
        7.              lblScreen="0"
        8.              strCalculateType=""
        9.              blnCalFlag=False
        10.         Case 2                                  '后退
        11.             If(lblScreen<>"")Then
        12.                lblScreen=Mid(lblScreen,1,Len(lblScreen)-1)
        13.             End If
        14.             blnCalFlag=True
        15.      End Select
        16.   End Sub

程序说明:第3行是清除屏幕数据,第4~9行是清除所有数据,包括屏幕和内存变量中的数据。第11~14行是通过If判断语句逐个清除数字,实现后退功能。

在科学计算器的界面中,清除屏幕数据对应的是C按钮,清除所有数据对应的是CE按钮,后退对应的是Back按钮。

4.4.3 数据输入

计算器的数据输入主要分为数字输入、常数输入、小数点输入和数据取反。程序代码如程序清单4-4所示。

清单4-4数据输入

        1.   Private Sub cmdNumber_Click(Index As Integer)          '数字输入
        2.       If lblScreen="0"Then
        3.          lblScreen=""
        4.       End If
        5.
        6.       If blnCalFlag=False Then
        7.          If Index=10 Then
        8.              lblScreen="00"
        9.          Else
        10.             lblScreen=CStr(Index)
        11.         End If
        12.         blnCalFlag=True
        13.      Else
        14.         If Index=10 Then
        15.             lblScreen=lblScreen+"00"
        16.         Else
        17.          lblScreen=lblScreen+CStr(Index)
        18.         End If
        19.      End If
        20.   End Sub
        21.
        22.   Private Sub cmdConstNums_Click(Index As Integer)        '常数输入
        23.      Select Case Index
        24.         Case 0'输出随机数
        25.             Randomize
        26.             lblScreen=Rnd
        27.         Case 1'输出pi
        28.             lblScreen=pi
        29.         Case 2'输出e
        30.             lblScreen=e
        31.         Case 3'输出g
        32.             lblScreen=g
        33.      End Select
        34.
        35.      blnCalFlag=False
        36.   End Sub
        37.
        38.   Private Sub cmdPoint_Click()                        '输入小数点
        39.      If blnCalFlag=True Then
        40.         If InStr(1,lblScreen,".")=0 Then
        41.            If lblScreen<>""Then
        42.                lblScreen=lblScreen+"."
        43.             Else
        44.                lblScreen="0."
        45.             End If
        46.         End If
        47.      Else
        48.         If blnCalFlag=False Then
        49.             lblScreen="0."
        50.             blnCalFlag=True
        51.         End If
        52.      End If
        53.   End Sub
        54.
        55.   Private Sub cmdPlusMinus_Click()                    '数字取反
        56.      lblScreen=Val(lblScreen)*-1
        57.   End Sub

程序说明:第1~20行用于实现数字输入,包括0~9和00。数字的输入有两种情况:一种是数字的连续输入,如输入一个3位数;另一种是得到计算结果后重新输入其他数字,此时即使没有按清除按钮,也需要清除屏幕重新输入数字。第22~36行是常用常数输入,第38~53行是小数点输入。小数点输入也分为两种情况:一种是在数字输入过程中输入小数点,那么如果该数字中没有小数点就输入一个小数点,如果已有小数点就不响应用户输入;另一种是计算得到结果后,此时如果没有按清除按钮,就要输入“0.”。第56行通过乘于-1的方法对当前的数据取反,从执行结果来看,就是输入“+/-”号。

4.4.4 四则运算

四则运算涉及两个运算数,在输入四则运算符号的时候,需要记录该运算类型和第一个运算数。程序代码如程序清单4-5所示。

清单4-5四则运算

        1.   Private Sub cmdArithmetic_Click(Index As Integer)         '四则运算
        2.       Select Case Index
        3.          Case 0'输入加法
        4.              cmdEqual_Click
        5.              strCalculateType="+"
        6.              dblNum1=Val(lblScreen)
        7.          Case 1'输入减法
        8.              cmdEqual_Click
        9.              strCalculateType="-"
        10.             dblNum1=Val(lblScreen)
        11.         Case 2'输入乘法
        12.             cmdEqual_Click
        13.             strCalculateType="*"
        14.             dblNum1=Val(lblScreen)
        15.         Case 3'输入除法
        16.             cmdEqual_Click
        17.             strCalculateType="/"
        18.             dblNum1=Val(lblScreen)
        19.      End Select
        20   End Sub

程序说明:第4行是在输入“+”号之前先调用计算程序计算现有结果,第5行需要使用strCalculateType变量记录计算类型“+”,第6 行是记录被加数,减、乘和除的处理方法是相同的。

科学计算器中很多都是单个运算数的计算,使用等于号计算结果的一般是四则运算和任意次乘方或幂指运算,该运算涉及两个运算数。程序代码如程序清单4-6所示。

清单4-6等于号计算结果程序

        1.   Private Sub cmdEqual_Click()
        2.       dblNum2=Val(lblScreen)
        3.
        4.       If strCalculateType="/"Then
        5.          lblScreen=dblNum1/dblNum2
        6.       ElseIf strCalculateType="*"Then
        7.          lblScreen=dblNum1*dblNum2
        8.       ElseIf strCalculateType="-"Then
        9.          lblScreen=dblNum1-dblNum2
        10.      ElseIf strCalculateType="+"Then
        11.         lblScreen=dblNum1+dblNum2
        12.      ElseIf strCalculateType="x^y"Then
        13.         lblScreen=dblNum1^dblNum2
        14.      End If
        15.
        16.      strCalculateType=""
        17.      blnCalFlag=False
        18.   End Sub

程序说明:第2行是记录运算的第2个运算数,第4~11行是计算四则运算的结果,第13 行是计算乘方或幂指运算结果。计算结束后,需要通过第16~17 行的程序初始化用于记录运算情况的变量。

4.4.5 乘方和幂指运算

本章将倒数、平方、立方和平方根等运算都放在乘方和幂指运算功能块中实现。程序代码如程序清单4-7所示。

清单4-7乘方和幂指运算

        1.   Private Sub cmdPower_Click(Index As Integer)
        2.       Dim dblTemp As Double
        3.       dblTemp=Val(lblScreen)
        4.
        5.       Select Case Index
        6.          Case 0                          '求倒数
        7.              If Val(lblScreen)<>0 Then
        8.                 lblScreen=1/dblTemp
        9.              Else
        10.                lblScreen="ERR"
        11.             End If
        12.         Case 1                          '求平方
        13.             lblScreen=dblTemp^2
        14.         Case 2                          '求立方
        15.             lblScreen=dblTemp^3
        16.         Case 3                          '求y次方
        17.             strCalculateType="x^y"
        18.             dblNum1=Val(lblScreen)
        19.         Case 4                          '求平方根
        20.             If Val(lblScreen)>=0 Then
        21.                lblScreen=Sqr(dblTemp)
        22.             Else
        23.                lblScreen="ERR"
        24.             End If
        25.         Case 5                          '求e的x次方
        26.                lblScreen=Exp(dblTemp)
        27.      End Select
        28.
        29.      blnCalFlag=False
        30.   End Sub

程序说明:第6~11行是求倒数,需要注意的是要将除数为0区分开来。第12~15行是求平方和立方,比较简单。第16~18行是求任意数的任意次乘方或幂,这是涉及两个运算数的计算,需要将第一个运算数记录下来,通过按等于号按钮来计算结果。第19~24行是求平方根,要注意区分被开方的数不小于0。第25~26行是计算以自然对数的底数为底的指数。

4.4.6 对数运算

常用的对数运算有两种,分别是以10为底的对数和自然对数。程序代码如程序清单4-8所示。

清单4-8对数运算

        1.   Private Sub cmdLog_Click(Index As Integer)             '求对数
        2.       Select Case Index
        3.          Case 0                                  '求10为底的对数
        4.              If Val(lblScreen)>0 Then
        5.                 lblScreen=Log(Val(lblScreen))/Log(10)
        6.              Else
        7.                 lblScreen="ERR"
        8.              End If
        9.          Case 1                                  '求自然对数
        10.             If Val(lblScreen)>0 Then
        11.                lblScreen=Log(Val(lblScreen))
        12.             Else
        13.                lblScreen="ERR"
        14.             End If
        15.      End Select
        16.
        17.      blnCalFlag=False
        18.   End Sub

程序说明:第11行是计算自然对数,直接使用Log函数即可实现。第5行是计算以10为底的对数,是通过计算自然对数进行转换实现的。

4.4.7 阶乘运算

阶乘是一种整数的连乘运算,可以通过For循环语句来实现。程序代码如程序清单4-9所示。

清单4-9阶乘运算

        1.   Private Sub cmdN_Click()                           '求n的阶乘
        2.       Dim i As Integer
        3.       Dim lngSum As Long
        4.
        5.       lngSum=1
        6.
        7.       If Val(lblScreen)>=1 Then
        8.          For i=1 To Int(Val(lblScreen))
        9.              lngSum=lngSum*i
        10.         Next
        11.         lblScreen=lngSum
        12.      Else
        13.         lblScreen="ERR"
        14.      End If
        15.
        16.      blnCalFlag=False
        17.   End Sub

程序说明:第8~10行就是通过For循环语句计算阶乘,从1一直乘到输入的整数。本段程序将用户输入的数据自动转换为整数,负数没有阶乘运算。

4.4.8 三角与反三角函数运算

计算三角及其反三角函数的按钮是相同的,其不同的功能是通过2nd这个二次功能按钮加以实现的。三角与反三角函数运算中的另一个需要注意的地方就是角度的表示方法,不同的表示,得到的结果之间存在一定的数学联系。程序代码如程序清单4-10所示。

清单4-10三角与反三角函数运算

        1.   Private Sub chk2nd_Click()                      '设置二次功能键
        2.       If optOn.Value=True Then
        3.          If chk2nd.Value=1 Then                '设置计算反三角函数
        4.              cmdSin.Caption="ArcSin"
        5.              cmdCos.Caption="ArcCos"
        6.              cmdTan.Caption="ArcTan"
        7.          Else                               '设置计算三角函数
        8.              cmdSin.Caption="Sin"
        9.              cmdCos.Caption="Cos"
        10.             cmdTan.Caption="Tan"
        11.         End If
        12.      End If
        13.   End Sub
        14.
        15.   Private Sub cmdAngle_Click(Index As Integer)        '角度转换
        16.      Select Case Index
        17.         Case 0
        18.             cmdAngle.Item(0).FontBold=True
        19.             cmdAngle.Item(1).FontBold=False
        20.             cmdAngle.Item(2).FontBold=False
        21.             cmdAngle.Item(0).FontItalic=True
        22.             cmdAngle.Item(1).FontItalic=False
        23.             cmdAngle.Item(2).FontItalic=False
        24.             dblAngle=pi/180
        25.         Case 1
        26.             ……
        27.             dblAngle=1
        28.         Case 2
        29.             ……
        30.             dblAngle=pi/200
        31.      End Select
        32.   End Sub

程序说明:第3~6行是2nd按钮按下时计算反三角函数,第7~10行是2nd按钮弹上时计算三角函数。2nd按钮事实上是CheckBox控件,通过设置其Style属性即可将其设置为ConnandButton控件的外观。第17~24行是设置角度的表示方法为度数,此时需要将度数、弧度和梯度的按钮控件进行一些设置,以示区分,并要计算角度系数变量。第26行和第29 行中的省略号省略了弧度和梯度时的按钮控件进行设置,其设置方法与第18~24 行相似。

三角函数的计算包括正弦、余弦和正切三种,反三角函数的计算包括反正弦、反余弦和反正切三种,三种三角函数与反三角函数的程序设计思路和方法是相似的。程序代码如程序清单4-11所示。

清单4-11正弦与反正弦函数运算

        1.   Private Sub cmdSin_Click()                          '求sin或arcsin
        2.       '求Sin
        3.       If chk2nd.Value=0 Then
        4.          lblScreen=Sin(dblAngle*Val(lblScreen))
        5.
        6.       '求arcsin
        7.       Else
        8.          Select Case Val(lblScreen)
        9.              Case 1
        10.                lblScreen=pi/2/dblAngle
        11.             Case-1
        12.                lblScreen=-pi/2/dblAngle
        13.             Case Else
        14.                If Val(lblScreen)>-1 And Val(lblScreen)<1 Then
        15.                    lblScreen=Atn(Val(lblScreen)/Sqr(1-Val(lblScreen)^2))_
        16.                              /dblAngle
        17.                Else
        18.                    lblScreen="ERR"
        19.                End If
        20.         End Select
        21.      End If
        22.
        23.      blnCalFlag=False
        24.   End Sub

程序说明:第4行是计算正弦函数,直接使用Sin函数即可,Sin函数默认的角度单位是弧度。因此,在计算的时候,需要乘上一个角度系数,该系数由变量dblAngle表示,在程序清单4-2和4-10中都对该变量进行了相应赋值。第8~20行根据反三角函数的自变量范围对反三角函数进行分段计算。同时,在计算结果中要除以角度系数dblAngle。

本段程序只给出了正弦与反正弦函数运算的代码。余弦与反余弦、正切与反正切的程序代码设计与本段代码相似,在此就不详细列出来了,读者可以参考光盘中的源程序。

4.4.9 内存中的数字运算

计算器一般都可以在内存中记录一个数据,并能对内存中的数据进行四则运算。内存中的数字运算是通过特有的加减乘除按钮实现的,因而不影响普通计算,也不受其他运算影响,本章也设计了内存中的数字运算功能。程序代码如程序清单4-12所示。

清单4-12内存中的数字运算

        1.   Private Sub cmdMemory_Click(Index As Integer)          '内存中的数字运算
        2.       Select Case Index
        3.          Case 0
        4.              dblMemo=dblMemo+Val(lblScreen)
        5.          Case 1
        6.              dblMemo=dblMemo-Val(lblScreen)
        7.          Case 2
        8.              dblMemo=dblMemo*Val(lblScreen)
        9.          Case 3
        10.             If Val(lblScreen)<>0 Then
        11.                dblMemo=dblMemo/Val(lblScreen)
        12.            Else
        13.                lblScreen="ERR"
        14.             End If
        15.         Case 4
        16.             lblScreen=Str(dblMemo)
        17.             prev=Val(lblScreen)
        18.         Case 5
        19.             dblMemo=0
        20.      End Select
        21.
        22.      blnCalFlag=False
        23.   End Sub

程序说明:第2~20行通过Select选择语句实现向内存中记录数字,以及对内存中数字进行加减乘除四则运算。其计算的方法与普通四则运算相同,只是其中的一个运算数存储在内存中。

4.4.10 统计计算

统计计算是科学计算器的一项基本功能之一。本章设计的计算器程序也具有统计计算功能,能够通过列出输入的统计数据计算和、平均数和方差。程序代码如程序清单4-13所示。

清单4-13统计计算

        1.   Private Sub cmdStatistic_Click(Index As Integer)           '统计计算
        2.       Dim i As Integer
        3.       Dim dbls2 As Double
        4.
        5.       Select Case Index
        6.          Case 0                                  '启动和关闭统计计算
        7.              If lstStatistic.Visible=True Then
        8.                 For i=1 To 4
        9.                     cmdStatistic.Item(i).Enabled=False
        10.                Next
        11.                frmMain.Height=8250
        12.                lstStatistic.Visible=False
        13.                lstStatistic.Clear
        14.                frmMain.Height=7000
        15.                dblSum=0
        16.                dblAve=0
        17.                dbls=0
        18.
        19.                lblScreen="0"
        20.             Else
        21.                If optOn.Value=True Then
        22.                    For i=1 To 4
        23.                       cmdStatistic.Item(i).Enabled=True
        24.                    Next
        25.                    lstStatistic.Visible=True
        26.                    lstStatistic.Clear
        27.                    frmMain.Height=8300
        28.                End If
        29.             End If
        30.         Case 1                                  '计算平均值
        31.             If lstStatistic.ListCount>0 Then
        32.                dblAve=dblSum/lstStatistic.ListCount
        33.                lblScreen=dblAve
        34.             End If
        35.         Case 2                                  '计算和
        36.             lblScreen=dblSum
        37.         Case 3                                  '计算均方差
        38.             dbls2=0
        39.             If lstStatistic.ListCount>1 Then
        40.                For i=0 To lstStatistic.ListCount-1
        41.                    dbls2=dbls2+(Val(lstStatistic.List(i))-dblAve)^2
        42.                Next
        43.                dbls=Sqr(dbls2/(lstStatistic.ListCount-1))
        44.                lblScreen=dbls
        45.             Else
        46.                lblScreen="ERR"
        47.             End If
        48.         Case 4                                  '输入统计数据
        49.             lstStatistic.AddItem lblScreen
        50.             dblSum=dblSum+Val(lblScreen)
        51.             dblAve=dblSum/lstStatistic.ListCount
        52.             lblScreen="0"
        53.      End Select
        54.   End Sub

程序说明:第7~19行是关闭统计计算功能。第21~29行是启动统计计算功能。启动统计计算功能时,计算器会展开一个列表控件,该列表控件可以查看已经输入的统计数据。第30~36行就是直接输出统计数据的和与平均数。第40~44行是通过For循环语句计算方差。第49行是将输入的统计数据在列表控件中列出来。第50~51行分别在数据输入的时候计算和,以及平均数。如此,在用户按下Sum和Ave按钮的时候直接将此处的结果显示出来,而不要使用循环语句重新计算。

与和计算和平均数计算不同,方差的计算是使用For循环语句实现的,而没有在数据输入时进行计算。原因是每次数据输入都可能导致平均数的变化,没有必要每次都要使用循环语句进行计算。

4.4.11 数据复制与粘贴

Windows系统自带的计算器在菜单栏中设计了“复制”与“粘贴”功能,实现计算结果的复制与计算数据的粘贴输入。本章通过弹出式菜单的形式,为计算器设计“复制”与“粘贴”功能。程序代码如程序清单4-14所示。

清单4-14数据编辑

        1.   Private Sub lblScreen_MouseDown(Button As Integer,_
        2.              Shift As Integer,X As Single,Y As Single)
        3.       If Button=2 And optOn.Value=True Then
        4.          PopupMenu mnuEdit
        5.       End If
        6.   End Sub
        7.
        8.   Private Sub mnuCopy_Click()
        9.       Clipboard.SetText lblScreen,vbCFRTF
        10.   End Sub
        11.
        12.   Private Sub mnuPaste_Click()
        13.      lblScreen=Clipboard.GetText(vbCFRTF)
        14.   End Sub

程序说明:第1~6行是在屏幕上右击鼠标时,弹出“复制”与“粘贴”菜单,第8~10行是执行复制功能,第12~14行是执行粘贴功能。