<%
'==========================
'购物车类 类名:UserCart
'作者:Cosiray
'基本原理:此类用服务器Session变量保存商品数据,商品用一个数组表示.此类里面保存了三中商品价格.
'==========================
Class UserCart
'建立购物车
Sub CreateCart()
dim CFlag,i
dim mCart(6,0)
CFlag=CheckCart()
if CFlag=false then
For i=LBound(mCart,2) to UBound(mCart,2)
mCart(0,i)=""
next
Session("User_Cart")=mCart
end if
End Sub
'检查购物车
Public Function CheckCart()
IF IsArray(Session("User_Cart")) Then
CheckCart=true
Else
CheckCart=false
End If
End Function
'检查购物车是否为空
Function CheckEmtpy()
dim mCart,i
mCart=Session("User_Cart")
For i=LBound(mCart,2) to UBound(mCart,2)
if mCart(0,i)<>"" then
CheckEmtpy=false
Exit Function
end if
next
CheckEmtpy=True
End Function
'添加商品
Function AddItem(aID,aName,aPrice1,aPrice2,aPrice3,aCount,aImage)
dim mCart,i
AddItem=false
if CheckItem(aID)=false then
'无此商品
mCart=Session("User_Cart")
For i=LBound(mCart,2) to UBound(mCart,2)
if mCart(0,i)="" then
mCart(0,i)=aID
mCart(1,i)=aName
mCart(2,i)=aPrice1
mCart(3,i)=aPrice2
mCart(4,i)=aPrice3
mCart(5,i)=aCount
mCart(6,i)=aImage
Session("User_Cart")=mCart
AddItem=true
exit Function
end if
next
i=i+1
Redim preserve mCart(6,i)
mCart(0,i)=aID
mCart(1,i)=aName
mCart(2,i)=aPrice1
mCart(3,i)=aPrice2
mCart(4,i)=aPrice3
mCart(5,i)=aCount
mCart(6,i)=aImage
Session("User_Cart")=mCart
AddItem=True
Else
'有此商品,则商品数量+1
ModifItem aID,aCount,0
AddItem=True
End if
End Function
'删除商品数量
Sub DelItem(mID) '改进2008-12-25by tommy 增加删除商品过程
dim mCart,i,j,mount
response.Write(mID)
mCart=Session("User_Cart")
mount=UBound(mCart,2)
If mID=mount Then
mount=mount-1
mCart(0,mount+1)=""
ReDim Preserve mCart(6,mount)
Else
mount=mount-1
For i=mID To mount
For j=0 To 6
mCart(j,i)=mCart(j,i+1)
Next
Next
mCart(0,mount+1)=""
ReDim Preserve mCart(6,mount)
End If
Session("User_Cart")=mCart
End Sub
'修改商品数量
Sub ModifItem(mID,mCount,mFlag)
'mFlag-标志 0-添加 1-删除,2-修改 3-清空
'mID-商品ID
'mCount-修改商品的数量
dim mCart,i
mCart=Session("User_Cart")
For i=LBound(mCart,2) to UBound(mCart,2)
if mCart(0,i)=mID then
select case mFlag
case 1
mCart(5,i)=mCart(5,i)-mCount
case 0
mCart(5,i)=mCart(5,i)+mCount
case 2
if mCount=0 then
mCart(5,i)=0
mCart(0,i)=""
else
mCart(5,i)=mCount
end if
case 3
mCart(5,i)=0
mCart(0,i)=""
end select
Session("User_Cart")=mCart
exit Sub
end if
next
End Sub
'查看推车
Function ViewCart()
dim mCart
mCart=Session("User_Cart")
ViewCart=mCart
End Function
'检查商品
Function CheckItem(cID)
dim mCart,i
mCart=Session("User_Cart")
For i=LBound(mCart,2) to UBound(mCart,2)
if mCart(0,i)=cID then
CheckItem=True
exit Function
end if
next
CheckItem=false
End Function
'清空购物车
Sub RemoveAll()
dim mCart,i
mCart=Session("User_Cart")
For i=LBound(mCart,2) to UBound(mCart,2)
mCart(0,i)=""
next
Session("User_Cart")=mCart
End Sub
'商品总价值
Function TPrice()
dim mCart,i
dim OutPrice(3)
mCart=Session("User_Cart")
for i=LBound(mCart,2) to UBound(mCart,2)
if mCart(0,i)<>"" then
Outprice(0)=Outprice(0) + mCart(2,i)*mCart(5,i)
Outprice(1)=Outprice(1) + mCart(3,i)*mCart(5,i)
Outprice(2)=Outprice(2) + mCart(4,i)*mCart(5,i)
Outprice(3)=OutPrice(3) + mCart(5,i)
end if
next
TPrice=OutPrice
End Function
End Class
'=================================================
'建立购物车对象,该对象用于直接在程序中调用
'=================================================
dim uCart
set uCart= new UserCart
%>
使用:
第1
'=================================================
'建立购物车对象,该对象用于直接在程序中调用
'=================================================
dim uCart
set uCart= new UserCart
第二
建立一个购物车
uCart.CreateCart (可以重复建立,因为里面有IsArray判断。所以建议这句在建立购物车对象后必写)
第三
增加购物车里的商品,在客户端点了某产品后,服务器端处理的ASP文件中接受传过来的产品标志,并访问数据库。分别把AddItem(aID产品标
志如ID,aName产品名称,aPrice1产品价格一,如单价,aPrice2产品价格二如会员价,aPrice3产品价格三如金牌会员价,如果没这么多可以置空
或置0,aCount购买数量,一般是一个,多个的话后面可以用修改函数修改,aImage产品图片地址)
使用方法:aa=uCart.AddItem(aID产品标志如ID,aName产品名称,aPrice1产品价格一,如单价,aPrice2产品价格二如会员价,aPrice3产品价格
三如金牌会员价,如果没这么多可以置空或置0,aCount购买数量,一般是一个,多个的话后面可以用修改函数修改,aImage产品图片地址),返回
true表示成功,false表示失败
第四
增加了以后进如显示页面,就要用到查看购物车
mycart=uCart.ViewCart()
For i =LBound(myCart,2) to UBound(myCart,2)
if myCart(0,i)<>"" then
myCart(0,i) '获取标号
myCart(1,i) '获取单价
。。。以此类推
end if
next
第五
查看了,可以修改购物车,如更改数量等,或是删除其中的
call uCart.ModifItem(mID唯一标志号,mCount产品数量,mFlag-标志 0-添加 1-删除,2-修改 3-清空) '先用给后面参数赋值
修改其中的商品
可以用第四个显示,先接受session的值,然后循环修改
或清空购物车
uCart.RemoveAll()
然后结帐,很简单
myprice=uCart.TPrice()
然后myprice(0)是产品单价的总价格,myprice(1)是产品会员价的总价格,myprice(2)是高级会员的总价格,myprice(3)是产品总数量
将商品装入购物车,这时需要用cookie或session来做一个不同页面间传递的全局变量,也就是说关了浏览器(针对session)或清楚了cookie等原因,本次购物车会消失,就象你今天在商场买了一车的东西,最后没结帐,明天肯定没了,又归位了,当然要有特殊需要保存,可以写数据库!所以这里记录的只需要是该商品的相关信息就可以了,这里我们记录他的 物品ID, 物品单价, 物品名称, 物品数量
<!--#include file="../inc/Conn.asp"-->
<!--#include file="../Inc/Cls.Common.asp"-->
<!--#include file="../Inc/Cls.Templates.asp"-->
<!--#include file="Cls.UserCart.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<form name="form1" action="AddToCart.asp?action=save" method="post">
产品Id:<input type="text" name="produceId" />
产品名称:<input type="text" name="produceName" />
产品单价:<input type="text" name="producePrice" />
产品数量:<input type="text" name="buynum" />
<input type="submit" />
</form>
<br>
<%
dim action
action=request("action")
If action="save" Then
Dim aId,aName,aPrice,aCount
aId=request.Form("produceId")
aName=request.Form("produceName")
aPrice=request.Form("producePrice")
aCount=request.Form("buynum")
uCart.CreateCart
if uCart.AddItem(aId,aName,aPrice,0,0,aCount,0) then
CALL COSIRAY.ErrView("","","<li>添加成功!<script>function Close(){parent.closeWithIframe();}setTimeout(""location.href='AddToCart.asp';Close();"",1000)</script>",1)
else
CALL COSIRAY.ErrView("","","<li>操作错误<li>此界面 3 秒钟后自动关闭<script>function Close(){parent.closeWithIframe();}setTimeout(""history.go(-1);Close();"",1000)</script>",0)
end if
ElseIf action="del" Then
aId=request("produceId")
aa=uCart.DelItem(aId)
response.Redirect("AddToCart.asp")
End If
if true then
dim i,MyPrice,myCart
myCart = uCart.ViewCart
%>
<table border="1">
<tr>
<th>
产品编号
</th>
<th>
产品名称
</th>
<th>
产品价格
</th>
<th>
产品数量
</th>
<th>
操作
</th>
</tr>
<%
For i = LBound(myCart,2) To UBound(myCart,2)
If myCart(0,i)<>"" Then '以前的判断语句
%>
<tr>
<td>
<%=MyCart(0,i)%></td>
<td>
<%=MyCart(1,i)%></td>
<td>
<%=MyCart(2,i)%></td>
<td>
<%=MyCart(5,i)%></td>
<td>
<a href="AddToCart.asp?action=del&produceId=<%=MyCart(0,i)%>" onclick="return confirm('你确定要删除吗?');">
删除</a>
</td>
</tr>
<%
End If
Next
MyPrice=uCart.TPrice()
%>
<tr>
<td>总价格:<%=MyPrice(0)%></td>
<td colspan="3">产品总数量:<%=MyPrice(3)%></td>
</tr>
</table>
<%end if%>
</body>
</html>