购物车主要实现的功能:
①在主页面可以将所有商品显示出来,包括价格,库存。
②点击购买可以累加产品,如果是同一种产品,只会累加每种产品的数量。
③查看购物车,可以查看明细,包括所购物品的名称,价格,数量等等。由于这里的OrderDetails表没有水果名称和价格,所以需要扩展(Paitial)OrderDetails属性。
④在购物车中可以下订单,当点击下订单的时候,需要判断是否已经登录,如果没有登录,则跳到登录页面。
⑤下订单之后,客户的余额减少幅度等于所消费幅度。
⑥余额不足,提示。
⑦库存不足,提示。
⑧购物车清空。
⑨库存产品数量减少,减少的每种产品的数量等于购买的每种产品的数量。
下面用代码来详细介绍一下购物车功能的实现:
aspx代码:
<body> <form id="form1" runat="server"> <div> <h1>大苹果购物网</h1> <p> </p> <div style="float:left; width:150px; height:500px;"> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton> </div> <div style =" float:left; height:500px;"> <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF"> <tr> <td height="25" bgcolor="#FFFFFF">代号</td> <td bgcolor="#FFFFFF">水果名称</td> <td bgcolor="#FFFFFF">水果价格</td> <td bgcolor="#FFFFFF">源产地</td> <td bgcolor="#FFFFFF">库存</td> <td bgcolor="#FFFFFF">操作</td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td height="25" bgcolor="#FFFFFF"><%#Eval("Ids") %></td> <td bgcolor="#FFFFFF"><%#Eval("Name") %></td> <td bgcolor="#FFFFFF"><%#Eval("Price") %></td> <td bgcolor="#FFFFFF"><%#Eval("Source") %></td> <td bgcolor="#FFFFFF"><%#Eval("Numbers") %></td> <td bgcolor="#FFFFFF"><a href="ChuLi.aspx?code=<%#Eval("Ids") %>">购买</a></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <br /> <br /> <asp:Label ID="lblTs" runat="server"></asp:Label> </div> </div> </form> </body>
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 Main : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["uid"] != null) { FirutDataContext context = new FirutDataContext(); Repeater1.DataSource = context.Fruit; Repeater1.DataBind(); if (Session["Cart"] != null) { List<OrderDetails> list = Session["Cart"] as List<OrderDetails>; int sl = list.Count(); decimal zj = Convert.ToDecimal( list.Sum(p => p.Count * p.JiaGe)); lblTs.Text = "购物车中有:"+sl+"件商品,总价为:"+zj+"元。"; } } else { Response.Redirect("DengLu.aspx"); } } } protected void LinkButton1_Click(object sender, EventArgs e) { Response.Redirect("Main.aspx"); } protected void LinkButton2_Click(object sender, EventArgs e) { Response.Redirect("YuE.aspx"); } protected void LinkButton3_Click(object sender, EventArgs e) { Response.Redirect("GouWuChe.aspx"); } }
aspx.cs代码:
<body> <form id="form1" runat="server"> <div> <h1>大苹果购物网</h1> <p> </p> <div style="float:left; width:150px; height:500px;"> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton> </div> <div style =" float:left; height:500px;"> <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF"> <tr> <td height="25" bgcolor="#FFFFFF">代号</td> <td bgcolor="#FFFFFF">水果名称</td> <td bgcolor="#FFFFFF">水果价格</td> <td bgcolor="#FFFFFF">源产地</td> <td bgcolor="#FFFFFF">库存</td> <td bgcolor="#FFFFFF">操作</td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td height="25" bgcolor="#FFFFFF"><%#Eval("Ids") %></td> <td bgcolor="#FFFFFF"><%#Eval("Name") %></td> <td bgcolor="#FFFFFF"><%#Eval("Price") %></td> <td bgcolor="#FFFFFF"><%#Eval("Source") %></td> <td bgcolor="#FFFFFF"><%#Eval("Numbers") %></td> <td bgcolor="#FFFFFF"><a href="ChuLi.aspx?code=<%#Eval("Ids") %>">购买</a></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <br /> <br /> <asp:Label ID="lblTs" runat="server"></asp:Label> </div> </div> </form> </body>
扩展属性代码:
public partial class OrderDetails { private decimal jiaGe; public decimal JiaGe { get { FirutDataContext context = new FirutDataContext(); var query = context.Fruit.Where(p=>p.Ids == FruitCode); Fruit data = query.First(); return data.Price.Value; } set { jiaGe = value; } } private string shangPinName; public string ShangPinName { get { FirutDataContext context = new FirutDataContext(); var query = context.Fruit.Where(p => p.Ids == FruitCode); Fruit data = query.First(); return data.Name; } set { shangPinName = value; } } }
购物车效果图:
aspx代码:
<body> <form id="form1" runat="server"> <div> <h1>购物车</h1> <p> </p> <div style="float:left; width:150px; height:500px;"> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">浏览商品</asp:LinkButton> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">查看账户</asp:LinkButton> <br /> <br /> <br /> <asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkButton3_Click">查看购物车</asp:LinkButton> </div> <div style =" float:left; height:500px;"> <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <table width="600" border="0" cellspacing="1" cellpadding="0" bgcolor="#6600FF"> <tr> <td height="25" bgcolor="#FFFFFF">商品名称</td> <td bgcolor="#FFFFFF">商品单价</td> <td bgcolor="#FFFFFF">购买数量</td> <td bgcolor="#FFFFFF">操作</td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td height="25" bgcolor="#FFFFFF"><%#Eval("ShangPinName") %></td> <td bgcolor="#FFFFFF"><%#Eval("JiaGe") %></td> <td bgcolor="#FFFFFF"><%#Eval("Count") %></td> <td bgcolor="#FFFFFF"><a href="ShanChu.aspx?code=<%#Eval("FruitCode") %>">删除</a></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <br /> <br /> <asp:Label ID="lblTs" runat="server" ForeColor="#CC0000"></asp:Label> <br /> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交订单" /> <br /> <br /> <asp:Label ID="lblSure" runat="server" ForeColor="#CC0000"></asp:Label> <br /> </div> </div> </form> </body>
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 GouWuChe : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //先判断购物车是否为空,不为空显示购物车内容,如果为空进行提示 if (Session["Cart"] != null) { List<OrderDetails> list = Session["Cart"] as List<OrderDetails>; Repeater1.DataSource = list; Repeater1.DataBind(); } else { lblTs.Text = "购物车中没有任何商品!"; } } } protected void LinkButton1_Click(object sender, EventArgs e) { Response.Redirect("Main.aspx"); } protected void LinkButton2_Click(object sender, EventArgs e) { Response.Redirect("YuE.aspx"); } protected void LinkButton3_Click(object sender, EventArgs e) { Response.Redirect("GouWuChe.aspx"); } //点击提交按钮时,先看验证库存是否足够,用户是否登陆,当二者都满足时,然后在进数据库执行删除 protected void Button1_Click(object sender, EventArgs e) { List<OrderDetails> list = Session["Cart"] as List<OrderDetails>; FirutDataContext context = new FirutDataContext(); bool IsOk = true;//定义BOOL类型的变量 //先验证库存,购物车的商品分别进入数据库进行查询,看看库存满足不 foreach (OrderDetails data in list) { int sl = data.Count.Value; var query = context.Fruit.Where(p=>p.Ids == data.FruitCode); int kc = query.First().Numbers.Value; //判断购买的数量和库存数量 if (sl <= kc) { IsOk = IsOk && true; } else { IsOk = IsOk && false; lblSure.Text += query.First().Name +"的库存不足! "; } } //如果库存满足,再进行验证用户是否登录 if (IsOk) { //如果用户登录成功,再判断该用户的余额是否满足购买商品的总额 if (Session["uid"] != null) { string uid = Session["uid"].ToString(); var query = context.Login.Where(p=>p.UserName == uid); decimal ye = query.First().Account.Value; decimal zj = list.Sum(p => p.JiaGe * p.Count).Value; //如果余额满足,再进行减数量,减余额,添加订单详情表 if (ye >= zj) { //减库存 foreach (OrderDetails data in list) { int sl = data.Count.Value; var query2 = context.Fruit.Where(p => p.Ids == data.FruitCode); query2.First().Numbers = query2.First().Numbers.Value - data.Count; context.SubmitChanges(); } //减余额 var query3 = context.Login.Where(p=>p.UserName == uid); query3.First().Account = query3.First().Account.Value - zj; context.SubmitChanges(); //添加订单 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; context.Orders.InsertOnSubmit(data1); context.SubmitChanges(); //添加订单详情表 foreach (OrderDetails data in list) { data.OrderCode = ordercode; } context.OrderDetails.InsertAllOnSubmit(list); context.SubmitChanges(); } //如果余额不满足,进行提示 else { lblSure.Text +="余额不足!"; } } else { Response.Redirect("DengLu.aspx"); } } } }
购物车中有删除功能,不需要显示页面,只执行删除方法,代码如下::
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) { List<OrderDetails> list = Session["Cart"] as List<OrderDetails>; string code = Request["code"].ToString(); var query = list.Where(p => p.FruitCode == code); if (query.First().Count.Value > 1) { query.First().Count--; } else { list.Remove(query.First()); } Session["Cart"] = list; Response.Redirect("GouWuChe.aspx"); } }
aspx代码:
<body> <form id="form1" runat="server"> <center> <div> <asp:Label ID="Label1" runat="server" Text="用户名:"></asp:Label> <asp:TextBox ID="txtuid" runat="server"></asp:TextBox> <br /> <br /> <asp:Label ID="Label2" runat="server" Text="密码:"></asp:Label> <asp:TextBox ID="txtpwd" runat="server" TextMode="Password"></asp:TextBox> <br /> <br /> <asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" /> <br /> <br /> </div> </center> <asp:Literal ID="Literal1" runat="server"></asp:Literal> </form> </body>
原文:http://www.cnblogs.com/jiangshuai52511/p/5222002.html