Webfrom --购物车

☆购物车实现的功能:

(1)连接数据库登录,密码错误会弹窗提示,密码正确可以进入到购物车的界面。

(2)点击购买,上面会自动累计您买的物品和花费的金额。

(3)点击购物车可以查看您买的物品,单价和数量,可以删除。

(4)点击提交订单,下面会显示出来您花费的金额和余额。

(5)点击返回转到购物车界面。 

★ 添加一个AppCode的文件夹,里面可以存放SQl表和数据库的方法。

(1)水果表的数据库操作方法《FruitBF》

 public class FruitBF
    {
        private MyDBDataContext Context = new MyDBDataContext();
        public List<Fruit> Select()//全部查询
        {
            return Context.Fruit.ToList();
        }
        public void Update(OrderDetails ff)
        {
            var query = Context.Fruit.Where(p => p.Ids == ff.FruitCode);
            if (query.Count() > 0)
            {
                Fruit fr = query.First();
                fr.Numbers -= ff.Count;
                Context.SubmitChanges();
            }
        }
        public void Delete(string code)//删除
        {
            var query = Context.Fruit.Where(p => p.Ids == code);
            if (query.Count() > 0)
            {
                Fruit a = query.First();
                Context.Fruit.DeleteOnSubmit(a);
                Context.SubmitChanges();
            }
        }
    }

(2)登陆注册的操作方法《LoginBF》

namespace webfrom_购物车
{
    public class LoginBF
    {
        private MyDBDataContext Context = new MyDBDataContext();
    

    public bool CheckID(string id,string pwd)
    {
        var p = Context.Login.Where(r=>r.UserName==id&&r.Password==pwd);
        if (p.Count()>0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public bool LogInCheck(string uid, string pwd)
    {
        var query = Context.Login.Where(p => p.UserName == uid && p.Password == pwd);
        if (query.Count() > 0)
        {
            return true;
        }
        return false;
    }

    public bool LogInCheckUid(string uid)
    {
        var query = Context.Login.Where(p => p.UserName == uid);
        if (query.Count() > 0)
        {
            return true;
        }

        return false;
    }

    public Login Select(string id)
    {
        Login p1 = new Login();
        var query = Context.Login.Where(p => p.UserName == id);
        if (query.Count() > 0)
        {
            p1 = query.First();
            return p1;
        }
        return p1;
    }

    public void UpdateRmb(string name, decimal rmb)
    {
        var query = Context.Login.Where(p => p.UserName == name);
        if (query.Count() > 0)
        {
            Login l = query.First();
            l.Account -= rmb;
            Context.SubmitChanges();
        }
    }
    }
}

(3) 连接使用账户表的方法《OrderDetails》

public partial class OrderDetails
    {
        private MyDBDataContext Context = new MyDBDataContext();
        public string FruitName
        {
            get
            {
                var query = Context.Fruit.Where(p => p.Ids == this.FruitCode);

                if (query.Count() > 0)
                {
                    return query.First().Name;
                }
                return "";
            }
        }
        public decimal FruitPrice
        {
            get
            {
                var query = Context.Fruit.Where(p => p.Ids == this.FruitCode);

                if (query.Count() > 0)
                {
                    return query.First().Price.Value;
                }
                return 0;
            }
        }
    }

(二)先添加一个登陆注册界面Webfrom窗口 

效果图:

《aspx 界面图》:

  <title></title>
 <script src="Script/jquery-1.7.1.min.js"></script>
    <style type="text/css">
        #a {
            background-image: url(/图片/3.jpg);
        }

    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div id="a">
        <center>
                    <table >
                        <tr>
                            <td colspan="2">购物车登录</td>
                        </tr>
                        <tr>
                            <td>用户名:</td>
                            <td>
                                <asp:TextBox ID="txtid" runat="server"></asp:TextBox>
                            </td>
                        </tr>
                        <tr>
                            <td>密码:</td>
                            <td>
                                <asp:TextBox ID="txtpwd" runat="server"></asp:TextBox>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2"><span id="ss"></span></td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:Button ID="btlogin" runat="server" OnClick="btlogin_Click" Text="登录" />
                               
                            </td>
                        </tr>
                    </table>
                </center>
    
    </div>
    </form>

《查看代码》:

namespace webfrom_购物车
{
    public partial class Login1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void btlogin_Click(object sender, EventArgs e)
        {
            bool isok = new LoginBF().CheckID(txtid.Text, txtpwd.Text);
            if (isok)
            {
                Session["user"] = txtid.Text.Trim();
                //Response.Write("<script>alert('登录成功')</script>");
                //Response.End();
                Response.Redirect("Index.aspx");
            }
            else
            {
                Response.Write("<script>alert('帐号或密码不正确')</script>");

            }
            //UpdatePanel1.Update();
        }
    }
}

(二)添加一个购物车商品的主页面{Index.aspx}

效果图:

《aspx代码》:

 <title></title>
    <style type="text/css">
        #a {
            background-image: url(图片/6.jpeg);
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div align="center" id="a">
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
      <asp:Repeater ID="Repeater1" runat="server">
          <HeaderTemplate>
                <table class="tb" cellpadding="4" cellspacing="1" border="0" >
            
            <tr style="background-color:#FFB5C5">
                <td>商品名</td>
                <td>单价</td>
                <td>库存量</td>  
                <td>操作</td>
            </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td><%#Eval("Name") %></td>
                    <td><%#Eval("Price") %></td>
                    <td><%#Eval("Numbers") %></td>
                    <td><a href="buy.aspx?id=<%#Eval("Ids") %>">购买</a></td>
                </tr>
            </ItemTemplate>

            <AlternatingItemTemplate>
                <tr style="background-color:#FFE4E1">
                    <td><%#Eval("Name") %></td>
                    <td><%#Eval("Price") %></td>
                    <td><%#Eval("Numbers") %></td>
                    <td><a href="buy.aspx?id=<%#Eval("Ids") %>">购买</a></td>
                </tr>
            </AlternatingItemTemplate>
            <FooterTemplate>
                <tr style="background-color: #7FFFD4">
                <td colspan="4">
                    <a href="查看购物车.aspx">查看购物车</a>
                </td>
            </tr>
               
             
                     
        </table>
            </FooterTemplate>
        </asp:Repeater>
        
    </div>
      
    </form>

《查看代码》:

namespace webfrom_购物车
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<Fruit> list = new FruitBF().Select();
        Repeater1.DataSource = list;
        Repeater1.DataBind();
      

        int Count;
        decimal cost;          
        if (Session["cart"] == null) //如果购物车里面为空
        {
            Count = 0; //购买的数量便为0
            cost=0;
        }
        else //如果不为空
        {
            //用Session来存放数量
            List<OrderDetails> temp = Session["cart"] as List<OrderDetails>;//看看Session里面有多少个数据
           Count = temp.Count;//购买的数量便是Session里面的数据    
           cost = temp.Sum(P => P.Count * P.FruitPrice).Value;
        }
   
        Literal1.Text = "购物车中有" + Count + "种商品,总共花费"+cost+"";
        //Session["count"] = Count;

       
    
        }
    }
}

(三)查看购物车

效果图:

《aspx代码》:

<title></title>
 <style type="text/css">
     #a {
         background-image: url(/图片/5.jpg);
       
     }
        .index
         {
            
            100%;
            height:1000px;
        }
       
    </style>
</head>
<body>
    <form id="form1" runat="server">
   <div class="index" align="center" >
           <div class="change"  id="a">
                <h1 align="center">
                     &nbsp;查看购物车
                </h1>
               <h2>
                   <asp:Literal ID="Literal1" runat="server"></asp:Literal>
               </h2>
               <asp:Repeater ID="Repeater1" runat="server">
                   <HeaderTemplate>
                       <table>
                    <tr style="background-color:#E066FF">
                      <td>商品名称</td>
                       <td>商品单价</td>
                       <td>购买数量</td>
                       <td>操作</td>
                      </tr></HeaderTemplate>
             <ItemTemplate>
                 <tr style="background-color: #7FFFD4">
                 <td><%#Eval("FruitName") %></td>
                  <td><%#Eval("FruitPrice") %></td>
                  <td><%#Eval("Count") %></td>
                 <td><a href="Delete.aspx?id=<%#Eval("FruitCode") %>">删除</a></td>
                     </tr>

             </ItemTemplate>
                <FooterTemplate></table></FooterTemplate>
  
               </asp:Repeater>
               
                 <p style="margin-left: 120px"> 
                     <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="返回" />
                     <a href="提交订单.aspx">
                     <asp:Button ID="Button1" runat="server" Text="提交订单" OnClick="Button1_Click" /></a> </p>
                <table class="tb" cellspacing="1" cellpadding="4" border="0">
                <tr style="background-color: #ccffff">
                    <td>您一共消费了<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
&nbsp;元 账户余额
                                  <asp:Label ID="Label2" runat="server" Text=""></asp:Label></td>
                    </tr>
            </table>
               </div>
        
    </div>
    </form>

《查看代码》:

namespace webfrom_购物车
{
    public partial class 查看购物车 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            decimal cost;

            if (Session["cart"] == null) //如果是空的,就给Session赋一个空的订单
            {
                List<OrderDetails> temp = new List<OrderDetails>(); //造一个新的订单集合
                Session["cart"] = temp;//给Session赋值 空的订单
                cost = 0;
            }

            //如果购物车不是空的,那么订单就是Session
            List<OrderDetails> list = Session["cart"] as List<OrderDetails>; //点击一下购买,那么Session便存了一个信息,然后放到了订单集合里面
            cost = list.Sum(P =>P.FruitPrice* P.Count).Value;
            Session["cost"] = cost;
            Repeater1.DataSource = list;
            Repeater1.DataBind();
            Literal1.Text = "总共消费" + cost + "";
            if (list.Count > 0)
            {
                Session["bianhao"] = list[0].FruitCode;
                Session["shuliang"] = list[0].Count;
            }

            
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            List<OrderDetails> list1 = Session["Cart"] as List<OrderDetails>;

            Repeater1.DataSource = list1;
            Repeater1.DataBind();
            //计算商品总价,计算每个对象的单价*数量,累加
            decimal cost1 = list1.Sum(p => p.Count * p.FruitPrice).Value;//花费的金额
            Label1.Text = cost1.ToString();

            string listLog = (string)Session["user"];
            Login l = new LoginBF().Select(listLog);//总价
            decimal a =Convert .ToDecimal( l.Account);
            decimal yue = a - cost1;//用总价减去花费的金额=他剩下的余额。
            Label2.Text = yue.ToString(); 
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("Index.aspx");//跳转回主页
        }
    }
}

(四) 提交订单

效果图:

《aspx代码》:

namespace webfrom_购物车
{
    public partial class 提交订单 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] == null)
            {
                Response.Redirect("Login.aspx");
            }
            if (Session["Cart"] != null)
            {
                try
                {
                    List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;
                    decimal cost = list.Sum(p => p.Count * p.FruitPrice).Value;
                    string listLog = (string)Session["user"];
                    Login l = new LoginBF().Select(listLog);
                    if (l.Account > cost)
                    {
                        Session["BuyedCart"] = list;
                        foreach (OrderDetails item in list)
                        {
                            new FruitBF().Update(item);
                        }

                        new LoginBF().UpdateRmb(l.UserName, cost);
                    }
                    else
                    {
                        Response.Write("<script>alert('余额不足!')</script>");
                    }
                   
                }
                catch (Exception)
                {
                    Response.Write("<script>alert('提交失败')</script>");
                }
                
            }

             Response.Redirect("Index.aspx");
 
           
        }
    }
}

(五)添加一个删除的窗口《Delete.aspx》

《查看代码》:

namespace webfrom_购物车
{
    public partial class Delete : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["cart"] == null) //如果购物车是空的
            {
                List<OrderDetails> temp = new List<OrderDetails>(); //造一个空的订单
                Session["cart"] = temp;  //给Session赋值
            }
            //无论是不是空的,都要执行下面的
            List<OrderDetails> list = Session["cart"] as List<OrderDetails>; //订单就是Session
            string id = Request["id"].ToString();

            //开始执行删除
            var query = list.Where(P => P.FruitCode == id);
            if (query.Count() > 0)
            {
                OrderDetails data = query.First();
                if (data.Count > 1) //证明以前买过,数量减减就行了
                {
                    data.Count--;
                }
                else
                {
                    list.Remove(data);
                }
            }
            Response.Redirect("查看购物车.aspx");
     
        }
    }
}

 (六)添加一个购买的窗口《Buy.aspx》

namespace webfrom_购物车
{
    public partial class Buy : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] == null)
            {
                Response.Redirect("LogIn.aspx");
            }
            string code = Request["id"].ToString();
            if (Session["Cart"] == null)
            {
                List<OrderDetails> listOrder = new List<OrderDetails>();
                Session["Cart"] = listOrder;
            }
            List<OrderDetails> list = Session["Cart"] as List<OrderDetails>;

            //查看Session["Cart"]中有没有这个水果,如果没有就添加进来一个,有就Count加一
            var query = list.Where(p => p.FruitCode == code);
            if (query.Count() <= 0)
            {
                OrderDetails data = new OrderDetails();
                data.FruitCode = code;
                data.Count = 1;
                list.Add(data);
            }
            else
            {
                OrderDetails data = query.First();
                data.Count += 1;
            }

            Response.Redirect("Index.aspx");
        }
    }
}

(七) 添加一个JS的文件

(八)如果往DIV里添加图片的话,新建一个文件夹,把图片放进这个文件夹里,然后写CSS调用就可以了。

原文地址:https://www.cnblogs.com/w-wz/p/4670489.html