购物车主要实现的功能:

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

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

③查看购物车,可以查看明细,包括所购物品的名称,价格,数量等等。由于这里的OrderDetails表没有水果名称和价格,所以需要扩展(Paitial)OrderDetails属性。

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

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

  ⑥余额不足,提示。

⑦库存不足,提示。

⑧购物车清空。

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

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

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

aspx.cs:

public partial class Page_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
cost=;
}
else //如果不为空
{
//用Session来存放数量
List<OrderDetails> temp = Session["cart"] as List<OrderDetails>;//看看Session里面有多少个数据
Count = temp.Count;//购买的数量便是Session里面的数据
cost = temp.Sum(P => P.Count * P.FruitPrice1).Value;
} Literal1.Text = "购物车中有" + Count + "种商品,总共花费"+cost+"元";
//Session["count"] = Count; }
}

aspx:

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

<!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>
.index
{
background-color:#6d9aea;
width:%;
height:1000px;
}
.change {
position:absolute;
top:222px;
left:400px;
height:400px;
width:500px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="index" >
<br/>
<h1>&nbsp;&nbsp;&nbsp;&nbsp; XXX购物网</h1>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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;&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;&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;&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;<a href="Login.aspx"> 登陆</a> </p>
<div class="change" >
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate><table border="1" width="600px" cellpadding="2" cellspacing="1" bgcolor="#fff"><tr><td>代号</td><td>水果名称</td><td>水果价格</td><td>原产地</td><td>货架</td><td>库存量</td><td>操作</td></tr></HeaderTemplate>
<ItemTemplate>
<tr>
<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>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>

</div>
<p> &nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="Index.aspx">浏览商品&nbsp;&nbsp;</a> </p>
<p style="margin-left: 120px">&nbsp; <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">&nbsp; <a href="ViewCart.aspx">查看购物车</a></p> </div>
</form>
</body>
</html>

效果图:

②实现功能②③,查看购物车代码

购买:

aspx.cs

public partial class Page_Buy : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string id= Request["id"].ToString();
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() <= ) //这证明以前没有买过
{
//既然没买过,就要造一个新的存进Session里面去
OrderDetails data = new OrderDetails();
data.FruitCode = id;//购买的物品的ID就是传过来的Id
data.Count = ;//购买的数量等于1
list.Add(data);//将购买的加进订单的集合里面 也就是Session里面
}
else//如果之前买过,只需要再数量上++就可以了
{
OrderDetails data = query.First();//这是根据传进来的Id查到的所购买的物品
data.Count++; //数量++
}
Response.Redirect("Index.aspx"); }
}

查看购物车:

aspx.cs:

public partial class Page_ViewCart : 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 = ;
} //如果购物车不是空的,那么订单就是Session
List<OrderDetails> list = Session["cart"] as List<OrderDetails>; //点击一下购买,那么Session便存了一个信息,然后放到了订单集合里面
cost = list.Sum(P=>P.FruitPrice1*P.Count).Value;
Session["cost"] = cost;
Repeater1.DataSource = list;
Repeater1.DataBind();
Literal1.Text = "总共消费"+cost+"元";
if (list.Count>)
{
Session["bianhao"] = list[].FruitCode;
Session["shuliang"] = list[].Count;
} }
}
  protected void Button1_Click(object sender, EventArgs e) //提交订单
{
List<OrderDetails> list = Session["linshi"] as List<OrderDetails>;
for (int i = ; i < list.Count; i++) //扣除库存
{
string x = list[i].FruitCode;
int y = Convert.ToInt32(list[i].Count);
int count= new FruitBF().SelectByCode(x);
if(y>count)
{
Response.Redirect("kucunbuzu.aspx");
}
else
{
new FruitBF().Update(x, y); } }
Response.Redirect("ViewAccount.aspx");
}


aspx:

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

<!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>
.index
{
background-color:#6d9aea;
width:%;
height:1000px;
}
.change {
position:absolute;
top:222px;
left:400px;
height:234px;
width:500px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="index" >
<br/>
<h1>&nbsp;&nbsp;&nbsp;&nbsp; 查看购物车</h1>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div class="change" >
<h2>购物车中有以下产品,
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</h2>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>商品名称</td>
<td>商品单价</td>
<td>购买数量</td>
<td>操作</td>
</tr></HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Eval("FruitName1") %></td>
<td><%#Eval("FruitPrice1") %></td>
<td><%#Eval("Count") %></td>
<td><a href="Delete.aspx?id=<%#Eval("FruitCode") %>">删除</a></td>
</tr> </ItemTemplate>
<FooterTemplate></table></FooterTemplate> </asp:Repeater> </div>
<p> &nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="Index.aspx">浏览商品</a>&nbsp;&nbsp; </p>
<p style="margin-left: 120px">&nbsp; <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">&nbsp; <a href="ViewCart.aspx">查看购物车</a></p>
<p style="margin-left: 120px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="margin-left: 120px">&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; </p>
<p style="margin-left: 120px">&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;&nbsp; <a href="ViewAccount.aspx">提交订单</a>&nbsp;</p>
<p style="margin-left: 120px">&nbsp;</p>
<p style="margin-left: 120px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p> </div>
</form>
</body>
</html>

删除:

aspx.cs:

public partial class Page_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() > )
{
OrderDetails data = query.First();
if(data.Count>) //证明以前买过,数量减减就行了
{
data.Count--;
}
else
{
list.Remove(data);
}
}
Response.Redirect("ViewCart.aspx"); }
}

效果图:

③实现下订单转登陆

登陆

aspx.cs:

public partial class Page_Login : System.Web.UI.Page
{ protected void Button1_Click(object sender, EventArgs e)
{
string username = TextBox1.Text;
string password = TextBox2.Text; if (string.IsNullOrWhiteSpace(username) )
{
Response.Write("<script>alert('用户名不能为空')</script>"); }
else if(string.IsNullOrWhiteSpace(password))
{
Response.Write("<script>alert('密码不能为空')</script>");
}
else
{ bool isok = new LoginBF().CheckUser(username, password);
if (isok)
{
Login data = new LoginBF().Check(username, password);
Session["user"] = data; Response.Redirect("ViewAccount.aspx");
}
else
{
Response.Write("<script>alert('用户名不存在或密码不正确,请核对!!!')</script>");
}
} }
}

aspx.cs:

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

<!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>
.index
{
background-color:#6d9aea;
width:%;
height:1000px;
}
.change {
position:absolute;
top:222px;
left:400px;
height:400px;
width:500px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="index">
<h1>登陆页面</h1>
<div class="change">
用户名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br/>
密码:&nbsp; <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;
<asp:Button ID="Button1" runat="server" Text="登陆" OnClick="Button1_Click" />&nbsp;
<input id="Button2" type="button" value="注册" onclick="LoginUser()"/></div>
<p>&nbsp;&nbsp;&nbsp; &nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="Index.aspx">浏览商品&nbsp;&nbsp;</a> </p>
<p style="margin-left: 120px">&nbsp; <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">&nbsp; <a href="ViewCart.aspx">查看购物车</a></p>
</div> </form>
</body>
</html>
<script>
function LoginUser()
{
window.location.href = "LoginUser.aspx";
}
</script>

下订单并且判断余额是否足,库存是否足:

aspx.cs:

public partial class Page_ViewAccount : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ decimal cost =Convert.ToDecimal( Session["cost"]);
Login data = Session["user"] as Login;
if (data != null)
{ Literal1.Text = "您的账户余额剩余" + data.Account + "元";
new FruitBF().Update(x,y);
Literal2.Text = "欢迎您:" + data.Name;
if (data.Account >= cost)
{
data.Account = data.Account - cost;
Literal1.Text = "您的账户余额剩余" + data.Account + "元"
;
Session["cart"] = null;
}
else
{
Literal1.Text = "对不起,余额不足!!!!";
}

else
{
Literal1.Text = "库存不足!!!!";
new FruitBF().Delete(x);
}
}
else
{ Response.Redirect("Sorry.aspx");
} } }

aspx:

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

<!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>
.index
{
background-color:#6d9aea;
width:%;
height:1000px;
}
.change {
position:absolute;
top:222px;
left:400px;
height:400px;
width:500px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="index">
<h1>查看账户余额</h1>
<h2><asp:Literal ID="Literal2" runat="server"></asp:Literal></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="change">
<h2>您好:<asp:Literal ID="Literal4" runat="server"></asp:Literal></h2>
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="Index.aspx">浏览商品&nbsp;&nbsp;</a> </p>
<p style="margin-left: 120px">&nbsp; <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">&nbsp; <a href="ViewCart.aspx">查看购物车<asp:Literal ID="Literal3" runat="server"></asp:Literal>
</a></p>
</div>
</form>
</body>
</html>

效果图:

Webform——购物车的更多相关文章

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

    购物车主要实现的功能: ①在主页面可以将所有商品显示出来,包括价格,库存. ②点击购买可以累加产品,如果是同一种产品,只会累加每种产品的数量. ③查看购物车,可以查看明细,包括所购物品的名称,价格,数 ...

  2. webform之session传值(临时数据的存储)与扩展属性 --(购物车练习)

    页面传值:1.QueryString传值在源页面写:Response.Redirect("Main.aspx?uid="+uid+"&pwd="+pwd ...

  3. 在WebForm中实现购物车思路

    关于网站购物车的实现的思考   写在前面的话:刚来公司的的时候,老大安排了一个任务,企业站,但是需要实现购物车的功能,以前没做过,所有就向周围的人请教了一下如何实现购物车,自己也在网上搜了一下,有了些 ...

  4. WebForm 【Repeater】展示数据

       在 Webform 数据展示中      界面层  : HTLM 业务逻辑层 :只能用 C#  Repeater    重复器  能够用来循环展示数据 具有5种模板  HeaderTemplat ...

  5. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  6. session实现购物车

    为实现简单的购物功能(购物车添加.账户查看.购物车商品删除.实时的购物商品数量及价格的计算显示.购物车商品数量可手动输入等),用session实现了一简单的以php语言为基础.连接MySQL数据库的购 ...

  7. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  8. WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体

    最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...

  9. PHP之购物车的代码

    该文章记录了购物车的实现代码,仅供参考 book_sc_fns.php <?php include_once('output_fns.php'); include_once('book_fns. ...

随机推荐

  1. css 控制滚动样式

    ::-webkit-scrollbar{width: 8px; height: 8px;}::-webkit-scrollbar-button:vertical{display:none;}::-we ...

  2. 07_Java8新增的Lambda表达式

    [Lambda表达式概述] Lambda表达式支持将代码块作为方法参数,Lambda表达式允许将使用简洁的代码来创建只有一个抽象方法的接口的实例.(这种接口称为函数式接口) [入门实例] packag ...

  3. OpenJudge 2738 浮点数加法

    1.链接地址: http://bailian.openjudge.cn/practice/2738 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 求2个浮点数相加的和 题目 ...

  4. wifidog编译到openwrt

    首先敲一下 cd 命令,定位到自己的用户目录, 然后 mkdir openwrt 新建一个openwrt文件夹,然后开始装openwrt的编译用到的工具, sudo apt-get install g ...

  5. 12个有趣的C语言问答(详解)

    本文参照博文<12个有趣的C语言问答>,在原文的基础上增加来对应的知识点的详细介绍. 1 gets()方法 Q:下面的代码有一个被隐藏的问题,你能找到它吗? #include <st ...

  6. Android开发系列之AChartEngine

    Android图表控件的开发 曾经开发过一个小程序,在Android电视机上面开发一个APP,用于显示一些统计图表的信息.最后找来找去基于Android Native开发有AChartEngine现成 ...

  7. 通过bat命令批量删除VS查找历史记录

    有时候我们会发现我们的VS查找下拉框里面有很多之前的搜索记录,想删除但是却没有地方删除.  网上的方法都是直接找到注册表HKEY_CURRENT_USER\Software\Microsoft\Vis ...

  8. MSChart实例

    MSChart是VS中自带的图表控件,功能比较强大,效果也比较丰富.下面只提供一个例子,以供新接触的朋友参考. 先看下效果图: 看完效果图上代码啦. 使用这个控件需要先在页面注册一下. <%@ ...

  9. jquery点击其他地方隐藏div层的实现程序

    js代码 $(document).ready(function() { //语言头部的点击事件,显示语言列表 $(".language_selected").click(funct ...

  10. Nhibernate 分页功能

    cs: public IEnumerable<ArticleView> MyGetAll(int start, int limit, ref int count) { try { var ...