⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orderfunction.asp

📁 网上购物系统
💻 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 + -