📄 function1.asp
字号:
<%
'***************************************
'函数文件一,专门实现购物车功能
'注意保存图书的用了两个一维数组,
'图书编号数组保存在Session("Books")中;图书数量数组保存在Session("BooksNum")中。注意这两个数组时刻要一一对应
'另外在AddBook中要注意BooksNum 和 BookNum 的区别,前者有s,用来保存书本数量的数组,后者没有s,是选中这本书的数量。
'***************************************
'判断一件货物是否在购物车中已存在,如果存在,则返回对应的数组下标,否则返回-1
Function BookExist(BookId)
Dim Books
Books=Session("Books")
'如果条件成立,表示不是数组,说明其中根本没有书,直接返回值,退出函数即可
If IsArray(Books)=False Then
BookExist=-1
Exit Function
End If
Dim numTemp,subScript
subScript=-1 '用于获得对应于该书的下标
numTemp=Ubound(Books) '获得数组的最大下标,也就是长度
Dim I
For I=0 To numTemp
If Books(I)=BookId Then '存在相同的书号,返回数组的下标值
subScript=I
Exit For
End If
Next
BookExist=subScript
End Function
'向购物车中添加货物
Sub AddBook(BookId,BookNum)
'首先返回两个数组
Dim Books,BooksNum
Books=Session("Books")
BooksNum=Session("BooksNum")
'调用函数返回该书在已有数组中的编号,如果尚不存在,则返回-1
Dim subScript
subScript=BookExist(BookId)
'下面根据各种情况判断
If IsArray(Books)=False Then
'不是数组,说明其中还没有任何书,这是添加的第一本
ReDim Books(0)
Redim BooksNum(0)
Books(0)=BookId
BooksNum(0)=BookNum
ElseIf subScript<>-1 Then
'这表示该书已经在购物车,只要修改添加数量即可
BooksNum(subScript) = BookNum + BooksNum(subScript)
Else
'这表示购物车有书,但是该书不存在,重新定义数组长度,添加到后面即可
Dim numTemp
numTemp=Ubound(Books)
Redim Preserve Books(numTemp+1) '重新定义数组
Redim Preserve BooksNum(numTemp+1) '重新定义数组
Books(numTemp+1)=BookId
BooksNum(numTemp+1)=BookNum
End If
'最后将新的购物车数组保存到Session中
Session("Books")=Books
Session("BooksNum")=BooksNum
End Sub
'在购物车中删除一件货物
Sub DelBook(BookId)
'返回两个数组
Dim Books,BooksNum
Books=Session("Books")
BooksNum=Session("BooksNum")
'首先调用函数找到该书编号在数组中的下标
Dim subScript
subScript=BookExist(BookId)
'返回数组的长度
Dim numTemp
numTemp=Ubound(Books)
If numTemp=0 Then
'这表示就一本书,直接清空数组即可
Session("Books")=""
Session("BooksNum")=""
Else
'这表示有若干本书,将该书以后的图书往前移动一位即可
Dim I
For I=subScript To numTemp-1
Books(I)=Books(I+1)
BooksNum(I)=BooksNum(I+1)
Next
Redim Preserve Books(numTemp-1) '重新定义数组
Redim Preserve BooksNum(numTemp-1) '重新定义数组
'最后将新的购物车数组保存到Session中
Session("Books")=Books
Session("BooksNum")=BooksNum
End If
End Sub
'更改购物车中的货物数量
Sub UpdateBook(BookId,BookNum)
'返回两个数组
Dim Books,BooksNum
Books=Session("Books")
BooksNum=Session("BooksNum")
'首先找到该书编号在数组中的下标
Dim subScript
subScript=BookExist(BookId)
'下面分两种情况修改数量
If subScript<>-1 And BookNum>0 Then
'这表示该书存在,且数量不为0,直接修改数量即可
BooksNum(subScript)=BookNum
'最后将新的购物车数组保存到Session中
Session("Books")=Books
Session("BooksNum")=BooksNum
Elseif subScript<>-1 And BookNum<=0 Then
'这表示该书存在,但是数量为0或负数,直接调用函数删除即可
Call DelBook(BookId)
End If
End Sub
'获得购物车中的总货物数
Function GetTotalNum()
Dim Books,BooksNum,numTemp
Books=Session("Books")
'如果该条件成立,表示其中没有任何货物
If IsArray(Books)=False Then
GetTotalNum=0
Exit Function
End If
BooksNum=Session("BooksNum")
numTemp=Ubound(Books)
Dim I,total
total=0
For I=0 To numTemp
total=total+BooksNum(I) '累加求的总数
Next
GetTotalNum=total
End Function
'获得购物车中的货物的总金额,此时需要从数据库中读取价格
Function GetTotalMoney()
Dim Books,BooksNum,numTemp
Books=Session("Books")
BooksNum=Session("BooksNum")
'该条件表示没有任何书,直接退出函数即可
If IsArray(Books)=False Then
GetTotalMoney=0
Exit Function
End If
'下面开始计算
numTemp=Ubound(Books)
Dim I,total
total=0
Dim rs,strSql
'累加求总金额
For I=0 To numTemp
strSql="Select * from book where BookId=" & Books(I)
Set rs=db.Execute(strSql)
total=total+BooksNum(I)*rs("bookprice")
rs.Close
Next
Set rs=Nothing
GetTotalMoney=total '返回函数值
End Function
'结账函数,产生本次订单,并记录明细情况,最后返回订单号码
Function CheckOut()
Dim Books,BooksNum,numTemp
Books=Session("Books")
BooksNum=Session("BooksNum")
'这表示根本没有买书,不必结算
If IsArray(Books)=False Then
Exit Function
End If
'首先添加一个订单,这里要调用求总数量和总金额的函数
Dim rs,rs2,strSql
strSql="Insert Into orders(UserId,TotalNum,TotalMoney,SubmitDate) Values('" & Session("UserId") & "'," & GetTotalNum() & "," & GetTotalMoney() & ",#" & Now() & "#)"
db.Execute(strSql)
'马上返回本次的订单编号
Dim OrderId
strSql="Select Top 1 OrderId From orders Where UserId='" & Session("UserId") & "' Order By OrderId Desc"
Set rs=db.Execute(strSql)
OrderId=rs("OrderId")
'下面再依次将每一项添加到明细表Orders_particular中,这里使用了RecordSet对象添加
'当然也可以不用Recordset对象,循环执行多条Insert语句也可以
Set rs=Server.CreateObject("Adodb.recordset")
rs.open "Select * From Orders_particular",db,0,2
numTemp=Ubound(Books)
For I=0 To numTemp
rs.Addnew
rs("OrderId")=OrderId
rs("BookId")=Books(I)
rs("BuyNum")=BooksNum(I)
rs.Update
Next
rs.Close
'结账完毕,可以将数组清空
Session("Books")=""
Session("BooksNum")=""
'返回订单号
CheckOut=OrderId
End Function
%>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -