购物车主要实现的功能:

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

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

③查看购物车,可以查看明细,包括所购物品的名称,价格,数量等等。由于这里的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. eclipse4.2.1插件安装(二)之Eclipse HTML Editor

    编辑一些页面文件,例如JSP,HTML,JS等,直接用内置的文本编辑器基本比较疯狂,自己选了一个顺手的编辑器,Eclipse HTML Editor! Eclipse HTML编辑器插件主要提供以下功 ...

  2. Php 的替代语法

    替代语法 为什么会有替代语法:     php是嵌入在html文档中的脚本语言,Php可以动态生成html标签,但是php主要功能并不是生成html标签,主要用于动态的生成数据(数据库中的数据).如果 ...

  3. 模板:函数memcpy

    函数原型 void *memcpy(void *dest, const void *src, size_t n); 2功能 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地 ...

  4. Java中的面向对象

    Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释 ...

  5. Navicat for mysql远程连接数据库详(1130错误解决方法)

    用Navicat for mysql连接数据库测试下连接 如果出现1130错误错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to ...

  6. C++带参数默认值的函数

    定义形式: void fun(int a = 1 ,int b = 2 ,int c = 3 ,int d = 4){ //函数定义 cout<<"a="<< ...

  7. iOS之多线程浅谈

    1)并发和并行的区别 在软件开发中不可避免的会遇到多线程的问题,在iOS客户端开发(或者.NET的winform或者wpf这样的cs程序)中就更不可避免的会用到多线程,在bs类型的web项目中要考虑一 ...

  8. PHP 透明水印生成代码

    PHP 透明水印生成代码,需要的朋友可以参考下. 复制代码代码如下: <?php  /*  * Created on 2010-10-27  * BY QQ542900563  * Copyri ...

  9. Dede 列表页 缩略图 有显示无则不显示

    [field:array runphp='yes']@me = (strpos(@me['litpic'],'defaultpic') ? "" : "<div c ...

  10. err: exp-00056 rra-12154 exp-00000

    一直用的是win7系统+oracle11g r1 server端(后简称r1). 由于工作需要装了oracle11g r2 client端(后简称r2). 在装r2之前,r1的导出exp是没有问题的. ...