一个购物车的简单实现(多层开发)

 代码如下......

     CCookieShoppingCart.cs  //用 cookie
using  System;
using  System.Web;
using  System.Collections;

namespace  ShoppingCartGeneric
{
    
public class CCookieShoppingCart:IShoppingCart
    
{

        
public int Add(string cartid, IShoppingCartItem item)
        
{
            HttpCookie c
=null;
            
if(HttpContext.Current.Request.Cookies["shoppingcart"]==null)
                c
=new HttpCookie("shoppingcart");
            
else
                c
=HttpContext.Current.Request.Cookies["shoppingcart"];
            
string itemdetails;
            itemdetails
=item.ProductID + "|" + item.ProductName + "|" + item.UnitPrice;
            c.Values[item.ProductID.ToString()]
=itemdetails;
            HttpContext.Current.Response.Cookies.Add(c);
            
return 1;
        }


        
public int Remove(string cartid, IShoppingCartItem item)
        
{
            HttpCookie c
=HttpContext.Current.Request.Cookies["shoppingcart"];
            c.Values.Remove(item.ProductID.ToString());
            HttpContext.Current.Response.Cookies.Add(c);
            
return 1;
        }


        
public ArrayList GetItems(string cartid)
        
{
            HttpCookie c
=HttpContext.Current.Request.Cookies["shoppingcart"];
            ArrayList items
=new ArrayList();

            
for(int i=0;i<c.Values.Count;i++)
            
{
                
string[] vals=c.Values[i].Split('|');
                CShoppingCartItem item
=new CShoppingCartItem();
                item.ProductID
=int.Parse(vals[0]);
                item.ProductName
=vals[1];
                item.UnitPrice
=decimal.Parse(vals[2]);
                item.Quantity
=1;

                items.Add(item);
            }

            
return items;
        }


    }

}


CDatabaseShoppingCart.cs  //用数据库

using  System;
using  System.Data;
using  System.Data.SqlClient;
using  System.Collections;

namespace  ShoppingCartGeneric
{
    
public class CDatabaseShoppingCart:IShoppingCart
    
{
        
private static string connstr=@"data source=./vsdotnet;initial catalog=northwind;user id=sa";

        
public int Add(string cartid, IShoppingCartItem item)
        
{
            SqlConnection cnn
=new SqlConnection(connstr);
            SqlCommand cmd
=new SqlCommand();
            cmd.Connection
=cnn;
            cmd.CommandText
="insert into ShoppingCart_Products(cartid,productid,productname,unitprice,quantity) values(@cartid,@prodid,@prodname,@unitprice,@qty)";

            SqlParameter p1
=new SqlParameter("@cartid",cartid);
            SqlParameter p2
=new SqlParameter("@prodid",item.ProductID);
            SqlParameter p3
=new SqlParameter("@prodname",item.ProductName);
            SqlParameter p4
=new SqlParameter("@unitprice",item.UnitPrice);
            SqlParameter p5
=new SqlParameter("@qty",item.Quantity);

            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            cmd.Parameters.Add(p3);
            cmd.Parameters.Add(p4);
            cmd.Parameters.Add(p5);

            cnn.Open();
            cmd.ExecuteNonQuery();
            cnn.Close();

            
return 0;
        }


        
public void UpdateQuantity(string cartid,int productid,int newqty)
        
{
            SqlConnection cnn
=new SqlConnection(connstr);
            SqlCommand cmd
=new SqlCommand();
            cmd.Connection
=cnn;
            cmd.CommandText
="update ShoppingCart_Products set quantity=@qty where cartid=@cartid and productid=@prodid";

            SqlParameter p1
=new SqlParameter("@qty",newqty);
            SqlParameter p2
=new SqlParameter("@cartid",cartid);
            SqlParameter p3
=new SqlParameter("@prodid",productid);

            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            cmd.Parameters.Add(p3);

            cnn.Open();
            cmd.ExecuteNonQuery();
            cnn.Close();

        }


        
public int Remove(string cartid, IShoppingCartItem item)
        
{
            SqlConnection cnn
=new SqlConnection(connstr);
            SqlCommand cmd
=new SqlCommand();
            cmd.Connection
=cnn;
            cmd.CommandText
="delete from ShoppingCart_Products where cartid=@cartid and productid=@prodid";

            SqlParameter p1
=new SqlParameter("@cartid",cartid);
            SqlParameter p2
=new SqlParameter("@prodid",item.ProductID);

            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);

            cnn.Open();

            cmd.ExecuteNonQuery();

            cnn.Close();
            
return 0;
        }


        
public System.Collections.ArrayList GetItems(string cartid)
        
{
            SqlDataAdapter da
=new SqlDataAdapter("select * from ShoppingCart_Products where cartid='" + cartid + "'",connstr);
            DataSet ds
=new DataSet();
            da.Fill(ds,
"shoppingcart");    
            
            ArrayList arr
=new ArrayList();
            
foreach(DataRow row in ds.Tables[0].Rows)
            
{
                CShoppingCartItem item
=new CShoppingCartItem();
                item.ProductID
=(int)row["productid"];
                item.ProductName
=(String)row["productname"];
                item.Quantity
=(int)row["quantity"];
                item.UnitPrice
=(Decimal)row["unitproce"];
                arr.Add(item);
            }

            
return arr;
        }


    }

}


   CSessionShoppingCart.cs //用 session
using  System;
using  System.Collections;
using  System.Web;

namespace  ShoppingCartGeneric
{
    
/// <summary>
    
/// Summary description for CSessionShoppingCart.
    
/// </summary>

    public class CSessionShoppingCart:IShoppingCart
    
{

        
public int Add(string cartid, IShoppingCartItem item)
        
{
            ArrayList arr;
            
if(HttpContext.Current.Session["mycart"]!=null)
            
{
                arr
=(ArrayList)HttpContext.Current.Session["mycart"];
            }

            
else
            
{
                arr
=new ArrayList();
                HttpContext.Current.Session[
"mycart"]=arr;
            }

            arr.Add(item);
            
return 0;
        }


        
public int Remove(string cartid, IShoppingCartItem item)
        
{
            ArrayList items
=(ArrayList)HttpContext.Current.Session["mycart"];
            
for(int i=0;i<items.Count;i++)
            
{
                
if(((IShoppingCartItem)items[i]).ProductID==item.ProductID)
                
{
                    items.RemoveAt(i);
                    
break;
                }

            }

            
return 0;
        }


        
public System.Collections.ArrayList GetItems(string cartid)
        
{
            
return (ArrayList)HttpContext.Current.Session["mycart"];
        }

    }

}


CShoppingCart.cs  //基类

using  System;

namespace  ShoppingCartGeneric
{
    
public enum CShoppingCartType
    
{
        Cookie,Session,Database
    }


    
public class CShoppingCart:IShoppingCart
    
{
        
private IShoppingCart cart=null;

        
public CShoppingCart(CShoppingCartType type)
        
{
            
switch(type)
            
{
                
case CShoppingCartType.Cookie:
                    cart
=new CCookieShoppingCart();
                    
break;
                
case CShoppingCartType.Session:
                    cart
=new CSessionShoppingCart();
                    
break;
                
case CShoppingCartType.Database:
                    cart
=new CDatabaseShoppingCart();
                    
break;
            }

        }


        
public int Add(string cartid, IShoppingCartItem item)
        
{
            
return cart.Add(cartid,item);
        }


        
public int Remove(string cartid, IShoppingCartItem item)
        
{
            
return cart.Remove(cartid,item);
        }


        
public System.Collections.ArrayList GetItems(string cartid)
        
{
            
return cart.GetItems(cartid);
        }


    }

}



   IShoppingCart.cs   接口
using  System;

namespace  ShoppingCartGeneric
{
    
public class CShoppingCartItem:IShoppingCartItem
    
{
        
private int intProductID;
        
private string strProductName;
        
private decimal decUnitPrice;
        
private int intQuantity;

        
public int ProductID
        
{
            
get
            
{
                
return intProductID;
            }

            
set
            
{
                intProductID
=value;
            }

        }


        
public string ProductName
        
{
            
get
            
{
                
return strProductName;
            }

            
set
            
{
                strProductName
=value;
            }

        }


        
public decimal UnitPrice
        
{
            
get
            
{
                
return decUnitPrice;
            }

            
set
            
{
                decUnitPrice
=value;
            }

        }


        
public int Quantity
        
{
            
get
            
{
                
return intQuantity;
            }

            
set
            
{
                intQuantity
=value;
            }

        }


    }

}


productcatalog.aspx.cs  //调用页 用户选择


cart.Add(Session.SessionID,item);

//这个 Session.SessionID 不知道作者为什么加这个,,在客个基类中都没有调用...
你把它改成其它的.也一样正常执行.......
可能是多用户时用 session 类时,用它作用户判断确定唯一性,可是我查过资料,每个 session 生成时都有一个唯一的  sessionid 啊......清楚的朋友谈谈......


using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;
using  System.Data.SqlClient;
using  System.Security.Principal;

namespace  ShoppingCartGeneric
{
    
public class WebForm1 : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Button Button1;
        
protected System.Web.UI.WebControls.DataGrid DataGrid1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
if(!Page.IsPostBack)
            
{
                BindGrid();
            }

        }



        
private void BindGrid()
        
{
            SqlDataAdapter da
=new SqlDataAdapter("select * from products",@"data source=./vsdotnet;initial catalog=northwind;user id=sa");
            DataSet ds
=new DataSet();
            da.Fill(ds,
"products");

            DataGrid1.DataSource
=ds;
            DataGrid1.DataBind();
        }


        
#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// Required method for Designer support - do not modify
        
/// the contents of this method with the code editor.
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
            
this.Button1.Click += new System.EventHandler(this.Button1_Click);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
        
{
            CShoppingCart cart
=new CShoppingCart(CShoppingCartType.Cookie);
            CShoppingCartItem item
=new CShoppingCartItem();
            item.ProductID
=int.Parse(DataGrid1.SelectedItem.Cells[1].Text);
            item.ProductName
=DataGrid1.SelectedItem.Cells[2].Text;
            item.UnitPrice
=decimal.Parse(DataGrid1.SelectedItem.Cells[3].Text);
            item.Quantity
=1;
            
            cart.Add(Session.SessionID,item);
        }


        
private void Button1_Click(object sender, System.EventArgs e)
        
{
            Response.Redirect(
"cart.aspx");
        }

    }

}


<% @ Page language="c#" Codebehind="productcatalog.aspx.cs" AutoEventWireup="false" Inherits="ShoppingCartGeneric.WebForm1"  %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"  >
< HTML >
    
< HEAD >
        
< title > WebForm1 </ title >
        
< meta  name ="GENERATOR"  Content ="Microsoft Visual Studio .NET 7.1" >
        
< meta  name ="CODE_LANGUAGE"  Content ="C#" >
        
< meta  name ="vs_defaultClientScript"  content ="JavaScript" >
        
< meta  name ="vs_targetSchema"  content ="http://schemas.microsoft.com/intellisense/ie5" >
    
</ HEAD >
    
< body  MS_POSITIONING ="GridLayout" >
        
< form  id ="Form1"  method ="post"  runat ="server" >
            
< asp:DataGrid  id ="DataGrid1"  style ="Z-INDEX: 101; LEFT: 24px; POSITION: absolute; TOP: 72px"  runat ="server"
                BorderColor
="#CC9966"  BorderStyle ="None"  BorderWidth ="1px"  BackColor ="White"  CellPadding ="4"
                AutoGenerateColumns
="False"  Width ="448px" >
                
< SelectedItemStyle  Font-Bold ="True"  ForeColor ="#663399"  BackColor ="#FFCC66" ></ SelectedItemStyle >
                
< ItemStyle  ForeColor ="#330099"  BackColor ="White" ></ ItemStyle >
                
< HeaderStyle  Font-Bold ="True"  ForeColor ="#FFFFCC"  BackColor ="#990000" ></ HeaderStyle >
                
< FooterStyle  ForeColor ="#330099"  BackColor ="#FFFFCC" ></ FooterStyle >
                
< Columns >
                    
< asp:ButtonColumn  Text ="Select"  CommandName ="Select" ></ asp:ButtonColumn >
                    
< asp:BoundColumn  DataField ="productid"  HeaderText ="Product ID" ></ asp:BoundColumn >
                    
< asp:BoundColumn  DataField ="productname"  HeaderText ="Product Name" ></ asp:BoundColumn >
                    
< asp:BoundColumn  DataField ="unitprice"  HeaderText ="Unit Price" ></ asp:BoundColumn >
                    
< asp:ButtonColumn  Text ="Select"  CommandName ="Select" ></ asp:ButtonColumn >
                
</ Columns >
                
< PagerStyle  HorizontalAlign ="Center"  ForeColor ="#330099"  BackColor ="#FFFFCC" ></ PagerStyle >
            
</ asp:DataGrid >< asp:Button  id ="Button1"  style ="Z-INDEX: 102; LEFT: 200px; POSITION: absolute; TOP: 32px"  runat ="server"
                Text
="Show Cart" ></ asp:Button >
        
</ form >
    
</ body >
</ HTML >

//购物车

using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;

namespace  ShoppingCartGeneric
{
    
/// <summary>
    
/// Summary description for cart.
    
/// </summary>

    public class cart : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Button Button1;
        
protected System.Web.UI.WebControls.Button Button2;
        
protected System.Web.UI.WebControls.Label Label3;
        
protected System.Web.UI.WebControls.Label lblAmt;
        
protected System.Web.UI.WebControls.DataGrid DataGrid1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
if(!Page.IsPostBack)
            
{
                FillCartFromSession();
            }

        }


        
private void FillCartFromSession()
        
{
            CShoppingCart cart
=new CShoppingCart(CShoppingCartType.Cookie);
            ArrayList items
=(ArrayList)cart.GetItems(Session.SessionID);
            DataGrid1.DataSource
=items;
            DataGrid1.DataBind();
            Button1_Click(
null,null);
        }


        
#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// Required method for Designer support - do not modify
        
/// the contents of this method with the code editor.
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
            
this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
            
this.Button1.Click += new System.EventHandler(this.Button1_Click);
            
this.Button2.Click += new System.EventHandler(this.Button2_Click);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
private void Button1_Click(object sender, System.EventArgs e)
        
{
            
decimal total=0;

            
try
            
{
                
foreach(DataGridItem dgi in DataGrid1.Items)
                
{
                    
if(dgi.ItemType==ListItemType.Item || dgi.ItemType==ListItemType.AlternatingItem)
                    
{
                        TextBox t
=(TextBox)dgi.Cells[3].Controls[1];
                        
int quantity=int.Parse(t.Text);
                        
decimal unitprice=Decimal.Parse(dgi.Cells[2].Text);
                        total
=total + (unitprice * quantity);

                        
//************************
                        
//Only for database shopping cart
                        
//IShoppingCart cart=new CShoppingCart(CShoppingCartType.Database);
                        
//((CDatabaseShoppingCart)cart).UpdateQuantity(Session.SessionID,int.Parse(dgi.Cells[0].Text),quantity);
                        
//************************
                    }

                }

            }

            
catch
            
{
            }


            lblAmt.Text
=total.ToString();
        }


        
private void Button2_Click(object sender, System.EventArgs e)
        
{
            
//now you can iterate through cookies collection
            
//and DataGrid and get details of all items
            
//then add your code here to insert into database
        }


        
private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        
{
            CShoppingCart cart
=new CShoppingCart(CShoppingCartType.Cookie);
            CShoppingCartItem item
=new CShoppingCartItem();
            item.ProductID
=int.Parse(e.Item.Cells[0].Text);
            cart.Remove(Session.SessionID,item);
            FillCartFromSession();
        }


        
private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
        
{
        
        }

    }

}



<% @ Page language="c#" Codebehind="cart.aspx.cs" AutoEventWireup="false" Inherits="ShoppingCartGeneric.cart"  %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"  >
< HTML >
    
< HEAD >
        
< title > cart </ title >
        
< meta  name ="GENERATOR"  Content ="Microsoft Visual Studio .NET 7.1" >
        
< meta  name ="CODE_LANGUAGE"  Content ="C#" >
        
< meta  name ="vs_defaultClientScript"  content ="JavaScript" >
        
< meta  name ="vs_targetSchema"  content ="http://schemas.microsoft.com/intellisense/ie5" >
    
</ HEAD >
    
< body >
        
< form  id ="Form1"  method ="post"  runat ="server" >
            
< TABLE  id ="Table1"  cellSpacing ="1"  cellPadding ="1"  width ="100%"  border ="0" >
                
< TR >
                    
< TD >< asp:DataGrid  id ="DataGrid1"  runat ="server"  BorderColor ="#CC9966"  BorderStyle ="None"  BorderWidth ="1px"
                            BackColor
="White"  CellPadding ="4"  AutoGenerateColumns ="False"  Width ="100%" >
                            
< SelectedItemStyle  Font-Bold ="True"  ForeColor ="#663399"  BackColor ="#FFCC66" ></ SelectedItemStyle >
                            
< ItemStyle  ForeColor ="#330099"  BackColor ="White" ></ ItemStyle >
                            
< HeaderStyle  Font-Bold ="True"  ForeColor ="#FFFFCC"  BackColor ="#990000" ></ HeaderStyle >
                            
< FooterStyle  ForeColor ="#330099"  BackColor ="#FFFFCC" ></ FooterStyle >
                            
< Columns >
                                
< asp:BoundColumn  DataField ="productid"  HeaderText ="Product ID" ></ asp:BoundColumn >
                                
< asp:BoundColumn  DataField ="productname"  HeaderText ="Product Name" ></ asp:BoundColumn >
                                
< asp:BoundColumn  DataField ="unitprice"  HeaderText ="Unit Price" ></ asp:BoundColumn >
                                
< asp:TemplateColumn  HeaderText ="Quantity" >
                                    
< ItemTemplate >
                                        
< asp:TextBox  id =TextBox2  runat ="server"  Text ='<%#  DataBinder.Eval(Container, "DataItem.quantity") % > ' Columns="3">
                                        
</ asp:TextBox >
                                    
</ ItemTemplate >
                                    
< EditItemTemplate >
                                        
< asp:TextBox  id =TextBox1  runat ="server"  Text ='<%#  DataBinder.Eval(Container, "DataItem.quantity") % > '>
                                        
</ asp:TextBox >
                                    
</ EditItemTemplate >
                                
</ asp:TemplateColumn >
                                
< asp:ButtonColumn  Text ="Delete"  CommandName ="Delete" ></ asp:ButtonColumn >
                            
</ Columns >
                            
< PagerStyle  HorizontalAlign ="Center"  ForeColor ="#330099"  BackColor ="#FFFFCC" ></ PagerStyle >
                        
</ asp:DataGrid ></ TD >
                
</ TR >
                
< TR >
                    
< TD  align ="center" >< asp:Label  id ="Label3"  runat ="server"  Font-Bold ="True" > Total Amount : </ asp:Label >< asp:Label  id ="lblAmt"  runat ="server"  Font-Bold ="True" ></ asp:Label ></ TD >
                
</ TR >
                
< TR >
                    
< TD  align ="center" >< asp:Button  id ="Button1"  runat ="server"  Text ="Recalculate" ></ asp:Button ></ TD >
                
</ TR >
                
< TR >
                    
< TD  align ="center" >< asp:Button  id ="Button2"  runat ="server"  Text ="Place Order" ></ asp:Button ></ TD >
                
</ TR >
            
</ TABLE >
        
</ form >
    
</ body >
</ HTML >
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值