主题:  一个还没有完成的ASP购物车的类

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#12005/4/28 15:36:17
<!--#include file="../Function.asp" -->
<%
 
'---------------------------------------------+
'              Tpp8 商城 购物车类               +
'---------------------------------------------+ 
' Email			:		allinhands@gmail.com
' Version		:		1.0.3
' Last Update	:		2005-05-28


'/==============\
'		购物车类
'\==============/
Class Cart
	Private intItemCount
	Private intCurrentUID
	Private arrItems(50)
	Private flTotalPrice
	
	'==============================================
	'初始化类
	'==============================================
	Private Sub Class_Initialize()
		intItemCount = 0
		flTotalPrice = 0
		'intCurrentUID = Session("MyInfo").UserID
	End Sub

	
	'==============================================
	'定义公共属性 [int] ItemCount
	'方法 Get
	'==============================================
	Public Property Get ItemCount
		ItemCount = intItemCount
	End Property

	
	'==============================================
	'定义公共属性 [float] TotalPrice
	'方法 Get
	'==============================================
	Public Property Get TotalPrice
		TotalPrice = flTotalPrice
	End Property

	
	'==============================================
	'定义公共方法 [int] AddItem(ItemID,Number)		添加物品
	'--------------------------------------
	'参数列表:
	'ItemID			物品ID
	'Number		物品数量
	'--------------------------------------
	'返回值
	'0					添加成功
	'1					购物车已满
	'2					物品已经存在
	'3					物品在数据库中不存在,或者不可用
	'--------------------------------------
	'==============================================
	Public Function AddItem(ItemID,Number)
		'如果购物车的货物超过最大限度,则返回1
		If intItemCount = 50 Then
			AddItem = 1
			Exit Function
		End If

		'检测物品是否存在,是则返回2
		If Exsit(ItemID) <> -1 Then
			AddItem = 2
			Exit Function
		End if

		'添加项目
		Set Items = new ShopItem
		Items.ID = ItemID
		Items.Number = Number
		Items.GetInfo()
		If Items.Exsit Then
			Set arrItems(intItemCount) = Items
			'增加数量
			intItemCount = intItemCount + 1
			flTotalPrice = flTotalPrice + Items.Number*Items.Price
			AddItem = 0
		Else
			AddItem = 3
			Exit Function
		End If

	End Function

	'==============================================
	'定义公共方法 [int] DelItem(ItemID)		删除物品
	'--------------------------------------
	'参数列表:
	'ItemID			物品ID
	'--------------------------------------
	'返回值:
	'0					添加成功
	'1					物品不存在
	'--------------------------------------
	'==============================================
	Public Function DelItem(ItemID)
		j=Exsit(ItemID)
		If j=-1 then 
			DelItem=1
			Exit function
		End If

		flTotalPrice=flTotalPrice - arrItems(j).Price*arrItems(j).Number
			
		For i=j To intItemCount-2
			Set arrItems(i) = arrItems(i+1)
		Next

		arrItems(intItemCount)=Null

		intItemCount=intItemCount-1
		DelItem=0

	End Function

	'==============================================
	'定义公共方法 [int] UpdateItem(ItemID,Number)		更新物品数据
	'--------------------------------------
	'参数列表:
	'ItemID			物品ID
	'Number		物品数量
	'--------------------------------------
	'返回值
	'0		更新成功
	'1		物品不存在
	'2		数据错误
	'==============================================
	Public Function UpdateItem(ItemID,Number)
		If Number < 0 Then						'如果数量小于0,返回错误信息
			UpdateItem = 2
			Exit Function
		ElseIf Number = 0 Then					'如果数量等于0,删除项目
			UpdateItem = DelItem(ItemID)
			Exit Function
		End if

		
		i = Exsit(ItemID)
		If i = -1 then									'检测物品是否存在
			UpdateItem=1
			Exit function
		End If

		flTotalPrice=flTotalPrice - arrItems(i).Price*arrItems(i).Number

		arrItems(i).Number=Number					'更新数据

		flTotalPrice=flTotalPrice + arrItems(i).Price*arrItems(i).Number

		UpdateItem = 0
	End Function


	'==============================================
	'定义公共方法 Clear()		清空购物车
	'--------------------------------------
	'参数列表 (无)
	'--------------------------------------
	'返回值 (无)
	'==============================================
	Public Sub Clear()
		For i=j To intItemCount-1 
			arrItems(i)=Null
		Next

		intItemCount=0
	End Sub

	

	'==============================================
	'定义私有方法 Exsit(ItemID)		检测物品是否存在
	'--------------------------------------
	'参数列表:
	'ItemID					物品ID
	'--------------------------------------
	'返回值
	'-1							物品不存在
	'其他						物品所在索引
	'==============================================
	Private Function Exsit(ItemID)
		For i = 0 To intItemCount-1
			If ItemID = arrItems(i).ID Then
				Exsit = i
				Exit Function
			End If
		Next
		Exsit = -1
	End Function



	'==============================================
	'定义公共方法 Display()		显示
	'--------------------------------------
	'参数列表 (无)
	'--------------------------------------
	'返回值 (无)
	'==============================================
	Public Sub Display()
		Dim disStr
		disStr = "<Table BgColor=""#F5F5F5""  border=""1"" cellspacing=""1"" cellpadding=""3"" Width=""400"">" & vbCrlf
		disStr=disStr & "<Tr>" & vbCrlf
		disStr=disStr & "<td>ID</TD><td>Name</TD><td>Price</TD><td>Number</TD><td>Total Price</TD>" & vbCrlf
		disStr=disStr & "</Tr>" & vbCrlf
		For i = 0 To intItemCount-1
			disStr=disStr & "<Tr>" & vbCrlf
			disStr=disStr & "<td BgColor=""#FFFFFF"">" & arrItems(i).ID &"</TD><td BgColor=""#FFFFFF"">" & arrItems(i).Name &"</TD><td BgColor=""#FFFFFF"">" & arrItems(i).Price &"</TD><td BgColor=""#FFFFFF"">" & arrItems(i).Number &"</TD><td BgColor=""#FFFFFF"">" & arrItems(i).Price*arrItems(i).Number &"</TD>" & vbCrlf
			disStr=disStr & "</Tr>" & vbCrlf
		Next
		disStr=disStr & "<Tr>" & vbCrlf
		disStr=disStr & "<td colspan=5 BgColor=""#FFFFFF"">共有物品:"& intItemCount &",总价值"& flTotalPrice &"</TD>" & vbCrlf
		disStr=disStr & "</Tr>" & vbCrlf
		disStr = disStr & "</Table>" & vbCrlf

		Response.write disStr 
	End Sub


End Class

'/==============\
'			商品类
'\==============/

Class ShopItem
	Private strName
	Private intID
	Private flPrice
	Private flMarkeyPrice
	Private intNumber
	Private boolExsit

	Private Sub Class_Initialize()
			boolExsit = false
	End Sub


	'==============================================
	'定义公共属性 [string] Name
	'方法 Get Let
	'==============================================
	Public Property Get Name
		Name = strName
	End Property


	'==============================================
	'定义公共属性 [int] ID
	'方法 Get Let
	'==============================================
	Public Property Get ID
		ID = intID
	End Property

	Public Property Let ID(ByVal intVar)
		intID = intVar
	End Property

	'==============================================
	'定义公共属性 [float] Price
	'方法 Get
	'==============================================
	Public Property Get Price
		Price = flPrice
	End Property

	'==============================================
	'定义公共属性 [bool] Exsit
	'方法 Get
	'==============================================
	Public Property Get Exsit
		Exsit = boolExsit
	End Property


	'==============================================
	'定义公共属性 [float] MarkeyPrice
	'方法 Get
	'==============================================
	Public Property Get MarkeyPrice
		MarkeyPrice = flMarkeyPrice
	End Property

	'==============================================
	'定义公共属性 [int] Number
	'方法 Get Let
	'==============================================
	Public Property Get Number
		Number = intNumber
	End Property

	Public Property Let Number(ByVal intVar)
		intNumber = intVar
	End Property


	Public Sub GetInfo()
		SQL = "SELECT * FROM StoreItems WHERE (StoreItems_ID = " & intID &") AND (StoreItems_State = 0 OR StoreItems_State = 1)"
		'Response.write sql
		'OpenConn()
		Set RsItemInfo=Server.CreateObject("Adodb.Recordset")
		RsItemInfo.Open SQL,conn,1,1

		If RsItemInfo.Eof Then
			boolExsit = False	
		Else
			boolExsit = True
			strName = RsItemInfo("StoreItems_Name")
			flPrice = RsItemInfo("StoreItems_Price")
			flMarkeyPrice = RsItemInfo("StoreItems_VIPPrice")
		End If
		RsItemInfo.Close()
		Set RsItemInfo = Nothing
	End Sub


End Class



Set MyCart = new Cart
Response.write("<hr size=1 color=red>增加物品1,数量2<br>")
State = MyCart.AddItem(1,2)
	'0					添加成功
	'1					购物车已满
	'2					物品已经存在
	'3					物品在数据库中不存在,或者不可用
if State = 0 Then
	Response.write("添加成功<br>")
ElseIf State = 1 Then
	Response.write("购物车已满<br>")
ElseIf State = 2 Then
	Response.write("物品已经存在<br>")
ElseIf State = 3 then
	Response.write("物品在数据库中不存在<br>")
End if
MyCart.Display()


Response.write("<hr size=1 color=red>增加物品2,数量6<br>")
State = MyCart.AddItem(2,6)
if State = 0 Then
	Response.write("添加成功<br>")
ElseIf State = 1 Then
	Response.write("购物车已满<br>")
ElseIf State = 2 Then
	Response.write("物品已经存在<br>")
ElseIf State = 3 then
	Response.write("物品在数据库中不存在<br>")
End if
MyCart.Display()


Response.write("<hr size=1 color=red>更新物品2,数量16<br>")
State = MyCart.UpdateItem(2,16)
if State = 0 Then
	Response.write("添加成功<br>")
ElseIf State = 1 Then
	Response.write("物品不存在<br>")
ElseIf State = 2 Then
	Response.write("数据错误<br>")
End if
MyCart.Display()


Response.write("<hr size=1 color=red>更新物品2,数量-1<br>")
State = MyCart.UpdateItem(2,-1)
if State = 0 Then
	Response.write("添加成功<br>")
ElseIf State = 1 Then
	Response.write("物品不存在<br>")
ElseIf State = 2 Then
	Response.write("数据错误<br>")
End if
MyCart.Display()


Response.write("<hr size=1 color=red>删除物品1<br>")
State = MyCart.DelItem(1)
if State = 0 Then
	Response.write("删除成功<br>")
ElseIf State = 1 Then
	Response.write("物品不存在<br>")
End if
MyCart.Display()

%>



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#22005/4/29 0:17:21
asp程序也写得很专业啊,学习。


非常大鱼

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#32005/5/26 16:15:01
在写完这个类后发现,如果将类实例保存在Session,刚开始是没有问题的,但是一旦页面回发后,类的方法和属性都无法再使用.那么这个购物车的类就失去了意义.查了一下网上的资料,说ASP的类功能比较弱

解决方法:用VB重新写这个类,然后编译成DLL.VB的代码和上面的差不多,也不贴了.使用方法:

if isEmpty(Session("MyCart")) Then
	Set Session("MyCart") = Server.CreateObject("Tpp8.Cart")
	Session("MyCart").LoadFromCookie
end if


我增加了一个LoadFromCookie和SaveToCookie两个方法,用来保存购物车串行化后的内容,以供用户下次登陆或者连接超时后重新载入商品.

编辑历史:[此帖最近一次被 allinhands 编辑过(编辑时间:2005-05-26 16:22:12)]