VBNET程序设计实用教程4.ppt_第1页
VBNET程序设计实用教程4.ppt_第2页
VBNET程序设计实用教程4.ppt_第3页
VBNET程序设计实用教程4.ppt_第4页
VBNET程序设计实用教程4.ppt_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章过程,VB.NET程序设计实用教程,学员十一队大专区队计算机四组 张海红,过程,过程,用函数过程实现的话费计算程序,四则运算测验程序,十进制到其它进制转换程序,汉诺塔问题,求复杂函数的值,本章项目,学员十一队大专区队计算机四组 张海红,过程,过程,通用过程和函数过程的定义、 建立与调用,过程的概念与分类,参数传递,变量的作用域与静态变量,过程的嵌套调用与递归调用,本章要点,学员十一队大专区队计算机四组 张海红,过程,第一节过程的概念,过程是完成某一特定功能的一段程序,又称子程序。使用过程的第一个原因是结构化程序设计的需要。结构化程序设计思想最重要的一点就是把一个复杂问题分成很多小而独立的

2、问题,即把一个大程序分为若干个小程序模块,每个模块完成一部分功能。如图4-1所示。对于每个模块,需详细定义模块的功能及其接口,一个程序员编制其中的一个或多个模块,并把模块编写成过程。,.过程的概念,学员十一队大专区队计算机四组 张海红,过程,.过程的概念,摩块编写好后,可以把它们组装成应用程序,如把“二级子模块11”和“二级子模块12”组合在一起就实现了“一级子模块1”的功能,把“二级子模块21”和“二级子模块22”组合在一起就实现了“一级子模块2”的功能,把“一级子模块1”和“一级子模块2”组合在一起就实现了软件项目的功能。组合子模块可以通过调用相应的过程来实现。,学员十一队大专区队计算机四

3、组 张海红,过程,.过程的概念,图4-1 结构化程序设计模式,学员十一队大专区队计算机四组 张海红,过程,.过程的概念,使用过程的第二个原因是为了解决代码的重复。可以把经常用到的完成某种功能的程序段编写成过程,这样做有很多好处,例如:每当需要完成这一功能时只要调用这个过程即可,而不需重复编写代码;如果需要修改这一段代码,只要在该过程里修改即可,而调用该过程的程序不必修改。 从本质上说,过程就是完成一定功能的程序段。该程序段有一个名字,称为过程名。并且为过程定义了严格的接口,对用户来说不需要了解过程功能的实现过程与语句,只需了解它的功能与接口。若有其它程序要完成该过程的功能,可通过过程名调用它,

4、过程可多次反复调用,但调用时必须符合过程的接口要求。,学员十一队大专区队计算机四组 张海红,过程,.过程的概念,根据不同的方法,过程可以分成不同的种类。如从使用的角度来看,可以把过程分成Sub过程、函数过程和属性过程;从定义时有无参数来分,可分为有参过程和无参过程;根据过程调用时是否有返回值来分,可分为有返回值的过程和无返回值的过程;根据过程的调用关系可分成主调过程和被调过程,所谓主调过程是指调用其它过程的过程,所谓被调过程是指被其它过程调用的过程。在VB.NET中通常采用第一种分法,即把过程分为:Sub过程、函数过程和属性过程,本章只介绍Sub过程和函数过程,Sub过程又可分成事件过程和通用

5、过程。,学员十一队大专区队计算机四组 张海红,过程,第二节四则运算测验程序Sub过程,一、任务4-1描述:,编写一个程序用来随机出十道两位数的“+”、“-”、“*”、“/”测验题,计算机显示每道题后等待用户输入答案,并能根据用户输入答案来判断正误并显示答题情况。程序的设计界面如图4-2所示,程序的运行界面如图4-3所示。程序运行时,计算机将生成一道四则运算题并显示出来(两个运算数分别显示在界面上的第一个和第二个文本框中),并等待用户在第三个和第四个文本框(专用于除法,输入余数)中输入答案,用户输入答案后按“确定”按钮,将把用户的答题情况显示在右侧的列表框中,并在题目后加上“”和“”以表示用户答

6、题是否正确。,.2 四则运算测验程序Sub过程,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,图4-2 程序运行界面,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,图4-3 某时刻程序运行界面,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,本题的关键有两点:一是出题,二是判断用户答案的正误。 (1)出题涉及到产生两个运算数和一个运算符号,这些均可用随机数来产生。可以产生两个两位随机数作为运算数,产生一个1到4之间的随机整数作为运算符,设1为“+”,2为“-”,3为“*”,4为“/”。把运算数直接显示在界面

7、上,对于运算符,可通过分支语句进行测试,把相应的“+”、“-”、“*”、“”显示出来。 (2)通过Select CaseEnd Select语句测试产生的运算符是何种运算符,对产生的两个运算数作相应运算得到标准答案。从界面上获取用户输入的答案,把标准答案和用户输入的答案相比较,如果相等则用户回答正确,如果不等则用户回答不正确。,二、任务分析:,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,另外,窗体刚显示出来的时候需要出一组题目的第一道题。每次单击一次确定按钮都要出该组题目的下一道题。单击“重新开始”按钮,将要出下一组的第一道题。可见“出题”这个操作在程序的实现过

8、程中需要多次使用,因此可把它定义成一个通用过程,在需要时直接调用即可。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH04”,项目名为“Task4_1”。 2把Form1窗体的Text属性值设置为“四则运算测验程序”,把它的Name属性值设置为“frmMaths”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmMath.vb”。然后执行【项目】【Task4_1属性】命令,在出现的“Task4_1属性页”

9、对话框中把“启动对象”设置为“frmMath”。 3对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表4-1所示。,三、任务实现:,.2四则运算测验程序Sub过程,表4-1 任务4-1控件属性设置及其功能,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,说 明 ListBox1为列表框控件,列表框控件用来显示一串列表项,供用户进行选 择,在工具箱中的图标为“”。 4在代码窗口中定义常量和模块级数组,如下。 Const N As Integer = 10 Dim Num1, Num2 As Integer 题目中的两个数 Dim Op As Inte

10、ger 存放运算符:1为+,2为-,3为*,4为/ Dim Standard As Integer 存放标准答案:“+”、“-”、“*”的结果和“/“的商 Dim Standardb As Integer 存放标准答案:“/”运算的余数 Dim Answer As Integer 存放用户答案:“+”、“-”、“*”的结果和”/“的商 Dim Answerb As Integer 存入用户答案 :”/“运算的余数 Dim Question As String 存入题目和答题情况 Dim i As Integer 存放当前题目数 Dim RightNum, WrongNum As Integer

11、 存放正确的题数和错误的题数,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,5在上述代码的后面,编写以下代码。 Private Sub ShowQuestion() Dim t As Integer 交换用的中间变量 Num1 = 10 + Rnd() * 90 产生两个两位数 Num2 = 10 + Rnd() * 90 Op = Int(1 + Rnd() * 4) 产生运算符 TextBox3.Text = : TextBox4.Text = 用户输入答案的编辑框为空 If (Op = 4) Or (Op = 2) Then 如果是/或-运算符 If Num

12、1 Num2 Then 如果第一个数小 t = Num1 : Num1 = Num2 : Num2 = t 把两个数交换过来End If End If If (Op = 4) Then 如果是运算符 Label3.Visible = True 显示余符号 TextBox4.Visible = True 显示用户输入余数的编辑框 Else 不是除法 Label3.Visible = False 不显示余符号 TextBox4.Visible = False 不显示用户输入余数的编辑框 End If TextBox1.Text = Str(Num1) 显示第一个数 TextBox2.Text =

13、Str(Num2) 显示第二个数 Select Case Op 判断运算符的种数,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,Case 1加法运算 Label1.Text = + 显示运算符 Standard = Num1 + Num2 得到标准答案 Question = Str(Num1) + + + Str(Num2) + = 产生题目字符串并保存在变量中 Case 2减法运算 Label1.Text = - 显示运算符 Standard = Num1 - Num2 得到标准答案 Question = Str(Num1) + “-” + Str(Num2)

14、+ “=” 产生题目字符串并保存在变量中 Case 3 乘法运算 Label1.Text = * 显示运算符 Standard = Num1 * Num2 得到标准答案 Question = Str(Num1) + * + Str(Num2) + = 产生题目字符串并保存在变量中 Case 4除法运算 Label1.Text = 显示运算符 Standard = Num1 Num2 得到商的标准答案 Standardb = Num1 Mod Num2 得到余数的标准答案 Question=Str(Num1) + + Str(Num2) + = 产生题目字符串并保存在变量中,学员十一队大专区队计

15、算机四组 张海红,过程,.2四则运算测验程序Sub过程,说明: (1)上述代码定义了一个名为“ShowQuestion”的通用过程, 通用过程是Sub过程的一种,在VB.NET中有两种Sub过程,即事件过 程和通用过程。 (2)上述通用过程的作用是:产生两个两位随机数作为运算 数并存放在变量Num1和Num2中,产生一个14之间的随机数作为运 算符,存放在变量Op中;如果运算符是“”或“-”且Num1的值小于 Num2的值,应把Num1和Num2的值交换;如果运算符是“”,让输入 余数的文本框可见,供用户输入余数,如果运算符不是“”,则让 输入余数的文本框不可见;最后使用Select Case

16、End Select语 句测试Op的值来判断对Num1和Num2进行哪一种运算,得到标准答案 (存放在变量Standard和Standardb中)并产生相应的题目字符串 (存放在变量Question中)。 (3)在VB.NET中,要使用通用过程,必须先定义。通用过程 可以在窗体或模块中定义。通用过程的定义格式如下。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,格式:Private|Friend|Public|Protected|Protected Friend Sub 过程名() 执行部分 Exit Sub 执行部分 End Sub 功能:建立一个由“过程名”标

17、识的通用过程。 说明: 在Sub和End Sub之间是描述过程操作的一段程序,称为子程序体或过程 体。 以关键字Private开头的通用过程是模块级的(私有的)过程,只能被本 模块内的事件过程或其它过程调用。以关键字Public选项开头的常用过程是公 有的或全局的过程,在应用程序的任何模块中都可以调用它。以Friend开头的 通用过程只能在本项目或组件的范围外,被其它过程调用。Protected与类的继 承有关,在面向对象的章节中进行介绍。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,过程体由合法的VB.NET语句组成,过程体中可以含有多个“ Exit Sub”

18、语句,程序执行到“Exit Sub”语句时提前退出该过程,返回到主调 过程中调用该过程语句的下一条语句。 “过程名”是标识符,过程名必须唯一。 “参数列表”中的参数称为形式参数(简称形参),它可以是变量 名或数组名。若有多个参数时,各参数之间用逗号分隔。VB.NET的过程 可以没有参数,但一对圆括号不可以省略。不含参数的过程称为无参过 程,带有参数的过程称有参过程。每个形参的定义格式有以下几种: 格式1:Optional ByVal 变量名 As 类型说明符 格式2:Optional ByRef 变量名 As 类型说明符 格式3:ByVal|ByRef ParamArray 参数数组名() A

19、s 类型说明符,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,功能:定义形参。 说明:ByVal表示其后的形参是按值传递参数或称为“传值”方式。 ByRef表示其后的参数是按引用传递参数,或称“传址”方式。如果形式 参数之前有Optional关键字,则表示该参数是一个可选参数。 ParamArray关键字用来声明参数数组,参数数组可以用来接受任意多个 实参。格式1和格式2中的变量名也可以是数组名,若是数组名应在其后 加上圆括号“()”。 (4)通用过程可以在窗体中建立也可以在模块中建立。 在窗体中建立通用过程的一般步骤如下: 在“解决方案资源管理器”窗口中,找到需

20、要的窗体并双击它; 打开代码窗口; 滚动代码,找到文字“Windows 窗体设计器生成的代码”所在位置; 直接在该段文字的下方输入要建立的通用过程。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,通用过程还可以定义在模块文件中,模块文件是以.vb为 扩展名的文件。一个模块代码是以Module开头,以End Module结尾。可 以将各窗体都公用的过程或函数都放在模块中,这样可使程序更加清晰、 易懂、便于维护。为在模块文件中建立通用过程,首先应为项目添加模 块。为项目添加模块并在模块中建立通用过程的一般步骤如下: 执行“项目”“添加模块”命令,将会出现如图4-4所示

21、的“添加新 项”对话框。 在“添加新项”对话框的右边的“模板”框内选中“模块”图标,在下 面的“名称”后面的文本框中输入模块文件名(图中为“Module1.vb”), 然后按“打开”按钮,则将在代码窗口中显示建立起来的该模块的模板, 如图4-5所示。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,图4-4 “添加新项”对话框,图4-5 创建的模块文件的模板,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,在图5-6的插入点所在处可以输入要建立的通用过程代码。 单击工具栏上的“”、“”按钮或执行“文件”“保存Module1.vb”命令,都

22、 会把模块文件保存起来,同时也保存了建立在其中的通用过程。 6在窗体的空白部分双击,将会出现窗体的Load事件过程框架,在其中输 入事件过程代码,如下。 Private Sub frmMath_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() 随机数初始化 i = 1 当前题目为第一题 RightNum = 0 答对的题数目为0道 WrongNum = 0 答错的题数目为0道 TextBox5.Text = “0” : TextBox6.Text =

23、“0” 显示答对答错题数的编 辑框为空 ListBox1.Items.Clear() 清除列表框中的内容 ShowQuestion() 显示题目 End Sub,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,说明: (1)事件过程是一种Sub过程。当某个对象对一个事件的发生做出 响应时,VB.NET就会自动地执行与该事件相关的事件过程。上述代码就 是窗体frmMath的Load事件过程代码,该事件过程在窗体加载时被执行。 (2)发生某对象的某事件时,可能会执行该对象的相应事件过程 代码,执行的前提是该对象的相应事件过程已经定义。事件过程的定义 格式如下。 格式:P

24、rivate Sub 对象名_事件名() 局部变量和常量说明 执行部分 End Sub 功能:建立一个事件过程。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,说明: 一个对象的事件过程名前都有一个“Private”关键字,这表示该 事件过程只能在定义的模块中被调用,在该模块之外不能被调用,即它 的使用范围是模块级的。 事件过程名是由对象的实际名称(Name属性值)、下划线和事件 名组合而成的。其中事件名是VB为某对象能触发的事件所规定的名称, 不能自己命名,如Click、Load等都是事件名。例如在Button1控件上单 击,将会调用名字为Button1_Cli

25、ck的事件过程。 “形式参数列表”表示该事件过程所具有的参数个数和参数类型, 由VB系统的事件本身所决定,用户不能随意添加。如Load事件过程就没 有参数。 (3)在VB.NET中,建立事件过程有专门的方法,其操作步骤如下: 打开代码窗口(或称代码视图、代码编辑器窗口);,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,双击窗体或控件,即可打开“代码”窗口,在代码窗口的上方有两个 列表框,分别为“对象”列表框和“事件过程”列表框 在“代码”窗口的“对象”列表框中选择一个对象,如选择 Button1,如图4-6所示。,图4-6 在代码窗口的对象列表框中选择对象名 在“

26、事件过程”列表框中选择一个事件过程后,如选择Click,如图4-7所示。,图4-7 在代码窗口的事件过程列表框中选择事件过程名,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,选择事件过程后,就会在代码窗口中自动产生该事件过程的模板,如 图4-8所示。此时就可以在插入点处编写在发生Button1_Click事件时应 该执行的代码了。,图4-8 产生的Button1_Click事件过程模板 事件过程定义与建立在前面章节中的几乎每个任务中都要用到,这里不再举例。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,(4)程序中的语句“ShowQu

27、estion()”的作用是调用通用过程 “ShowQuestion”。定义通用过程时,通用过程并没有执行,通用过程只 有在被调用时才被执行。在VB.NET中调用通用过程通常采用以下两种方 法。 直接使用通用过程名调用通用过程 该方法的语法格式及功能如下: 格式:通用过程名(实际参数列表) 功能:调用执行“通用过程名”指定的过程。 说明:“实际参数列表”的参数要依次传递给通用过程的形参列表 中的形参,如果通用过程无形参,“实际参数列表”可缺省。“实际参数 列表”可能有多个参数,参数之间用“,”分隔开。 使用Call关键字调用通用过程,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程

28、序Sub过程,该方法的语法格式及功能如下: 格式:Call 通用过程名(实际参数列表) 功能:调用执行“通用过程名”指定的过程。 说明:该方式与功能完全一样。该方式由于在过程前面使用了 Call关键字,可以使程序的可读性增强,使用户一眼就可以看出这是一 个过程调用语句。如上述代码中的语句“ShowQuestion()”还可以写成 “Call ShowQuestion()”。 (5)某对象的事件过程在发生该对象的相应事件时由系统自动调 用,而通用过程则是在程序中通过过程调用语句调用才能执行,通过过 程可以被事件过程、通用过程或函数过程调用,把调用其它过程的过程 称为主调过程,把被其它过程调用的过

29、程称为被调过程。 7执行程序,会发现界面上出现了一道题目,但用户不能做题, 因为“确定”等按钮的Click事件代码尚没有编写。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,(4)程序中的语句“ShowQuestion()”的作用是调用通用过程 “ShowQuestion”。定义通用过程时,通用过程并没有执行,通用过程只 有在被调用时才被执行。在VB.NET中调用通用过程通常采用以下两种方 法。 直接使用通用过程名调用通用过程 该方法的语法格式及功能如下: 格式:通用过程名(实际参数列表) 功能:调用执行“通用过程名”指定的过程。 说明:“实际参数列表”的参数要依

30、次传递给通用过程的形参列表 中的形参,如果通用过程无形参,“实际参数列表”可缺省。“实际参数 列表”可能有多个参数,参数之间用“,”分隔开。 使用Call关键字调用通用过程,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,8编写“确定”按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Op = 4 Then 如果是除法运算 Answer = Val(TextB

31、ox3.Text) 得到用户输入的商 Answerb = Val(TextBox4.Text) 得到用户输入的余数 把用户答案连接到Question中 Question = Question + TextBox3.Text + . + TextBox4.Text If (Standard = Answer) And (Standardb = Answerb) Then 如果用 户答对了 Question = Question + 在Question后面连接一个号 RightNum = RightNum + 1 答对的题数目加1 Else 如果答错了,学员十一队大专区队计算机四组 张海红,过程,

32、.2四则运算测验程序Sub过程,Question = Question + 在Question后面连接一个号 WrongNum = WrongNum + 1 答错的题数目加1End If Else 如果是“+”、“-”、“*”等运算 Answer = Val(TextBox3.Text) 获取用户输入的答案 Question = Question + TextBox3.Text 把用户答案连接到Question中 If (Standard = Answer) Then 如果用户答对了 Question = Question + 在Question后面连接一个号 RightNum = Right

33、Num + 1 答对的题数目加1Else 如果答错了 Question = Question + 在Question后面连接一个号 WrongNum = WrongNum + 1 答错的题数目加1End If End If TextBox5.Text = Str(RightNum) 显示答对题数目 TextBox6.Text = Str(WrongNum) 显示答错题数 Question = ( + CStr(i) + ). + Question 在Question变量前连上题号 ListBox1.Items.Add(Question) 显示用户回答本题的情况 Question = i = i

34、 + 1 题号加1 If i = N Then Call ShowQuestion() 显示题目 Else MsgBox(题目已做完!, , 提示) Button1.Enabled = False 确定按钮不可用 End IfEnd Sub,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,说明: 上述代码的作用是先判断运算符是否是“”运算,如果是则获取用户 输入的商和余数,并把它们连接到题目字符串中(Question),形成用 户的答案信息,然后判断用户答案和标准答案是否一致,若不一致则把 “”连接到题目字符串之后,并把答错题目数加1,如果一致则把“” 连接到题目字

35、符串之后,并把答对题目数加1。如果不是“”运算,就 不需获取用户输入的余数信息,其它的处理都是一样的。接着显示答错、 答对题目数并把题目信息字符串Question添加到列表框中显示出来。最 后判断是否已经做满了10道题,如果不满10道题,则调“ShowQuestion” 显示下一道题,否则使“确定”按钮不可用。 9编写“重新开始”按钮的Click事件过程代码,如下。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Ev

36、entArgs) Handles Button2.Click Randomize() 随机数初始化 i = 1 当前题目为第一题 RightNum = 0 答对的题数目为0道 WrongNum = 0 答错的题数目为0道 TextBox5.Text = 0 : TextBox6.Text = 0 显示答对答错的编辑框为空 ListBox1.Items.Clear() 清除列表框中的内容 ShowQuestion() 显示题目 Button1.Enabled = True “确定”按钮可用 End Sub 说明: 该过程的作用是对各变量进行初始化,然后调用“ShowQuestion”过程显示 第

37、一道题。 10编写“退出”按钮的事件过程代码,保存项目。然后运行程序,对程序 的功能进行测试直到正确无误。至此本任务全部完成。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,归纳说明: 过程是结构化模块化程序设计的需要,同时使用过程 也可以使代码得到重用(多次被调用),使程序编写变得 简单。在VB.NET中有两类过程:Sub过程(又称子过程)和 Function过程(又称函数过程),Sub过程又可分成两类: 通用过程和事件过程。在本任务的实现过程中,详细讲解 了事件过程的概念、定义语句与创建方法,讲解了通用过 程的概念、定义语句、创建方法和调用方法。并讲解了事 件

38、过程和通用过程的区别:事件过程由系统在发生对应事 件时执行,而通用过程则是由过程调用语句调用执行。,学员十一队大专区队计算机四组 张海红,过程,.2四则运算测验程序Sub过程,思考与实训: 1为什么要使用过程?在VB.NET中,有哪几类过程? 2事件过程和通用过程的主要区别是什么? 3仔细思考为什么本任务要编写一个ShowQuestion过程?如果没 有编写该过程,程序应该怎么编? 4编写一个通用过程,用来在Label1标签中显示十行“欢迎您参加 Visual Basic培训班。”欢迎信息,然后在Button1按钮的Click事件过 程代码中调用该过程显示出欢迎信息。 5编写一个实现如下功能的

39、通用过程:要求用户输入姓名,然后 输出若干行如下信息:“欢迎*同志参加VB.NET讨论会!”,输出的行 数由用户决定。然后编写程序调用该过程进行验证。 提示:通用过程应该有两个参数,一个参数用来接收用户名,一个参数用 来接收要显示的行数。与本任务中的ShowQuestion过程不一样,ShowQuestion 是一个无参过程,而题中的过程是一个有参过程,请参照过程的定义语句格式 和调用语句格式定义过程和调用过程。,学员十一队大专区队计算机四组 张海红,过程,任务4-3描述: 编写程序把任意十进制数转换成N进制数(N=16)。要求:数制转换用过程来实现。程序设计界面如图4-14所示,程序运行界面

40、如图4-15所示。,.3用Function过程实现话费计算程序,图4-14 程序设计 图4-15 程序运行界面,学员十一队大专区队计算机四组 张海红,过程,任务分析: 为把十进制数NUM转换为N进制数,可采用除N取余法,具体实现过程可描述如 下: (1)定义一个由十六个元素组成的字符数组,给它的元素分别赋“0”“9”、 “A”“F”,用来表示对应的进制数的字符(本题只考虑到十六进制)。该字符集 把它称为转换字符集,其中的字符称为转换字符。 (2)十进制数NUM除以N后得到一个余数,以该余数作为下标从(1)中定义 的数组中取出相应数组元素中的字符,该字符就用转换后的一位数字的符号表 示。 (3)

41、定义一个存放结果的字符串数组。用NUM的值除N取余数,根据余数得到 转换字符(方法如第(2)步所述),把转换字符按序存放到存放结果的字符串 数组中,把NUM值除以N的商赋给NUM;再用NUM的值除N取余数, 根据余数得到转 换字符,把转换字符按序存放到存放结果的字符串数组中,反复进行,直 到NUM的值为0时为止。此时把存放结果的字符串数组中的数据反序存放,就是 转换的结果,.3用Function过程实现话费计算程序,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,任务实现: 1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存

42、放位置为“D:VBTASKCH04”,项目名为“Task4_3”。 2把Form1窗体的Text属性值设置为“十进制数转换为其它进制数”,把它的Name属性值设置为“frmTenToOther”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmTenToOther.vb”。然后执行【项目】【Task4_3属性】命令,在出现的“Task4_3属性页”对话框中把“启动对象”设置为“frmTenToOther”。 3对照程序设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表4-2所示。,学员十一队大专区队计算机四组 张海红,过程,.3用F

43、unction过程实现话费计算程序,4在代码窗口中定义模块级变量,如下。 Dim N As Integer 要转换成几进制 Dim Num As Integer 要转换的十进制数 5编写一个Trans通用过程,该过程的代码如下。 Private Sub Trans(ByVal Num As Integer, ByVal N As Integer, ByVal Dest() As Char, ByVal StandardSet() As Char) Dim R, K As Integer R存放余数,K表示下标 Dim T As Char 交换用中间变量 Dim I As Integer 数组反

44、序存放的第一个下标 Dest(K) = StandardSet(R) 以N为下标求出字符集中的对应字符并赋值给DESTK K = K + 1 下标加1 Num = Num N 把Num除以N的商赋给Num Dest(I) = Dest(K) Dest(K) = T 交换DESTI和DESTK I = I + 1 I的值加1 K = K - 1 K的值减1 End While End,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,说明: 该过程有四个参数,参数Num表示待转换的十进制数参 数N表示要转换成几进制,参数Dest是一个数组,表示转换 的结果,

45、参数StandardSet表示转换字符集。该过程采用了 数组作为过程的参数。 6编写文本框TextBox1的LostFocus代码,如下。 Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus N = Val(TextBox1.Text) 获得要转换为的进制数 Label4.Text = CStr(N) + 进制数 End Sub,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,说明: 文

46、本框控件能够响应LostFocus事件,该事件是在对象失去焦点时发生。上述代码的作用是当TextBox1对象失去焦点时,把用户输入的数存放到N中,并在Label4标签中显示出来。 7运行程序,在TextBox1中输入16,然后把焦点移到下一个文本框中,会发现Label4标签显示的文字变为“16进制数:”。 8编写文本框TextBox2的LostFocus代码,如下。 Private Sub TextBox2_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.LostFocus Num

47、= Val(TextBox2.Text) 获得要转换的数 End Sub 说明: 上述代码的作用是当TextBox2失去焦点时,把用户输入的待转换的数存放到变量Num中去。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,9编写Button1按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim I As Integer 循环变量 Dim CharSe

48、t(15) As Char 存放转换字符集的字符数组 Dim DestCharSet(100) As Char 存放转换的结果的字符数组 Dim DestString As String 存放转换结果的字符串 For I = 0 To 100 给存放结果的字符串数组的每个元素赋初值chr(0) DestCharSet(I) = Chr(0) Next I For I = 0 To 9 给存放转换字符集的字符数组前10个元素赋初值09 CharSet(I) = Chr(I + 48) Next I,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,For I

49、 = 0 To 5 给存放转换字符集的字符数组后6个元素赋初值AF CharSet(10 + I) = Chr(Asc(A) + I) Next I 调用Trans过程,把Num转换成N进制数,结果存放到DestCharSet字符数组中 Call Trans(Num, N, DestCharSet, CharSet) I = 0 变量i的值设为0,是第一个元素的下标 DestString = 存放转换结果的字符串赋初值为空串 While DestCharSet(I) Chr(0) 如果DestCharSeti中存放的是一个有效字符 DestString = DestString + DestC

50、harSet(I) 把该字符连接到结果字符串DestString中 I = I + 1 i的值加1 End While TextBox3.Text = DestString 显示转换结果字符串 End Sub,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,说明: (1)语句“Call Trans(Num, N, DestCharSet, CharSet)”的作用是调用过程Trans把十进制数Num转换成N进制,转换结果存放在DestCharSet字符串数组中。 (2)数组可以作为函数的参数,数组作为形式参数的一般定义形式如下: ByVal 形参数组名(

51、) As 类型说明符或ByRef 形参数组名() As 类型说明符 如本任务中的过程定义: Private Sub Trans(ByVal Num As Integer, ByVal N As Integer, ByVal Dest() As Char, ByVal StandardSet() As Char) 其中,Dest和StandardSet都是形参数组名。 在调用带用形参数组的过程时,只需将对应的实参数组名放在实参表中即可,实参数组名后面不需带圆括号。 如本任务中的过程调用为: Call Trans(Num, N, DestCharSet, CharSet) 其中,DestCharS

52、et和CharSet都是实参数组名。 在被调过程中,可以对形参数组用Redim重新定义大小。若形参数组是按值传递的参数,则在被调过程中无论是改变形参数组元素的值还是重新定义形参数组的大小,均不会影响对应的实参数组。若形参数组是按引用传递的参数,则在被调函数中改变了形参数组某元素的值也将影响到实参数组对应元素的值,若在被调函数中改变了形参数组的大小,则实参数组的大小也随之改变。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,10编写“退出”按钮的事件过程代码,保存项目。然后运行程序,对程序的功能进行测试直到正确无误。至此本任务全部完成。 归纳说明: 使用

53、变量作为过程的参数,一个变量只能传递一个数据。当需要在过程之间传递多个数据时,可使用数组作为函数的参数。在本任务的实现过程中,主要讲解了数组作为形参的定义方法是“数名组() As 数据类型”,讲解了在调用过程时对应的实参数组只要写数组名即可。通过本任务的学习,读者也能够根据需要灵活地使用数组作为过程的参数。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,拓展与提高: 数组可以作为形参,当形参数组前有ParamArray关键字则表明该数组是参数数组,通过参数数组可以向函数传递个数变化的参数。关于参数数组,需掌握以下几点。 (1)若形参表中含一个参数数组,

54、则该参数数组必须位于形参列表的最后; (2)参数数组必须是一维数组; (3)不允许将ParamArray关键字与ByRef关键字组合起来使用; (4)与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量; (5)除了允许调用中有数目可变的参数外,参数数组与同类型的一个或多个值参完全相同。但如果传给参数数组的是一个数组名,就相当于按地址传递; (6)参数数组也是一个隐式的可选参数。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,例如,在窗体上添加一个名称为Button1的按钮和一个名称为Label1的标签控件,然后

55、编写如下程序代码。 Private Sub ParamsMeth(ByRef Sum As Integer, ByVal ParamArray Arr() As Integer) Dim i As Integer For i = 0 To UBound(Arr, 1) 求和并改变数组arr的各元素值 Sum = Sum + Arr(i) : Arr(i) = Arr(i) * Arr(i) Next i End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Ha

56、ndles Button1.Click Dim a() As Integer = 1, 2, 3 Dim i As Integer, s As Integer = 0 ParamsMeth(s, a) 调用方法 Label1.Text = 第一次调用和为: & s & Chr(10) + Chr(13) 输出调用方法求得的和 For i = 0 To UBound(a, 1) 输出各数组元素 Label1.Text = Label1.Text & a( & i & )= & a(i) & Chr(10) & Chr(13) Next i s = 0 ParamsMeth(s, 23, 45)

57、再次调用方法 Label1.Text = Label1.Text & 第二次调用和为: & s 输出求得的和 End Sub,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,归纳说明: 函数过程与通用过程一样都是执行一个程序,但函数过程与通用过 程又有不同,就是函数过程能够返回一个值,这个值称为函数返回值或 函数值。在定义过程中使用的参数称为形式参数,在调用过程时使用的 参数称为实际参数。在本任务中,通过两个话费计算函数过程的定义和 调用,详细讲解了函数过程的定义与调用方法。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费

58、计算程序,拓展与提高: 主调过程在调用被调过程时,需要把实际的数据作为实际参数传递给被调过程的形式参数,我们把这个过程称之为参数传递。需注意的是:过程调用时实际参数的个数、类型和含义应与形式参数的个数、类型和含义一致。 在VB.NET中参数传递有两种方式:按值传递和按引用传递(按地址传递)。 1按值传递参数 定义形参时,形参前加上“ByVal”表示该形参是按值传递的形参。若参数按值传递,则在过程调用时,VB.NET为形参按其类型分配临时存储空间,并将实参的值复制到临时存储空间中去。换句话说,按值传递时,传递的只是实际参数的拷贝。在被调过程中若改变了形参的值,也仅仅是改变了临时存储空间中的内容,

59、而不会影响实参本身的值。一旦过程执行结束,返回主调过程时,形参占用的临时存储空间被释放,形参的值也就不存在了。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,可见按值传递参数是一种单向传递,即实参的值能够传 形参,但对形参的改变却无法影响到实参。 图4-9 程序设计界面 例如,假设某程序的设计界面如图4-9所示,第一个文本框和第二个文本框名称分别为TextBox1和TextBox2。程序中定义了一个Swap的通用过程,并在Button1按钮的Click事件过程中对它进行调用,具体代码如下。,学员十一队大专区队计算机四组 张海红,过程,.3用Function过程实现话费计算程序,Private Sub Swap(By

温馨提示

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

评论

0/150

提交评论