【VB开源代码栏目提醒】:网学会员,鉴于大家对VB开源代码十分关注,论文会员在此为大家搜集整理了“数组和VB NET程序分块设计 - 培训资料”一文,供大家参考学习!
目录项目二数组和
VB.NET程序分块设计2.1.1数据结构2.1.2数组的概念2.1.3一维数组2.1.4For Each…Next语句2.2.1多维数组2.2.2多维数组的应用2.2.3创建自定义数据类型2.2.4应用自定义数据类型返回目录
VB.NET程序设计张家口职业技术学院信息工程系目录2.3.1程序分块设计的意义2.3.2过程的类型2.3.3Sub过程2.3.4Function过程2.3.5变量的作用域2.4.1形参和实参2.4.2关键字ByVal和ByRef 2.4.3过程重载2.4.4递归方法返回目录中国铁道出版社在计算机编程的实际应用中除了需要处理纯数值数据外还经常需要处理字符、表格、图像、音频及视频等具有一定结构的数据。
了解数据结构是解决实际问题的关键是编程的基础。
数据结构是一门研究非数值计算问题中计算机处理对象对象之间关系及对这些对象进行相关操作等的一门学科。
计算机完成这类
工作的效率和被处理的数据的组织形式有着密切的关系。
这就是说存在一个数据结构问题。
对于许多非数值问题通常是无法用数学方程来描述的这些
问题所求的不是某个数值而是某种检索的结果、某种排列的状态、某种转换后的形式、某种设计的表示等这些问题的数学模型是通过一种数据结构来描述数据及数据之间相互关系的。
在数据结构中有许多术语下面介绍几种
常用术语的含义。
1数据数据是对客观事物的名称、数量、特征、性质等属性的描述形式即编码是计算机所能处理的一切符号如数、字符、图像符号、声音符号、视频符号等的集合。
数据是信息的载体它可以用计算机来加工处理。
返回目录2.1.1数据结构中国铁道出版社2数据元素数据元素Data Element是数据集合中的一个个体是数据的基本单位。
例如数据集合Nl23456中自然数16均为数据元素。
一个数据元素可以是简单的只有一个数据项例如一个数值、一个符号或一个名称等也可以是由若干个数据项组成的。
3数据对象具有相同性质的数据元素的集合称为数据对象。
4关键数据项在数据结构中通常一个数据结点由用来描述一个独立事物的多种属性的多个信息组成。
5数据类型数据类型是指程序
设计语言中允许的变量类型。
程序中出现的每一个变量必须与一个且仅与一个数据类型相联系它不仅规定了该变量可以设定的值的集合而且规定了这个集合上的一组运算。
各种语言都规定了它所允许的数据类型。
返回目录2.1.1数据结构中国铁道出版社在实际应用中经常需要处理一批相互有联系、有一定顺序、同一类型和具有相同性质的数据。
通常把这样的数据或者变量称为数组。
例如某单位所有职工的年收入、某超市各个部门的盈利额等。
构成数组的各个数据或者变量称为数组元素。
如果若干职工年收入构成一个数组那么每个职工的年收入就是一个数组元素。
为了区分各个不同的数组必须给每个数组取一个名字。
数组的名称必须符合命名规则。
有了数组就可以用同一个数组名来表示一系列的数据并用一个序号在数组中称为下标来表示同一数组中的不同数组元素。
例如数组numbers有10个数组元素则可表示为numbers0numbers1numbers2numbers3numbers4numbers5numbers6numbers7numbers8numbers9。
因此数组元素也称为下标变量它由数组名称和小括号内的下标组成而且下标可以是常量、变量和数值型表达式。
返回目录2.1.2数组的概念中国铁道出版社下标变量和变量之间的重要区别就是变量是没有序的数组中的数组元素是有排列顺序的。
数组的主要特点如下。
1数组是相同数据类型元素的集合。
2数组中的各个元素在内存中按照先后顺序连续存放在一起。
3每个数组元素用其所在数组的名字和其在数组中的顺序位置表示。
例如numbers0代表变量名为numbers的数组中的第1个元素numbers1代表数组numbers的第2个元素依此类推numbersn代表数组numbers的第n1个元素。
4数组的下标值从0开始它可以是整数类型的数据、变量和算术表达式。
例如numbersindex10、names43-2都是合法的。
5每个数组都有长度也就是数组所能包含的元素个数是有限的是预先声明好的。
返回目录2.1.2数组的概念中国铁道出版社1声明数组在使用数组之前必须先声明数组主要是声明数组的名称、数组中元素的数据类型和数组元素的个数其格式为Dim 数组名下标上限 As 数据类型其中“数组名”必须符合标识符规则“下标上限”是数组元素个数减1。
例如下面的声明语句都是合法的。
Dim num10 As Integer 声明数组numbers共有11个元素类型为IntegerDim names35 As String 声明数组names共有16个元素类型为String一个数组的元素个数可以使用下面的表达式来计算数组名.Length注意在
VB6.0中数组的每一维度的默认下限都是0可通过Option Base语句将其更改为1。
在
VB.NET中数组下标的下限都是0不再支持Option Base语句。
返回目录2.1.3一维数组
VB.NET程序设计张家口职业技术学院信息工程系2给数组赋值使用赋值语句依次给每个数组元素赋值。
例如num093num160声明数组的同时直接给数组赋初值。
用大括号将初值括起来每个初值之间用逗号分隔开。
例如Dim names As Stringquot体操quotquot排球quotquot网球quotquot击剑quotquot足球quot quot篮球quot quot橄榄球quot使用循环语句给数组元素值具有规律的数组赋值。
例如在下面的循环语句中给数组num中的11个元素赋值每个数组元素的值为其下标的值就是说num0的值为0num1的值为1依此类推number10的值为10。
Dim num10 As IntegerDim i As IntegerFor i0 To 10numiiNext3ReDim在过程中使用ReDim语句可以改变已声明数组的大小。
当使用ReDim语句时数组原有的值通常会丢失。
可以在ReDim语句中使用Preserve关键字来保持这些值。
例如ReDim Preserve num20 返回目录2.1.3一维数组中国铁道出版社For Each??Next语句用来循环浏览一个数组中的每个元素重复执行一组语句其格式为For Each 变量名In 数组名循环语句体Next 变量名每次循环时
VB.NET会自动把数组中元素的值依次赋给变量。
例如数组有11个元素则一共循环11次。
变量的数据类型必须与数组的数据类型一样。
例如下面的程序用来输出Integer类型数组num中的值假设数组num已声明并赋初值。
Dim n As IntegerFor Each n In numlbl结果.Textlbl结果.TextCStrnquot quotNext n当数组的元素个数较多时使用For Each??Next语句可以很方便、快速地处理数据。
在For Each??Next语句中可以使用Exit For提前结束循环继续执行下面的语句。
注意在For Each??Next语句中数组元素本身的值不会发生任何变化也就是说For Each??Next语句只能输出数组元素的值或者利用数组元素进行某些运算但是不能给数组元素赋值。
返回目录2.1.4For Each…Next语句中国铁道出版社1声明二维数组的格式Dim 数组名下标1上限 下标2上限 As 数据类型其中“数组名”必须符合标识符规则下标上限是数组元素个数减1。
例如下面的声明语句都是合法的。
Dim numbers4 4 As IntegerDim names55 5-3 As String二维数组可以看作一个按照行和列存储数据的内存空间。
例如上面的语句声明了一个5×5的数组numbers和一个26×3的数组names。
2给二维数组赋值??使用赋值语句依次给每个数组元素赋值。
例如numbers00100numbers01200??声明数组的同时直接给数组赋初值。
用大括号将初值括起来每个初值之间用逗号分隔开再用大括号将所有的数值括起来。
例如Dim nums As Integer123456789012 返回目录2.2.1多维数组中国铁道出版社1使用多重For??Next语句给多维数组赋值例如下面的语句使用双重循环语句给二维数组赋值。
数组numbers每个元素的值均为100。
外层循环控制数组的行数内层循环控制数组的列数。
Dim row column As IntegerDim numbers45 As IntegerFor row0 To 4For column0 To 5numbersrowcolumn100Next columnNext row2使用For Each??Next语句输出多维数组元素的值例如下面的语句使用For Each??Next循环语句输出三维数组numbers所有元素的值。
For Each??Next语句共循环2×3×424次输出每个数组元素的值。
Dim numbers123 As IntegerDim num As IntegerFor Each num In numberslbl结果.Textlbl结果.TextCStrnumquot quotNext num返回目录2.2.2多维数组的应用中国铁道出版社通常在数组中各个数组元素的数据类型应该是相同的但是在实际应用中所处理的对象往往由一些互相联系的、不同类型的数据项组合而成。
为了能够表示和处理不同类型的数据可以将这些描述同一对象的各种类型数据声明为用户自定义数据类型。
1声明自定义数据类型声明自定义数据类型的语句格式为PublicPrivate Structure 自定义数据类型名Dim 变量1 As数据类型Dim 变量2 As数据类型??End Structure返回目录2.2.3创建自定义数据类型中国铁道出版社必须在模块水平声明自定义数据类型也就是说声明自定义数据类型可以在类之内但必须在任何过程之外。
例如下面的语句声明了一个自定义数据类型Chanpin用来保存每个产品的编号、名称、单价和销售量。
Structure ChanpinDim Index As Integer 保存产品的编号Dim Name As String 保存产品的名称Dim Price As Double 保存产品的单价Dim Amount As Double 保存产品的销售量End Structure2使用自定义数据类型在声明了一个自定义数据类型后可以在过程中像声明其他数据类型变量一样使用Dim语句来声明自定义数据类型的变量。
例如下面的语句表示声明数组today的类型为Chanpin共有20个数组元素。
Dim today19 As Chanpin 返回目录2.2.3创建自定义数据类型中国铁道出版社在实际处理数据时很多时候数据并没有一个从0开始依次递增的索引序号。
在这种情况下使用数组来表达和处理数据变得非常不方便。
例如假设对于某个超市来说一共有5 000种产品曾经销售过产品的编号从15 000。
但是目前正在销售的产品只有2 000种。
当需要统计当前销售情况时很显然不可能声明一个有5 000个数组元素的数组来保存这2 000种产品的数据因为这样不仅浪费系统的内存资源而且也不利于数据的处理。
使用Table Lookup可以很方便地解决这个问题方法如下。
1声明一个自定义数据类型。
其中的变量包括所有需要处理的数据类型和其原始编号。
例如上面声明的Chanpin自定义类型。
2在过程之外声明一个使用自定义类型数据的数组例如Dim today1999 As Chanpin3在程序运行之初给各个数组元素中保存原始序号的变量赋初值。
例如返回目录2.2.4应用自定义数据类型中国铁道出版社Private Sub Form1_LoadByVal sender As System.ObjectByVal e As System. _ EventArgs Handles MyBase.Loadtoday0.Index8today1.Index14today2.Index100today3.Index140today4.Index399??today1999.Index 4780End Sub4在程序中借助原始序号可以使数组方便地处理实际数据。
例如如果要将编号为399的产品的单价设置为23.55元则可以使用下面的语句。
Dim num as Integer0Dim isFound As BooleanFalseDo Until isFound or numgt1999If todaynum.Index399 Thentodaynum.Price23.55isFoundTrueEnd Ifnum1Loop 返回目录2.2.4应用自定义数据类型中国铁道出版社过程是包含在声明语句和End语句之间的
VB.NET语句块。
所有的
VB.
NET代码都是在过程内部编写的。
将一个复杂的程序分解为若干个相对独立、简单的过程使得程序简练、便于调试和维护。
过程可以被多次调用反复执行这样大大地提高了程序的可重复利用性节省了编程时间。
程序分块设计的优点是1过程允许将程序分为不连续的逻辑单元。
调试单独的单元与调试不包含过程的整个程序相比要容易。
2可以在其他
程序中使用为某个程序开发的过程。
并且一般只需要少量修改甚至不需要修改。
返回目录2.3.1程序分块设计的意义中国铁道出版社
VB.NET中有两类方法一类是
系统提供的方法它主要有内部函数过程和事件过程事件过程是构成
VB.NET应用程序的主体前面已大量介绍过了另一类是由用户自己定义、可供事件过程多次调用的自定义过程。
在
VB.NET中自定义过程分为以下3种。
??以Sub关键字开始的过程Sub Procedure该过程执行操作但是并不返回值。
??以Function关键字开始的函数过程Function Procedure该过程执行操作并返回一个值。
??以Property关键字开始的属性过程Property Procedure过程可以返回和设置窗体、标准模块及类模块也可以设置对象的属性值。
用户自定义过程又可称为通用过程。
通用过程是指必须由其他过程调用的程序
代码段它是由用户自己创建的。
因为通用过程可以被其他过程调用所以可提高程序
代码的利用率和可读性。
当过程从
代码中的其他某处被调用执行操作结束时它将语句执行权返回给调用它的
代码此
代码称为“呼叫
代码”。
呼叫
代码是一个语句或语句内的表达式它通过名称指定过程并将执行权转让给它。
注意所有的可执行
代码都必须属于某个过程过程的声明是平行的不能在别的Sub、Function或Property过程中声明其他过程。
下面将详细介绍Sub过程和Function过程Property过程将在第3章详细介绍。
返回目录2.3.2过程的类型中国铁道出版社Sub过程只是执行其内的语句命令并不返回任何数据值。
1创建Sub过程Sub过程的声明格式为PublicPrivate Sub 过程名参数列表语句体End Sub其中关键字Public表示过程可以从应用程序中的任意位置调用关键字Private表示过程只能在声明其的模块中被调用。
参数列表含有在调用时传送给该过程的变量名或数组名各个名称之间用逗号隔开又称为形参其格式为ByVaByRef 参数名As 数据类型如果参数为数组则需要在“参数名”后边添加小括号。
关键字ByVal称为“值传递”表示传递参数意味着过程不能修改实参的值关键字ByRef称为“引用传递”表示过程通过改变形参的值来改变实参的值。
默认的关键字是ByVal。
关于过程的参数将在下一节详细介绍。
返回目录2.3.3Sub过程中国铁道出版社例如下面的程序用来计算两个参数的和并以对话框的形式显示出结果。
Sub HeByVal a As Integer ByVal b As IntegerMessageBox.ShowCStrabEnd Sub通用过程不属于任何一个事件过程所以不能放在事件过程中而必须放在事件过程之外、类之内或者也可以将
代码放在模块文件中设计过程如下。
①单击“项目”→“添加模块”菜单命令调出“添加新项”对话框如图2-3-2所示。
②采用“模板”列表和“名称”文本框中默认的设置单击【打开】按钮创建一个模块文件。
返回目录2.3.3Sub过程图2-3-2 “添加新项”对话框中国铁道出版社③在“解决
方案资源管理器”窗口中双击Module1.
vb选项打开Module1的“
代码”窗口在其中输入过程
代码如图2-3-3所示。
返回目录2.3.3Sub过程图2-3-3 模块文件中国铁道出版社2调用过程要执行一个过程中的语句体必须调用该过程。
调用Sub过程可以使用独立的调用语句来显示调用过程但是不能在表达式中通过使用其名称来调用。
Sub过程的调用有以下两种方式。
??使用关键字Call调用Sub过程其格式为Call 过程名参数
列表Call语句可以把程序的控制传送到一个Sub过程也就是说将执行该过程中的语句。
与过程中的形参对应调用过程所用的参数被称为实参。
调用时参数传递是按次序一一对应的。
如果过程本身没有参数则Call语句中的参数和小括号都可以省略。
例如可以在另一个过程中调用上面创建的通用He过程。
Private Sub btnHe_ClickByVal sender As System.Object ByVal e As System. _ EventArgs Handles btnHe.ClickCall He45 12End Sub返回目录2.3.3Sub过程中国铁道出版社其中参数45和12将被He过程中的参数变量a和b分别保存并用于计算最终输出两个数的和。
??直接使用过程名调用Sub过程其格式为过程名参数列表例如上面的Call语句可以简写为He45 123退出过程一般来说过程会一直运行到执行完其内所有语句指令然后返回到调用该过程语句的下面继续执行其他语句。
然而有时需要在过程正常结束之前退出过程继续执行其他语句。
提前退出过程的方法有两种。
??使用Exit Sub语句退出过程一般与选择结构的语句一起使用。
??使用Return语句退出过程。
在Sub过程中Return语句的作用与Exit Sub语句完全相同。
但是在Function过程中一般使用Return语句来返回一个数据值。
返回目录2.3.3Sub过程中国铁道出版社Function函数过程不仅可以执行其内的语句命令而且还会返回一个数据值。
1创建Function过程声明Function过程的格式为PublicPrivate Function 过程名参数列表 As 数据类型语句体End Function可以在模块、类和结构中声明Function过程其使用与声明Sub过程相同的方法来声明每个参数。
默认情况下Function过程是Public也就是说可以从应用程序中的任意位置调用。
数据类型是指该Function过程的类型也就是其返回值的类型所以返回值的类型必须与声明过程语句中的数据类型一致。
2返回Function过程的值Function过程返回值的方式有以下两种。
??Function过程可以在过程中的一个或多个语句中给自己的过程名赋值。
直到执行了Exit Function或End Function语句才将过程名中的数值返回给调用程序并且返回到调用程序继续执行下面的语句。
例如下面的Area过程用来求矩形的面积。
Function AreaByVal width As Integer ByVal length As Integer As Integer _AreawidthlengthEnd Function返回目录2.3.4Function过程中国铁道出版社??使用Return语句指定返回值并返回到调用程序。
例如Function AreaByVal width As Integer ByVal length As Integer As Integer _Return widthlengthEnd Function3调用Function过程由于Function过程可返回一个值所以Function过程不能作为单独的语句加以调用被调用的过程必须作为表达式或表达式中的一部分再配以其他的语法成分构成语句。
实际上可以把Function过程看成是一个函数它与标准函数没有区别只不过标准函数由
VB.NET语言提供而函数过程由用户自己定义。
例如可以在另一个过程中调用上面创建的Area过程。
Private Sub btnArea_ClickByVal sender As System.Object ByVal e As System. _ EventArgs Handles btnArea.ClickDim result As IntegerresultArea42End Sub返回目录2.3.4Function过程中国铁道出版社在
VB.NET中应用程序由多个过程组成这些过程一般均保存在窗体文件.frm和标准模块文件.bas中。
在各种过程中都可以声明自己的变量和常量。
这样就存在一个问题这些变量和过程是否在所有过程中都可以使用呢在
VB.NET中随着变量和过程所处的位置不同它被访问的范围也不同。
变量可被访问的范围称为变量的作用域过程可被访问的范围称为过程的作用域。
与变量一样常量也有作用域也遵从与变量作用域相似的规则。
1变量的作用域变量的作用域就是变量的作用范围也叫变量的有效范围。
变量的作用域决定了哪些Sub过程和Funtion过程可以访问该变量。
根据声明变量的位置和声明变量的语句不同在
VB.NET中变量可分为局部变量、模块级变量和共享变量。
①局部变量局部变量指在过程内用Dim语句或Static语句声明的变量。
只有该过程内部的
代码程序才能访问或改变局部变量的值其他过程不可以读取局部变量更不可能改变局部变量的值。
局部变量的作用范围限制在其声明的过程内。
要声明一个局部变量可以在过程内部使用Dim或Static关键字声明变量。
声明局部变量的语句格式如下。
返回目录2.3.5变量的作用域中国铁道出版社Dim 变量名As 数据类型Static变量名As 数据类型不同的过程中可有相同名称的变量彼此互不相干。
例如有多个不同的过程每个过程都使用了变量n只要每个过程中的变量n声明为局部变量则每个过程只识别它自己的变量n改变变量n的值也不会影响其他过程中的变量n的值。
因此采用局部变量有利于程序的调试更具有通用性。
②模块级变量模块级变量是指在一个窗体或模块的内部但不在任何过程内使用关键字Dim声明的变量。
模块级变量在声明它的整个模块中的所有过程中都能使用但其他模块不能访问该变量。
③共享变量共享变量在类中非局部变量的类别取决于其是否被共享。
如果它是用Shared关键字声明的它便是共享变量。
将在第3章详细介绍共享变量.