?? function1.asp
字號:
<%
'***************************************
'函數(shù)文件一,專門實(shí)現(xiàn)購物車功能
'注意保存圖書的用了兩個一維數(shù)組,
'圖書編號數(shù)組保存在Session("Books")中;圖書數(shù)量數(shù)組保存在Session("BooksNum")中。注意這兩個數(shù)組時刻要一一對應(yīng)
'另外在AddBook中要注意BooksNum 和 BookNum 的區(qū)別,前者有s,用來保存書本數(shù)量的數(shù)組,后者沒有s,是選中這本書的數(shù)量。
'***************************************
'判斷一件貨物是否在購物車中已存在,如果存在,則返回對應(yīng)的數(shù)組下標(biāo),否則返回-1
Function BookExist(BookId)
Dim Books
Books=Session("Books")
'如果條件成立,表示不是數(shù)組,說明其中根本沒有書,直接返回值,退出函數(shù)即可
If IsArray(Books)=False Then
BookExist=-1
Exit Function
End If
Dim numTemp,subScript
subScript=-1 '用于獲得對應(yīng)于該書的下標(biāo)
numTemp=Ubound(Books) '獲得數(shù)組的最大下標(biāo),也就是長度
Dim I
For I=0 To numTemp
If Books(I)=BookId Then '存在相同的書號,返回數(shù)組的下標(biāo)值
subScript=I
Exit For
End If
Next
BookExist=subScript
End Function
'向購物車中添加貨物
Sub AddBook(BookId,BookNum)
'首先返回兩個數(shù)組
Dim Books,BooksNum
Books=Session("Books")
BooksNum=Session("BooksNum")
'調(diào)用函數(shù)返回該書在已有數(shù)組中的編號,如果尚不存在,則返回-1
Dim subScript
subScript=BookExist(BookId)
'下面根據(jù)各種情況判斷
If IsArray(Books)=False Then
'不是數(shù)組,說明其中還沒有任何書,這是添加的第一本
ReDim Books(0)
Redim BooksNum(0)
Books(0)=BookId
BooksNum(0)=BookNum
ElseIf subScript<>-1 Then
'這表示該書已經(jīng)在購物車,只要修改添加數(shù)量即可
BooksNum(subScript) = BookNum + BooksNum(subScript)
Else
'這表示購物車有書,但是該書不存在,重新定義數(shù)組長度,添加到后面即可
Dim numTemp
numTemp=Ubound(Books)
Redim Preserve Books(numTemp+1) '重新定義數(shù)組
Redim Preserve BooksNum(numTemp+1) '重新定義數(shù)組
Books(numTemp+1)=BookId
BooksNum(numTemp+1)=BookNum
End If
'最后將新的購物車數(shù)組保存到Session中
Session("Books")=Books
Session("BooksNum")=BooksNum
End Sub
'在購物車中刪除一件貨物
Sub DelBook(BookId)
'返回兩個數(shù)組
Dim Books,BooksNum
Books=Session("Books")
BooksNum=Session("BooksNum")
'首先調(diào)用函數(shù)找到該書編號在數(shù)組中的下標(biāo)
Dim subScript
subScript=BookExist(BookId)
'返回數(shù)組的長度
Dim numTemp
numTemp=Ubound(Books)
If numTemp=0 Then
'這表示就一本書,直接清空數(shù)組即可
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) '重新定義數(shù)組
Redim Preserve BooksNum(numTemp-1) '重新定義數(shù)組
'最后將新的購物車數(shù)組保存到Session中
Session("Books")=Books
Session("BooksNum")=BooksNum
End If
End Sub
'更改購物車中的貨物數(shù)量
Sub UpdateBook(BookId,BookNum)
'返回兩個數(shù)組
Dim Books,BooksNum
Books=Session("Books")
BooksNum=Session("BooksNum")
'首先找到該書編號在數(shù)組中的下標(biāo)
Dim subScript
subScript=BookExist(BookId)
'下面分兩種情況修改數(shù)量
If subScript<>-1 And BookNum>0 Then
'這表示該書存在,且數(shù)量不為0,直接修改數(shù)量即可
BooksNum(subScript)=BookNum
'最后將新的購物車數(shù)組保存到Session中
Session("Books")=Books
Session("BooksNum")=BooksNum
Elseif subScript<>-1 And BookNum<=0 Then
'這表示該書存在,但是數(shù)量為0或負(fù)數(shù),直接調(diào)用函數(shù)刪除即可
Call DelBook(BookId)
End If
End Sub
'獲得購物車中的總貨物數(shù)
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) '累加求的總數(shù)
Next
GetTotalNum=total
End Function
'獲得購物車中的貨物的總金額,此時需要從數(shù)據(jù)庫中讀取價格
Function GetTotalMoney()
Dim Books,BooksNum,numTemp
Books=Session("Books")
BooksNum=Session("BooksNum")
'該條件表示沒有任何書,直接退出函數(shù)即可
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 '返回函數(shù)值
End Function
'結(jié)賬函數(shù),產(chǎn)生本次訂單,并記錄明細(xì)情況,最后返回訂單號碼
Function CheckOut()
Dim Books,BooksNum,numTemp
Books=Session("Books")
BooksNum=Session("BooksNum")
'這表示根本沒有買書,不必結(jié)算
If IsArray(Books)=False Then
Exit Function
End If
'首先添加一個訂單,這里要調(diào)用求總數(shù)量和總金額的函數(shù)
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")
'下面再依次將每一項(xiàng)添加到明細(xì)表Orders_particular中,這里使用了RecordSet對象添加
'當(dāng)然也可以不用Recordset對象,循環(huán)執(zhí)行多條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
'結(jié)賬完畢,可以將數(shù)組清空
Session("Books")=""
Session("BooksNum")=""
'返回訂單號
CheckOut=OrderId
End Function
%>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -