您的位置:首页 > 其它

Webform——购物车

2015-07-21 20:20 375 查看
购物车主要实现的功能:

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

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

③查看购物车,可以查看明细,包括所购物品的名称,价格,数量等等。由于这里的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; //购买的数量便为0
cost=0;
}
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:100%;
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>     XXX购物网</h1>
<p> </p>
<p>       </p>
<p>                                          
               
               
               
                
          
    <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>  </p>
<p> </p>
<p>      </p>
<p>                 <a href="Index.aspx">浏览商品  </a> </p>
<p style="margin-left: 120px">  <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">  <a href="ViewCart.aspx">查看购物车</a></p>

</div>
</form>
</body>
</html>


效果图:



[b]②实现功能②③,查看购物车代码[/b]

购买:

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() <= 0) //这证明以前没有买过
{
//既然没买过,就要造一个新的存进Session里面去
OrderDetails data = new OrderDetails();
data.FruitCode = id;//购买的物品的ID就是传过来的Id
data.Count = 1;//购买的数量等于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 = 0;
}

//如果购物车不是空的,那么订单就是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>0)
{
Session["bianhao"] = list[0].FruitCode;
Session["shuliang"] = list[0].Count;
}

}
}


protected void Button1_Click(object sender, EventArgs e) //提交订单
{
List<OrderDetails> list = Session["linshi"] as List<OrderDetails>;
for (int i = 0; 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:100%;
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>     查看购物车</h1>
<p> </p>
<p>       </p>
<p>                 </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>   </p>
<p> </p>
<p>      </p>
<p>                 <a href="Index.aspx">浏览商品</a>   </p>
<p style="margin-left: 120px">  <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">  <a href="ViewCart.aspx">查看购物车</a></p>
<p style="margin-left: 120px">          </p>
<p style="margin-left: 120px">                                   </p>
<p style="margin-left: 120px">                                    <a href="ViewAccount.aspx">提交订单</a> </p>
<p style="margin-left: 120px"> </p>
<p style="margin-left: 120px">                      </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() > 0)
{
OrderDetails data = query.First();
if(data.Count>1) //证明以前买过,数量减减就行了
{
data.Count--;
}
else
{
list.Remove(data);
}
}
Response.Redirect("ViewCart.aspx");

}
}


效果图:



[b]③实现下订单转登陆[/b]

登陆

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:100%;
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/>
密码:  <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<br/>
    
<asp:Button ID="Button1" runat="server" Text="登陆" OnClick="Button1_Click" /> 
<input id="Button2" type="button" value="注册"  onclick="LoginUser()"/></div>
<p>      </p>
<p> </p>
<p> </p>
<p> </p>
<p>                 <a href="Index.aspx">浏览商品  </a> </p>
<p style="margin-left: 120px">  <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">  <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:100%;
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> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<div class="change">
<h2>您好:<asp:Literal ID="Literal4" runat="server"></asp:Literal></h2>
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
<p>                 <a href="Index.aspx">浏览商品  </a> </p>
<p style="margin-left: 120px">  <a href="ViewAccount.aspx">查看账户</a></p>
<p style="margin-left: 120px">  <a href="ViewCart.aspx">查看购物车<asp:Literal ID="Literal3" runat="server"></asp:Literal>
</a></p>
</div>
</form>
</body>
</html>


效果图:











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: