VB语言程序设计过程.ppt

上传人:小飞机 文档编号:5451994 上传时间:2023-07-08 格式:PPT 页数:67 大小:1.04MB
返回 下载 相关 举报
VB语言程序设计过程.ppt_第1页
第1页 / 共67页
VB语言程序设计过程.ppt_第2页
第2页 / 共67页
VB语言程序设计过程.ppt_第3页
第3页 / 共67页
VB语言程序设计过程.ppt_第4页
第4页 / 共67页
VB语言程序设计过程.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《VB语言程序设计过程.ppt》由会员分享,可在线阅读,更多相关《VB语言程序设计过程.ppt(67页珍藏版)》请在三一办公上搜索。

1、过程第七章,本章内容,引言,在VB中的两种过程:(1)由系统提供过程系统提供的内部函数过程(如sqr函数)和事件过程(click事件)。(2)由用户自定义过程用户根据实际应用的需要而自行设计的过程,这样的过程称为“通用过程”,引言,通用过程分为两类:函数过程:以Function保留字开始的过程。子程序过程:以Sub保留字开始的过程;,例5.19 求解s=1!+2!+3!+10!的值,采用两种不同解法(1)解法一:采用两重循环,外循环10次,每次循环计算一次阶乘,把每次阶乘值累加起来,即得求解结果。Dim s As Long,t As Long s=0 For j=1 To 10 计算10个阶乘

2、 t=1 计算1个阶乘前,先赋初值 For k=1 To j 计算j!,需要循环j次 t=t*k 连乘j次 Next k s=s+t 把每次计算得到的阶乘值t累加 Next j Print s,阶乘n!(n!123n)Private Sub Form_Load()Show Dim t As Long,s As Long,i As Integer t=1 For i=1 To 5 t=t*i Next i s=t,例7.2 计算5!+10!,t=1 For i=1 To 10 t=t*i Next i s=s+t Print 5!+10!=;sEnd Sub,因为计算5!和10!都要用到阶乘n!

3、(n!123n)所以把计算n!编成Sub过程。Private Sub Form_Load()Show Dim y As Long,s As Long Call Jc(5,y)s=y Call Jc(10,y)s=s+y Print 5!+10!=;sEnd Sub程序运行结果:5!+10!3628920,Private Sub Jc(n As Integer,t As Long)Dim i As Integer t=1 For i=1 To n t=t*i Next iEnd Sub 注意参数n及t的调用情况,例7.2 计算5!+10!,过程有两个重要作用:一是把一个复杂的任务分解为若干个小任

4、务,可以用过程来表达,从而使任务更易理解,更易实现,将来更易维护;二是代码重用,使同一段代码多次复用。,过程的作用,过程调用示例 把相同的任务编成相对独立的“子过程”当事件过程需要执行这个任务时,可使用调用语句(如Call)实行调用。子过程执行完后,会返回事件过程中调用语句Call的后续语句继续执行,通用过程,例7.1 Sub过程示例 Private Sub Form_Load()Show Call mysub1(30)Call mysub2 Call mysub2 Call mysub2 Call mysub1(30)End Sub 程序运行结果,Private Sub mysub1(n)P

5、rint String(n,*)End SubPrivate Sub mysub2()Print*;Tab(30);*End Sub,Sub过程,参数n,无参数,Sub过程的定义,格式:StaticPublic|PrivateSub 过程名(参数表列)语句块Exit Sub语句块End Sub功能:定义一个以为名的Sub过程。(1)在VB中,Sub过程又称为子过程。(2)在子过程中如果没有形参,调用时括号()必须省略。Call mysub2 或 mysub2,Sub过程的调用,格式:Call 过程名(实参列表)或 过程名 实参列表说明:实参的个数、类型、顺序应与相应的形参保持一致,子过程中如果

6、没有形参,则调用中也无实参。第2种调用方式与第1种相比,结果一样,只是去掉Call和一对括号()。例如,调用名为mysub1的过程:Call mysub1(30)mysub1 30,函数过程,StaticPublic|Private Function 函数过程名(参数列表)As 类型 语句块 函数名=返回值 Exit Function 语句块 函数名=返回值 End Function功能:定义一个以为名的Function过程。,函数过程体,函数过程说明,1.As 类型:返回值的类型2.函数名=返回值 函数过程必须返回函数值,而函数名就代表了函数值,在函数体内至少对函数名赋值一次。若不赋值则默认

7、返回值为0或空串或空值。函数名本身就是变量。,函数过程的调用,形式:变量名=函数过程名(实参列表)或 print 函数过程名(实参列表)功能:调用一个已定义的Function过程。,jiechen(5)jiechen(6)jiechen(7),a=jiechen(5)b=jiechen(6)c=jiechen(7)Print jiechen(5)+jiechen(6)+jiechen(7),将n!的Sub过程改为Function过程。Private Sub Form_Load()Show Dim s As Long s=Jc(5)+Jc(10)Print 5!+10!=;sEnd Sub,Fu

8、nction Jc(n As Integer)As Long Dim i As Integer,t as Long t=1 For i=1 To n t=t*i Next i Jc=tEnd Function,例7.3 计算5!+10!,Function Jc(n%)As Long Dim i As Integer Jc=1 For i=1 To n Jc=Jc*i Next iEnd Function,因为计算5!和10!都要用到阶乘n!(n!123n)所以把计算n!编成Sub过程。Private Sub Form_Load()Show Dim y As Long,s As Long Cal

9、l Jc(5,y)s=y Call Jc(10,y)s=s+y Print 5!+10!=;sEnd Sub,Private Sub Jc(n As Integer,t As Long)Dim i As Integer t=1 For i=1 To n t=t*i Next iEnd Sub,例7.2 计算5!+10!,把求两个数中的大数编成Function过程,过程名为MaxPrivate Sub Form_Load()Show Dim a As Single,b As Single,c As Single Dim s As Single a=Val(InputBox(输入第一个数)b=Va

10、l(InputBox(输入第二个数)c=Val(InputBox(输入第三个数)s=max(a,b)Print 最大数是:;max(s,c)End Sub,Function max(m!,n!)As Single If m n Then max=m Else max=n End IfEnd Function,调用,调用,例7.4 输入三个数,求出它们的最大数,实参传给形参(am),通过函数名max带回一个结果,把求两个数中的大数编成Sub子过程,过程名为MaxPrivate Sub Form_Load()Show Dim a As Single,b As Single,c As Single

11、Dim s As Single,m As Single a=Val(InputBox(输入第一个数)b=Val(InputBox(输入第二个数)c=Val(InputBox(输入第三个数)Call max(a,b,s)Call max(s,c,m)Print 最大数是:;mEnd Sub,Sub max(m!,n!,t!)If m n Then t=m Else t=n End IfEnd Function,例7.4 输入三个数,求出它们的最大数,函数过程与Sub过程的区别,(1)函数名是一个变量,它有值,有类型,在函数体中至少赋值一次,并通过它可带回一个结果;而Sub过程名,它无值,无类型,

12、在Sub过程体内不能赋值,不能通过它带回结果。注意:Sub过程若要带回结果,必须通过形参与实参的地址传递得到结果,调用时可得到多个参数值。,函数过程与Sub过程的区别,(2)调用时,子过程调用是一句独立的语句。格式:Call 过程名(实参列表)或 过程名 实参列表函数过程不能作为单独的语句加以调用,必须参与表达式运算。变量名=函数过程名(实参列表)或 print 函数过程名(实参列表),a=jiechen(5)b=jiechen(6)c=jiechen(7)Print jiechen(5)+jiechen(6)+jiechen(7),说明:(1)如果仅仅为实现一个动作,而无任何返回结果,只能用

13、Sub子过程实现。(2)如果需要返回一个结果,既可用函数过程实现也可用子过程实现。(3)如果需要返回多个结果,可用函数过程实现也可用子过程实现,同时必须结合其他的形式,如全局变量、传地址(实参形参间的传递)等。,函数过程与Sub过程,函数过程定义的方法,自定义函数过程有两种方法:(1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数过程的框架。(2)利用代码窗口手工输入代码的方式建立函数过程。,通用过程(Sub/Function)过程可以保存在两种模块中:窗体模块(.frm)和标准模块(.bas)(1)在窗体模块中创建通用过程:可以在代码窗口中直接键入来创建Sub过程 选择“工具”菜单中

14、的“添加过程”命令(2)在标准模块中创建通用过程:选择“工程”菜单中的“添加模块”命令 保存为一个独立的“.bas”文件 举例:把例7.3的函数max(m,n)存放在模块文件中,创建通用过程的方法,参数的传递,参数传递:指主调过程的实参传递给被调过程的形参。形参:是指在定义过程时出现在参数列表中的变量名或数组名,这些变量名只能在过程内部使用,形式参数不能是常量。实参:是调用过程中已组织好的准备传给形参的常量、变量、表达式或数组控件对象等。,定义过程和调用过程的示例:调用过程:Call Mysub(100,计算机,1.5)定义过程:Sub Mysub(t As Integer,s As Stri

15、ng,y As Single)“形实结合”是按照位置结合的,即第一个实参值(100)传送给第一个形参t,第二个实参值(“计算机”)传送给第二个形参s,第三个实参值(1.5)传送给第三个形参y。,参数传递的方式,地址传递:缺省或加“ByRef”,形参得到的是实参的地址,当形参值改变时实参的值也改变,也叫双向传递。值传递:在形参前加“ByVal”,形参得到的是实参的值,形参值的改变不会影响实参的值。也叫单向传递。注意:无论哪种传递,实际参数必须与定义过程时的形式参数在个数、类型、顺序上保持一一对应。,设置两个通用过程Test1和Test2,分别按值传递和按地址传递Private Sub Form_

16、Load()Dim x As Integer Show x=5 Print 执行test1前,x=;x Call test1(x)Print 执行test1后,test2前,x=;x Call test2(x)Print 执行test2后,x=;xEnd Sub,Sub test1(ByVal t As Integer)t=t+5End SubSub test2(s As Integer)s=s-5End Sub,运行结果执行Test1前,x=5执行Test1后,Test2前,x=5执行Test2后,x=0,例7.5 参数传递方式示例,按值传递,按地址传递,传递方式示意图,5,Form_Loa

17、d(),test1(),x,t,实参,形参,(a)值传递,5,x,s,(b)地址传递,实参和形参共享单元,0,Form_Load(),test2(),5,10,因为计算5!和10!都要用到阶乘n!(n!123n)所以把计算n!编成Sub过程,采用Print直接在窗体上输出结果。Private Sub Form_Load()Show Dim y As Long,s As Long Call Jc(5,y)s=y Call Jc(10,y)s=s+y Print 5!+10!=;sEnd Sub程序运行结果:5!+10!3628920,Private Sub Jc(n As Integer,t A

18、s Long)Dim i As Integer t=1 For i=1 To n t=t*i Next iEnd Sub 注意参数n及t的调用情况,例7.2 计算5!+10!,把求两个数中的大数编成Sub子过程,过程名为MaxPrivate Sub Form_Load()Show Dim a As Single,b As Single,c As Single Dim s As Single,m As Single a=Val(InputBox(输入第一个数)b=Val(InputBox(输入第二个数)c=Val(InputBox(输入第三个数)Call max(a,b,s)Call max(s

19、,c,m)Print 最大数是:;mEnd Sub,Sub max(m,n,t)If m n Then t=m Else t=n End IfEnd Function,调用,调用,例7.3 输入三个数,求出它们的最大数,在一个过程(Sub过程和Function过程)中调用另外一个过程。例7.5 输入两个数n、m,求组合数Cnm 的值 Cnm=,n!m!(n-m)!,7.3 过程的嵌套调用,Private Sub Form_Load()Show m=Val(InputBox(输入m的值)n=Val(InputBox(输入n的值)If m n Then MsgBox 输入数据错误,0,检查错误 E

20、nd End If Print 组合数是:;Calcomb(n,m)End Sub Private Function Calcomb(n,m)Calcomb=Jc(n)/(Jc(m)*Jc(n-m)End Function Private Function Jc(x)t=1 For i=1 To x t=t*i Next i Jc=t End Function,程序中,采用了过程的嵌套调用方式。在事件过程Form_Load()中调用了Calcomb过程,而在Calcomb过程中调用了三次jc过程。,调用,调用,过程的嵌套调用,a=Calcomb(n,m),b=Jc(n),事件过程Form_Lo

21、ad,Function过程Calcomb(n,m),Function过程Jc(x),结束,开始,变量的作用域,作用域:变量、过程随所处的位置不同,可被访问的范围。,通用过程(Sub/Function)过程可以保存在两种模块中:窗体模块(.frm)和标准模块(.bas)(1)在窗体模块中创建通用过程:可以在代码窗口中直接键入来创建Sub过程 选择“工具”菜单中的“添加过程”命令(2)在标准模块中创建通用过程:选择“工程”菜单中的“添加模块”命令 保存为一个独立的“.bas”文件 举例:把例7.3的函数max(m,n)存放在模块文件中,创建通用过程的方法,变量的作用域,局部变量:在窗体模块(.fr

22、m)和标准模块(.bas)的过程内声明的变量,只能在本过程中使用。窗体/模块级变量:在窗体模块(.frm)和标准模块(.bas)“通用声明”段中用Dim语句或用Private语句 声明的变量,可被本窗体/模块的任何过程访问。全局变量:在标准模块(.bas)“通用声明”段中用Public语句声明的变量,可被本应用程序的各窗体模块(.frm)和标准模块(.bas)任何过程或函数访问。,1.局部变量 在一个过程内部用Dim或Static声明的变量称为局部变量。只能在本过程中有效。在一个窗体中,不同过程中定义的局部变量可以同名。例如,在一个窗体中定义 Private Sub Command1_Clic

23、k()Dim Sum As Integer Sum=1.End Sub Private Sub Command2_Click()Dim Sum As Single Sum=1.5.End Sub,这两个同名变量Sum没有任何联系,在窗体模块的“通用声明”段中声明的变量称为模块级变量,可以在一个窗体的不同过程中使用。Dim n As Integer Private Sub Command1_Click()n=1 End Sub Private Sub Command2_Click()n=n+1 End Sub 如果用Private或Dim来声明,则该变量只能在本窗体(或本模块)中有效,在其他窗体

24、或模块中不能引用该变量。以Public声明的变量,允许在其他窗体和模块中引用,Form1.n,2.模块级变量,全局变量要在标准模块文件(.bas)中的通用声明部分用Global或Public语句来声明。全局变量可以被应用程序中任何一个窗体和模块直接访问。格式:Global 变量名 As 数据类型 Public 变量名 As 数据类型,3.全局变量,生存期,即变量能够保持其值的时间,分为动态变量和静态变量 1.动态变量 程序运行进入变量所在的过程时,才为变量分配内存单元,退出过程时,该变量占用的内存单元自动释放,其值消失。当再次进入该过程时,所有的动态变量将重新初始化。使用Dim关键字在过程中声

25、明的局部变量属于动态变量 2.静态变量 退出该过程时变量值被保留,即变量所占的内存单元没有释放。当以后再次进入该过程时,原来的变量值可以继续使用 使用Static关键字在过程中声明的局部变量属于静态变量,变量的生存期,Private Sub Command1_Click()Dim a As Integer a是动态变量 Static b As Integer b是静态变量 a=a+1 每次进入过程时 a值为0 b=b+1 每次进入过程时 b保持上次的值 End Sub,静态变量(局部变量),用Dim声明的变量:每次调用都对变量重新初始化;过程体结束,变量的内容自动消失,存储单元释放。用Stat

26、ic 声明的变量:过程体结束后,不释放存储单元。每次调用过程,变量保持原来的值。其声明形式为:Private Sub Command1_Click()Static 变量名 AS 类型 局部静态变量 End Sub,静态变量(局部变量),Static Function 函数名(参数列表)As 类型Static Sub 子过程名(参数列表)说明:过程名前加Static,表示该过程内的局部变量都是静态变量。,Static Sub Subtest()Dim t As Integer t=2*t+1 Print tEnd SubPrivate Sub Command1_Click()Call Subte

27、stEnd Sub,运行后,3次单击命令按钮,执行结果为:137,例7.6 Static Sub语句示例,将Static Sub改为Private Sub,运行后,3次单击命令按钮,执行结果为:111,Private,在窗体模块的“通用声明”段中以Public声明的变量,允许在其他窗体和模块中引用,格式为:Form1.n,过程的作用域,窗体/模块级:加Private关键字的过程,只能在被定义的本窗体或本模块的任何过程中调用。全局级:加Public关键字(缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。,例,设计两个窗体,编写两段程序代码,验证全局级过程与窗体级过程的不同。,P

28、rivate,多窗体处理 在多窗体程序中,每个窗体可以有自己的界面和程序代码,完成不同的操作 1.添加窗体 通过“工程”菜单中的“添加窗体”命令来实现 2.删除窗体 选择“工程”菜单中的“移除”命令 3.保存窗体 选择“文件”菜单中的“保存”或“另存为”命令 4.设置启动窗体 在“工程/工程属性”对话框中设置,多窗体与Sub Main过程,(1)Load语句 格式:Load 窗体名称 例如:Load Form2 功能:将一个窗体装入内存。说明:此时仅能引用窗体中的控件及各种属性,但运行时窗体并不显示到屏幕上。(2)UnLoad语句 格式:UnLoad 窗体名称 功能:清除内存中的窗体。,有关语

29、句和方法,(3)Show方法 格式:窗体名称.Show 例如:Form2.Show 功能:将一个窗体装入内存,并在屏幕上显示。(4)Hide方法 格式:窗体名称.Hide 功能:隐藏指定的窗体,即不在屏幕上显示,但仍保存在内存中,因此它与UnLoad的作用是不一样的。,有关语句和方法,创建3个窗体和1个标准模块(1)主窗体(Form1)本窗体上建立了“输入数据”(Command11)、“计算”(Command12)和“结束”(Command13)三个命令按钮 设置为启动窗体,例7.7 多窗体应用示例 计算两数之和及积,启动窗体,主窗体,输入两个数,计算,定义全局变量,Private Sub C

30、ommand11_Click()主窗体“输入数据”按钮 Form1.Hide 隐藏主窗体 Form2.Show 显示“输入数据”窗体End SubPrivate Sub Command12_Click()主窗体“计算”按钮 Form1.Hide 隐藏主窗体 Form3.Show 显示“计算”窗体End SubPrivate Sub Command13_Click()主窗体“结束”按钮 Unload Form1 Unload Form2 Unload Form3 EndEnd Sub,先卸载所有已打开的窗体,(2)“输入数据”窗体(Form2)这是在主窗体上单击了“输入数据”按钮后弹出的窗体,用

31、于输入运算数x和y。窗体上建立了2个文本框(Text21和Text22)和1个“返回”命令按钮(Command21),(2)“输入数据”窗体(Form2)代码:Private Sub Command21_Click()“输入数据”窗体的“返回”按钮 X=Val(Text21.Text)Y=Val(Text22.Text)Form2.Hide 隐藏“输入数据”窗体 Form1.Show 显示主窗体 End Sub,(3)“计算”窗体(Form3)Private Sub Command31_Click()“计算”窗体的“加法”按钮 Text31.Text=X+YEnd SubPrivate Sub

32、 Command32_Click()“计算”窗体的“乘法”按钮 Text31.Text=X*YEnd SubPrivate Sub Command33_Click()“计算”窗体的“返回”按钮 Form3.Hide 隐藏“计算”窗体 Form1.Show 显示主窗体End Sub,Text31,(4)标准模块(Modulel)由于在各窗体之间需要使用公共变量来传送数据,所以建立一个标准模块Modulel,对用到的全局变量X和Y进行声明,程序一般从启动窗体的Form_Load过程开始执行 有时在程序启动时不加载任何窗体,而是首先执行一段程序代码,此时可把要执行的程序代码放在Sub Main过程中

33、,并指定Sub Main为“启动对象”。应用程序在运行时会先执行Sub Main过程 Sub Main过程存放在标准模块中。在一个工程中只能有一个Sub Main过程 设置Sub Main过程为“启动对象”的方法:在“工程属性”对话框的“通用”选项卡中,从“启动对象”下拉列表框中选中“Sub Main”,Sub Main过程,创建2个窗体和1个标准模块,例7.8 Sub Main 过程示例,标准模块,标准模块是独立于窗体的程序单位,其扩展名为.bas。1.全局变量声明 使用Public关键词对变量和常量进行声明,其作用域为整个工程。2.模块级变量声明 用Dim关键词声明的变量和常量,其有效范围

34、仅限于本模块内。3.通用过程 用户自定义的子程序和函数。一般用Public关键词声明的通用过程和Sub Main过程放在标准模块中。,例7.9 将判断一个数是否为素数编成一个函数,然后通过调用该函数求5001000数中的所有素数,把这些素数显示在列表框中。(1)分析:素数也称质数,就是只能被1和它本身整除,而不能被其他整数整除的整数。例如 2,3,5,7 是质数,而 4,6,8,9 则不是。判断某数m是否是素数的算法是:对于m,从k=2,3,4,m-1依次判别能否被k整除,只要有一个能整除,m就不是素数,否则m是素数。,7.6 程序举例,Private Sub Command1_Click()

35、求素数按钮 Dim t As Integer List1.Clear 清除列表框中的内容 For t=500 To 1000 If FnPrime(t)Then 根据t是否素数返回函 数值真或假 List1.AddItem t 若是素数,则存入列表框中 End If Next t Label1.Caption=5001000数中共有&List1.ListCount&个素数End Sub,Function FnPrime(m As Integer)As Boolean Dim k As Integer,f As Boolean f=True 设置f来表示判断状态,初值为True For k=2

36、To m-1 If m Mod k=0 Then f=False End If Next k FnPrime=f 返回函数值End Function,在窗体上建立3个文本框,使之以不同效果显示文字“2008年世界奥运会将在中国北京市举行”第一个文本框Text1从左到右逐字显示,直到把整行文字显示出来;第二个文本框Text2使文字从左到右作水平移动;第三个文本框Text3以闪动方式显示文字 设计阶段 运行阶段,例7.11 动态文字,Dim txt As String,n As Integer,k As IntegerPrivate Sub Form_Load()n=0 txt=年世界奥运会将在中

37、国北京市举行 k=Len(txt)Text1.ForeColor=RGB(255,0,0)红色 Text2.ForeColor=RGB(0,0,0)黑色 Text3.ForeColor=RGB(0,0,255)蓝色End Sub,Private Sub Timer1_Timer()n=n+1 模块级变量n是关键参数 If n=k Then Text1.Text=Left(txt,n)逐次取n个汉字,n每次加 1 Text2.Text=Space(2*(k-n)+Left(txt,n)Else n=0 Text1.Text=Text2.Text=End If If n Mod 2=0 Then 以2个定时时间为1个周期,显示及清除交替进行 Text3.Text=txt n为偶数时显示 Else Text3.Text=n为奇数时清除 End IfEnd Sub,每次减少2空格1个汉字占2个字符位置,每次增加1个汉字,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号