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