第8章存储过程课件.ppt_第1页
第8章存储过程课件.ppt_第2页
第8章存储过程课件.ppt_第3页
第8章存储过程课件.ppt_第4页
第8章存储过程课件.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、第8章 过 程,8.1 过程概述 8.2 子过程 8.3 函数过程 8.4 参数传递 8.5 过程与变量的定义域,本章目录,本章重点:,本章难点:,过程的声明及过程的调用方法 函数过程的声明及过程的调用方法 参数传递及常用算法,学习方法建议:,学习本章内容应重点掌握过程的声明、调用方法及其常用算法,掌握变量的作用域及参数传递的方法及其应用。,过程的创建 参数的传递 过程与变量的作用域,8.1 过程概述,1 过程 过程是一段程序代码,用来执行某一特定功能。 2 过程分类,过程,系统提供,自定义,内部函数过程Function有返回值 事件过程Sub无返回值,以Sub为保留字开始的子过程 以Func

2、tion为保留字开始的函数过程 以Property为保留字开始的属性过程 以Event为保留字开始的事件过程,3 过程的引入优点 使同类的操作不重复编写,一次写入多次调用,可获得多个 结果。 把一项复杂的工作分成简单的功能块,分而治之,实现某种功 能的处理。 4 过程的特点 完成一段独立功能,可供其他过程使用(调用)。 5 调用过程图示,子过程的定义形式 Sub 子过程名(参数列表) 局部变量或常数定义 语句序列 Exit Sub 语句序列 End Sub,8.2 子过程,自定义标识符,当有形参时各参数用逗号分隔。 当无形参时不要括号。,中途退出子过程,例如:sub sum(x%,y%,z%,

3、s%) s=x+y+z End sub,sub printhello print hello End sub,有形参,无形参,定义子过程的方法 在代码窗口直接定义 引例1,使用“添加过程”对话框 作法如下: 新建窗体 视图代码窗口 工具添加过程,输入过程名,定义一个局部过程,定义一个全局过程,引例2 计算s=x+y+z,需要输入,运行结果,3 子过程的调用 子过程的调用是一句独立的调用语句,有两种形式: Call 子过程名(实参列表) 子过程名 (实参列表) 注意: 用Call调用 实参只能是变量,不能是常量、表达式,也不能是控件名。 实参与形参的类型、顺序、个数要一致 4 应用举例 例题8.

4、1 编写求矩形面积的子过程,调用该子过程求窗体上不同 控件的面积。 窗体上的控件任意设置,单击各个控件,其面积的大小直接显示在窗体上。,有实参,则实参必须用圆括号括起 无实参圆括号省略,窗体设计如下:,子过程为: Private Sub sarea(sw!, sh!) Dim s! s = sw * sh Print 面积为:; s End Sub,Private Sub Picture1_Click() Dim w!, h! w = Picture1.Width h = Picture1.Height Print 图像框; sarea w, h End Sub 运行结果为:,Picture1

5、,Picture1,例题8.2 编写子过程求N!,计算5!+7!-6!,子过程: Private Sub jcn(n%, jc%) Dim i% jc = 1 For i = 1 To n jc = jc * i Next i End Sub,Private Sub Command1_Click() Dim a%, b%, c%, d% Call jcn(5, a) Call jcn(7, b) Call jcn(6, c) d = a + b - c Print Print 5!+7!-6!=; d End Sub,8.3 函数过程,引例3 已知多边形各条边的长度,计算多边形的面积。 分析:

6、计算多边形面积,可将多边形分解成若干个三角形。 计算三角形面积的公式如下:,本章目录,本章目录,定义函数过程area Public Function area(x%, y%, z%) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqr (c * (c - x) * (c - y) * (c - z) End Function,窗体设计,Sub command1_click() Dim a%, b%, c%, d%, e%, f%, g%, s! a = InputBox(输入三角形边长a) b = InputBox(输入三角形边长b) c =

7、 InputBox(输入三角形边长c) d = InputBox(输入三角形边长d) e = InputBox(输入三角形边长e) f = InputBox(输入三角形边长f) g = InputBox(“输入三角形边长g”) S=area(a,b,c)+area(c,d,e)+area(e,f,g) Print Print 多边形面积是:; s End Sub,1 函数过程的定义,定义函数过程的方法与子过程相同,其形式如下: Public |Private Function 函数过程名(形参)As 类型 变量声明 语句块 Exit Function Return 表达式 或 函数名=表达式

8、End Function,说明: Public 全局函数过程,可被程序任何模块调用 Private 仅供本模块中的其它过程调用 形参(或称哑元) 只能是变量或数组名( ),仅表示个数、类型,无值。,函数返回值类型,2 函数的调用 变量名=函数过程名(实参列表) 实参列表与形参列表中的参数的类型、个数、次序要一一对应 引例4 求任意2个整数的和,Public Function sum(x%, y%) As Integer sum = x + y End Function,Private Sub Command1_Click() Dim s%, n%, m% n = InputBox(输入第一个整

9、数) m = InputBox(输入第二个整数) s = sum(n, m) Print n; +; m; =; s End Sub,Function gys( m%, n%) As Integer If m 0 r = m Mod n : m = n: n = r Loop gys = m End Function,代码设计 Sub Form_Click Dim x%, y%, z% x = inputbox(请输入第一个数) y = inputbox(请输入第二个数) z = gys(x, y),MsgBox(最大公约数是 Tab(20); 有; c1; 个汉字 End Sub Funct

10、ion CountC%(ByVal s$) Dim i%, t%, k%, c$ For i = 1 To Len(s) c = Mid(s, i, 1) 取一个字符 If Asc(c) 0 Then k = k + 1 汉字数加1 Next i CountC = k End Function Private Sub Command2_Click() Text1.Text = End Sub,子过程与函数过程的区别,把某功能定义为函数过程还是子过程,没有严格的规定。 一般若程序有一个返回值时,函数过程直观;当有多个 返回值时,习惯用子过程。 函数过程必须有返回值,函数名有类型。子过程名没有 值

11、,过程名没有类型,不能在子过程体内对子过程名赋值。,本章目录,参数问题,形参是过程与主调程序交互的接口,从主调 程序获得初 值,或将计算结果返回给主调程序。不要将过程中所有使用 过的变量均作为形参。 形参没有具体的值,只代表了参数的个数、位置、类型; 只能是简单变量、数组名,不能是常量、数组元素、表达式。,8.4 参数传递,形参与实参 在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没有关系。 按位置传送是最常用的参数传递方法,如在调用标准函数时,用户根本不知道形参名,只要关心形参的个数、类型、位置。 例如Mid函数形式: Mid(字符串$,起始位%,取几位%

12、) 调用语句:s=Mid(This is VB ,9,2) 则s中的结果为“VB”。,本章目录,1 传址与传值,实参与形参的结合有传址(ByRef)和传值(ByVal)两种方法。 传址方式参数结合过程 当调用一个过程时,它将实参的地址传递给形参。此时, 形参和实参共用同一个存储单元。因此在被调过程体中对形参 的任何操作都变成了对相应实参的操作,实参的值就会随过程 体内对形参的改变而改变。 传值方式参数结合过程 当调用一个过程时,形参和实参使用不同的存储单元,系 统将实参的值复制给形参,实参与形参断开了联系。在过程体 内对形参的任何操作不会影响到实参。 传值与传址的区别 传值时需要在形参前加关键

13、字 ByVal 传址时,形参前可加关键字ByRef、也可以什么都不加,本章目录,补充例题 传址与传值,本章目录,形参获得实参的值,形参获得实参的地址,选用传值还是传地址一般进行如下考虑: 要将被调过程中的结果返回给主调程序,则形参必须是传 址方式。这时实参必须是同类型的变量名(包括简单变量、 数组名、结构类型等),不能是常量、表达式。 不希望过程修改实参的值,则应选用传值方式,减少各过 程间的关联。因为在过程体内对形参的改变不会影响实参。 形参是数组都是地址传递(可表示值传递或地址传递)。,Sub Swap1(ByVal x%, ByVal y%) Dim t% t = x: x = y: y

14、 = t End Sub Sub Swap2(ByRef x%, ByRef y%) Dim t% t = x: x = y: y = t End Sub Sub Command1_Click() Dim a%, b% a = 10: b = 20 Print 调用Swap1前 a和b的值为:; Tab(40); a; b Call Swap1(a, b) Print 调用Swap1后按传值方式 a和b的值为:; Tab(40); a; b a = 10: b = 20 Call Swap2(a, b) Print 调用Swap2后按传地址方式 a和b的值为:; Tab(40); a; b E

15、nd Sub,例题8.5 分别利用传值和传址的方式,求任意两个整数的最大公约数和 最小公倍数,注意传值与传址的使用环境。,Private Sub Form_Click() Dim n%, m%, a%, b% m = InputBox(请输入第一个自然数:) n = InputBox(请输入第二个自然数:) Print 您输入的数字为:; m; 和; n Print If Option1.Value Then a = gcd(m, n) ElseIf Option2.Value Then a = gcd2(m, n) End If b = m * n / a Print m; 和; n; 的最

16、大公约数为:; a Print Print m; 和; n; 的最小公倍数为:; b End Sub,Private Function gcd%(x%, y%) Dim r% r = x Mod y While r 0 x = y y = r r = x Mod y Wend gcd = y End Function,Private Function gcd2%(ByVal x%, ByVal y%) Dim r% r = x Mod y While r 0 x = y y = r r = x Mod y Wend gcd2 = y End Function,例题8.6 分别用传址和传值的方式

17、编写子过程,实现2个数交换 要求分别显示在这两种方式下实参与形参的变化。,Private Sub Form_Click() Dim a%, b% a = InputBox(输入第一个数) b = InputBox(输入第二个数) Print 调用前:; a=; a; b=; b If Option1.Value = True Then swap1 a, b Else swap2 a, b End If Print 调用后:; a=; a; b=; b End Sub,Private Sub swap1(x%, y%) Dim t% Print 交换前:; x=; x; y=; y t = x:

18、 x = y: y = t Print 交换后:; x=; x; y=; y End Sub,Private Sub swap2(ByVal x%, ByVal y%) Dim t% Print 交换前:; x=; x; y=; y t = x: x = y: y = t Print 交换后:; x=; x; y=; y End Sub,形参是数组 要以数组名加圆括号表示,不要给出维数上界;多维数 组,每维以逗号分隔。在过程中通过Ubound函数确定每维 的上界。 实参是数组 要给出数组名(不需要圆括号)。 当数组作为参数传递时,系统将实参数组的起始地址传给 过程,使形参数组也具有与实参数组相

19、同的起始地址。,2 数组参数的传递,形参数组 实参数组,本章目录,例题8.7 用随机数产生一个一维数组,用此数组做参数,求数组中所有偶数元素之和。,Private Sub Form_Click() Dim a%(10), s%, i% For i = 1 To 8 a(i) = Int(Rnd * 100) Print a(i); Next i Print,Private Function sum(b%() Dim i% For i = LBound(b) To UBound(b) If b(i) Mod 2 = 0 Then sum = sum + b(i) End If Next i En

20、d Function,s = sum(a() Print 数组中偶数元素之和为:s=; s End Sub,8.5 过程与变量的作用域,1 代码模块的概念,本章目录,类模块,标准模块,窗体模块,扩展名为.FRM,窗体变量说明、控件属性的设置、事件过程,外部过程的窗体级声明,扩展名为.CLS,扩展名为.BAS,公有、私有模块级变量、常量、类型,编写代码建立新对象,代码和数据,自定义的属性、方法,外部过程和全局变量、模块级变量的声明,在应用程序内的过程中使用,2 过程的作用域,模块级,全局级,用Private定义的子过程、函数过程,作用域为本模块,用Public定义的子过程、函数过程,作用域为本应

21、用程序,窗体模块,标准模块,详见P137 表8.1,外部调用,窗体模块级外部调用时过程名前加窗体名,标准模块级要保证该过程名的唯一性,3 变量的作用域,过程级变量,在一个过程内,只能在本过程中使用,模块级变量,在模块内、任何过程外,可被本模块的任何过程访问,全局变量,在模块级,可被应用程序的任何过程或函数访问,用Dim或Static语句说明的变量,用Dim、Private语句声明的变量,用Public语句声明的变量,例如:在下面一个标准模块文件中不同级的变量声明 Public Pa As integer 全局变量 Private Mb As string *10 窗体/模块级变量 Sub F1( ) Dim Fa As integer 过程级变量 End Sub Sub F2( ) Dim Fb As Single 过程级变量 End Sub,详见P138 表8.2,例题8.8 定义3个不同级别的变量,在主窗体中求和,显示3个变量的值和计算结果。编写程序观察不同作用

温馨提示

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

评论

0/150

提交评论