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


     转自  http://www.dotnetbips.com/0D82BC51-AB67-4F5F-AB04-CD461CE5E910.aspx?articleid=280


      今天在老外的网上发现个写的不错的多层实现的构物车...

          代码如下......

         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>
  • 相关阅读:
    六十:权限提升-MY&MS&ORA等SQL数据库提权
    五十九:权限提升-Win溢出漏洞及AT&SC&PS提权
    五十八:权限提升-网站权限后台漏洞地第三方获取
    在kaili装git与git-lfs
    机器学习中的最优化算法总结
    动态规划及意义
    对于中变量与类的使用感想
    安装awvs教程参照
    kali乱码问题
    linux与Mac互相粘贴存在障碍,可以用这个命令联系起来
  • 原文地址:https://www.cnblogs.com/gwazy/p/174443.html
Copyright © 2020-2023  润新知