zoukankan      html  css  js  c++  java
  • 购物车(只实现了提交订单前的功能)

     购物车: 和淘宝上的购物车类似,就是选择商品点击购买存入购物车,在购物车里查看可以看到所购买物品的详细信息,包括名称,价格,数量,以及总价,至于后面的提交订单后的功能还没实现。

      模拟的就是采用Session来控制购物车的状态,  每次点击购买或者显示主界面的时候都要判断 Session的状态,操作Session就是操作订单集合。

      如果Session为null,那么就需要为Session造一个空的订单集合,以此来往购物车里放订单的数据;

      如果Session的值不为空,那么每点击一下购买便将OrderDetails对象存进订单集合里面。

    下面开始显示代码:(前提:由于订单表里只有水果编号和数量,而没有水果名称和价格,所以需要扩展订单表里的属性,为订单表增加一个水果名称和水果价格的属性,是通过订单表里的订单编号和水果表的水果编号相对比来实现的)

    1、Models
    namespace 购物车.Models
    {
        public class FruitBF
        {
            private MyDBDataContext _context = new MyDBDataContext();
            public List<Fruit> Selcet() //水果全部查询出来
            {
                return _context.Fruit.ToList();
            }
        }
    }
    
    开始扩展订单表的属性:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace 购物车.Models
    {
        public partial class OrderDetails //扩展一下订单表类的属性
        {
            private MyDBDataContext _context = new MyDBDataContext();
            
            //下面开始定义新的属性
            private string _FruitName;
    
            public string FruitName //定义订单表的水果名字这个属性
            {
                get
                {
                    var query = _context.Fruit.Where(p => p.Ids == this.FruitCode); //找到水果表里的Ids和输入的水果编号相同的那个对象
    
                    if (query.Count() > 0)
                    {
                        return query.First().Name; //返回这个对象的Name属性
                    }
                    return "";
                }
              
            }
            private decimal _FruitPrice;
    
            public decimal FruitPrice//定义订单表的水果价格这个属性
            {
                get
                {
                    var query = _context.Fruit.Where(p => p.Ids == this.FruitCode); //找到水果表里的Ids和输入的水果编号相同的那个对象
    
                    if (query.Count() > 0)
                    {
                        return query.First().Price.Value; //返回这个对象的Price属性
                    }
                    return 0;
                }
               
            }
        }
    }
    
    
    
    2、Controllers    红色  代表的是每次都要判断Session的状态
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using 购物车.Models;
    
    namespace 购物车.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                //判断一下购物车的状态
                if (Session["cart"] == null) //如果购物车里面为空
                {
                    ViewBag.Count = 0; //购买的数量便为0
                }
                else //如果不为空
                {
                    //用Session来存放数量
                    List<OrderDetails> temp = Session["cart"] as List<OrderDetails>;//看看Session里面有多少个数据
                    ViewBag.Count = temp.Count;//购买的数量便是Session里面的数据
                }
                List<Fruit> list= new FruitBF().Selcet();
                return View(list);
            }
            public ActionResult Buy(string id) //购买的动作
            { 
               //下面开始判断一下购物车的状态
                if(Session["cart"]==null) //如果购物车是空的
                {
                        //造一个新的Datails集合来存放数量
                    List<OrderDetails> temp = new List<OrderDetails>();
                    Session["cart"] = temp; //给Session赋值,这时候是空的
                }
                //不是空的话,就直接利用Session里的数据
                List<OrderDetails> list = Session["cart"] as List<OrderDetails>; //操作Session就是操作订单集合 //点击一下购买,那么Session便存了一个信息,然后放到了订单集合里面
    
                //下面开始根据传进来的物品的Id来判断是否已经购买过
                var query = list.Where(P=>P.FruitCode==id);
                if (query.Count() <= 0) //这证明以前没有买过
                {
                    //既然没买过,就要造一个新的存进Session里面去
                    OrderDetails data = new OrderDetails();
                    data.FruitCode = id;//购买的物品的ID就是传过来的Id
                    data.Count = 1;//购买的数量等于1
                    list.Add(data);//将购买的加进订单的集合里面 也就是Session里面
                }
                else//如果之前买过,只需要再数量上++就可以了
                {
                    OrderDetails data = query.First();//这是根据传进来的Id查到的所购买的物品
                    data.Count++; //数量++
                }
                return RedirectToAction("Index","Home");    
            }
    
            //下面开始写查看购物车的动作 (前提:购物车里面只有订单号和数量而没有水果名字和价格,所以需要扩展一下订单的类)
            public ActionResult Cart() //查看购物车
            {
                //判断一下购物车的状态
                if (Session["cart"] == null) //如果是空的,就给Session赋一个空的订单
                {
                    List<OrderDetails> temp = new List<OrderDetails>(); //造一个新的订单集合
                    Session["cart"] = temp;//给Session赋值 空的订单
                }
    
                //如果购物车不是空的,那么订单就是Session
                List<OrderDetails> list = Session["cart"] as List<OrderDetails>; //点击一下购买,那么Session便存了一个信息,然后放到了订单集合里面
                //获取一下消费了多少钱,消费的钱=购买的数量*商品的单价
                decimal cost = list.Sum(P => P.Count * P.FruitPrice).Value;//通过订单集合里的Sum函数来计算(公式为价格*数量)
                ViewBag.cost=cost;
                return View(list);
            }
    
    
            //如果多买了数量,就需要删除,下面开始写删除的
            public ActionResult RemoveCartCount(string id)
            {
                //下面开始判断一下购物车的状态
                if (Session["cart"] == null) //如果购物车是空的
                {
                    //造一个新的Datails集合来存放数量
                    List<OrderDetails> temp = new List<OrderDetails>();
                    Session["cart"] = temp; //给Session赋值,这时候是空的
                }
                //不是空的话,就直接利用Session里的数据
                List<OrderDetails> list = Session["cart"] as List<OrderDetails>; //操作Session就是操作订单集合 //点击一下购买,那么Session便存了一个信息,然后放到了订单集合里面
                var query = list.Where(P=>P.FruitCode==id); //找到订单里面那个编号等于传过来的Id的那个对象
                if (query.Count()>0) //如果查出来的数量大于0
                {
                     OrderDetails data = query.First();//查出来的第一个对象
                     //下面开始判断这个对象的数量
                     if (data.Count >1) //如果数量大于1,只需要把数量--就行了
                     {
                         data.Count--;
                     }
                     else //如果数量小于1了,需要把这条订单从订单集合里删掉
                     {
                         list.Remove(data);  //把这条订单从订单集合里删掉
                     }
                    return RedirectToAction("Cart","Home");//返回到购物车的动作上
                    
                }
                else
                {
                    return RedirectToAction("Cart", "Home");//返回到购物车的动作上
                }
            }
    
        }
    }
    
    
    3、Views
    Index:
    @{
        Layout = null;
    }
    @using 购物车.Models;
    @model List<Fruit>
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <style>
            .aa
             {
                position:relative;
                margin:auto;
                300px;
            height:300px;
            }
            </style>
    </head>
    <body>
        
        <div class="aa" >       
                @foreach(Fruit data in Model)
                { 
                    <ul>
                    <li>@data.Name (@data.Price) @data.Numbers @Html.ActionLink("购买", "Buy", new { id=data.Ids})</li>               
                    </ul>
                }           
           
            @{
            int Count = (int)ViewBag.Count;
            }
        <div>
        您当前购买了 @Count 个商品
            </div>
             @Html.ActionLink("查看购物车","Cart")
        </div>
          
    </body>
    </html>
    
    
    Cart:
    @{
        Layout = null;
    }
    @using 购物车.Models;
    @model List<OrderDetails>
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Cart</title>
    </head>
    <body>
        <div>
            <h1>查看购物车</h1>
            @foreach (OrderDetails data in Model) //因为订单表里没有水果的名字和价格,所以需要扩展一下订单的类
            {
                 <ul>
                <li>名称:@data.FruitName (价格: @data.FruitPrice 元) 数量:@data.Count 个  @Html.ActionLink("删除", "RemoveCartCount", new { id=data.FruitCode},null)</li>
    
            </ul>
            }
           您本次总共消费了 <font color="red"> @ViewBag.cost </font></div>
    </body>
    </html>

    效果图:

  • 相关阅读:
    vue获取客户端ip地址
    Webpack 4 : ERROR in Entry module not found: Error: Can't resolve './src'
    PageHelper使用以及PageInfo中分页对象的转化
    PyCharm创建Django项目并连接mysql数据库
    Java常用类介绍
    Mybatis中的Mapper.xml映射文件sql查询接收多个参数
    学会聆听……
    SpringSecurity学习
    自定义线程池配置类
    雅虎的工程师团队给出的35个web开发最佳实践
  • 原文地址:https://www.cnblogs.com/lk-kk/p/4646833.html
Copyright © 2011-2022 走看看