webform 购物车小程序,主要学习session的使用

实现一个简单的购物网站

一、考试时间:8小时

二、开发工具:VS2005+Sql2000

三、数据库:见附件

四、需要实现的页面:

Index.aspx:浏览商品页面,显示商品列表,用户可以点击“购买“。

ViewCart.aspx:查看购物车页面,显示已购买的商品信息,可以点击“删除“已买的商品

ViewAccount.aspx:查看个人账户余额

Login.aspx:登录页面

 

建议使用的技术:母版页、GridView、泛型集合、自定义实体类、自定义数据库访问类、其它常Web控件。

 

五、实现功能:

1、  显示商品列表
                       

2、  实现购买功能,购买的时候动态显示购物车中的商品数量和商品总价格

3、  点击查看购物车后,显示已购买的商品。注意“购买数量”列,如果对一种商品点击购买多次,其“购买数量”不断增加。

4、  删除购物车中已购买的商品。
如果某商品的“购买数量”为1时,则点击“删除”时,直接从购物车中删除该商品;
如果商品的“购买数量”大于1时,点击一次“删除”时,把其购买数量减1。直到该商品购买数量为1时,再点击删除时,删除该商品

5、  在查看完购物车后还可以点击“浏览商品”继续购买。并在上面显示已购买的商品数量和总价格。

6、  在“查看购物车“后,可以提交订单

但在提交订单时,须完成以下功能:

a)         检查用户是否已登录,未登录则转到Login.aspx页面

 

b)        检查用户账户余额是否能够满足本次够买

c)         检查库存数量是否满足本次够买

d)        如果以上条件都满足则

  1.                         i.              从用户账户中扣除本次购买的总价格
  2.                       ii.              从商品库存中扣除本次每种商品的购买数量
  3.                     iii.              向订单表和订单内容表中加入本次购买的商品信息

7、  点击查看账户,可以查看该用户的账户余额。

对数据库操作的方法代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;



/// <summary>

/// FruitBF 的摘要说明

/// </summary>

public class FruitBF

{

    private DataClassesDataContext _Context;

    public FruitBF()

    {

        //

        // TODO: 在此处添加构造函数逻辑

        //

        _Context = new DataClassesDataContext();

    }



    public Fruit Select(string ids)

    {

        var query=_Context.Fruit.Where(p => p.Ids == ids);

        if (query.Count()>0)

        {

            return query.First();

        }

        return null;

    }



    public List<Fruit> Select()

    {

        return _Context.Fruit.ToList();

    }

    public void update(Fruit data)

    {

        Fruit newdata = _Context.Fruit.Where(p => p.Ids == data.Ids).First();



        newdata.Numbers = data.Numbers;

        _Context.SubmitChanges();

    }



using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;



/// <summary>

/// OrderDetailsBF 的摘要说明

/// </summary>

public partial class OrderDetails

{



    private DataClassesDataContext _Context = new DataClassesDataContext();

        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;

            }



        }

        public List<OrderDetails> Select()

        {

            return _Context.OrderDetails.ToList();

        }

     

    }

主界面aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>



<!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>

    <style>

        .tr1 {

            text-align:center;

            background-color:#0094ff;

            font-weight:bolder;

        }

        .tr2 {

            text-align:center;

            background-color:#ffd800;

        }

          .tr3 {

            text-align:center;

          

        }

        #id1 {

            

            top:0px;

            left:300px;

        }

          #id2 {

              position:absolute;

            top:165px;

            left:100px;

        }

      

    </style>

</head>

<body>

    <form id="form1" runat="server">

        <div class="ddd">

      <div id="id2" class="ddd">

          <p><a href="Default.aspx">浏览商品</a></p>

         <p> <a href="zhanghu.aspx">查看账户</a></p>

         <p> <a href="gouwuche.aspx">查看购物车</a></p>

          <p><a href="denglu.aspx">登录</a></p>

      </div>

    <div id="id1">



     

        <center><h1><font color="blue">大苹果购物网</font></h1></center>

           &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Literal ID="Literal1" runat="server"></asp:Literal>

        <br />



        <asp:Literal ID="Literal2" runat="server"></asp:Literal>

&nbsp;<asp:Repeater ID="Repeater1" runat="server">

            <HeaderTemplate>

                

           <center> <table width="55%" border="1"><tr class="tr1"><td>编号</td><td>名称</td>

                  <td>价格</td><td>产地</td><td>货架</td><td>库存</td><td>购买</td></tr>

            </HeaderTemplate>



            <ItemTemplate>

                <tr class="tr2"><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><a href="buy.aspx?id=<%#Eval("Ids") %>">购买</a></td></tr>

            </ItemTemplate>



            <AlternatingItemTemplate>

                 <tr class="tr3"><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><a href="buy.aspx?id=<%#Eval("Ids") %>">购买</a></td></tr>

            </AlternatingItemTemplate>



            <FooterTemplate>

                </table></center>

            </FooterTemplate>

        </asp:Repeater>

    </div>

            </div>

    </form>

</body>

</html>

主界面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["data"]==null)

        {

            Response.Redirect("denglu.aspx");

            

        }

        DataClassesDataContext _Context = new DataClassesDataContext();

        Repeater1.DataSource = _Context.Fruit.ToList();

        Repeater1.DataBind();



        int count;

        decimal cost;

        if (Session["cart"] == null)

        {

            count = 0;

            cost = 0;

        }

        else

        {

            List<OrderDetails> list = Session["cart"] as List<OrderDetails>;

            count = list.Count();

            //计算总钱数,记住这个代码!!!!!!

            cost = list.Sum(p=>p.Count*p.FruitPrice).Value;

        }

        Literal1.Text = "您已经购买了" + count + "种水果,您当前的花费为" + cost + "";



        Session["cost"] = cost;



        Session["count"] = count;

    }

}

登录界面aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="denglu.aspx.cs" Inherits="denglu1" %>



<!DOCTYPE html>

<script runat="server">



</script>







<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title></title>

    <style>

      

        #id1 {

            

            top:0px;

            left:300px;

        }

          #id2 {

             position:absolute;

            top:90px;

            left:200px;

        }

    </style>

</head>

<body>

    <form id="form1" runat="server">

      <div id="id2">

          <p><a href="Default.aspx">浏览商品</a></p>

     <p> <a href="zhanghu.aspx">查看账户</a></p>

         <p> <a href="gouwuche.aspx">查看购物车</a></p>

       

      </div>

    <div id="id1">

        <asp:Literal ID="Literal1" runat="server"></asp:Literal>

        <center><h1><font color="blue">大苹果购物网</font></h1></center>

        <br />

                        <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        </p>

                        <p>&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:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>

        </p>

                                                      &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;&nbsp;&nbsp;

                                                      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

                   

    </div>

    </form>

</body>

</html>

 

登录界面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 denglu1 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (Session["data"] == null)

        {   

            Literal1.Text = "请先登录!";

        }

    }



    protected void Button1_Click(object sender, EventArgs e)

    {

        string name = TextBox1.Text;

        string pass = TextBox2.Text;

        Session["name"] = name;





        Login data = new LoginBF().Select(name,pass);

        string yonghuming = data.UserName;

        Session["yonghuming"] = yonghuming;





        Session["data"] = data;

       if (data != null)

       {

           Response.Redirect("Default.aspx");      

       }

       else

       {



           Response.Write("<script>alert('登录失败')</script>");         

           TextBox1.Text = null;

           TextBox2.Text = null;

       }

    }

  

}

购物车aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="gouwuche.aspx.cs" Inherits="gouwuche" %>



<!DOCTYPE html>



<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title></title>

    <style>

       .tr1 {

            text-align:center;

            background-color:#0094ff;

            font-weight:bolder;

        }

        .tr2 {

            text-align:center;

            background-color:#ffd800;

        }

          .tr3 {

            text-align:center;

          

        }

        #id1 {

            

            top:0px;

            left:300px;

        }

          #id2 {

             position:absolute;

            top:105px;

            left:160px;

        }

    </style>

</head>

<body>

    <form id="form1" runat="server">

      <div id="id2">

          <p><a href="Default.aspx">浏览商品</a></p>

     <p> <a href="zhanghu.aspx">查看账户</a></p>

         <p> <a href="gouwuche.aspx">查看购物车</a></p>

       

      </div>

    <div id="id1">

        <center><h1><font color="blue">大苹果购物网<asp:ScriptManager ID="ScriptManager2" runat="server">

            </asp:ScriptManager>

            </h1>

            <asp:UpdatePanel ID="UpdatePanel1" runat="server">

            </asp:UpdatePanel>

            <h1></font></h1></center>

        <br />

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

              购物车中有以下几种产品:

          <asp:Literal ID="Literal1" runat="server">



          </asp:Literal>

            <span  id="span1" style="display:none; color:#F66">账户余额不足</span>

            <span id="span2" style="display:none; color:#F66">苹果库存不足</span>

    

     

                    <asp:UpdatePanel ID="UpdatePanel2" runat="server">

            <ContentTemplate>

                   <font color="red">

             &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Literal ID="Literal3" runat="server"></asp:Literal> </br>               

            &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <asp:Literal ID="Literal2" runat="server"></asp:Literal> </br>

                      

                        </font>

            &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:Button ID="Button1" runat="server" Text="提交订单" OnClick="Button1_Click" />

             

               

               

            </ContentTemplate>

        </asp:UpdatePanel>

      

    </div>

    </form>

</body>

</html>

 

购物车aspx.cs代码

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;



public partial class gouwuche : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {



        if (Session["data"] == null)

        {

            Response.Redirect("denglu.aspx");

        }



      

            if (Session["cart"] != null)

            {

                List<OrderDetails> list = Session["cart"] as List<OrderDetails>;

                Session["linshi"] = list;

                string s = " <center><table width=' 35%'  border='1'><tr class='tr1'><td>编号</td><td>名称</td><td>价格</td><td>数量</td><td>删除</td></tr>";

                foreach (OrderDetails data in list)

                {

                    s += "<tr class='tr2'><td>" + data.FruitCode + "</td><td>" + data.FruitName + "</td><td>" + data.FruitPrice + "</td><td>" + data.Count + "</td><td><a href='shanchu.aspx?ids=" + data.FruitCode + "'>删除</a></td></tr>";

                }

                s += "</table></center>";

                Literal1.Text = s;

            }

          

        

    }

    //当点击提交订单的时候



    protected void Button1_Click(object sender, EventArgs e)

    {



        Orders data3 = new Orders();

        data3.Code = Session["name"].ToString();

        data3.UserName = Session["yonghuming"].ToString();

        data3.OrderTime = DateTime.Now;

        new OrderBF().Insert(data3);







        string name = Session["name"].ToString();

        Login data = new LoginBF().Select(name);

        decimal zhanghu = Convert.ToDecimal(data.Account);

        decimal cost =Convert.ToDecimal( Session["cost"]);

        decimal yue = zhanghu-cost;

        Session["yue"] = yue;



        if (zhanghu >=cost)

        {



            Literal2.Text = "您的账户余额为" + yue + "";

        }

        else if(cost > zhanghu)

        {

            //Response.Write("<script> span1.style.display='block'</script>");

            Literal2.Text = "账户余额不足!";

            Button1.Enabled = false;

        }





        ArrayList all = new ArrayList();

        //List<OrderDetails> list= Session["cart"] as List<OrderDetails>;

        List<OrderDetails> list = Session["linshi"] as List<OrderDetails>;

        //a是购买le几种水果

        int a = Convert.ToInt32(Session["count"]);

        //把购买的水果编号放在集合里

        foreach (OrderDetails data2 in list)

        {

            all.Add(data2.FruitCode);

         

        }





        //通过购买的水果编号来查询这个水果编号的库存并进行比较

        //这个集合用来放购买的库存不足的水果名称

        ArrayList allshuiguo = new ArrayList();

        Fruit data1 = new Fruit();

        string neirong = "";

        for (int i = 0; i < a; i++)

        {

            //通过购物车里的水果编号查询水果表相对应的水果库存

             data1 = new FruitBF().Select(all[i].ToString());

             if (list[i].Count<data1.Numbers)

             {

                 allshuiguo.Add(list[i].FruitName);

                 neirong = neirong + allshuiguo[i].ToString()+"";

                 Literal3.Text = neirong +""+allshuiguo.Count+"种水果的库存不足";

             }



             data1.Numbers = data1.Numbers - list[i].Count;

            //循环调用修改方法,对数据库的数量进行修改

             new FruitBF().update(data1);

           }



        Session.Remove("cart");

       

        }

       

    }

        

        



    

删除界面aspx 代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="shanchu.aspx.cs" Inherits="shanchu" %>



<!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>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    

    </div>

    </form>

</body>

</html>

删除界面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 shanchu : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        string ids = Request["ids"];

        if (Session["cart"] == null)

        {

            List<OrderDetails> temp = new List<OrderDetails>();

            Session["cart"] = temp;

        }

        List<OrderDetails> list = Session["cart"] as List<OrderDetails>;

        //判断删除的水果是不是只有一个

        var query = list.Where(P => P.FruitCode == ids);

        if (query.Count() > 0)

        {

            OrderDetails data = query.First();

            if (data.Count > 1) //证明以前买过,数量减减就行了

            {

                data.Count--;

               //减去一个水果后的价格和数量 

            }

            else

            {

                list.Remove(data);   

                //删除这种水果后计算的价格及删除后的种类的数量         

            }

        }





        int count;

        decimal cost;

        if (Session["cart"] == null)

        {

            count = 0;

            cost = 0;

        }

        else

        {

            List<OrderDetails> list1= Session["cart"] as List<OrderDetails>;

            count = list1.Count();

            //计算总钱数,记住这个代码!!!!!!

            cost = list.Sum(p => p.Count * p.FruitPrice).Value;

        }

        Session["cost"] = cost;

        Session["count"] = count;

        Response.Redirect("gouwuche.aspx");

    }



}      

 

            

查看账户aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="zhanghu.aspx.cs" Inherits="zhanghu" %>



<!DOCTYPE html>



<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title></title>

    <style>

        #div1 {

            position:absolute;

            width:200px;

            height:150px;  

            top:100px;

            left:400px;        

            background-color:#b6ff00;

        }

    

    </style>

</head>

<body>

   

        <center><h1><font color="blue">大苹果购物网</font></h1></center>

      



            <br/>

            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="Default.aspx">浏览商品</a></p>

             <p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="zhanghu.aspx">查看账户</a></p>

             <p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="gouwuche.aspx">查看购物车</a></p>

             <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="denglu.aspx">登录</a></p>



          <div id="div1">

            <asp:Literal ID="Literal1" runat="server"></asp:Literal>

         </div>

          



</body>

</html>

 

查看账户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 zhanghu : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

       

     

        if (Session["data"] == null)

        {

            Response.Redirect("denglu.aspx");

        }

        else

        {

            string user = Session["name"].ToString();

            Login data = new LoginBF().Select(user);

            if (Session["cart"] == null)

            {

         

                Literal1.Text = "您的账户余额为" + data.Account + "";

            }

            else

            {

                decimal cost = Convert.ToDecimal( Session["cost"]);

             

                Literal1.Text = "您的账户余额为" + (data.Account-cost) + "";

            }

        }

    }

}

 

你可能感兴趣的:(session)