第11章过程与函数_第1页
第11章过程与函数_第2页
第11章过程与函数_第3页
第11章过程与函数_第4页
第11章过程与函数_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、Visual BasicVisual Basic程序设计教程程序设计教程 1. 掌握数据库及数据库管理系统的概念 2. 掌握关系型数据库模型的关系(表),记录、字段、关键字、索引概念等。 3. 学会使用可视化数据管理器建立的数据库是Access数据库(类型名为.mdb) 4. 了解数据库控件的常用属性及与相关控件的绑定 5. 了解结构化查询语言SQL对数据库中的数据进行操作 本章要求:本章重点:数据库的建立与使用Visual BasicVisual Basic程序设计教程程序设计教程 在设计一个规模较大、复杂程度较高的程序时,往往在设计一个规模较大、复杂程度较高的程序时,往往根据需要按功能根据

2、需要按功能将程序分解成若干个相对独立的部将程序分解成若干个相对独立的部分分,然后对每个部分分别编写一段程序,这些程序,然后对每个部分分别编写一段程序,这些程序段称为段称为 Visual BasicVisual Basic程序设计教程程序设计教程 事件过程事件过程Sub 过程过程 通用过程通用过程 Function 过程过程是对是对进行处理的代码进行处理的代码v 二者的区别是:二者的区别是: 通用过程通用过程是由程序中的语句调用。是由程序中的语句调用。 事件过程事件过程往往是由用户事件触发。往往是由用户事件触发。Visual BasicVisual Basic程序设计教程程序设计教程 建立函数(

3、过程)的办法是:建立函数(过程)的办法是:v 进入代码窗口后,在对象框选择进入代码窗口后,在对象框选择“通用通用”,在过程框选择,在过程框选择“声名声名”,然后敲入,然后敲入Function和函数名(和函数名(Sub 和过程名)和过程名)v 进入代码窗口后,选择主窗口菜单条的进入代码窗口后,选择主窗口菜单条的“工具工具”菜单,选菜单,选择择“添加过程添加过程”项,在项,在“类型类型”框中选择框中选择“函数函数”(子程(子程序)序)Visual BasicVisual Basic程序设计教程程序设计教程 是指是指以规定语法结构组织的以规定语法结构组织的、可以被可以被重复调用的重复调用的、具有特定

4、功能的具有特定功能的、相对独立的相对独立的语句块。语句块。 声明声明 Sub 过程过程就是在就是在的代码窗口的代码窗口编写一个能实现预期功能的语句块。编写一个能实现预期功能的语句块。 () Exit Sub 过程体过程体 Visual BasicVisual Basic程序设计教程程序设计教程 (1)每个通用过程都有一个)每个通用过程都有一个同一模块中过程名不得重复。同一模块中过程名不得重复。(2)过程前加上)过程前加上Public关键字关键字或缺省,则该过程为或缺省,则该过程为,(3)过程前加上)过程前加上Private关键字关键字,则该过程为,则该过程为,只有在声明它的模块中才可以调用此过

5、程。,只有在声明它的模块中才可以调用此过程。(4)在过程名前加上)在过程名前加上Static关键字关键字,表明该过程的变,表明该过程的变量都是静态变量。量都是静态变量。(5)形参列表)形参列表是传递到过程中的变量名是传递到过程中的变量名(多个时用多个时用“,”分分隔隔),它指明了调用时传递给过程的参数的类型和个数,它指明了调用时传递给过程的参数的类型和个数,格式为:格式为:变量名变量名 AS 数据类型数据类型Visual BasicVisual Basic程序设计教程程序设计教程 Sub Tryout(x as integer, y as integer) x=x+100 y=y*6 Prin

6、t x,y End Sub (6)注意:)注意:过程可以有参数,也可以不带任何参数。过程可以有参数,也可以不带任何参数。 通用过程通用过程可以在标准模块中建立,也可以在窗体可以在标准模块中建立,也可以在窗体模块中建立。模块中建立。(7)建立通用过程可以使用以下两种方法:)建立通用过程可以使用以下两种方法:Visual BasicVisual Basic程序设计教程程序设计教程 在其他过程中执行已声明的在其他过程中执行已声明的Sub过程被称为过程被称为对对Sub 过程的调用。过程的调用。 Call 过程名过程名(实参列表实参列表) 过程名过程名 Sub 过程的调用过程的调用主过程主过程Call

7、过程过程1End Sub过程过程1Call 过程过程2End Sub过程过程2End SubVisual BasicVisual Basic程序设计教程程序设计教程 (1)可以直接调用本模块中声明的过程或)可以直接调用本模块中声明的过程或(2)当定义的过程重名时,调用过程时,过程名前应加模块名)当定义的过程重名时,调用过程时,过程名前应加模块名修饰;修饰;(3)如果要调用)如果要调用中声明的中声明的调用时过程名前调用时过程名前(4)调用)调用Sub 过程时,若省略过程时,若省略 Call ,则,则 外面外面的括号也必须省略。的括号也必须省略。(5)调用)调用Sub 过程时,每个实参可以加单独的

8、括号。过程时,每个实参可以加单独的括号。因此,因此,其数据类型需要和形参列表保持一致。其数据类型需要和形参列表保持一致。实参可以是常量、变实参可以是常量、变量、数组,或复杂表达式,但无论是什么都必须有确定的值。量、数组,或复杂表达式,但无论是什么都必须有确定的值。 Visual BasicVisual Basic程序设计教程程序设计教程 将将求三角形的面积求三角形的面积的代码存放在的代码存放在过程过程triarea(a,b,c)中中,边长从三个文本框中输入,如果符合构成三角形的条件,则,边长从三个文本框中输入,如果符合构成三角形的条件,则调用该过程,否则调用调用该过程,否则调用suberr过程

9、。过程。程序如下:程序如下:Private Sub (area As Double, x As Double, y As Double, z As Double) Dim s As Double s = (x +y + z) / 2 area = Sqr(s - x) * (s - y) * (s - z) * s)End SubPrivate Sub suberr(intyrn As Integer) intyrn = MsgBox(请检查您的数据请检查您的数据, vbYesNo + vbInformation, 数据错误数据错误)End SubVisual BasicVisual Basi

10、c程序设计教程程序设计教程 Private Sub Command1_Click() Dim a#, b#, c#, s# Dim intYesorNo As Integer a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) If a + b c And b + c a And c + a b Then Call triarea(s, a, b, c) 使用使用Call关键字,实际参数用括号括起来关键字,实际参数用括号括起来 Print 面积面积 =; s Else suberr intYesorNo 不使用不使用Call关

11、键字,实际参数不用括号关键字,实际参数不用括号 End IfEnd Sub Visual BasicVisual Basic程序设计教程程序设计教程 与与Sub 过程过程 的主要区别是:的主要区别是: Public|Private Static Function 函数过程名函数过程名 () As End Function As Visual BasicVisual Basic程序设计教程程序设计教程 函数名函数名()不能独立存在,必须参加表达式的运算。不能独立存在,必须参加表达式的运算。下面是已知直角三角形两直角边的值,计算斜边的函数。下面是已知直角三角形两直角边的值,计算斜边的函数。 fun

12、ction myfun(A as integer,B as integer) as string myfun=sqr(A*A+B*B) End functionVisual BasicVisual Basic程序设计教程程序设计教程 将例将例1中两个中两个Sub过程改为过程改为Function过程。过程。Private Function triarea( As Double, As Double, As Double) Dim s As Double s = (x + y + z) / 2 triarea = Sqr(s - x) * (s - y) * (s - z) * s)End Fun

13、ctionPrivate Sub Command1_Click() Dim a#, b#, c#, s#, intYesorNo% a = Val(Text1.Text) : b = Val(Text2.Text) c = Val(Text3.Text) If a + b c And b + c a And c + a b Then Print 面积面积 =; triarea(a, b, c) Else intYesorNo = suberr( ) 无参数时,括号不能省略无参数时,括号不能省略 End IfEnd SubVisual BasicVisual Basic程序设计教程程序设计教程

14、内部函数内部函数1.数学函数数学函数Abs( )求求绝绝对对值值函函数数Sgn( )取取符符号号函函数数,返返回回值值为为1 1 表表示示是是正正数数、0 0 为为零零、- -1 1 为为负负数数Sin( )正正弦弦函函数数Cos( )余余弦弦函函数数Tan( )正正切切函函数数Atn( )反反正正切切函函数数Exp( )指指数数函函数数Log( )自自然然对对数数函函数数Int( )取取整整函函数数Sqr( )求求平平方方根根函函数数Rnd随随机机函函数数,返返回回0 0- -1 1 之之间间的的单单精精度度随随机机数数Visual BasicVisual Basic程序设计教程程序设计教程

15、 2.字符串函数字符串函数Visual BasicVisual Basic程序设计教程程序设计教程 Sub过程和过程和Function函数过程中的函数过程中的中的参中的参数称为数称为,在程序中调用,在程序中调用Sub过程过程和和Function函数过程时函数过程时中称为实际参数中称为实际参数 。v在调用过程时,在调用过程时,就是就是把把“实参实参”依次依次按位置按位置传递给传递给被调用过程的被调用过程的“形参形参” ,然后执行被调用过程中的,然后执行被调用过程中的语句。语句。 Print greatcd(x, y) Public Function greatcd(m As Integer, n

16、 As Integer)与与 11.3 过程中参数的传送过程中参数的传送Visual BasicVisual Basic程序设计教程程序设计教程 v按值传递按值传递就是将就是将传送给被调用过程中的传送给被调用过程中的。即:系统把实参复制一份传送给形参。即:系统把实参复制一份传送给形参。这样,这样,被调用的过程如果改变了形参的值,也不会改变实被调用的过程如果改变了形参的值,也不会改变实参的值。参的值。v在在VB中,传值方式的标志为:中,传值方式的标志为:。v这种传递方式这种传递方式,Visual BasicVisual Basic程序设计教程程序设计教程 写出下列程序的运行结果写出下列程序的运行

17、结果Sub tryout(ByVal x as integer, ByVal y as integer) x=x+100 y=y*6 print “x=“;x.”y=“;yEnd SubSub Form_click() Dim a%,b% a=10:b=20 tryout a,b Print “a=“;a,”b=“;bEnd Sub传值:传值:X=110 y=120a=10 b=20传址:传址:X=110 y=120a=110 b=120Visual BasicVisual Basic程序设计教程程序设计教程 v传址方式是将实参在内存的地址传递给形参,也就传址方式是将实参在内存的地址传递给形参

18、,也就是实参、形参公用内存的是实参、形参公用内存的“地址地址”。v在在VB中,按址传递数据是在形参前加上中,按址传递数据是在形参前加上ByDef(默(默认方式)。认方式)。v这种传递方式这种传递方式,即调用时实,即调用时实参将值传递给形参;调用结束由形参将操作结果返参将值传递给形参;调用结束由形参将操作结果返回给实参。当用传址方式时,回给实参。当用传址方式时, ByVal ByDef Visual BasicVisual Basic程序设计教程程序设计教程 下面的程序求解下面的程序求解 S1=n S2=n+n Sn=n+n+n(n个个n累加)累加) 并输出并输出S1到到Sn。n为自然数,从文本

19、框值输入。为自然数,从文本框值输入。函数过程(注意传值与传址的区别):函数过程(注意传值与传址的区别): Public Function sum( As Integer, As Integer) sum = m Do While n 1 sum = sum + m n = n - 1 LoopEnd FunctionVisual BasicVisual Basic程序设计教程程序设计教程 事件过程:事件过程:Private Sub Command1_Click() Dim i%, s( ), a%, k% Cls a = Val(Text1.Text) ReDim s(1 To a) For

20、i = 1 To a 按值传送按值传送 s(i) = sum(a, i) k = k + 1 Print i=; i, k=; k, s & i & =; s(i) If k a Then Exit For Next iEnd Sub按址传送Visual BasicVisual Basic程序设计教程程序设计教程 3、 数组作过程的参数数组作过程的参数 Visual Basic允许把数组作为实参传送到过程中。数组作允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意

21、以下几点:送的一般规则外,还应注意以下几点: (1)为了把一个数组的全部元素传送给一个过程,应将为了把一个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不数组名分别写入形参表中,并略去数组的上下界,但括号不能省略。能省略。Private Sub Sort(a() As single) End Sub其中形参其中形参“a( )”即为数组。即为数组。Visual BasicVisual Basic程序设计教程程序设计教程 (2)被调过程可通过被调过程可通过Lbound和和Ubound函数确定实参数函数确定实参数组的上、下界。组的上、下界。 (3)当用数组作形参

22、时,对应的实参必须也是数组,且当用数组作形参时,对应的实参必须也是数组,且类型一致。类型一致。 (4)实参和形参结合是按地址传递,即形参数组和实参实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。数组共用一段内存单元。 例如:定义了实参数组例如:定义了实参数组b(1 to 8),给它们赋了值,调用,给它们赋了值,调用Sort()函数过程的形式如下:函数过程的形式如下: Sort b( ) 或或 Call Sort( b() ) 实参数组后面的括号可以省略,但为便于阅读,建议一实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。般不要省略为好。 3、 数组作过程的参数

23、数组作过程的参数Visual BasicVisual Basic程序设计教程程序设计教程 调用时形参数组调用时形参数组a和实参数组和实参数组b虚实结合,共用一段内存单虚实结合,共用一段内存单元。因此在元。因此在Sort()过程中改变数组过程中改变数组a的各元素值,也就相当于改的各元素值,也就相当于改变了实参数组变了实参数组b中对应的元素的值,当调用结束时,形参数组中对应的元素的值,当调用结束时,形参数组a成为无定义。成为无定义。 b(1) b(2) b(3) b(4) b(5) b(6) b(7) b(8) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8)参数为数

24、组时虚实结合示意图参数为数组时虚实结合示意图 3、 数组作过程的参数数组作过程的参数Visual BasicVisual Basic程序设计教程程序设计教程 在过程的形参列表中加入在过程的形参列表中加入Optional关键字关键字,就可以,就可以指定过程的参数为可选的。如果指定了可选参数,则指定过程的参数为可选的。如果指定了可选参数,则参参数表中此参数后面的其它参数也必是可选的数表中此参数后面的其它参数也必是可选的,并且要用,并且要用Optional关键字来声明。关键字来声明。 求两个数的和的函数过程。求两个数的和的函数过程。 函数过程:函数过程:Public Function mysum (

25、first As Integer, second As Long, Optional third ) mysum = first + second If Not IsMissing(third) Then mysum = mysum + thirdEnd FunctionVisual BasicVisual Basic程序设计教程程序设计教程 事件过程:事件过程:Private Sub Command1_Click() Dim a As Integer, b As Long, c As Double Dim sum As Integer a = 10: b = 20 Sum=mysum(a,

26、b) Print sum=; Sum a = 10: b = 20: c = 30 Sum=mysum(a, b, c) Print sum=; SumEnd SubvIsMissing( )Visual BasicVisual Basic程序设计教程程序设计教程 一般说来,过程调用中的参数个数应等于过程说明一般说来,过程调用中的参数个数应等于过程说明的参数个数。的参数个数。在传递参数时,在传递参数时,如果要求参数的数目可以如果要求参数的数目可以变化变化,则在函数过程或,则在函数过程或Sub过程的过程的ParamArray关键字关键字(不能与(不能与ByVal ByDef连用)连用)指明。指明

27、。 格式如下:格式如下:Sub 过程名过程名( 其他参数其他参数, ParamArray ( ) ) Visual BasicVisual Basic程序设计教程程序设计教程 Private Sub Command1_Click() Dim s( ), a%, b As Long, c As Variant, d As Double s = Array(1, 2, 3, 4, 5) Print sum=; multisum( s(0), s(2), s(4) ) a = 1000: b = 10000: c = 100: d = 10 Print sum=; multisum( a, b, c

28、, d )End Sub Public Function multisum( ParamArray p() ) Dim int1%, sum as variant For int1= LBound(p) To UBound(p) sum = sum + p(int1) Next multisum=sum End SubVisual BasicVisual Basic程序设计教程程序设计教程 11.5 过程的嵌套和递归过程的嵌套和递归1、 过程的嵌套过程的嵌套 在程序中调用一子过程,而在子过程中又调用另外的子过在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为程,这种程序结构

29、称为过程的嵌套。过程的嵌套。过程的嵌套调用执行过过程的嵌套调用执行过程如程如下图:下图:Visual BasicVisual Basic程序设计教程程序设计教程 2、 过程的递归调用过程的递归调用 用自身的结构来描述自身,称递归。例如,对阶乘的定义:用自身的结构来描述自身,称递归。例如,对阶乘的定义:)!2() 1()!1()!1(!nnnnnn Visual Basic允许在一个允许在一个Sub子过程和子过程和Function过程的定过程的定义内部调用自己,即递归义内部调用自己,即递归Sub子过程和递归子过程和递归Function函数。函数。Visual BasicVisual Basic程

30、序设计教程程序设计教程 Private Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End IfEnd FunctionPrivate Sub Form_Click() Print “fac(4)=”;fac(4)End Sub程序的递归过程:Visual BasicVisual Basic程序设计教程程序设计教程 说明:说明:递归处理分递推和回归两个过程,如上图所示。递归处理分递推和回归两个过程,如上图所示。使用递归算法必须要满足以下的递归条件:使用递归算法必须要满

31、足以下的递归条件: (1)存在递归结束条件及结束时的值;)存在递归结束条件及结束时的值; (2)能用递归形式表示,且递归向终止条件发)能用递归形式表示,且递归向终止条件发展。展。Visual BasicVisual Basic程序设计教程程序设计教程 根据过程的作用域,过程分为级和级。11.6 变量与过程的作用范围变量与过程的作用范围Visual BasicVisual Basic程序设计教程程序设计教程 不同作用范围的二种不同作用范围的二种过程定义及调用规则过程定义及调用规则能但过程名必须唯一,否则要加标准模块名能但必须在过程名前加窗体名不能不能能否被本应用程序其他模块调用能能能能能否被本模

32、块其他过程调用Public缺省Private定义方式 标准模块窗体标准模块窗体全局级模块级作用范围Visual BasicVisual Basic程序设计教程程序设计教程 VB应用程序应用程序窗体文件窗体文件模块文件模块文件声名部分声名部分事件过程事件过程通用过程通用过程全局声名部分全局声名部分模块层声名部分模块层声名部分通用过程通用过程Visual BasicVisual Basic程序设计教程程序设计教程 变量的作用域变量的作用域v 根据变量的作用域,变量分为根据变量的作用域,变量分为()变量、)变量、变量和变量和变量变量变量变量 在过程中用在过程中用Dim语句定义,只存在于过程中语句定义

33、,只存在于过程中变量变量 Dim语句或语句或Private语句定义,模块中的所有过程都语句定义,模块中的所有过程都可使用可使用变量变量 Public语句定义,可以在所有模块中使用语句定义,可以在所有模块中使用Visual BasicVisual Basic程序设计教程程序设计教程 1. 局部变量局部变量在一个过程内部在一个过程内部(例如例如Command1_Click)定义定义的变量称为局部变量。的变量称为局部变量。Private Sub Form1_click() Dim Count As Integer End SubPrivate Sub Command1_click() Dim Cou

34、nt As Integer Static Sum As Single End SubVisual BasicVisual Basic程序设计教程程序设计教程 2. 窗体级变量窗体级变量如果一个窗体中的不同过程要使用同一个变量,这就需如果一个窗体中的不同过程要使用同一个变量,这就需要在该窗体的过程外面定义一个变量,它在整个窗体内有效要在该窗体的过程外面定义一个变量,它在整个窗体内有效,即其作用域为整个窗体,本窗体内的所有过程都能访问它,即其作用域为整个窗体,本窗体内的所有过程都能访问它,这就是,这就是窗体级变量窗体级变量。声名窗体变量的步骤声名窗体变量的步骤: 声名这一变量首先要进入声名这一变量首先要进入代码程序窗口,单击对象框右代码程序窗口,单击对象框右端向下的箭头并选择端向下的箭头并选择“通用通用” ,再单击过程框右端向下的箭,再单击过程框右端向下的箭头选择头选择“声名声名”,如右图所示如右图所示。Visual BasicVisual Basic程序设计教程程序设计教程 3. 全局变量全局变量全局变量可以被程序中的任何一个模块和全局变量可以被程序中的任何一个模块和窗体访问。在窗体中不能定义全局变量,全局窗体访问。在窗体中不能定义全局变量,全局变量要在模块中的声名部分用变量要在模块中的声名部分用Global或或Public关键字声名。关键字声名

温馨提示

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

评论

0/150

提交评论