什么是购物推车?
你一定去过超级市场吧。在那里你可以推着推车,将中意的商品放进推车,或者把推车里的商品取出来重新放到货架,最后你推着推车去结账。
那么,在网上超市,客户也应该可以在浏览商品目录时,将中意的商品放进 " 电子推车 " 。电子推车是超级市场推车的电子化。在网上商店里,这种电子推车又称为 " 购物推车 " ,英文是Shopping Cart。
购物推车的设计目标
从程序员的观点来看,购物推车是维护购物者商品选购、允许察看、允许修改的一个对象。购物推车本身是一个非常简单的程序,但开发者要考虑它将连接到商品目录子系统、订单子系统、客户账号子系统、站点管理子系统等等,形成功能完整的网上商店。
下面是购物推车的设计目标:
1 、 持续性:购物推车应该从它的前一次会话中记住其内容。
2 、 购物推车和客户相关,而不是和客户的电脑相关。客户可以从另外的电脑或浏览器来访问购物推车。
3 、 当新的商品被加入推车或者从推车去掉时,推车的内容可以被显示给用户。
4 、 推车可以容纳很多甚至无限的商品。
系统设计 / 流程设计
在编写我们的购物推车之前,我们看看它的系统架构和流程。请看下图:
如果客户从商品目录中选择了一件商品,这时我们传递客户的请求到proxy.asp,同时传递的是动作变量 " 增加商品 " 。Proxy.asp读取这个变量,并决定执行购物推车的哪个动作。这些动作包括:增加商品、更新商品数量、移除商品或者察看购物推车。
有些动作被作为内部调用。如创建推车之前,我们需要检查推车是否已经存在(CheckCart)。在增加、删除或者更新商品及其数量时,我们要确认此商品是否已经存在于我们的购物推车之中(CheckItem)。下面我们将为购物推车设计8个方法,分别是:
ViewItem 察看推车
CheckCart 检查推车
CreateCart 创建推车
AddItem(ID, Qty), 增加商品
RemoveItem(ID) 删除商品
UpdateItem(ID, Qty), 更新数量
RemoveAll 全部清空
CheckItem(ID) 商品检查
购物推车的设计
购物推车需要三个要素:一个VBScript 5的类class CartKit,一个多维数组mudCart,一个session变量Session( " Cart " )。
这个VBScript 类,我们称为CartKit,包含了8个方法,如上表所示。在本文我们只用了ID和Qty,分别表示商品编号和数量。
这样我们就可以用一个二维数组来表达这个推车,象下面这样:
商品编号 商品数量
ID - 1 23
ID - 3 10
ID - 23 6
ID - 2 1
然后我们把这个二维数组保存到session变量中就可以了。
购物推车类CartKit的设计
请下载:CartKit.asp
CreateCart设计:
请看程序代码:
Class CartKit REM 开始类CartKit的定义
Sub CreateCart()
IF IsArray (Session( " Cart " )) = false THEN
Dim mudCart( 19 , 1 )
Session( " Cart " ) = mudCart
END IF
End Sub
其中:Session( " Cart " )保存的就是推车的内容。如果推车不存在,我们就定义一个二维数组mudCart来表达推车,并将它保存到session( " Cart " )中。
CheckCart设计:
本函数判断Cart是否已经创建。比较简单。
Function CheckCart()
IF IsArray (Session( " Cart " )) THEN
CheckCart = True
ELSE
CheckCart = False
END IF
End Function
CheckItem设计:
请看代码:
Function CheckItem(ID)
IF CheckCart = True THEN
varMudCart = Session( " Cart " )
FOR i = LBound (varMudCart) TO UBound (varMudCart)
IF varMudCart(i, 0 ) = ID THEN
CheckItem = TRUE
Exit Function
ELSEIF varMudCart(i, 0 ) <> ID THEN
CheckItem = FALSE
END IF
NEXT
END IF
End Function
首先判断推车是否存在。然后将商品的编号ID和购物推车中的商品编号逐一比较。如果有相等的,返回真。否则为假。
AddItem(ID,Qty)设计:
请参考本文的附件CartKit.asp,这里介绍的函数我们把它们封装到一个名为CartKit的class中。下面的代码段首先创建了一个CartKit对象,然后检查推车是否已经存在。如果不存在,就创建推车并新增商品;否则,检查商品编号是否已经存在于Cart中。如果是,就更新数量;否则,新增商品。
Function AddItem(ID, Qty)
Set CartObj = New CartKit
varCartStatus = CartObj.CheckCart
IF varCartStatus = false THEN
CartObj.CreateCart
mudCart = Session( " Cart " )
mudCart( 0 , 0 ) = ID
mudCart( 0 , 1 ) = Qty
Session( " Cart " ) = mudCart
Exit Function
ELSEIF varCartStatus = true THEN
IF CartObj.CheckItem(ID) = true THEN
CartObj.UpdateItem ID,Qty
ELSEIF cartObj.CheckItem(ID) = false THEN
mudCart = Session( " Cart " )
FOR i = LBound (mudCart) TO UBound (mudCart)
IF mudCart(i, 0 ) = "" THEN
mudCart(i, 0 ) = ID
mudCart(i, 1 ) = Qty
Session( " Cart " ) = mudCart
Exit Function
END IF
NEXT
END IF
END IF
End Function
UpdateItem设计:
Function UpdateItem(ID, Qty)
mudCart = Session( " Cart " )
FOR i = LBound (mudCart) TO UBound (mudCart)
IF mudCart(i, 0 ) = ID THEN
mudCart(i, 1 ) = Qty
Session( " cart " ) = mudCart
Exit Function
END IF
NEXT
End Function
ViewItem设计:
Function ViewItem()
mudCart = Session( " Cart " )
IF isArray (mudCart) THEN
% >
Item Name
Item Quantity
< %
Response.Write " Item ID: " & mudCart(i, 0 ) & " <-- "
Response.Write "
"
Response.Write " Item Qty: " & mudCart(i, 1 ) & " <-- "
Response.Write "
"
END IF
NEXT
ELSEIF isArray (mudCart) = False THEN
Response.Write " No item in your cart! "
Response.Write "
"
Response.Write " Y don’t you do shop! "
END IF
End Function
RemoveItem(ID)设计:
Function RemoveItem(ID)
mudCart = Session( " Cart " )
’Find the Postion / Index of given ID.
For i = LBound (mudCart) TO Ubound (mudCart)
IF mudCart(i, 0 ) = ID THEN
Pos = i
Exit For
END IF
Next
’Delete Process
FOR i = Pos TO UBound (mudCart) - 1
IF Not mudCart(i, 0 ) = "" THEN
mudCart(i, 0 ) = mudCart(i + 1 , 0 )
END IF
Next
End Function
End Class REM 结束类CartKit的定义
'
CartKit.asp
'------建立一辆购物车-----
Class CartKit
Sub CreateCart()
If IsArray(Session("Cart")) = false Then
Dim mudCart(19,1)
Session("Cart") = mudCart
End If
End Sub
Dim myArray(3,1)
ReDim Preserve myArray(3,2)
Dim myArrayID(1), myArrayQty(1)
Function AddItem(ID, Qty)
Set CartObj = New CartKit
varCartStatus = CartObj.CheckCart
If varCartStatus=false Then
CartObj.CreateCart
mudCart=Session("Cart")
mudCart(0,0)=ID
mudCart(0,1)=Qty
Session("Cart")=mudCart
Exit Function
ElseIf varCartStatus=true Then
If CartObj.CheckItem(ID) = true Then
CartObj.UpdateItem ID,Qty
Elseif cartObj.CheckItem(ID) = false Then
mudCart = Session("Cart")
For i = LBound(mudCart) TO UBound(mudCart)
If mudCart(i,0) = "" Then
mudCart(i,0) = ID
mudCart(i,1) = Qty
Session("Cart") = mudCart
Exit Function
End If
Next
End If
End If
End Function
Function RemoveItem(ID)
mudCart=Session("Cart")
For i = LBound(mudCart) TO Ubound(mduCart)
If myArray(i,0) = ID Then
Pos=i
Exit For
End If
Next
For i = Pos TO UBound(myArray) - 1
If Not myArray(i, 0) = "" Then
myArray(i,0) = myArray(i+1,0)
myArray(i,1) = myArray(i+1,1)
End If
Next
End Function
Role of Proxy.asp
varAction=CStr(Request.QueryString("ac"))
Set mudCartObj = New CartKit
varID = CStr(Request.Form("ID"))
varQty = Request.QueryString("qty")
If varAction="by" Then
mudCartObj.AddItem varID, varQty
ElseIf varAction="rm" Then
mudCartObj.RemoveItem varID
ElseIf varAction="up" Then
mudCartObj.UpdateItem varID, varQty
ElseIf varAction="ra" Then
mudCartObj.RemoveAll
ElseIf varAction="co" Then
MudcartObj.CheckOut
ElseIf varAction="cs" Then
MudcartObj.ContinueShopping
End If
Function CartStatus()
varTotalItems = 0
Set CartObj = New CartKit
If CartObj.CheckCart = true Then
MudCart = Session("Cart")
VarTotalItem = 0
For i = Lbound(mudCart) TO Ubound(mudCart)
If mudCart(i,0) <> "" Then
varTotalItem = varTotalItem + Cint(mudCart(i,1))
End If
Next
ElseIf CartObj.CheckCart= False Then
varTotalItem="0"
End If
CartStatus=varTotalItem End Function
Set CartObj = Nothing
End Function
<%="You have " & Response.Write CartObj.CartStatus & _
" items(s) in your cart"%>
你一定去过超级市场吧。在那里你可以推着推车,将中意的商品放进推车,或者把推车里的商品取出来重新放到货架,最后你推着推车去结账。
那么,在网上超市,客户也应该可以在浏览商品目录时,将中意的商品放进 " 电子推车 " 。电子推车是超级市场推车的电子化。在网上商店里,这种电子推车又称为 " 购物推车 " ,英文是Shopping Cart。
购物推车的设计目标
从程序员的观点来看,购物推车是维护购物者商品选购、允许察看、允许修改的一个对象。购物推车本身是一个非常简单的程序,但开发者要考虑它将连接到商品目录子系统、订单子系统、客户账号子系统、站点管理子系统等等,形成功能完整的网上商店。
下面是购物推车的设计目标:
1 、 持续性:购物推车应该从它的前一次会话中记住其内容。
2 、 购物推车和客户相关,而不是和客户的电脑相关。客户可以从另外的电脑或浏览器来访问购物推车。
3 、 当新的商品被加入推车或者从推车去掉时,推车的内容可以被显示给用户。
4 、 推车可以容纳很多甚至无限的商品。
系统设计 / 流程设计
在编写我们的购物推车之前,我们看看它的系统架构和流程。请看下图:
如果客户从商品目录中选择了一件商品,这时我们传递客户的请求到proxy.asp,同时传递的是动作变量 " 增加商品 " 。Proxy.asp读取这个变量,并决定执行购物推车的哪个动作。这些动作包括:增加商品、更新商品数量、移除商品或者察看购物推车。
有些动作被作为内部调用。如创建推车之前,我们需要检查推车是否已经存在(CheckCart)。在增加、删除或者更新商品及其数量时,我们要确认此商品是否已经存在于我们的购物推车之中(CheckItem)。下面我们将为购物推车设计8个方法,分别是:
ViewItem 察看推车
CheckCart 检查推车
CreateCart 创建推车
AddItem(ID, Qty), 增加商品
RemoveItem(ID) 删除商品
UpdateItem(ID, Qty), 更新数量
RemoveAll 全部清空
CheckItem(ID) 商品检查
购物推车的设计
购物推车需要三个要素:一个VBScript 5的类class CartKit,一个多维数组mudCart,一个session变量Session( " Cart " )。
这个VBScript 类,我们称为CartKit,包含了8个方法,如上表所示。在本文我们只用了ID和Qty,分别表示商品编号和数量。
这样我们就可以用一个二维数组来表达这个推车,象下面这样:
商品编号 商品数量
ID - 1 23
ID - 3 10
ID - 23 6
ID - 2 1
然后我们把这个二维数组保存到session变量中就可以了。
购物推车类CartKit的设计
请下载:CartKit.asp
CreateCart设计:
请看程序代码:
Class CartKit REM 开始类CartKit的定义
Sub CreateCart()
IF IsArray (Session( " Cart " )) = false THEN
Dim mudCart( 19 , 1 )
Session( " Cart " ) = mudCart
END IF
End Sub
其中:Session( " Cart " )保存的就是推车的内容。如果推车不存在,我们就定义一个二维数组mudCart来表达推车,并将它保存到session( " Cart " )中。
CheckCart设计:
本函数判断Cart是否已经创建。比较简单。
Function CheckCart()
IF IsArray (Session( " Cart " )) THEN
CheckCart = True
ELSE
CheckCart = False
END IF
End Function
CheckItem设计:
请看代码:
Function CheckItem(ID)
IF CheckCart = True THEN
varMudCart = Session( " Cart " )
FOR i = LBound (varMudCart) TO UBound (varMudCart)
IF varMudCart(i, 0 ) = ID THEN
CheckItem = TRUE
Exit Function
ELSEIF varMudCart(i, 0 ) <> ID THEN
CheckItem = FALSE
END IF
NEXT
END IF
End Function
首先判断推车是否存在。然后将商品的编号ID和购物推车中的商品编号逐一比较。如果有相等的,返回真。否则为假。
AddItem(ID,Qty)设计:
请参考本文的附件CartKit.asp,这里介绍的函数我们把它们封装到一个名为CartKit的class中。下面的代码段首先创建了一个CartKit对象,然后检查推车是否已经存在。如果不存在,就创建推车并新增商品;否则,检查商品编号是否已经存在于Cart中。如果是,就更新数量;否则,新增商品。
Function AddItem(ID, Qty)
Set CartObj = New CartKit
varCartStatus = CartObj.CheckCart
IF varCartStatus = false THEN
CartObj.CreateCart
mudCart = Session( " Cart " )
mudCart( 0 , 0 ) = ID
mudCart( 0 , 1 ) = Qty
Session( " Cart " ) = mudCart
Exit Function
ELSEIF varCartStatus = true THEN
IF CartObj.CheckItem(ID) = true THEN
CartObj.UpdateItem ID,Qty
ELSEIF cartObj.CheckItem(ID) = false THEN
mudCart = Session( " Cart " )
FOR i = LBound (mudCart) TO UBound (mudCart)
IF mudCart(i, 0 ) = "" THEN
mudCart(i, 0 ) = ID
mudCart(i, 1 ) = Qty
Session( " Cart " ) = mudCart
Exit Function
END IF
NEXT
END IF
END IF
End Function
UpdateItem设计:
Function UpdateItem(ID, Qty)
mudCart = Session( " Cart " )
FOR i = LBound (mudCart) TO UBound (mudCart)
IF mudCart(i, 0 ) = ID THEN
mudCart(i, 1 ) = Qty
Session( " cart " ) = mudCart
Exit Function
END IF
NEXT
End Function
ViewItem设计:
Function ViewItem()
mudCart = Session( " Cart " )
IF isArray (mudCart) THEN
% >
Item Name
Item Quantity
< %
Response.Write " Item ID: " & mudCart(i, 0 ) & " <-- "
Response.Write "
"
Response.Write " Item Qty: " & mudCart(i, 1 ) & " <-- "
Response.Write "
"
END IF
NEXT
ELSEIF isArray (mudCart) = False THEN
Response.Write " No item in your cart! "
Response.Write "
"
Response.Write " Y don’t you do shop! "
END IF
End Function
RemoveItem(ID)设计:
Function RemoveItem(ID)
mudCart = Session( " Cart " )
’Find the Postion / Index of given ID.
For i = LBound (mudCart) TO Ubound (mudCart)
IF mudCart(i, 0 ) = ID THEN
Pos = i
Exit For
END IF
Next
’Delete Process
FOR i = Pos TO UBound (mudCart) - 1
IF Not mudCart(i, 0 ) = "" THEN
mudCart(i, 0 ) = mudCart(i + 1 , 0 )
END IF
Next
End Function
End Class REM 结束类CartKit的定义
'
CartKit.asp
'------建立一辆购物车-----
Class CartKit
Sub CreateCart()
If IsArray(Session("Cart")) = false Then
Dim mudCart(19,1)
Session("Cart") = mudCart
End If
End Sub
Dim myArray(3,1)
ReDim Preserve myArray(3,2)
Dim myArrayID(1), myArrayQty(1)
Function AddItem(ID, Qty)
Set CartObj = New CartKit
varCartStatus = CartObj.CheckCart
If varCartStatus=false Then
CartObj.CreateCart
mudCart=Session("Cart")
mudCart(0,0)=ID
mudCart(0,1)=Qty
Session("Cart")=mudCart
Exit Function
ElseIf varCartStatus=true Then
If CartObj.CheckItem(ID) = true Then
CartObj.UpdateItem ID,Qty
Elseif cartObj.CheckItem(ID) = false Then
mudCart = Session("Cart")
For i = LBound(mudCart) TO UBound(mudCart)
If mudCart(i,0) = "" Then
mudCart(i,0) = ID
mudCart(i,1) = Qty
Session("Cart") = mudCart
Exit Function
End If
Next
End If
End If
End Function
Function RemoveItem(ID)
mudCart=Session("Cart")
For i = LBound(mudCart) TO Ubound(mduCart)
If myArray(i,0) = ID Then
Pos=i
Exit For
End If
Next
For i = Pos TO UBound(myArray) - 1
If Not myArray(i, 0) = "" Then
myArray(i,0) = myArray(i+1,0)
myArray(i,1) = myArray(i+1,1)
End If
Next
End Function
Role of Proxy.asp
varAction=CStr(Request.QueryString("ac"))
Set mudCartObj = New CartKit
varID = CStr(Request.Form("ID"))
varQty = Request.QueryString("qty")
If varAction="by" Then
mudCartObj.AddItem varID, varQty
ElseIf varAction="rm" Then
mudCartObj.RemoveItem varID
ElseIf varAction="up" Then
mudCartObj.UpdateItem varID, varQty
ElseIf varAction="ra" Then
mudCartObj.RemoveAll
ElseIf varAction="co" Then
MudcartObj.CheckOut
ElseIf varAction="cs" Then
MudcartObj.ContinueShopping
End If
Function CartStatus()
varTotalItems = 0
Set CartObj = New CartKit
If CartObj.CheckCart = true Then
MudCart = Session("Cart")
VarTotalItem = 0
For i = Lbound(mudCart) TO Ubound(mudCart)
If mudCart(i,0) <> "" Then
varTotalItem = varTotalItem + Cint(mudCart(i,1))
End If
Next
ElseIf CartObj.CheckCart= False Then
varTotalItem="0"
End If
CartStatus=varTotalItem End Function
Set CartObj = Nothing
End Function
<%="You have " & Response.Write CartObj.CartStatus & _
" items(s) in your cart"%>