购物车类:ShopCart.cs(说明:主要利用hashtable保存商品对象)

using System;
using System.Collections;

/// <summary>
/// 购物车类
/// </summary>
[Serializable]
public class ShopCart
{
    
public Hashtable _CartItems = new Hashtable();

    
/// <summary>
    
/// 构造函数
    
/// </summary>
    public ShopCart()
    {
        
///to do something
    }


    
/// <summary>
    
/// 返回购物车中的所有商品(接口类型)
    
/// </summary>
    public ICollection CartItems
    {
        
get { return _CartItems.Values; }
    }

    
/// <summary>
    
/// 购物中所有商品的价格合计
    
/// </summary>
    public double Total
    {
        
get
        {
            
double sum = 0;
            
foreach (ShopCartItem item in _CartItems.Values)
            {
                sum 
+= ((item.Price * item.Quantity) + item.SendPrice);
            }
            
return sum;
        }
    }

    
/// <summary>
    
/// 返回购物车里所有商品的数量
    
/// </summary>
    public double TotalNum
    {
        
get
        {
            
double sum = 0;
            
foreach (ShopCartItem item in _CartItems.Values)
            {
                sum 
+= item.Quantity;
            }
            
return sum;
        }
    }

    
/// <summary>
    
/// 向购物车里添加某商品
    
/// </summary>
    
/// <param name="ID">商品ID</param>
    
/// <param name="Name">商品名称</param>
    
/// <param name="Price">商品单价</param>
    
/// <param name="AutoAddQuantity">如果购物车中已经存在该商品,该商品的数量是否加一,True数量加1,False数量不变</param>
    public void AddItem(string ID, string Name, string DeliveryName, double Price, int Score, string ProductId, string PicUrl, double MarketPrice, double UserPrice, double VipPrice, double SendPrice,string ShopID, string UrlFrom, bool AutoAddQuantity)
    {
        ShopCartItem item 
= (ShopCartItem)_CartItems[ID];
        
if(item == null)
            _CartItems.Add(ID, 
new ShopCartItem(ID, Name, DeliveryName, Price, Score, ProductId, PicUrl, MarketPrice, UserPrice, VipPrice, SendPrice,ShopID, UrlFrom));
        
else
        {
            
if(AutoAddQuantity)
            {
                item.Quantity
++;
            }
            _CartItems[ID] 
= item;
        }
    }

    
/// <summary>
    
/// 从购物车里移除某商品
    
/// </summary>
    
/// <param name="ID">商品ID</param>
    
/// <param name="FullDelete">如果商品数量大于1,是否彻底从购物车中删除该种商品,true彻底从购物车中删除该种商品,false则仅将该种商品数量减一</param>
    public void RemoveItem(string ID, bool FullDelete)
    {
        ShopCartItem item 
= (ShopCartItem)_CartItems[ID];
        
if(item == null)
        {
            
return;
        }
        
else
        {
            
if(FullDelete)
            {
                _CartItems.Remove(ID);
            }
            
else
            {
                item.Quantity
--;
                
if(item.Quantity == 0)
                {
                    _CartItems.Remove(ID);
                }
                
else
                {
                    _CartItems[ID] 
= item;
                }
            }
        }
    }

    
/// <summary>
    
/// 修改购物车里某商品的数量
    
/// </summary>
    
/// <param name="ID">商品ID</param>
    
/// <param name="Quantity">商品数量</param>
    public void UpdateItem(string ID, int Quantity)
    {
        ShopCartItem item 
= (ShopCartItem)_CartItems[ID];
        
if(item == null)
        {
            
return;
        }
        
else
        {
            
if(Quantity > 0//商品数量必须大于0
            {
                item.Quantity 
= Quantity;
            }
            _CartItems[ID] 
= item;
        }
    }


    
/// <summary>
    
/// 清空购物车
    
/// </summary>
    public void ClearCart()
    {
        _CartItems.Clear();
    }

}

/// <summary>
/// [购物车具体]商品类
/// </summary>
[Serializable]
public class ShopCartItem
{
    
private string _ID;//产品GUID
    private string _Name;//产品名称
    private string _DeliveryName;//物流产品名
    private double _Price=0;//产品单价(结算价格)
    private int _Score = 0;//产品单个积分
    private int _Quantity = 1;//产品数量
    private string _ProductId;//产品自定义编号
    private string _PicUrl;//图片地址
    private double _MarketPrice=0;//市场价格
    private double _VipPrice=0;//VIp价格
    private double _UserPrice=0;//会员价格
    private double _SendPrice=0;//运输费用
    private string _ShopID;//商家ID
    private string _UrlFrom; //页面来源


    
/// <summary>
    
/// 属性:商品ID
    
/// </summary>
    public string ID
    {
        
get { return _ID; }
    }

    
/// <summary>
    
/// 属性:商品名称Name
    
/// </summary>
    public string Name
    {
        
get { return _Name; }
    }

    
/// <summary>
    
/// 属性:商品单价Price
    
/// </summary>
    public double Price
    {
        
get { return _Price; }
    }

    
/// <summary>
    
/// 单件产品所获积分
    
/// </summary>
    public int Score
    {
        
get
        {
            
return _Score;
        }
        
set
        {
            _Score 
= value;
        }
    }

    
/// <summary>
    
/// 产品编号
    
/// </summary>
    public string ProductId
    {
        
get
        {
            
return _ProductId;
        }
        
set
        {
            _ProductId 
= value;
        }
    }

    
/// <summary>
    
/// 产品图片地址
    
/// </summary>
    public string PicUrl
    {
        
get
        {
            
return _PicUrl;
        }
        
set
        {
            _PicUrl 
= value;
        }
    }

    
/// <summary>
    
/// 市场价格
    
/// </summary>
    public double MarketPrice
    {
        
get
        {
            
return _MarketPrice;
        }

        
set
        {
            _MarketPrice 
= value;
        }
    }

    
/// <summary>
    
/// VIP价格
    
/// </summary>
    public double VipPrice
    {
        
get
        {
            
return _VipPrice;
        }

        
set
        {
            _VipPrice 
= value;
        }
    }

    
/// <summary>
    
/// 会员价格
    
/// </summary>
    public double UserPrice
    {
        
get
        {
            
return _UserPrice;
        }

        
set
        {
            _UserPrice 
= value;
        }
    }

    
/// <summary>
    
/// 运输费用
    
/// </summary>
    public double SendPrice
    {
        
get
        {
            
return _SendPrice;
        }
        
set
        {
            _SendPrice 
= value;
        }
    }

 

    
/// <summary>
    
/// 属性:商品数量Quantity
    
/// </summary>
    public int Quantity
    {
        
get { return _Quantity; }
        
set { _Quantity = value; }
    }

    
/// <summary>
    
/// 商家ID
    
/// </summary>
    public string ShopID {
        
get { return _ShopID; }
        
set { _ShopID = value; }
    }

    
/// <summary>
    
/// 页面来源
    
/// </summary>
    public string UrlFrom
    {
        
get { return _UrlFrom; }
        
set { _UrlFrom = value; }
    }

    
/// <summary>
    
/// 购物车商品项完整构架函数
    
/// </summary>
    
/// <param name="ID">产品ID</param>
    
/// <param name="Name">产品名称</param>
    
/// <param name="DeliveryName">产品物流名称</param>
    
/// <param name="Price">产品单价(计算价)</param>
    
/// <param name="Score">产品积分</param>
    
/// <param name="ProductId">产品编号</param>
    
/// <param name="PicUrl">产品图片</param>
    
/// <param name="MarketPrice">会员价格</param>
    
/// <param name="UserPrice">市场价格</param>
    
/// <param name="VipPrice">VIp价格</param>
    
/// <param name="SendPrice">运输费用</param>
    
/// <param name="ShopID">商家ID</param>
    
/// <param name="UrlFrom">页面来源</param>
    public ShopCartItem(string ID, string Name, string DeliveryName, double Price, int Score, string ProductId, string PicUrl, double MarketPrice, double UserPrice, double VipPrice, double SendPrice, string ShopID, string UrlFrom)
    {
        _ID 
= ID;
        _Name 
= Name;
        _DeliveryName 
= DeliveryName;
        _Quantity 
= 1;
        _Price 
= Price;
        _Score 
= Score;
        _ProductId 
= ProductId;
        _PicUrl 
= PicUrl;
        _MarketPrice 
= MarketPrice;
        _UserPrice 
= UserPrice;
        _VipPrice 
= VipPrice;
        _SendPrice 
= SendPrice;
        _ShopID 
= ShopID;
        _UrlFrom 
= UrlFrom;
    }


    
/// <summary>
    
/// 购物车商品项简单构架函数
    
/// </summary>
    
/// <param name="ID">产品ID</param>
    
/// <param name="Name">产品名称</param>   
    
/// <param name="Price">产品单价(计算价)</param>
    public ShopCartItem(string ID, string Name, double Price)
    {
        _ID 
= ID;
        _Name 
= Name;
        _DeliveryName 
= "";
        _Quantity 
= 1;
        _Price 
= Price;
        _Score 
= 0;
        _ProductId 
= "";
        _PicUrl 
= "";
        _MarketPrice 
= 0;
        _UserPrice 
= 0;
        _VipPrice 
= 0;
        _SendPrice 
= 0;
        _ShopID 
= "";
        _UrlFrom 
= "";
    }

    
/// <summary>
    
/// 购物车商品项构架函数
    
/// </summary>
    
/// <param name="ID">产品ID</param>
    
/// <param name="Name">产品名称</param>   
    
/// <param name="Price">产品单价(计算价)</param>
    
/// <param name="UrlFrom">页面来源</param>
    public ShopCartItem(string ID, string Name, double Price,string UrlFrom)
    {
        _ID 
= ID;
        _Name 
= Name;
        _DeliveryName 
= "";
        _Quantity 
= 1;
        _Price 
= Price;
        _Score 
= 0;
        _ProductId 
= "";
        _PicUrl 
= "";
        _MarketPrice 
= 0;
        _UserPrice 
= 0;
        _VipPrice 
= 0;
        _SendPrice 
= 0;
        _ShopID 
= "";
        _UrlFrom 
= UrlFrom;
    }


    
/// <summary>
    
/// 购物车商品项标准构架函数
    
/// </summary>
    
/// <param name="ID">产品ID</param>
    
/// <param name="Name">产品名称</param>   
    
/// <param name="Price">产品单价(计算价)</param>
    
/// <param name="UrlFrom">页面来源</param>
    
/// <param name="UrlFrom">页面来源</param>
    public ShopCartItem(string ID, string Name, double Price,string ShopID, string UrlFrom)
    {
        _ID 
= ID;
        _Name 
= Name;
        _DeliveryName 
= "";
        _Quantity 
= 1;
        _Price 
= Price;
        _Score 
= 0;
        _ProductId 
= "";
        _PicUrl 
= "";
        _MarketPrice 
= 0;
        _UserPrice 
= 0;
        _VipPrice 
= 0;
        _SendPrice 
= 0;
        _ShopID 
= ShopID;
        _UrlFrom 
= UrlFrom;
    }
}

 

测试页面:Demo.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Demo.aspx.cs" Inherits="Public_Test_Demo" %>

<!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 runat="server">
    
<title>无标题页</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lblResult" runat="server" Text="Label"></asp:Label><br />
        
<br />
        
<asp:Button ID="btnReadCookie" runat="server" Text="读取Cookie中的ShopCart" OnClick="btnReadCookie_Click" />&nbsp;</div>
    
</form>
</body>
</html>

后置代码Demo.aspx.cs文件:

using System;
using System.Collections;
using System.Web;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Text;
using CNTVS.TOOLS;

public partial class Public_Test_Demo : System.Web.UI.Page
{
    
string CookieName = "ShopCart";

    
protected void Page_Load(object sender, EventArgs e)
    {
        

        
if (!IsPostBack)
        {
            ShopCart SC 
= new ShopCart();
            SC.AddItem(
"1""ProductName""ProductName"00"ProductID"""0000"ShopId""TestUrl"true);
            SC.AddItem(
"2""ProductName123""ProductName123"00"ProductID123"""0000"ShopId111""TestUrl23"true);

            
//将ShopCart对象写入Cookie
            IFormatter fm = new BinaryFormatter();           
            Stream sm 
= new MemoryStream();
            fm.Serialize(sm, SC);
            sm.Seek(
0, SeekOrigin.Begin);
            StreamReader reader 
= new StreamReader(sm);
            
string strCart = reader.ReadToEnd();
            reader.Close();            
            HttpCookie hc 
= new HttpCookie(CookieName);
            hc.Value 
= Server.UrlEncode(strCart);
            hc.Expires 
= DateTime.Now.AddDays(1);
            Response.Cookies.Add(hc); 
        }       
    }


    
///// <summary>
    
///// 将ShopCart写入Cookie
    
///// </summary>
    
///// <param name="SC">ShopCart对象</param>
    
///// <param name="CookieName">CookieName,默认为ShopCart</param>
    //public static string ShopCartToCookie(ShopCart SC, string CookieName)
    
//{
    
//    if (Utils.CheckNull(CookieName)) { CookieName = "ShopCart"; }
    
//    if (Utils.CheckNull(SC))
    
//    {
    
//        Utils.WriteCookie(CookieName, "");
    
//        return "";
    
//    }
    
//    else
    
//    {
    
//        IFormatter fm = new BinaryFormatter();
    
//        Stream sm = new MemoryStream();            
    
//        fm.Serialize(sm, SC);
    
//        sm.Seek(0, SeekOrigin.Begin);
    
//        StreamReader reader = new StreamReader(sm);
    
//        string strCart = reader.ReadToEnd();
    
//        reader.Close();
    
//        Utils.WriteCookie(CookieName, strCart);
    
//        return strCart;
    
//    }
    
//}


    
///// <summary>
    
///// 将Cookie反序列化为ShopCart
    
///// </summary>
    
///// <param name="CookieName">CookieName,默认为ShopCart</param>
    //public static ShopCart CookieToShopCart(string CookieName)
    
//{
    
//    if (Utils.CheckNull(CookieName)) { CookieName = "ShopCart"; }
    
//    string StrCart = Utils.GetCookie(CookieName);
    
//    if (Utils.CheckNull(StrCart)) 
    
//    {
    
//        return null;
    
//    }

    
//    byte[] bt = System.Text.Encoding.Default.GetBytes(StrCart);
    
//    Stream sm = new MemoryStream(bt);
    
//    IFormatter fm = new BinaryFormatter();
    
//    ShopCart SC = (ShopCart)fm.Deserialize(sm);
    
//    if (Utils.CheckNull(SC))
    
//    {
    
//        return null;
    
//    }
    
//    else
    
//    {
    
//        return SC;
    
//    }
    
//}


    
protected void btnReadCookie_Click(object sender, EventArgs e)
    {        
        
string StrCartNew = Server.UrlDecode(Request.Cookies[CookieName].Value.ToString());
        
byte[] bt = System.Text.Encoding.Default.GetBytes(StrCartNew);
        Stream smNew 
= new MemoryStream(bt);
        IFormatter fmNew 
= new BinaryFormatter();
        ShopCart SCNew 
= (ShopCart)fmNew.Deserialize(smNew);
        
foreach(ShopCartItem SCI in SCNew.CartItems)
        {
            lblResult.Text 
+= "<br/>产品名称:" + SCI.Name;
        }
    }
}

posted on 2008-04-27 21:45  优雅旋律  阅读(540)  评论(1编辑  收藏  举报