您的位置:首页 > 编程语言 > Java开发

JAVAEE中用session实现简单的购物车

2014-12-05 23:05 375 查看
在做网上商城的项目中,很多时候我们都会涉及到购物车这个模块。其实购物车的实现有多种,简单按大类可以分为:数据库层次购物车和session缓存中的购物车。

数据库中的购物车原理其实和用session实现购物车基本类似。此文章重点简单介绍使用session来实现购物车,接下来我们进入正题。

要用session实现购物车,首先就要了解一个购物车的组成,很多网站中例如淘宝网,我们都可以看到一个购物车的组成基本都是商品信息+数量,单条总价等等。所以一个购物车的组成大致可以由商品的升级版(所谓升级版,就是在商品信息的基础上又增加了几个新的属性信息)组成。此时,我们首先就应该新建一个类,该类中包含了升级后的商品,我们称该类为Cart。

建好Cart类之后,因为购物车中可以存放多条商品记录,而Cart只是一个增强版的商品类,并且我们还要在购物车中总结出购物车全部商品的总价,以便我们实现在提交订单功能时的要实现的结算功能。所以我们还需要增加一个类ShoppingCart,该类中要包含一个List集合,之所以要加以个List集合,我想大家都明白了,对,因为一个购物车要包含多条商品记录。

并且该List集合的泛型实现就是商品类。同时我们还在ShoppingCart类中新增一个双精度浮点类型的总价属性,即 :double totalPrice。到目前为止,我们基本上实现了购物车的组成框架。

在实现了购物车的组成框架后,就要实现对购物车的增加,删除等功能。要实现向购物车增加商品的功能其实也很简单,因为购物车是缓存在Session中的,所以在被请求的Action中,我们首先通过session来获取购物车,此时又有两种情况,所以我们要判断,一种是第一次添加,session中还并没有保存购物车,返回null时的情况;第二种是不为null,即不是第一次向购物车中添加商品。在第一种情况下,我们就要新创建一个购物车对象,即ShoppingCart类对象,并将该对象保存到session中,然后执行添加操作。第二种情况是直接取出session中的购物车对象,然后执行添加操作。在添加操作中,同样还有两点需要注意的地方,第一点就是判断List集合中是否存在该商品,如果存在该商品,我们就需要去取出该商品,在该商品的基础上进行修改操作,如果没有改商品,就将新添加的商品直接加入到List集合当中去。此时,我们队购物车的添加就完成了。

删除购物车的例子也很简单,在购物车的删除操作中同样也分为两种情况要进行分析:(1)删除中条记录(2)将购物车中该商品记录的数量减去1

首先我们分析第一种情况:这种情况下,我们可以直接根据商品的id来遍历集合,从集合中找到该商品,然后将该商品从集合中删除,就可以完成了。

第二种情况:我们同样根据商品的id去操作,首先根据商品的id去从集合中找到该商品,然后修改该商品的数量属性(cart中有一个number属性),让该属性减去1。

此时我们就轻松的完成了利用session来实现简单的购物车。

具体代码与你们分享:

/**

 * Cart类(升级版的商品)

 * @author 宋小亮

 *

 */

public class Cart {

private Integer product_id;
private Product product;
private double price;
private int numbers;

public Integer getProduct_id() {
return product_id;
}
public void setProduct_id(Integer product_id) {
this.product_id = product_id;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumbers() {
return numbers;
}
public void setNumbers(int numbers) {
this.numbers = numbers;
}

}

/**

 * ShoppingCart类,购物车实现类

 * @author 宋小亮

 *

 */

public class ShopCart {
public ShopCart(){
products = new ArrayList<Cart>();
}
private List<Cart> products;
private double totalPrice;

public List<Cart> getProducts() {
return products;
}

public void setProducts(List<Cart> products) {
this.products = products;
}

public double getTotalPrice() {
return totalPrice;
}

public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}

//将商品添加到集合
public void addToCart(Product product,int numbers){
//如果集合中不存在该商品,就把该商品装配成Cart加到集合当中
Cart cart = findCartroduct(product.getId());
if(JudgeBlankUtil.ObjIsBlank(cart)){
cart = new Cart();
cart.setProduct_id(product.getId());
cart.setProduct(product);
cart.setPrice(product.getGoodsPrice()*numbers);
cart.setNumbers(numbers);//买了几个
products.add(cart);
}else{
//如果存在就从集合中取出,修改该商品的属性
cart.setPrice(cart.getPrice()+product.getGoodsPrice()*numbers);
cart.setNumbers(cart.getNumbers()+numbers);
}

}
//遍历集合,根据Id判断要添加的商品是否存在,如果存在就做修改,否则直接添加到集合
private Cart findCartroduct(int product_id){
for (Cart cart : products) {
if(cart.getProduct_id() == product_id){
return cart;
}
}
return null; 
}
public void q(){
for (Cart cart : products) {
System.out.println(cart.getProduct_id()+"--->"+cart.getNumbers());
}
}
//总价钱(遍历集合全部Cart,取出其中的总数和单价,相乘相加得出总价)
public double CalTotalPrice(){
double totalPrice = 0;
for (int i = 0; i < products.size(); i++) {
double price=products.get(i).getPrice();
totalPrice+=price;
}
return totalPrice;
}
//获取购物车的数量(件数)
public int getCartTotalNumbers(){
int cartTotalNumbers = products.size();
return cartTotalNumbers;
}

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