
第4章 VBScript编程语言(二)
4.1 VBScript的选择结构
4.2 VBScript的循环结构
4.3 VBScript 过 程
通过本章的学习,读者应该掌握以下内容:
? VBScript的选择结构
? VBScript的循环结构
? VBScript过程
4.1 VBScript的选择结构
4.1.1 单条件选择结构
1.行If语句
语法:
If<条件>Then[<语句1>][Else<语句2>]
例4-1 If…Then…Else语句用法示例。
<% Option Explicit '放在程序首行,强制变量声明 %>
<html>
<head>
<title> If…Then…Else语句用法示例</title>
</head>
<body>
<%
Dim Grade
Grade=86 '给变量直接赋值
If Grade>=85 Then Response.write "好优秀哟!" Else Response.write "较上次有进步哟!"
%>
</body>
</html>
2.块If语句
块If语句又称多行If语句,也就是将一个选择结构用多个语句来实现。
语法:
If<条件1>Then
[<语句序列1>]
[Else
[语句序列2]]
End If
例4-2 块If语句应用。
<html>
<head><title>块If语句实例</title></head>
<body><h3>日期型测试函数</h3><hr>
请输入日期型数据:
<input name="Text1" type="TEXT" SIZE="10"><P>
<input type="Button" name="Button1" value="确认">
<script for ="Button1" event="onClick" language="VBScript">
x = Text1.value
If Isdate(x) Then
msgbox "您输入的是日期型数据"
else
MsgBox "您输入的不是日期型数据"
end if
</SCRIPT>
</BODY>
</HTML>
例4-4 某超市店庆促销,采用多购物多打折的优惠办法,条件为每位顾客一次购物累计:
(1)在500元以上者,按九五折优惠;
(2)在1 000元以上者,按九折优惠;
(3)在1 500元以上者,按八五折优惠;
(4)在3 000元以上者,按八折优惠。
编写如下VBScript代码:
<html>
<head><title>优惠价格计算</title></head>
<body><h3>优惠后价格</h3><hr>
所购商品总金额:
<input name="Text1" type="TEXT" size="10"> 元<P>
<input type ="Button" name="Button1" value="计算">
<script for ="Button1" event="onClick" language="VBScript">
x = Text1.value
If Not IsNumeric(x) Then MsgBox "您输入的不是数值数据" : Exit Sub
If x < 500 Then
y = x
ElseIf x < 1000 Then
y = 0.95 * x
ElseIf x < 1500 Then
y = 0.9 * x
ElseIf x < 3000 Then
y = 0.85 * x
Else
y = 0.8 * x
End If
MsgBox "优惠后价格为:" & y & "元"
</script>
</body>
</html>
4.1.2 多分支条件选择结构
语法:
Select Case〈测试条件〉
[Case〈表达式表1〉
[〈语句序列1〉]]
[Case〈表达式表2〉
[〈语句序列2〉]]
...
[Case Else
[〈其他语句序列〉]]
End Select
例4-5 将例4-4中的If语句改为Select语句。
代码如下:
<html>
<head><title>优惠价格计算</title></head>
<body><h3>优惠后价格</h3><hr>
所购商品总金额:
<input name="Text1" type="TEXT"
SIZE="10"> 元<P>
<input type ="Button" name="Button1" value="计算">
<script for ="Button1" event="onClick" language="VBScript">
x = Text1.value
If Not IsNumeric(x) Then MsgBox "您输入的不是数值数据" : Exit Sub
Select Case True
Case x < 500
y = x
Case x >= 500 And x < 1000
y = 0.95 * x
Case x >= 1000 And x < 1500
y = 0.9 * x
Case x >= 1500 And x <300
y = 0.85 * x
Case Else
y = 0.8 * x
End Select
MsgBox "优惠价为:" & y & "元"
</script>
</body>
</html>
4.2 VBScript的循环结构
循环可分为3类:
(1)在条件变为False之前重复执行语句;
(2)在条件变为True之前重复执行语句;
(3)按照指定的次数重复执行语句。
1.Do…Loop语句
(1)进入循环之前检查条件(Do…Loop循环)是否为True。
进入循环之前检查条件是首先判断条件,根据条件判断结果决定是否执行循环,执行循环的最少次数为0。
语法:
Do [{ While | Until }〈条件〉]
[〈语句序列1〉]
[Exit Do]
[〈语句序列2〉]
Loop
例4-6 求累加和1 + 2 + 3 +…+ 100。
分析:采用累加的方法,用变量s来存放相加的和(开始为0),用变量n来存放加数(加到s中)这里的n又用来计数,作为循环条件至100为止,则停止循环。
程序代码如下:
<html>
<head>
<title>累加和计算</title>
</head>
<body><h3>累加和计算</h3><hr>
求累加1 + 2 + 3 +…+ 100的值。<p>
<input type="button" name="button1" value="计算">
<script for="button1" event="onclick" language="vbscript">
s = 0: n = 1
do while n <= 100
s = s + n
n = n + 1
loop
msgbox "1+2+3+…+100 = " & s
</script>
</body>
上面的当型循环的实例,当n小于等于100时是循环的起始条件,否则一次也不循环。将上例改为直到型循环 。
修改后的VBScript代码如下:
<script for="Button1" event="onClick" language="VBScript">
s = 0: n = 1
Do until n>100
s = s + n
n = n + 1
Loop
MsgBox "1+2+3+…+100 = " & s
</script>
例4-7 计算100以内的奇数的平方和。
分析:100以内的奇数为:1,3,5,7…。连续奇数之间相差2,赋初值I=1,在循环内使变量I=I+2,保证I总为奇数即可。
<% Option Explicit %>
<html>
<head>
<title> Do…Loop循环语句用法示例</title>
</head>
<body>
<%
Dim Sum,I,N
Sum=0
N=100
I=1
'循环,从1加到N
Do While I<=N
Sum=Sum+I^2
I=I+2
Loop
Response.write "100以内的奇数的平方和=" & Cstr(Sum)
%>
</body>
</html>
(2)进入循环之后检查条件是否为True。
进入循环之后检查条件,首先执行循环体,然后判断条件,根据判定结果决定是否继续执行循环,因此执行循环次数至少为1。
语法:
Do
[语句序列1]
[Exit Do]
[语句序列2]
Loop [{While | Until} 条件]
例4-8 将例4-6用Do…loop Until改写。
<html>
<head>
<title>累加和计算</title>
</head>
<body><h3>累加和计算</h3><hr>
求累加1 + 2 + 3 +…+ 100的值。<p>
<input type="button" name="button1" value="计算">
<script for="button1" event="onclick" language="vbscript">
s = 0: n = 1
do
s = s + n
n = n + 1
loop while n <= 100
'只是条件放到Loop while后
msgbox "1+2+3+…+100 = " & s
</script>
</body>
2.While…Wend语句
While…Wend语句比较简单,只要指定条件为True,则会重复执行一系列的语句,但是由于While…Wend缺少灵活性,所以建议最好使用Do…Loop语句。
3.For…Next语句
For…Next语句用于指定语句块运行的次数。在循环中使用计数器变量,该变量的值随每一次循环增加或减少。
语法:
For<循环变量>=<初值>To<终值>[Step<步长>]
[语句序列1]
[Exit For ]
[语句序列2]
Next[循环变量]
说明:
(1)如果没有指定步长,是默认为1。
(2)<步长>可是正数也可是负数。
(3)可以在循环中的任何位置放置一个Exit For语句,可随时退出循环。
例4-10 使用For…Next循环,计算“2+4+6+…+100”的和。
分析:求100以内偶数的和,从初值j=2开始,终值为100,步长为2。
<html>
<head>
<title>For…Next循环,步长为正</title>
</head>
<body>
<h2>求2+4+6+…+n=?</h2>
<%
Dim j, total
total=0
For j = 2 To 100 Step 2
total = total + j
Next
response.write"2+4+6+…+100= " & total
%>
</body>
</html>
例4-11 使用For…Next循环,求“50+48+46+…+2”的和。
分析:从初值j=50,计数器变量每次减2(步长为-2),终值为2。
<html>
<head>
<title>For…Next循环,步长为负</title>
</head>
<body>
<h2>求50+48+46+…+2=?</h2><hr>
<%
Dim j, total
total=0
For j =50 To 2 Step -2
total = total + j
Next
response.write "50+48+46+…+2= " &total
%>
</body>
</html>
例4-12 修改例4-11,求使50+48+46+…+j的和大于500后的第一个值j。
<html>
<head>
<title>exit for的用法</title>
</head>
<body>
<h2>求使50+48+46+…+j的和大于500后的第一个值
j</h2><hr>
<%
Dim j, total
total=0
For j =50 To 2 Step -2
total = total + j
if total>=500 then exit for
Next
response.write "则程序运行到j= " &j&"时停止循环。
<br>则计算50+48+...+"&j&"="&total
%>
</body>
</html>
4.循环的嵌套
循环可以多级嵌套。所谓嵌套,就是在一个大循环内可以包含一个小循环,此时小循环就相当于大循环内的执行语句。
例4-13 循环的嵌套示例。
定义一个二维数组并给其赋值,然后求出数组变量的和。
分析:要给二维数组赋值,首先要读出二维数组变量的个数,用二重循环来实现分别读出行列,然后用一个变量赋给数组变量,最后用累加方法求出数组变量的和。
<html>
<title>循环嵌套的使用</title>
<body>
<h2>求出数组a(12,20)中各变量值的总和</h2><hr>
<input type="Button" name="Button1" value="计算">
<script for="Button1"
event="onClick" language="VBScript">
Dim a(12,20),sum '声明一个2行2列的数组
For I=0 to 12 '循环1
For j=0 to 20 '循环2
a(i,j)=i '给数组变量赋值
Sum=sum+a(I,j)
Next
Next
msgbox "求出数组变量a(12,20)中各变量值的总和:"&Cstr(sum)
</script>
</body>
</html>
例4-14 编写一个程序,输出如图4-14所示的图案。
分析:图为4行4列,那么用一个循环控制行,嵌套一循环控制列的输出即可。
源程序代码如下:
<html>
<title>使用循环嵌套输出一图形</title>
<body>
<%
s="*":p=""
For I=0 to 3 '循环1
For j=0 to 3 '循环2
p=p&" "&S
Next
RESPONSE.WRITE P&"<BR>"
p=""
Next
%>
</body>
</html>
注意:在do…loop中跳出循环的指令是:exit do。如下例为当和数大于1000时,使用exit do强行终止循环。
<%
sum=0
n=100
do while n<=100
sum=sum+I
do while sum>1000
exit do
enddo
n=n+1
%>
4.3 VBScript 过 程
在VBScript过程中,过程有两种,一种是Sub子程序,一种是Function函数。两者的区别在于:Sub子程序只执行程序而不返回值,而Function函数可以将执行代码后的结果返回给请求程序。
4.3.1 Sub子程序
1.声明Sub子程序的语法
语法:
Sub子程序名(参数1,参数2,…)
…
end sub
或
sub子程序名()
…
end sub
2.Sub过程调用的两种方式
(1)使用Call语句:
语法:
Call 子程序名(参数1,参数2,…)
(2)不使用Call语句
语法:
子程序名 参数1,参数2
例4-15 Sub子程序示例。
<% Option Explicit
'放在程序首行,强制变量声明 %>
<html>
<head>
<title>Sub子程序示例</title>
</head>
<body>
<%
Dim user_name
'声明一个变量作为实参
user_name="阿方"
Call Welcome(user_name)
'调用子程序,显示欢迎信息
'下面是子程序,用来显示欢迎用户的信息
Sub Welcome(Name)
'Name是形式参数
Dim StrWelcome
'不能再声明Name了
StrWelcome=Name&":你好,欢迎光临ASP子程序设计一节!"
Response.Write StrWelcome
'显示StrWelcome的值
End Sub
%>
</body>
</html>
例4-16 求a和b的立方和。
<% Option Explicit
'放在程序首行,强制变量声明 %>
<html>
<head>
<title> 用sub子程序求a^3+b^3=?</title>
</head>
<body>
<h3>计算a^3+b^3=?</H3><HR>
<%
Dim m,n
m=5
n=9
call countsum(m,n)
'调用子程序显示结果
'下面是子程序,用来计算两个数的立方
sub CountSum(a,b)
dim sum
Sum=a^3+b^3
Response.write "a和b的立方和等于"&Cstr(sum)
End sub
%>
</body>
</html>
4.3.2 Function函数
语法:
Function函数名(参数1,参数2,…)
……
end Function
或
Function函数名
……
end Function
Function过程调用方式只有一种,即通过直接引用函数名实现函数的调用,而且函数名必须用在变量赋值语句的右端或表达式中,和函数调用一样。
例4-17 调用自定义函数。
<html>
<tittle>调用自定义函数</title>
<body>
<%
dim m,n
call myfunction '调用函数
%>
</body>
</html>
<script runat=server language=vbscript>
function myfunction ()
flag=0
response.write("函数被调用了!1次!")&m
end function
</script>
例4-18 为了与子程序相比较,下面利用function函数,求a3+b3的值。
<% Option Explicit
'放在程序首行,强制变量声明 %>
<html>
<head>
<title> 用Function函数求a^3+b^3=?</title>
</head>
<body>
<H3>计算a^3+b^3=?</H3><HR>
<%
Dim m,n,sum
m=5
n=9
sum= CountSum(m,n)
'调用函数,求立方和
Response.write "m和n的立方和等于"& Cstr(sum) '显示结果
'下面是函数,用来计算两个数的立方
Function CountSum(a,b)
'由于a,b为形式参数,在函数被调用时,其值由实际参数给出
CountSum=a^3+b^3
End Function
%>
</body>
</html>
4.3.3 子程序和函数的位置
子程序和函数可以放在ASP文件的任意位置上,也可以放在另外一个ASP文件中。
例4-19 求a3+b3值的主程序。
<% Option Explicit
'放在程序首行,强制变量声明 %>
<!--#include file="ch4-20.asp"--> '这是HTML语句,利用#include语句可以在一个文件中插入另一个文件
<html>
<head>
<title> 用Function函数求a^3+b^3=?</title>
</head>
<body>
<H3>计算a^3+b^3=?</H3><HR>
<%
Dim m,n,sum
m=5
n=9
sum= CountSum(m,n)
'调用函数,求立方和
Response.write "m和n的立方和等于"& Cstr(sum) '显示结果
%>
</body>
</html>
例4-20 求a3+b3值的自定义函数。
<%
'下面是函数,用来计算两个数的立方
Function CountSum(a,b)
'由于a,b为形式参数,在函数被调用时,其值由实际参数给出,
'所以此处不能再定义
CountSum=a^3+b^3
End Function
%>
: 科技

