• Webform购物车(用Session存储,页面传值)


    购物车主要实现的功能:

        ①在主页面可以将所有商品显示出来,包括价格,库存。

        ②点击购买可以累加产品,如果是同一种产品,只会累加每种产品的数量。

        ③查看购物车,可以查看明细,包括所购物品的名称,价格,数量等等。

      ④查看账户,显示账户余额。

        ⑤在购物车中可以下订单,当点击下订单的时候,需要判断是否已经登录,如果没有登录,则跳到登录页面。

        ⑥下订单之后,客户的余额减少幅度等于所消费幅度。

      ⑦余额不足,提示;库存不足,提示;购物车清空。

        ⑧库存产品数量减少,减少的每种产品的数量等于购买的每种产品的数量。

        下面用代码来详细介绍一下购物车功能的实现:

      

    先创建一个母版页:

    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <asp:ContentPlaceHolder id="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="background-color:#6aa3e1;">
            <div style="font-size:30px; color:#fff; font-family:微软雅黑;margin-top:20px;">
                       
                    <asp:Label ID="Label1" runat="server" Text="大苹果购物网" ></asp:Label>
                </div>
    
                <div style=" 100%;height:25px;font-size:20px; color:#ff00dc;">
                    <a href="Login.aspx" style="float:right;margin-right:15px;">登录</a>
                </div>
    
                <div style="100%;height:360px">
                    <div style="20%;height:360px; float:left;">
                        <div style="margin-top:110px; text-align:center; font-size:20px;">
                            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click1">浏览商品</asp:LinkButton>
                        </div>
                        <div style="margin-top:20px; text-align:center; font-size:20px;">
                            <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton>
                        </div>
                        <div style="margin-top:20px; text-align:center; font-size:20px;">
                            <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton>
                        </div>
                    </div>
                    <div style="80%;height:360px; float:left;background-color:#fff;">
            <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
            
            </asp:ContentPlaceHolder>
                     </div>
               </div>
            <div style="100%;height:40px;text-align:center;line-height:40px;">
                汉企教育科技出品
            </div>
        </div>
        </form>
    </body>
    </html>
    

    实现用户登录功能:

    Login.aspx

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="_Default" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
                <div style="50%;text-align:center">
                            <div style="height:45px;background:#4256f2;">
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Label ID="Label2" runat="server" Font-Names="微软雅黑" Font-Size="XX-Large" ForeColor="White" Text="登    录" ></asp:Label>
                            </div>
                            <div style="height:315px;background:#7e8ae5">
                                <br />
                                <br />
                                <br />
                                <asp:Label ID="Label3" runat="server" Text="用户名:" Font-Size="Larger"></asp:Label>
                                <asp:TextBox ID="txtuid" runat="server" Font-Size="Large" Width="185px"></asp:TextBox>
                                <br />
                                <br />
                                <br />
                                <asp:Label ID="Label4" runat="server" Text="密码:" Font-Size="Larger"></asp:Label>
    &nbsp;
                                <asp:TextBox ID="txtpwd" runat="server" Font-Size="Large" Width="185px" TextMode="Password"></asp:TextBox>
                                <br />
                                <br />
                                <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Button ID="Button1" runat="server" Font-Size="Larger" Text="登录" OnClick="Button1_Click" />
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                <br />
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                <br />
                            </div>
            </div>
    </asp:Content>


     Login.aspx.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            bool isok = new FruitDA().checkUser(txtuid.Text, txtpwd.Text);
            if (isok)
            {
                Session["uid"] = txtuid.Text;
                Response.Redirect("Index.aspx?user=" + txtuid.Text);//跳转页面
    
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
    
        }
    }
    

    Index页面,实现功能①,显示所有物品。

    Index.aspx代码:

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
            <HeaderTemplate>
                <table style="100%; height:70%; text-align:center; background:#000000" >
                     <tr style=" color:#fff;">
                                    <td>代号</td>
                                    <td>水果名称</td>
                                    <td>水果价格</td>
                                    <td>原产地</td>
                                    <td>货架</td>
                                    <td>库存量</td>
                                    <td></td>
                                </tr>           
            </HeaderTemplate>

            <ItemTemplate>
                <tr style="background:#fff">
                                    <td><%#Eval("ids") %></td>
                                    <td><%#Eval("name") %></td>
                                    <td><%#Eval("price") %></td>
                                    <td><%#Eval("source") %></td>
                                    <td><%#Eval("stack") %></td>
                                    <td><%#Eval("numbers") %></td>
                                    <td><asp:LinkButton ID="LinkButton1" CommandName="buy" CommandArgument='<%#Eval("ids") %>' runat="server">购买</asp:LinkButton></td>
                                </tr>
            </ItemTemplate>

            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
    </asp:Content>


     实现功能②,点击购买时,存放在session[]里面

    Index.aspx.cs代码:

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

    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Repeater1.DataSource = new FruitDA().select();
                Repeater1.DataBind();
            }
        }
        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "buy")  //通过commandname区分点击的是购买按钮
            {
                string ids = e.CommandArgument.ToString();
                if (Session["list"] != null)
                {
                    List<Fruit> slist = (List<Fruit>)Session["list"];
                    int count = 0;  //标记变量,判断购物车中有没有选中的商品
                    foreach(Fruit data in slist)
                    {
                        if (ids == data.Ids)    //购物车中存在选中的商品
                        {
                            data.Numbers += 1;//存在的商品数量+1
                            count++;
                        }
                    }
                    if (count == 0)//购物车中不存在选中的商品
                    {
                        Fruit data = new FruitDA().selectbyids(ids);
                        data.Numbers = 1;   //购物车中选中的商品数量为1
                        slist.Add(data);
                        Session["list"] = slist;
                    }
                }
                else  //购物车中一件商品也没有
                {
                    List<Fruit> list = new List<Fruit>();
                    Fruit data = new FruitDA().selectbyids(ids);
                    data.Numbers = 1;
                    list.Add(data);
                    Session["list"] = list;
                }
                //计算购物车商品数量及总价
                if(Session["list"] != null)
                {
                    List<Fruit> list = (List<Fruit>)Session["list"];
                    decimal sum = 0;
                    foreach(Fruit data in list)
                    {
                        sum += (decimal)(data.Numbers * data.Price);
                    }
                     Literal1.Text = "购物车中有 "+list.Count+" 件商品,总价为 "+sum+" 元";
                }

            }
        }
    }

    实现功能③,查看购物车

    ViewCart.aspx代码:

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ViewCart.aspx.cs" Inherits="_Default" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <div>
            <asp:Literal ID="Literal2" runat="server"></asp:Literal>
        </div>
        <div style="640px;height:200px;">
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
            <HeaderTemplate>
                <table style="600px; text-align:center; background:#000000">
                     <tr style=" color:#fff;">
                                    <td>代号</td>
                                    <td>商品名称</td>
                                    <td>商品价格</td>
                                    <td>购买数量</td>
                                    <td></td>
                                </tr>           
            </HeaderTemplate>

            <ItemTemplate>
                <tr style="background:#fff">
                                    <td><%#Eval("ids") %></td>
                                    <td><%#Eval("name") %></td>
                                    <td><%#Eval("price") %></td>
                                    <td><%#Eval("numbers") %></td>
                                    <td><asp:LinkButton ID="LinkButton1" CommandName="delete" CommandArgument='<%#Eval("ids") %>' runat="server">删除</asp:LinkButton></td>
                                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
            </div>
            <div style="600px;height:50px;">
                <asp:Literal ID="Literal1" runat="server"></asp:Literal><br />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">提交订单</asp:LinkButton>
                <br />
            </div>
    </asp:Content>

    实现功能⑤⑥⑦⑧,点击购买时,存放在session[]里面

    ViewCart.aspx.cs代码:

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

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["list"] != null)
                {
                    Repeater1.DataSource = (List<Fruit>)Session["list"];//里氏转换,购物车的表存在session中
                    Repeater1.DataBind();
                }
                else
                {
                    Literal2.Text = "购物车中没有任何商品!";
                }
            }
        }
        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "delete")  //删除按钮
            {
                string ids = e.CommandArgument.ToString();
                List<Fruit> list = (List<Fruit>)Session["list"];
                Fruit sdata = null; //做标记
                foreach (Fruit data in list)
                {
                    if (ids == data.Ids)//找到商品
                    {
                        if (data.Numbers > 1)//如果商品数量大于1
                        {
                            data.Numbers -= 1;
                        }
                        else//否则数量等于1
                        {
                            sdata = data;
                        }
                    }
                }
                if (sdata != null)
                {
                    list.Remove(sdata);//直接移除商品
                }
                Session["list"] = list;
                Repeater1.DataSource = (List<Fruit>)Session["list"];//重新绑定数据
                Repeater1.DataBind();
            }
        }

        //先验证库存是否足够,用户是否登陆,当二者都满足时,然后在进数据库执行删除
        protected void LinkButton2_Click(object sender, EventArgs e)
        {

            List<Fruit> list = (List<Fruit>)Session["list"];
            bool isok = true;
            foreach (Fruit data in list)
            {
                var s1 = data.Numbers;
                var s2 = new FruitDA().selectbyids(data.Ids).Numbers;
                if (s1 < s2)//判断购买的数量和库存数量
                {
                    isok = true;
                }
                else
                {
                    isok = false;
                    string name = new FruitDA().selectbyids(data.Ids).Name;
                    Literal1.Text = name + "的库存不足!";
                }
            }
            //如果库存满足,再进行验证用户是否登录
            if (isok)
            {
                //如果用户登录成功,再判断该用户的余额是否满足购买商品的总额
                if (Session["uid"] != null)
                {
                    string uid = Session["uid"].ToString();
                    var yu = new FruitDA().selectuser(uid).Account;//用户的余额
                    decimal sum = 0;
                    foreach (Fruit data in list)
                    {
                        sum += (decimal)(data.Numbers * data.Price);//商品的总价
                    }
                    if (yu >= sum)//余额满足
                    {
                        foreach (Fruit sdata in list)//减库存
                        {
                            var s1 = sdata.Numbers;//购买的数量
                            var s2 = new FruitDA().selectbyids(sdata.Ids).Numbers;//库存
                            var s = s2 - s1;
                            Fruit data = new Fruit();
                            data.Ids = sdata.Ids;
                            data.Numbers = s;
                            new FruitDA().update(data);
                        }
                        //减余额
                        var shengyu = yu - sum;
                        Login m = new Login();
                        m.UserName = uid;
                        m.Account = shengyu;
                        new FruitDA().updateyue(m);
                        //添加订单
                        Orders data1 = new Orders();
                        Random r = new Random();
                        string ordercode = DateTime.Now.ToString("yyyyMMddHHmmssms") + r.Next(100).ToString();
                        data1.Code = ordercode;
                        data1.UserName = uid;
                        data1.OrderTime = DateTime.Now;

                        new FruitDA().Insert1(data1);

                        //添加订单详情表
                        foreach (Fruit data in list)
                        {
                            OrderDetails data2 = new OrderDetails();
                            data2.OrderCode = ordercode;
                            data2.FruitCode = data.Ids;
                            data2.Count = data.Numbers;

                            new FruitDA().Insert2(data2);
                        }
                        Literal1.Text = "订单提交成功!";
                    }
                    else//如果余额不满足,进行提示
                    {
                        Literal1.Text = "余额不足!";
                    }
                }
                else
                {
                    Response.Redirect("Login.aspx");
                }
            }

        }
    }

    实现功能④,查看账户余额

    ViewAccount.aspx代码

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ViewAccount.aspx.cs" Inherits="_Default" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </asp:Content>
    

      ViewAccount.aspx.cs代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["uid"] != null)
            {
                string uid = Session["uid"].ToString();
                var yu = new FruitDA().selectuser(uid).Account;//用户的余额
                Literal1.Text = "您的账户中还剩余 "+yu+" 元";
            }
            else
            {
                Response.Redirect("Login.aspx");
            }
        }
    }
    
  • 相关阅读:
    Sam小结和模板
    K-string HDU
    str2int HDU
    Common Substrings POJ
    Reincarnation HDU
    实体框架自动迁移出现异常。
    C#代码配置IIS 操纵IIS
    MVC项目页面获取控制器的信息
    通过js判断手机访问跳转到手机站
    "Could not load file or assembly 'DTcms.Web.UI' or one of its dependencies. 拒绝访问。" 的解决办法
  • 原文地址:https://www.cnblogs.com/jiangshuai52511/p/5222002.html
Copyright © 2020-2023  润新知