购物网第四阶段总结笔记1:购物车页面

购物车页面是整个购物网的核心,流程如下:

商品内容页(pro.aspx)点击立即购买===》把商品加入到购物车中===》弹出一个选择框,选择是到购物车页面还是继续购物===》若是选择进入购物车页面===》进入我的购物车页面(shopcart.aspx),点击去收银台===》修改订单页面(order_modify.aspx)===》确认订单页面(order_confirm.aspx)===》订单确认成功页面(order_ok.aspx)


【一】:建立订单表和订单明细表数据表

shop_order(订单表): 

id,createdate,orderbh(订单号),

username(用户名),recname(收货人姓名),postcode,addreass,phone,email,

sendtype(送货方式),paytype(付款方式),

fp(是否要发票:0:不要发票  1:要发票),remark(说明),sendmoney(运费),detailsmoney(订单商品金额),isdel,state



shop_orderdetails(订单明细表): id,createdate,orderid(Shop_order的外键),proid(商品id),price(商品价格),quantity(商品数量).


然后使用动软代码生成器生成代码,复制到项目中。


【二】:自己手工写购物车类:

购物车就是一个二维表,临时存储商品的简单明细:

如:

购物车:

         商品1    :   单价   数量

         商品2    :   单价   数量

         商品3    :   单价   数量


分析,可以看出,需要建立两个类:购物车类 和购物车项类

(1):在Model层建立ShopItem.cs购物车项类,添加变量,并重构,封装字段




最后的cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model
{
    /// 
    /// 购物车中的每一项
    /// 
   public class ShopItem
    {
        private int _proid;//商品ID

        public int Proid
        {
            get { return _proid; }
            set { _proid = value; }
        }
        private decimal _price;//单价

        public decimal Price
        {
            get { return _price; }
            set { _price = value; }
        }
        private int _quantity;//商品数量

        public int Quantity
        {
            get { return _quantity; }
            set { _quantity = value; }
        }
    }
}


(2)向Model中添加,购物车类ShopCart.cs:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;




namespace Model
{
    /// 
    /// 购物车类
    /// 
    public class ShopCart
    {
        private Hashtable _sc = new Hashtable();//把购物车的集合放在Hashtable中,通过键值对来存放


        /// 
        /// 想购物车中添加一种商品
        /// 
        /// 
        /// 
        public void Add(int proid, ShopItem item)
        {
            if (_sc[proid] == null)//商品id作为Hashtable的键来存储
            {
                //购物车中不存在该商品,则直接添加到购物车
                _sc.Add(proid,item);
            }
            else
            {
                //已存在该商品,先取出购物车中商品取出来,然后加1
                ShopItem si = _sc[proid] as ShopItem;//取出购物车商品
                si.Quantity += 1;//把取出的商品加1
                _sc[proid] = si;//然后再放回去
            }
        }


        /// 
        /// 删除购物车中的商品
        /// 
        /// 
        public void Del(int proid)
        {
            if (_sc[proid] != null)
            {
               
               _sc.Remove(proid);
            }
            
        }




        /// 
        /// 修改购物车商品的数量
        /// 
        /// 
        /// 
        public void Mod(int proid, int quentity)
        {
            if (_sc[proid]!=null)
            {
                if (quentity>0)//如果商品的修改目标数量大于0
                {
                     ShopItem si = _sc[proid] as ShopItem;
                si.Quantity = quentity;
                _sc[proid] = si;
                }
                else
                {
                    _sc.Remove(proid);
                }
            }
        }


        /// 
        /// 获取购物车中商品种类的数量
        /// 
        /// 
        public int GetItemCount()
        {
            return _sc.Count;//键值的数量就是商品种类的数量
        }


        /// 
        /// 获取购物车中商品的总数量
        /// 
        /// 
        public int GetItemTotalCount()
        {
            int total = 0;


            foreach (ShopItem item in _sc.Values)
            {
                total += item.Quantity;
            }
            return total;
        }


        /// 
        /// 获取购物车中商品的总价
        /// 
        /// 
        public decimal GetTotlePrice()
        {
            decimal total=0;
            foreach (ShopItem item in _sc.Values)
            {
                total += item.Price * item.Quantity;
            }
            return total;
        }


        /// 
        /// 获取购物车中项的集合,用于绑定数据控件
        /// 
        /// 
        public ICollection GetItemList()
        {
            return _sc.Values;
        }
    }
}


购物按钮的制作:在newpro.aspx页面中,点击购买,把购买的商品加入到购物车:

aspx代码:


                                         
                                         

cs代码:

        //加入购物车
        protected void Buy(object sender, EventArgs e)
        {
            /*
             * 1、必须是登陆的用户才能购买
             * 2、如果用户是VIP用户,则是以VIP价格来计算
             * 3、产品购买的默认数量是1
             */

            if (!User.Identity.IsAuthenticated)//是否是验证用户,即是否是登陆用户
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "");
                return;
            }
            string proid = (sender as LinkButton).CommandArgument;
            MyShop.Model.Product pro = new MyShop.DAL.ProductDAO().GetModel(int.Parse(proid));//取出商品
            MyShop.Model.User user = new MyShop.DAL.UserDAO().GetModel(User.Identity.Name);//取出用户名

            if (pro!=null&&user!=null)//如果商品和用户都存在
            {
                decimal price = 0;
                if (user.type=="vip")//如果用户是vip
                {
                    price = pro.vipprice;
                }
                else
                {
                    price = pro.memberprice;
                }



                if (Session["shopcart"] == null)//如果Session["shopcart"]不存在
                {
                    Session["shopcart"] = new Model.ShopCart();//新建一个Session["shopcart"]
                }
                Model.ShopCart sc = Session["shopcart"] as Model.ShopCart;//根据Session["shopcart"]取出Model
                sc.Add(int.Parse(proid), new Model.ShopItem()
                {
                    Quantity = 1,
                    Proid = int.Parse(proid),
                    Price = price
                });

                Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "");
            }      
        }

【三】:购物车页面的制作

(1):在首页头部显示购物车中已有的商品种类数量:


修改母版页

aspx代码:

  购物车 
cs代码:

         if (!IsPostBack)
            {
                if (Session["shopcart"] != null)
                {
                    Model.ShopCart sc = Session["shopcart"] as Model.ShopCart;
                    if (sc.GetItemCount()>0)
                    {
                        hlGWC.Text = "购物车["+sc.GetItemCount()+"]";
                    }
                }
            }


(2):购物车页面的制作


aspx代码:

(1):用一个隐藏域,把商品id取出来。

 <%-- 隐藏域 --%>



                
   我的购物车

商品名称
会员价
VIP价
现价
数量
总价
HyperLink <%-- 隐藏域 --%>
<%-- 隐藏域 --%>
购物车里有商品:件 总数:件 共计:元 您有预存款:元

cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web
{
    public partial class shopcart : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["shopcart"] == null)//如果Session["shopcart"]不存在
                {
                    Session["shopcart"] = new Model.ShopCart();
                }
                Model.ShopCart sc = Session["shopcart"] as Model.ShopCart;
                repShopcart.DataSource=sc.GetItemList();
                repShopcart.DataBind();

                litcount.Text = sc.GetItemCount().ToString();
                litallcount.Text = sc.GetItemTotalCount().ToString();
                litsumprice.Text = sc.GetTotlePrice().ToString("c2");
            }
        }
        //绑定数据信息
        protected void repShopcart_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Item)
            {
                string proid = (e.Item.FindControl("hfproid") as HiddenField).Value;
                MyShop.Model.Product pro = new MyShop.DAL.ProductDAO().GetModel(int.Parse(proid));
                if (pro!=null)
                {
                    HyperLink hlproname = e.Item.FindControl("hlproname") as HyperLink;
                    Literal litmemberprice = e.Item.FindControl("litmemberprice") as Literal;
                    Literal litvipprice = e.Item.FindControl("litvipprice") as Literal;
                    HiddenField hidXJ = e.Item.FindControl("hidXJ") as HiddenField;//现价
                    Literal littotal = e.Item.FindControl("littotal") as Literal;
                    TextBox txtquantity = e.Item.FindControl("txtquantity") as TextBox;

                    
                    hlproname.Text = pro.proname;
                    hlproname.NavigateUrl = "../pro.aspx?id="+pro.id;
                    hlproname.Target = "_blank";

                    litmemberprice.Text = pro.marketprice.ToString("c2");
                    litvipprice.Text = pro.vipprice.ToString("c2");


                    littotal.Text = (decimal.Parse(hidXJ.Value) * int.Parse(txtquantity.Text)).ToString("c2");

                }
            }
        }

        //删除商品
        protected void Del(object sender, EventArgs e)
        {
            string proid = (sender as LinkButton).CommandArgument;
            if (Session["shopcart"]!=null)
            {
                Model.ShopCart sc = Session["shopcart"] as Model.ShopCart;
                sc.Del(int.Parse(proid));
                Session["shopcart"] = sc;
            }
            Response.Redirect(Request.Url.ToString());
        }

        //修改商品数量
        protected void Mod(object sender, EventArgs e)
        {
            TextBox txt=(sender as TextBox);
            string proid = txt.ToolTip;
            string quantity = txt.Text;
            int x;
            if (!int.TryParse(quantity,out x))
            {
                x = 1;
            }
            if (Session["shopcart"]!=null)
            {
                Model.ShopCart sc = Session["shopcart"] as Model.ShopCart;
                sc.Mod(int.Parse(proid),x);
                Session["shopcart"] = sc;
            }
            Response.Redirect(Request.Url.ToString());
        }

        //清空购物车
        protected void btnClear_Click(object sender, EventArgs e)
        {
            Session["shopcart"] = null;
            Response.Redirect(Request.Url.ToString());
        }

        //去收银台
        protected void btnGoBuy_Click(object sender, EventArgs e)
        {
            if (Session["shopcart"]==null)
            {
                  Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "");
                  return;
            }
            else
            {
                Model.ShopCart sc = Session["shopcart"] as Model.ShopCart;
                if (sc.GetItemCount()==0)
                {
                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "MsgBox", "");
                    return;
                }
            }
            Response.Redirect("order_modify.aspx");
            
        }
    }
}



你可能感兴趣的:(购物网学习)