(中职)2022-2023学年SP.NET动态网页设计第四章. ASP课件.ppt
(中职)2022-2023学年SP.NET动态网页设计第四章.ppt ASP课件第四章高级程序设计概念与技巧学习目标:n n1认识数组的意义n n2声明一维与二维数组n n3设置一维与二维数组的初始值n n4排序与查找数据n n5认识子程序与函数n n6创建与调用子程序n n7在子程序中传递参数n n8认识传值与传址调用的不同n n9创建与调用函数4-1数组n n数组(Array)是一群由相同类型的元素所集合而成的特殊类型,当程序需要一系列具有相同类型的多项数据时,便可以利用数组来存取数据,有别于每个变量只能存储一个数据的特性。4-1-1数组的意义n n变量是指程序中可以用来存储数据空间的名字,变量是指程序中可以用来存储数据空间的名字,用户可以用它来存放任何数值、文字、日期时间用户可以用它来存放任何数值、文字、日期时间等数据,如同每个人有一个名字一样,当程序中等数据,如同每个人有一个名字一样,当程序中需要使用某变量时,可以用此名字来称呼它。需要使用某变量时,可以用此名字来称呼它。n n若程序中需要一系列具有相同类型的多项数据时,若程序中需要一系列具有相同类型的多项数据时,如果逐个加以设置会比较烦琐。如果使用数组来如果逐个加以设置会比较烦琐。如果使用数组来代表这一系列的多项数据,便轻松多了!代表这一系列的多项数据,便轻松多了!n n可以将数组想成计算机中一块连续的内存,这块可以将数组想成计算机中一块连续的内存,这块连续内存被分成许多相同大小的小空间,每个小连续内存被分成许多相同大小的小空间,每个小空间会按照顺序从空间会按照顺序从0 0开始给予一个编号,以后若需开始给予一个编号,以后若需要某个小空间的数据,就可以用编号来存取该小要某个小空间的数据,就可以用编号来存取该小空间的数据。空间的数据。按照排列的方式,数组分为一维数组和多维数组。一维数组按照排列的方式,数组分为一维数组和多维数组。一维数组是指这些小空间以直线的方式排列,而且每个小空间都依顺是指这些小空间以直线的方式排列,而且每个小空间都依顺序编号来区别,此顺序编号称为索引值(序编号来区别,此顺序编号称为索引值(IndexIndex),而数组),而数组中每一个小空间所存放的数据称为元素(中每一个小空间所存放的数据称为元素(ElementElement)。)。多维数组是指二维数组、三维数组、四维数组等,以二维数多维数组是指二维数组、三维数组、四维数组等,以二维数组来说,二维数组是指这些小空间会以两个编号来区别。组来说,二维数组是指这些小空间会以两个编号来区别。n n0,00,10,20,30,40,50,6n n1,01,11,21,31,41,51,6n n2,02,12,22,32,42,52,64-1-2一维数组的声明n n 声明一维数组声明一维数组n n在程序中,只要在数组名前面加上在程序中,只要在数组名前面加上DimDim,就达到,就达到声明的作用,其语法如下:声明的作用,其语法如下:n nDimDim数组名数组名(N)(N)n n上述语法说明如下:上述语法说明如下:n n(1 1)数组名只要依照变量的命名规则命名即可。)数组名只要依照变量的命名规则命名即可。n n(2 2)写完数组名后,必须加上)写完数组名后,必须加上()()。n n(3 3)在)在()()中的中的N N为数组内最后一个元素的索引值为数组内最后一个元素的索引值编号,例如:编号,例如:DimX(6)DimX(6),就表示数组名为,就表示数组名为X X,有,有7 7个元素的数组。个元素的数组。声明一维数组并指定数据类型n n在声明数组名时,也可以指定数组的数据类型(数据的类型与变量的类型一样,有字节整型、短整型、整型、长整型、单精度浮点数、双精度浮点数、十进制数、字符串、日期时间、布尔、字符、对象等),只要在声明数组名后加上As和数据类型,就完成数组类型的设置了。n n设置数组数据类型的语法如下:n nDim数组名(N)As数据类型4-1-3一维数组初始值的设置n n声明数组名后,就可以一一表示数组内各元素的数据。若一维数组名为X,则第1个元素以X(0)表示,第2个元素以X(1)表示,第3个元素以X(2)表示,第4个元素以X(3)表示,第5个元素以X(4)表示,第6个元素以X(5)表示,第7个元素以X(6)表示。n n下图是声明一维数组X后,数组内各元素表示的示意图。X(0)X(1)X(2)X(3)X(4)X(5)X(6)n n跟变量一样,声明数组以后,也可以指定数组的初始值。跟变量一样,声明数组以后,也可以指定数组的初始值。与变量最大的不同是,变量只是代表一个数据,所以其初与变量最大的不同是,变量只是代表一个数据,所以其初始值只要指定一个就可以了,但数组是代表一系列具有相始值只要指定一个就可以了,但数组是代表一系列具有相同类型的多项数据,所以要指定数组的初始值时,要一一同类型的多项数据,所以要指定数组的初始值时,要一一指定数组内各元素的初始值。指定数组初始值的语法如下:指定数组内各元素的初始值。指定数组初始值的语法如下:n nDimX(N)AsIntegerDimX(N)AsInteger 声明数组声明数组X X内含内含N+1N+1个元素,而个元素,而且都为整型且都为整型n nX(0)=X(0)=数据数据1 1 指定第指定第1 1个元素的初始值个元素的初始值为数据为数据1 1n nX(1)=X(1)=数据数据2 2 指定第指定第2 2个元素的初始值个元素的初始值为数据为数据2 2n nX(2)=X(2)=数据数据3 3 指定第指定第3 3个元素的初始值个元素的初始值为数据为数据3 3n nn nX(N)=X(N)=数据数据N+1N+1 指定第指定第N+1N+1个元素的初始个元素的初始值为数据值为数据N+1N+14-1-4二维数组的声明n n简单地说,如果数据可以用表格来呈现,就可以使用二维数组来表示简单地说,如果数据可以用表格来呈现,就可以使用二维数组来表示表格内的所有数。表格内的所有数。n n只要在二维数组名前面加上只要在二维数组名前面加上DimDim,就达到声明的作用,其语法如下:,就达到声明的作用,其语法如下:n nDimDim数组名数组名(行数行数-1,-1,列数列数-1)-1)n n上述语法中的数组名只要按照变量的命名规则命名即可,比较特别的上述语法中的数组名只要按照变量的命名规则命名即可,比较特别的是,写完数组名后,必须加上是,写完数组名后,必须加上()(),并在,并在()()中填上中填上“行数行数-1,-1,列数列数-1”-1”。也就是填上行的最大索引值编号和列的最大索引值编号就可以了。同也就是填上行的最大索引值编号和列的最大索引值编号就可以了。同样,索引值编号必须从样,索引值编号必须从0 0开始依次编号。开始依次编号。n n以上述表格为例,声明二维数组如下:以上述表格为例,声明二维数组如下:n nDimDim成绩成绩(4,6)(4,6)n n声明此成绩数组后,可得知行的索引值范围为声明此成绩数组后,可得知行的索引值范围为0 04 4,列的索引值范围,列的索引值范围为为0 06 6,此数组内含,此数组内含(4+1)*(6+1)(4+1)*(6+1)个单元格的数据。个单元格的数据。n n在声明二维数组名时,也可以指定数组的数据类型,数据的类型与变在声明二维数组名时,也可以指定数组的数据类型,数据的类型与变量的类型一样,有字节整型、短整型、整型、长整型、单精度浮点数、量的类型一样,有字节整型、短整型、整型、长整型、单精度浮点数、双精度浮点数、十进制数、字符串、日期时间、布尔、字符、对象等。双精度浮点数、十进制数、字符串、日期时间、布尔、字符、对象等。只要在声明数组名后,加上只要在声明数组名后,加上AsAs和数据类型,就完成数组类型的设置了。和数据类型,就完成数组类型的设置了。n n设置数组数据类型的语法如下:设置数组数据类型的语法如下:n nDimDim数组名数组名(行数行数-1,-1,列数列数-1)As-1)As数据类型数据类型4-1-5二维数组初始值的设置n n声明二维数组名后,即可一一指定数组内的各元声明二维数组名后,即可一一指定数组内的各元素。素。n n下图是声明二维数组后,数组内各元素表示的示下图是声明二维数组后,数组内各元素表示的示意图。意图。n n二维数组二维数组0.00.10.20.30.40.50.60.00.10.20.30.40.50.6n n1.01.11.21.31.41.51.61.01.11.21.31.41.51.6n n2.02.12.22.32.42.52.62.02.12.22.32.42.52.6n n3.03.13.23.33.43.53.63.03.13.23.33.43.53.6n n4.04.14.24.34.44.54.64.04.14.24.34.44.54.6n n与变量和一维数组一样,声明二维数组名后,即与变量和一维数组一样,声明二维数组名后,即可一一指定数组中各元素的初始值。可一一指定数组中各元素的初始值。n n只要在二维数组名后加上只要在二维数组名后加上=,并在,并在内依序写上内依序写上各元素的初始值即可,其语法如下:各元素的初始值即可,其语法如下:n nDimDim数组名数组名(,)=(,)=第第0 0行的数据行的数据,第第1 1行的数据行的数据,第第2 2行的数据行的数据,n n所以若以上述成绩表格为例,可以声明二维数组所以若以上述成绩表格为例,可以声明二维数组并指定初始值如下:并指定初始值如下:n nDimDim成绩成绩(,)=MS0001,(,)=MS0001,赖怡璇赖怡璇,94,61,61,98,68,MS0002,94,61,61,98,68,MS0002,张佳玲张佳玲,n n85,92,96,90,62,MS0003,85,92,96,90,62,MS0003,黄玉菁黄玉菁,53,84,80,99,86,MS0004,53,84,80,99,86,MS0004,陈宛宜陈宛宜n n,52,84,89,55,66,MS0005,52,84,89,55,66,MS0005,吴尚儒吴尚儒,91,76,95,79,54,91,76,95,79,54n n1新建一个01_EX01的ASP.NET网站程序,设计一个倒序显示字符串数组的程序,规则如下:声明一维字符串数组,并设置5个字符串数据为John,I,Love,You,Mary。将这5个字符串以倒序显示出来。n n新建一个01_EX02的ASP.NET网站程序,设计一个星期中英文对照的程序,规则如下:n n声明两个数组,一个数组表示星期的语文名称,另一个数组表示星期的英文单词,并分别指定各数组的初始值。n n利用循环的技巧,使程序执行n n打开练习文件CH0401_EX03(Defau-lt.aspx),设计一个计算成绩总分与平均的程序,规则如下:n n将练习文件grade数组的成绩计算总分与平均分数。n n利用嵌套循环的技巧,在表格中显示学生的数据与成绩,包含原始数据与新增的“总分”与“平均”字段。n n新建一个01_EX04的ASP.NET网站程序,改写星期中英文对照的程序(01_EX02),规则如下:n n声明一个二维数组,并存储星期的中文和英文单词等数据。n n利用循环的技巧,使程序执行时显示星期的中英文对照4-2排序与查找n n排序(Sort)是指将数据由大到小或由小到大依次排列,而查找是指按条件找到数据。当程序中有大量的数据时,常常会应用这两个技巧将数据呈现出来。4-2-1排序n n排序(排序(SortSort)是将数据由小到大或由大到小依次排列,由)是将数据由小到大或由大到小依次排列,由小到大依次排列称为递增排序,由大到小依次排列称为递小到大依次排列称为递增排序,由大到小依次排列称为递减排序。减排序。n n何谓大?何谓小?如果是数值数据,则数值越大者越大;何谓大?何谓小?如果是数值数据,则数值越大者越大;如果是字符串数据,则中文字符如果是字符串数据,则中文字符 小写英文字母小写英文字母 大写英大写英文字母文字母 数字,而中文字符又以编码大者为大;如果是日数字,而中文字符又以编码大者为大;如果是日期数据,则越晚的日期越大。在程序中可以利用循环与条期数据,则越晚的日期越大。在程序中可以利用循环与条件判断来排序数据,也可以使用内置的方法来排序。件判断来排序数据,也可以使用内置的方法来排序。n n根据不同特性的数据,可采用不同的排序算法,较知名的根据不同特性的数据,可采用不同的排序算法,较知名的排序方法有选择排序法(排序方法有选择排序法(SelectionSortSelectionSort)、交换排序法)、交换排序法(ExchangeSortExchangeSort)、插入排序法()、插入排序法(InsertionSortInsertionSort)等)等 使用选择排序法排序n n选择排序法的基本想法是指在有选择排序法的基本想法是指在有N N个元素的数组中,选择出关键值最个元素的数组中,选择出关键值最小的元素,然后在剩下的小的元素,然后在剩下的N N-1-1个元素中再选出关键值最小的元素,重个元素中再选出关键值最小的元素,重复这种程序,直到第复这种程序,直到第N N-1-1遍,即可完成排序作业。选择排序法有多种遍,即可完成排序作业。选择排序法有多种排序策略,下面就是选择排序法策略的一种。排序策略,下面就是选择排序法策略的一种。n n(1 1)第一遍:将第)第一遍:将第1 1位置的数据和其他位置的所有数据做比较。位置的数据和其他位置的所有数据做比较。n n当第当第1 1位置的数据大(小)于其他数据时,则两个数据交换位置,使位置的数据大(小)于其他数据时,则两个数据交换位置,使第第1 1位置位置n n的数据永远保持比较小(大)。的数据永远保持比较小(大)。n n交换位置后,再将交换位置后的第交换位置后,再将交换位置后的第1 1位置的数据与其他位置的数据相位置的数据与其他位置的数据相比较,直比较,直n n到所有的数据比较完。到所有的数据比较完。n n第一遍比较完时,最小(大)的数据一定会出现在第第一遍比较完时,最小(大)的数据一定会出现在第1 1位置。位置。n n(2 2)第二遍:因为第)第二遍:因为第1 1位置的数据已经是最小(大)的,所以将第位置的数据已经是最小(大)的,所以将第2 2位置的数据与第位置的数据与第3 3、4 4、位置的数据相比较。位置的数据相比较。n n当第当第2 2位置的数据比其他位置的数据大(小)时,就交换位置。位置的数据比其他位置的数据大(小)时,就交换位置。n n以此规则一直进行比较。以此规则一直进行比较。n n(3 3)当此范围内有)当此范围内有N N个数据时,需进行个数据时,需进行N N-1-1遍,才能将所有的数据由遍,才能将所有的数据由小到大(由大到小)依次排列完成。小到大(由大到小)依次排列完成。使用Array.Sort排序n n前面所介绍的选择排序法对很多初学者来说难了一些,不前面所介绍的选择排序法对很多初学者来说难了一些,不过过VB.NETVB.NET提供了一种提供了一种Array.SortArray.Sort方法,只要调用这个方法,方法,只要调用这个方法,就可以将指定一维数组内的元素由小到大递增排序。就可以将指定一维数组内的元素由小到大递增排序。n n使用使用Array.SortArray.Sort排序的语法如下:排序的语法如下:n nArray.Sort(Array.Sort(一维数组名一维数组名)n n例如:例如:n nDima()=3,5,9,8,6,4,7Dima()=3,5,9,8,6,4,7n nArray.Sort(a)Array.Sort(a)将数组将数组a a内的元素排序内的元素排序,a()=3,4,5,6,7,8,9,a()=3,4,5,6,7,8,9n nDimx()=10,50,30,40Dimx()=10,50,30,40n nArray.Sort(x)Array.Sort(x)将数组将数组x x内的元素排序内的元素排序,x()=10,30,40,50,x()=10,30,40,50n n如果将数组如果将数组1 1的元素排序时,也想根据数组的元素排序时,也想根据数组1 1的索引值去重的索引值去重新排列另一个数组,使其相配对时,可以在新排列另一个数组,使其相配对时,可以在()()中加上两个中加上两个参数,其语法如下:参数,其语法如下:n nArray.Sort(Array.Sort(数组名数组名1,1,数组名数组名2)2)n n例如:例如:n nDimDim姓名姓名()=()=王一王一,赵二赵二,孙三孙三,吕吕四四,郑五郑五n nDimDim成绩成绩()=68,98,88,65,78()=68,98,88,65,78n nArray.Sort(Array.Sort(成绩成绩,姓名姓名)n n上述代码的意思将成绩数组的元素由小到大排列,上述代码的意思将成绩数组的元素由小到大排列,姓名数组也要跟着相配对,所以排序后,成绩姓名数组也要跟着相配对,所以排序后,成绩()=65,68,78,88,98()=65,68,78,88,98,而姓名,而姓名()=()=吕四吕四,王王一一,郑五郑五,孙三孙三,赵二赵二。n n千万不要将千万不要将Array.Sort(Array.Sort(成绩成绩,姓名姓名)拆成拆成Array.Sort(Array.Sort(成绩成绩)和和Array.Sort(Array.Sort(姓名姓名),这样成绩自,这样成绩自己排序,姓名也自己排序,结果成绩与姓名并不己排序,姓名也自己排序,结果成绩与姓名并不配对!配对!4-2-2最大值和最小值n n如果已经将数据排序,则第一个元素数据和最后一个元素数据就是该群数据的最小或最大值。n n当数据不多时,可以轻易地知道最后一个元素的索引值编号,可是当数组中的元素数据很多时,就不方便算出最后一个元素的索引值编号了。这时,可以利用函数来求得最后一个元素的索引值编号。n n使用下列两个函数可以求得第一个和最后一个索引值编号。使用下列两个函数可以求得第一个和最后一个索引值编号。n n(1 1)LBoundLBound:取得数组中某维度的第一个索引值编号,:取得数组中某维度的第一个索引值编号,由于由于VB.NETVB.NET程序规定数组的索引值编号必须从程序规定数组的索引值编号必须从0 0开始,所开始,所以利用以利用LboundLbound返回的值恒为返回的值恒为0 0。n n(2 2)UBoundUBound:取得数组中某维度的最后一个索引值编号。:取得数组中某维度的最后一个索引值编号。n n使用使用UBoundUBound函数的语法如下:函数的语法如下:n nUBound(UBound(数组名数组名,维度维度)n n上述语法说明如下:上述语法说明如下:n n(1 1)若省略维度,则表示第一维。)若省略维度,则表示第一维。n n(2 2)若在维度中输入)若在维度中输入“2”“2”,则表示欲取得数组中第二维,则表示欲取得数组中第二维的最大索引值编号。例如:的最大索引值编号。例如:DimA(10,20,30)DimA(10,20,30),则,则UBound(A,1)UBound(A,1)将返回将返回1010,UBound(A,2)UBound(A,2)将返回将返回2020,UBound(A,3)UBound(A,3)将返回将返回3030。4-2-3查找n n查找(Search)是从一群数据中找到符合条件的数据,在程序中可以利用循环和条件判断来查找数据。常用的查找算法有循序查找法(SequentialSearch)、二分查找法(BinarySearch)、插补查找法(InterpolationSearch)等;除此之外,也可使用内置的函数来查找数据。使用循序查找法查找n n循序查找法是从头开始逐一检查数组中的每一个元素数据,直到找到符合条件的数据。在程序中可以利用循环和判断式的方式,反复寻找数据,找到数据时,即可知道该数据的索引值编号。n n下面这个范例将利用循序查找法查找出指定姓名与对应的年龄,其代码如下:下面这个范例将利用循序查找法查找出指定姓名与对应的年龄,其代码如下:n n02_03A(Default.aspx)02_03A(Default.aspx)n n1.1.n n2.2.%n n3.3.姓名资料姓名资料n n4.4.Dimname()=Dimname()=吴南庆吴南庆,梁智媛梁智媛,王民友王民友,王威智王威智,吴罔市吴罔市,邢采芸邢采芸,徐宇衡徐宇衡n n5.5.年龄资料年龄资料n n6.6.Dimage()=25,10,35,28,73,18,48Dimage()=25,10,35,28,73,18,48n n7.7.DimIAsIntegerDimIAsIntegern n8.8.ForI=0ToUBound(name)ForI=0ToUBound(name)n n9.9.Ifname(I)=Ifname(I)=梁智媛梁智媛ThenThenn n10.10.Response.Write(Response.Write(数据索引值编号为:数据索引值编号为:&I&I&,是第,是第&I+1&I+1&笔资料!笔资料!)n n11.11.Response.Write(Response.Write(梁智媛今年梁智媛今年&age(I)&age(I)&岁!岁!)n n12.12.ExitForExitForn n13.13.EndIfEndIfn n14.14.NextNextn n15.15.如果查找范围超过如果查找范围超过namename数组的最大索引值,就显示找不到数据的信息数组的最大索引值,就显示找不到数据的信息n n16.16.IfIUBound(name)ThenIfIUBound(name)Thenn n17.17.Response.Write(Response.Write(梁智媛不在资料中梁智媛不在资料中)n n18.18.EndIfEndIfn n19.19.%n n20.20.n n21.21.02_03A02_03An n22.22.n n23.23.n n24.24.n n上述的代码分析如下:上述的代码分析如下:n n(1 1)第)第4 4行声明数组行声明数组namename,存放要查找的原始数据,第,存放要查找的原始数据,第6 6行声明数组行声明数组ageage,为数组,为数组namename对应的年龄,第对应的年龄,第7 7行则声明行则声明次数变量。次数变量。n n(2 2)第)第8 81414行利用循环和条件判断查找指定的数据行利用循环和条件判断查找指定的数据“梁梁智媛智媛”,UBound(name)UBound(name)表示数组表示数组namename的最大索引值编号,的最大索引值编号,所以在第所以在第8 8行以行以I=0ToUBound(name)I=0ToUBound(name)来设置要反复执行来设置要反复执行的最小值和最大值,省去计算数组中元素个数的麻烦。的最小值和最大值,省去计算数组中元素个数的麻烦。n n(3 3)第)第9 91313行是循环内的判断式,用以判断该数据是否行是循环内的判断式,用以判断该数据是否为想要寻找的数据为想要寻找的数据“梁智媛梁智媛”。若是,则执行第。若是,则执行第10101212行,行,显示出指定的数据,并强制跳出循环;如果不是,则反复显示出指定的数据,并强制跳出循环;如果不是,则反复执行循环,直到次数变量不符合时。执行循环,直到次数变量不符合时。n n(4 4)第)第16161818行利用条件判断式设置当在数组中循序查行利用条件判断式设置当在数组中循序查找数据都查找不到时,显示欲查找的数据不在数组中。找数据都查找不到时,显示欲查找的数据不在数组中。完成后,单击启动调试按钮执行程序,界面显示如下:使用Array.IndexOf查找n n使用使用Array.IndexOfArray.IndexOf查找数据的语法如下:查找数据的语法如下:n nArray.IndexOf(Array.IndexOf(数组名数组名,查找条件查找条件,索引值编号索引值编号)n n上述语法说明如下:上述语法说明如下:n n(1 1)查找条件若为数值或表达式,则直接输入;)查找条件若为数值或表达式,则直接输入;若为字符串,则需在字符串前后加上若为字符串,则需在字符串前后加上。例如:。例如:Array.IndexOf(X,90)Array.IndexOf(X,90)、Array.IndexOf(X,Array.IndexOf(X,李阿花李阿花)。n n(2 2)索引值编号是指定从哪一个索引值开始查找,)索引值编号是指定从哪一个索引值开始查找,若省略,则从第一个元素开始查找。若省略,则从第一个元素开始查找。n n新建一个02_EX01的ASP.NET网站程序,设计一个排序数字的程序,规则如下:n n设置一个整数数组存储下列10个数字:108、260、894、572、400、358、154、398、158、245。n n利用选择排序法的方式,将10个数字由小到大排序。n n新建一个02_EX02的ASP.NET网站程序,设计一个排序总成绩的程序,规则如下:n n声明一个二维数组,并存储学生姓名和四科的成绩,数据如下:n n赵耶钱95867497黄惠花86876985n n恒爱玩90797986宣尼建86746890n n3新建一个02_EX03的ASP.NET网站程序,设计一个求最大值和最小值的程序,规则如下:设置一个数组存储下列10个数字:98.5、36、83.2、68.5、79、88、25.8、95.6、99.8、47.5。将最小的数和最大的数显示出来。n n4打开练习文件CH0402_EX04(Default.aspx),设计一个查询水果中英文名称的程序,规则如下:练习文件中的02_EX04.txt文件已声明一个内含多个水果的语文和英文名称的数组。当设置任一水果的中文名后,会显示出英文名(此程序设置查找的水果名称为“草莓”)。n n打开练习文件CH0402_EX05(Default.aspx),设计一个“查询学生成绩数据”的程序,规则如下:n n练习文件中的02_EX05.txt文件已声明一个内含多个学生的成绩数据数组。n n设置成绩分数后,显示出符合条件的所有学生的学号(此程序设置查找的成绩为“76”)4-3子程序n n子程序就是一段具有特定功能的小程序,可供其他程序重复使用,也可以使程序变得精简,经常需要重复编写的程序语句就可以写成子程序的形式,以节省程序开发的时间。4-3-1子程序概述n n子程序(子程序(SubProgramSubProgram)也称为子过程()也称为子过程(SubProcedureSubProcedure),),就是将一些特定的语句封装成一个独立的单位,此单位具就是将一些特定的语句封装成一个独立的单位,此单位具有特定功能,当需要此语句时,只要在程序中调用此子程有特定功能,当需要此语句时,只要在程序中调用此子程序的名字即可。若经常使用的代码每次都得重新编写一次,序的名字即可。若经常使用的代码每次都得重新编写一次,不仅代码冗长、可读性低,也会造成程序的执行效率不高,不仅代码冗长、可读性低,也会造成程序的执行效率不高,因此可以利用子程序将这些常用的代码分类。因此可以利用子程序将这些常用的代码分类。n n在小程序中可能看不出子程序的优点,但是当程序很庞大在小程序中可能看不出子程序的优点,但是当程序很庞大时,若善加利用子程序,可以让程序变得比较简短,因为时,若善加利用子程序,可以让程序变得比较简短,因为重复的代码只要编写一次即可,而且维护上比较方便,只重复的代码只要编写一次即可,而且维护上比较方便,只要修改子程序的语句,程序中所有调用子程序的地方就全要修改子程序的语句,程序中所有调用子程序的地方就全部修改完成,而无需一一修改各处的语句。所以善用子程部修改完成,而无需一一修改各处的语句。所以善用子程序的设计,程序设计变得具有模块化的特性,编写程序就序的设计,程序设计变得具有模块化的特性,编写程序就好比是组合零件一样,并且可以由多数的人一起设计,缩好比是组合零件一样,并且可以由多数的人一起设计,缩短程序开发的时间。短程序开发的时间。n n子程序分为Sub子程序、Function子程序、Property子程序和Event子程序等类别,这里主要介绍的是Sub子程序。n nSub子程序就是以Sub.EndSub封闭起来的代码块,每当子程序被调用时,就会执行代码块内的语句,然后回到调用此子程序的下一个语句,继续向下执行。4-3-2创建与调用子程序n n创建Sub子程序的语法如下(这是采用InlineCode模式的Sub子程序,本书皆以此模式编写代码):n nn nSub子程序名称()n n代码块n nEndSubn n上述语法说明如下:n n(1 1)LanguageLanguage属性用来指定使用的程序语言,设置为属性用来指定使用的程序语言,设置为VBVB,表示,表示和和之间的代码是用之间的代码是用VisualBasicVisualBasic的语法编写的。因为的语法编写的。因为利用利用VisualWebDeveloper2005VisualWebDeveloper2005创建创建ASP.NETASP.NET网站程序时,已经自动网站程序时,已经自动在网页前方指定使用在网页前方指定使用VisualBasicVisualBasic语言,所以此属性可以省略不写。语言,所以此属性可以省略不写。n n(2 2)“runat=server”“runat=server”表示代码将在表示代码将在ServerServer端执行。端执行。n n(3 3)子程序名称可以依变量的命名原则自行设置,但不可以与程序)子程序名称可以依变量的命名原则自行设置,但不可以与程序中的变量名称重复,而中的变量名称重复,而SubSub和和EndSubEndSub之间可以输入多行语句。之间可以输入多行语句。n nSubSub子程序的编写语法与先前在子程序的编写语法与先前在之间编写的程序并没有多之间编写的程序并没有多大的差异,唯一需要注意的是,必须在大的差异,唯一需要注意的是,必须在SubSub后面为子程序取一个名称,后面为子程序取一个名称,如下所示如下所示:n n%n nn nn n实际编写Sub子程序n n以下范例将采用以下范例将采用InlineCodeInlineCode模式建立一个可显示模式建立一个可显示“我的第一个我的第一个SubSub子程序子程序”功功能的能的SubSub子程序,其代码如下:子程序,其代码如下:n n03_02A(Default2.aspx)03_02A(Default2.aspx)n n1.1.n n2.2.SubMySubProgram()SubMySubProgram()n n3.3.Response.Write(Response.Write(我的第一个我的第一个SubSub子程序子程序)n n4.4.EndSubEndSubn n5.5.n n6.6.n n7.7.n n8.8.%n n11.11.n n12.12.03_02A03_02An n13.13.n n14.14.n n15.15.上述的代码分析如下n n(1)Sub子程序必须放在和之间,而且是由SubEndSub封闭起来的代码段落,所以可以由第2行和第4行看出这就是Sub子程序,而由第2行可得知,子程序的名称为MySubProgram。n n(2)第3行是MySubProgram子程序内的程序语句,用以显示“我的第一个Sub子程序”。调用子程序n n调用子程序的语法如下:调用子程序的语法如下:n nCallCall子程序名称子程序名称()()n n上述语法中,上述语法中,CallCall可以省略,直接写子程序名称也可以。可以省略,直接写子程序名称也可以。n n接下来即可继续完成接下来即可继续完成03_02A03_02A的的Default2.aspxDefault2.aspx代码,只要在代码,只要在程序中加入调用程序中加入调用子程序的程序语句,就可以让程序执行时显示子程序的程序语句,就可以让程序执行时显示“我的第一个我的第一个SubSub子程序子程序”文字,其代码文字,其代码如下(编写粗体字部分即可,其他非粗体字部分是延续如下(编写粗体字部分即可,其他非粗体字部分是延续03_02A03_02A的的Default2.aspxDefault2.aspx代码):代码):n n03_02B(Default2.aspx)03_02B(Default2.aspx)n n1.1.n n2.2.SubMySubProgram()SubMySubProgram()n n3.3.Response.Write(Response.Write(我的第一个我的第一个SubSub子程序子程序)n n4.4.EndSubEndSubn n5.5.n n6.6.n n7.7.n n8.8.%n n11.11.n n12.12.03_02A03_02An n13.13.n n14.14.n n15.15.完成后,单击启动调试按钮执行程序,界面显示如下:子程序执行的顺序n n以以03_02B03_02B的的Default2.aspxDefault2.aspx代码来说,代码来说,程序调程序调用用MySubProgramMySubProgram子程序,所以子程序,所以此部分可以称此部分可以称为调用端,而为调用端,而MySubProgramMySubProgram子程序可以称为被调用端。子程序可以称为被调用端。程序执行时,会先执行调用端,当执行到程序执行时,会先执行调用端,当执行到“调用调用”的子程的子程序时,就会去执行被调用端的子程序语句,当被调用端的序时,就会去执行被调用端的子程序语句,当被调用端的子程序执行结束后,会返回调用端,继续执行下面的语句。子程序执行结束后,会返回调用端,继续执行下面的语句。n n%n nn nSubMySubprogram()SubMySubprogram()n nResponse.Write(Response.Write(我的第一个我的第一个SubSub子程序子程序)n nEndSubEndSubn n4-3-3变量的作用范围n n现在就以第现在就以第3 3章的章的04_0504_05范例为例,进一步了解子程序的编写方法。此范例为例,进一步了解子程序的编写方法。此范例会按照所设置的年龄,判断并显示可以欣赏的电影等级,其代码范例会按照所设置的年龄,判断并显示可以欣赏的电影等级,其代码如下:如下:n n03_03(Default2.aspx)03_03(Default2.aspx)n n1.1.2.2.n n3.3.n n4.4.n n5.5.%6.%6.DimDim年龄年龄AsInteger=19AsInteger=19n n7.7.Response.Write(Response.Write(您的年龄是您的年龄是:&:&年龄年龄&)&)n n8.8.SelectCaseSelectCase年龄年龄9.9.Case1,2,3,4,5Case1,2,3,4,5n n10.10.Response.Write(Response.Write(您可以欣赏普通级电影您可以欣赏普通级电影&)&)n n11.11.Case6,7,8,9,10,11Case6,7,8,9,10,11n n12.Response.Write(12.Response.Write(您可以欣赏普通级和保护级电影您可以欣赏普通级和保护级电影&)n n13.13.Case12,13,14,15,16,17Case12,13,14,15,16,17n n14Response.Write(14Response.Write(您可以欣赏普通级、保护级和辅导级电影您可以欣赏普通级、保护级和辅导级电影&n n)n n15.15.CaseElseCa