




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7 7章章 通用过程程序设计通用过程程序设计 师师生生共共勉勉勿以恶小而为之,勿以善小而不为。惟贤惟德,能服于人。 目录目录7.1 问题引入与问题分析问题引入与问题分析7.2 自定义自定义sub过程的创建过程的创建7.3 自定义自定义sub过程的调用过程的调用7.4 自定义自定义sub 过程的参数传递过程的参数传递7.5 自定义自定义sub 过程与事件过程的异同点过程与事件过程的异同点7.6 自定义自定义subsub过程的应用过程的应用7.7 初步认识自定义初步认识自定义function函数函数7.9 7.107.11 本章容易出错的地方本章容易出错的地方师师生生共共勉勉勿以恶小而为之,勿
2、以善小而不为。惟贤惟德,能服于人。 7.1 问题引入和问题分析问题引入和问题分析l当多个事件过程都包含有相同程序代码块,或某事件当多个事件过程都包含有相同程序代码块,或某事件过程中包含具有较独立功能的代码块时,可以使用自过程中包含具有较独立功能的代码块时,可以使用自定义过程将它们分离出来,然后在需要这一语句块的定义过程将它们分离出来,然后在需要这一语句块的地方用调用语句替代,而不必再将所有的语句重复书地方用调用语句替代,而不必再将所有的语句重复书写一遍。写一遍。l同一语句块反复出现在程序中,这样无疑增加了程序同一语句块反复出现在程序中,这样无疑增加了程序的书写负担,使得程序显得冗长,也影响了程
3、序在整体的书写负担,使得程序显得冗长,也影响了程序在整体结构上的紧凑性,需对其进行简化。本章中将学习结构上的紧凑性,需对其进行简化。本章中将学习visual basic6.0用户自定义过程,并利用用户自定义过用户自定义过程,并利用用户自定义过程简化程简化“员工工资管理系统员工工资管理系统”中各过程中的重复语句。中各过程中的重复语句。sub过程引例过程引例1不使用通用过程不使用通用过程:dim sx !, sy!, sz!dim x!, y !, z!dim s !x =val( inputbox(请输入请输入x的值的值)y =val( inputbox(请输入请输入y的值的值)z =val(
4、inputbox(请输入请输入z的值的值)for i = 1 to x sx = sx + 1 / inextfor i = 1 to y sy = sy + 1 / inextfor i = 1 to z sz = sz + 1 / inexts = sx + sy + sz 使用通用使用通用sub过程过程:dim sx !, sy!, sz!dim x!, y !, z!dim s !x =val( inputbox(请输入请输入x的值的值)y =val( inputbox(请输入请输入y的值的值)z =val( inputbox(请输入请输入z的值的值)call s_sum(sx, x)
5、call s_sum(sy, y)call s_sum(sz, z)编程计算编程计算(1+1/2+1/3+1/x) + (1+1/2+1/3+1/y)+(1+1/2+1/3+1/z)的值的值 sub s_sum(sa!, a!) sa = 0 for i = 1 to a sa = sa + 1 / i nextend sub 7.2 自定义自定义sub过程的创建过程的创建说明:如果需要参数,则只能在代码窗口中在过程名后的括号内加上.在在vb环境中,打开代码窗口;环境中,打开代码窗口;单击单击“工具工具”菜单下菜单下“添加过程添加过程”命令,打开命令,打开 “添加过程添加过程”窗口;窗口;在在
6、“添加过程添加过程”窗口中,在窗口中,在“名称名称”框中输入过程名称,框中输入过程名称,“类类型型”选择为选择为“子程序子程序”,“范围范围”根据需要选择根据需要选择“公有的公有的”或或“私有的私有的”,单击,单击“确定确定”按钮,则在代码窗口中将自动出现按钮,则在代码窗口中将自动出现如下代码块。如下代码块。private sub s_sum()end sub方法一方法一: 用菜单命令用菜单命令 自定义自定义sub过程的创建过程的创建说明:1.过程名后括号内的参数称为形式参数,简称“形参”,形参只能是变量名或数组名.2.关键字private表示为私有过程,只在一个模块中有效,public为公有
7、过程,可在任何模块中有效.3.输入sub语句时只能在代码窗口的空白处输入,不能在其他的sub 与end sub之间输入在代码窗口的空白处输入在代码窗口的空白处输入private|publicsub (参数表参数表) 后按回车键,则自动形成如下的代码块:后按回车键,则自动形成如下的代码块:private|publicsub (参数表参数表) end sub方法二方法二:编写代码创建自定义过程编写代码创建自定义过程在一个工程中除了可添加多个窗体模块外(菜单项在一个工程中除了可添加多个窗体模块外(菜单项“工工程程”/“/“添加窗体添加窗体”),还可),还可添加标准模块(菜单项添加标准模块(菜单项“工
8、程工程”/“/“添加模块添加模块”),),如图,添加模块后,在工如图,添加模块后,在工程资源管理器中将增加程资源管理器中将增加“module1module1模块模块”,一般来说,一般来说,全局变量、公有通过过程等都在标准模块中定义,以供全局变量、公有通过过程等都在标准模块中定义,以供各窗体模块中的过程调用。各窗体模块中的过程调用。 相关知识相关知识:标准模块标准模块窗体模块标准模块7.3 7.3 自定义自定义subsub过程的调用过程的调用 call 过程名过程名(实参表实参表) 关键字关键字call可省去,如果省去可省去,如果省去call,则过程名后不能有括号,则过程名后不能有括号,如:如:
9、call s(a,b) s a,b语法格式:语法格式:调用语句的作用是将程序的执行流程从调用语句处转到被调用调用语句的作用是将程序的执行流程从调用语句处转到被调用的过程中。如图表示的过程中。如图表示: 当执行过程当执行过程s1时,首先执行时,首先执行“”,碰到,碰到“call s2”语语句时,流程转向过程句时,流程转向过程s2中,执行中,执行s2中的中的“”,到,到“end sub”时,再返回到时,再返回到s1中中“call s2”下面的下面的“” 调用语句流程调用语句流程7.4 7.4 自定义自定义subsub过程的参数传递过程的参数传递按址传递(按址传递(byref):形参与实参具有完全相
10、同的值):形参与实参具有完全相同的值 按值传递按值传递(byval):只将实参的值传给形参,而形参的值不影响实:只将实参的值传给形参,而形参的值不影响实参。参。由定义过程时声明:按哪一种传递方式由声明语句来声明,默认由定义过程时声明:按哪一种传递方式由声明语句来声明,默认情况下为按址传递,情况下为按址传递, 。如定义语句:如定义语句:sub s_test(byval a1% , byref a2%) a1:按值传递,:按值传递,a2:按址传递。:按址传递。参数的传递方式分为两种:参数的传递方式分为两种:实参可以是变量名、数组元素、常量、函数或表达式。实参可以是变量名、数组元素、常量、函数或表达
11、式。调用语句的作用是将实参的值传递给形参调用语句的作用是将实参的值传递给形参7.5 7.5 自定义自定义subsub过程与事件过程的异同点:过程与事件过程的异同点: 二者都是以二者都是以sub语句开头,以语句开头,以end sub语句结尾的代码块;语句结尾的代码块;相同点:相同点:1. 事件过程的过程名及参数为系统预先定义,如事件过程的过程名及参数为系统预先定义,如sub command1_click(),form_load(),而自定义,而自定义sub过程过程的过程名及参数则由用户自己定义;的过程名及参数则由用户自己定义;2. 二者都可以被其他过程调用,调用语句的格式相同。所不同二者都可以被
12、其他过程调用,调用语句的格式相同。所不同的是,事件过程更多的是在事件触发时被执行,而自定义的是,事件过程更多的是在事件触发时被执行,而自定义sub过程则只能是在调用时被执行;过程则只能是在调用时被执行; 不同点不同点在在vbvb案例中使用自定义案例中使用自定义subsub过程过程 将数组元素显示在文本框中的代码块在多个过程中出现,将数组元素显示在文本框中的代码块在多个过程中出现,可将其定义为一个通用可将其定义为一个通用sub过程。代码如下:过程。代码如下:说明:1. 将程序中包含此代码块的地方使用语句: call s_disp(i)2. 此过程中包含一个整形参数,表示当前显示的某一组数据的序号
13、。private sub s_disp(k as integer) txt_wageinfo(0).text = m_strarrnum(k) txt_wageinfo(1).text = m_strarrname(k) txt_wageinfo(2).text = m_intarrwage(k) txt_wageinfo(3).text = m_intarrprz(k) txt_wageinfo(4).text = m_intarrsud(k)end sub 在在vbvb案例中使用自定义案例中使用自定义subsub过程过程private sub s_input() for i = 1 to
14、6 m_strarrnum(i) = inputbox(请输入第请输入第 & str(i) & 个员工编号个员工编号) m_strarrname(i) = inputbox(请输入第请输入第 & str(i) & 个员工姓名个员工姓名) m_intarrwage(i) = val(inputbox(请输入第请输入第 & str(i) & 个员工工资个员工工资) m_intarrprz(i) = val(inputbox(请输入第请输入第 & str(i) & 个员工奖金个员工奖金) m_intarrsud(i) = val(inp
15、utbox(请输入第请输入第 & str(i) & 个员工各种补助个员工各种补助) nextend sub数据输入虽然不是重复出现的代码,但是一段相对独立的代码,此数据输入虽然不是重复出现的代码,但是一段相对独立的代码,此种情况下也适合定义通用过程,可使程序结构清晰。代码如下种情况下也适合定义通用过程,可使程序结构清晰。代码如下说明:此过程为无参数过程,调用时不需要实参7.6 7.6 自定义自定义subsub过程的应用过程的应用: :课堂实训课堂实训1 1定义变量定义变量:n%,s!:n%,s!n n值由用户输入值由用户输入调用调用subsub过程过程:call sum(s,n
16、):call sum(s,n)说明:将n的值传给b, 将s与a结合,当执行通用过程s后,a的值传给s,则s就是所求的结果.定义定义sub过程过程:sub sum(a!,b%)for i = 1 to b a=a+inext计算任意个数累加的值计算任意个数累加的值.如图如图所示所示,单击按钮时弹出输入单击按钮时弹出输入框框,由用户输入一个整数由用户输入一个整数n,然后计算然后计算1-n的和的和.要求用要求用sub过程求和过程求和.自定义自定义sub的应用的应用:课堂实训课堂实训3编写简单的学生信息浏览程序编写简单的学生信息浏览程序,要求要求:1. 浏览浏览10组数据组数据2. 数据输入与数据显示
17、用数据输入与数据显示用sub过程来实现过程来实现.3. 数据用数组存放数据用数组存放,同类的同类的控件定义为控件数组控件定义为控件数组.问题描述问题描述:7.7 7.7 初步认识初步认识functionfunction自定义过程自定义过程 使用通用使用通用function过程过程:dim sx !, sy!, sz!dim x!, y !, z!dim s !x =val( inputbox(请输入请输入x的值的值)y =val( inputbox(请输入请输入y的值的值)z =val( inputbox(请输入请输入z的值的值)sx = f_sum(x) sy = f_sum(y)sz =
18、f_sum(z)private function f_sum (a!) as _ single f_sum = 0 for i = 1 to a f_sum = f_sum + 1 / i nextend function除了除了sub过程外,另一种自定义过程是过程外,另一种自定义过程是function过程,也称为函数过过程,也称为函数过程。如将上一节中的引例改用程。如将上一节中的引例改用function过程来完成,程序可写为:过程来完成,程序可写为:自定义自定义function过程过程7.8 7.8 自定义自定义functionfunction过程的创建过程的创建说明:如果需要参数,则只能在
19、代码窗口中在过程名后的括号内加上.1.在在vb环境中,打开代码窗口;环境中,打开代码窗口;2.单击单击“工具工具”菜单下菜单下“添加过程添加过程”命令,打开命令,打开 “添加过程添加过程”窗口;窗口;3.在在“添加过程添加过程”窗口中,在窗口中,在“名称名称”框中输入过程名称,框中输入过程名称,“类型类型”选择为选择为“函数函数”,“范围范围”根据需要选择根据需要选择“公有的公有的”或或“私有的私有的”,单击,单击“确定确定”按钮,则在代码窗口中将自动出按钮,则在代码窗口中将自动出现如下代码块。现如下代码块。private function s_sum()end function方法一方法一:
20、 用菜单命令用菜单命令 自定义自定义functionfunction过程的创建过程的创建说明:1.编写函数体语句时,必须包含一次对函数名赋值的语句2.参数与sub过程相同,只能是变量名或数组名3.输入function语句时只能在代码窗口的空白处输入,不能在其他的sub 与end sub之间输入4.函数可以指明类型,表示函数反回值的类型。在代码窗口的空白处输入在代码窗口的空白处输入private|publicsub (参数表参数表) 后按回车键,则自动形成如下的代码块:后按回车键,则自动形成如下的代码块:public function 函数名函数名(参数表参数表) as 类型类型end func
21、tion 方法二方法二:编写代码创建自定义过程编写代码创建自定义过程用用functionfunction过程计算过程计算vbvb案例中的个人所得税案例中的个人所得税 个人所得税的计算也是相对独立且较长的一段代码个人所得税的计算也是相对独立且较长的一段代码,直接写在事直接写在事件过程中不利于体现事件过程的功能件过程中不利于体现事件过程的功能,将其定义为一个独立将其定义为一个独立的通用过程的通用过程.在需要的事件过程中直接调用在需要的事件过程中直接调用.编写代码如下编写代码如下: 必须性必须性public function f_caltax(wage as integer) dim inttax1
22、!, inttax2!, inttax3!r, inttax4! inttax1 = 500 * 0.05 inttax2 = 1500 * 0.1 inttax3 = 3000 * 0.15 if wage = 0 and wage = 20000 then if wage - 800 = 0 then f_caltax = 0 elseif wage - 800 = 500 then f_caltax = (wage - 800) * 0.05 elseif wage - 800 = 2000 then f_caltax = (wage - 1300) * 0.1 + inttax1 el
23、seif wage - 800 = 5000 then f_caltax = (wage - 2800) * 0.15 + inttax2 + inttax1 else f_caltax = (wage - 5800) * 0.2 + inttax3 + inttax2 + inttax1 end if else msgbox 数据超出范围数据超出范围 end ifend function在事件过程中调用在事件过程中调用functionfunction这样处理后,使得文本框的change事件的功能更加突出,即计算所有的计算数据.txt_wageinfo_change(index as inte
24、ger) txt_ wageinfo(5).text = m_intarrwage(i) + m_intarrprz(i) + _ m_intarrsud(i) txt_wageinfo(6).text =m_ intarrwage(i) * 0.05 txt_wageinfo(7).text = f_caltax(m_intarrwage(i) txt_wageinfo(8).text = m_intarrwage(i) * 0.05 + _ f_caltax(m_intarrwage(i) txt_ wageinfo(9).text = val(txt_ wageinfo(5).text)
25、 _ val(txt_ wageinfo(8).text)end sub 在文本框控件数组的在文本框控件数组的change事件中调用函数事件中调用函数7.9 function7.9 function函数的应用函数的应用: :课堂实训课堂实训2 2将成绩转换为等级将成绩转换为等级要求要求:1.输入成绩输入成绩:弹出弹出5个输入框个输入框,依次输入依次输入5个学生的成绩个学生的成绩,并显示在对并显示在对应的文本框中应的文本框中.2.转换成绩转换成绩:分别将分别将5个成绩转换成对应的等级个成绩转换成对应的等级,显示在文本框中显示在文本框中.3.成绩到等级的转换由成绩到等级的转换由function函数
26、来实现函数来实现.代码编写如下代码编写如下:问题描述问题描述:functionfunction函数的应用函数的应用: :课堂实训课堂实训2 2代码代码dim cj%(5),dj$(5)private sub cmd_1_click() cmd_1为数据输入按钮为数据输入按钮:for i = 1 to 5 cj(i) = val(inputbox(请输入第请输入第 & i & 个成绩个成绩) txt_cj.text = txt_cj.text & cj(i) nextend subcmd_2为数据转换为数据转换:private sub cmd_2_click()for i
27、 = 1 to 5dj(i) = f_chg(cj(i)txt_dj.text = _ txt_cj.text & dj(i) nextend sub7.10 api7.10 api函数初步知识函数初步知识windows api函数是函数是windows操作系统为各种应用程序提操作系统为各种应用程序提供的接口函数,存放在供的接口函数,存放在dll文件中。文件中。dll(dynamic-link library的缩写)称为动态链接库。的缩写)称为动态链接库。包含包含windows api函数的函数的dll文件一般放在文件一般放在windows的系的系统目录中,最主要的有三个统目录中,最主
28、要的有三个dll文件:文件:1user32.dll:该库文件包含有关管理:该库文件包含有关管理windows环境的函环境的函数,如管理菜单、管理光标以及处理消息等。数,如管理菜单、管理光标以及处理消息等。2gdi32.dll:其中的函数帮助管理不同设备的输出。:其中的函数帮助管理不同设备的输出。3kernel32.dll:包含执行内存管理、任务管理、资源管:包含执行内存管理、任务管理、资源管理以及模块管理的函数。理以及模块管理的函数。apiapi函数的概念函数的概念apiapi文本浏览器文本浏览器 1.1.启动启动apiapi文本浏览器文本浏览器( (两种方法两种方法) )方法一方法一: :从桌面环境下从桌面环境下 开始开始 菜菜单启动单启动方法二方法二: :从从vbvb环境下的菜单项环境下的菜单项 外外接程序接程序 下启动下启动 2.2.加载加载apiapi文本文件或文本文件或apiapi数据库文件数据库文件在在apiapi文本浏览器中可加载文本浏览器中可加载apiapi文本文文本文件或数据库文件件或数据库文件3.3.选择选择apiapi函数函数在在apiapi类型中选择声明类型中选择声明, ,在可选项中在可选项中可以选择所需的可以选择所需的apiapi函数函数. .通过右边的功能按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件智能AI教学课件
- 广东会计初级自考试题及答案
- 历年护理考试题及答案
- 礼仪学堂考试题及答案
- 乐器辅助考试题及答案
- 广东房屋构造自考试题及答案
- 康复基层考试题及答案
- 钼钨冶炼辅料制备工适应性考核试卷及答案
- 信息安全管理员职业考核试卷及答案
- 混凝土浇筑工数字化技能考核试卷及答案
- 精益管理培训课件
- 护理高职入学专业介绍
- 亚马逊创业合伙协议书
- 2025年网络与数据安全知识竞赛题库及答案(150题)
- 深入了解纺织品面料的特点试题及答案
- 2025年全国设备监理师(设备工程质量管理与检验)新版真题及解析
- 防雷施工劳务合同协议
- 钣金车间生产培训
- 校园心理危机干预培训
- 护理血站考试试题及答案
- 摩托车协议买卖合同模板
评论
0/150
提交评论