JavaWeb后台购物车类实现代码详解

 更新时间:2020年07月25日 15:27:14   作者:MrDong先生  
这篇文章主要介绍了JavaWeb后台购物车类实现代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;

就像我们平时去超市买东西一样,会推着购物车去买东西;

那么我们接下来看看java怎么实现购物车的功能,其实原理很简单,java的特点就是面向对象,并且有着封装继承多态三大特性;

java实现这个购物车功能是通过内存来实现的而不是将数据添加到数据库中

首先是Item类,一个Item就代表购物车里面的一行数据

package com.wxd.shopping;

public class Item {
  private int id; //商品id
  private String name;//商品名称
  private String city;//商品产地
  private double price;//商品价格
  private int number;//商品数量
  private String picture;//商品图片地址

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getCity() {
    return city;
  }

  public void setCity(String city) {
    this.city = city;
  }

  public double getPrice() {
    return price;
  }

  public void setPrice(double price) {
    this.price = price;
  }

  public int getNumber() {
    return number;
  }

  public void setNumber(int number) {
    this.number = number;
  }

  public String getPicture() {
    return picture;
  }

  public void setPicture(String picture) {
    this.picture = picture;
  }

  /**
   * 重写hashCode方法,使得在购物车添加商品的时候,如果id和名称相同就判定为同一件商品
   * @return
   */
  @Override
  public int hashCode() {
    return (this.getId()+this.getName()).hashCode();
  }

  /**
   * 重写equals方法,判断是否为同一个对象
   * @param obj
   * @return
   */
  @Override
  public boolean equals(Object obj) {
    if(this==obj){
      return true;
    }
    if(obj instanceof Item){
      Item i= (Item) obj;
      if(this.getId()==i.getId()&&this.getName().equals(i.getName())){
        return true;
      }else{
        return false;
      }
    }else{
      return false;
    }
  }

  @Override
  public String toString() {
    return "Item{" +
        "id=" + id +
        ", name='" + name + '\'' +
        ", city='" + city + '\'' +
        ", price=" + price +
        ", number=" + number +
        ", picture='" + picture + '\'' +
        '}';
  }

  //有参构造
  public Item(int id, String name, String city, double price, int number, String picture) {
    this.id = id;
    this.name = name;
    this.city = city;
    this.price = price;
    this.number = number;
    this.picture = picture;
  }
  //无参构造
  public Item() {
  }
}

购物车类分装了Item和数量的一个集合,还有商品的总金额

下面是购物车类的详细代码以及测试方法:

package com.wxd.shopping;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

//购物车
public class Cart {
  //购买商品的集合
  private HashMap<Item,Integer> goods;
  //购物车的总金额
  private double totalPrice;

  //构造方法初始化数据
  public Cart(){
    goods=new HashMap<Item,Integer>();
    totalPrice=0.0;
  }
  public HashMap<Item, Integer> getGoods() {
    return goods;
  }

  public void setGoods(HashMap<Item, Integer> goods) {
    this.goods = goods;
  }

  public double getTotalPrice() {
    return totalPrice;
  }

  public void setTotalPrice(double totalPrice) {
    this.totalPrice = totalPrice;
  }
  //添加商品进购物车的方法
  public boolean addGoodsInCart(Item item,int number){
    if(goods.containsKey(item)){
      goods.put(item,goods.get(item)+number);
    }else{
      goods.put(item,number);
    }
    calTotalPrice();//重新计算购物车的总金额
    return true;
  }
  //删除商品的方法
  public boolean removeGoodsFromCart(Item item){
    goods.remove(item);
    calTotalPrice();//重新计算购物车的总金额
    return true;
  }
  //统计购物车的总金额
  public double calTotalPrice(){
    double sum=0.0;
    Set<Item> keys=goods.keySet();
    Iterator<Item> iterator = keys.iterator();
    while (iterator.hasNext()){
      Item i = iterator.next();
      sum+=i.getPrice()*goods.get(i);
    }
    this.setTotalPrice(sum);//设置购物车的总金额
    return this.getTotalPrice();
  }

  //测试的main方法
  public static void main(String[] args) {
    //先创建两个商品对象
    Item i1=new Item(1,"耐克","温州",300.0,500,"001.jpg");
    Item i2=new Item(2,"阿迪","广州",500.0,500,"001.jpg");
    Item i3=new Item(1,"耐克","温州",300.0,500,"001.jpg");
    Cart c=new Cart();
    c.addGoodsInCart(i1,1);
    c.addGoodsInCart(i2,2);
    //再次购买耐克鞋
    c.addGoodsInCart(i3,3);
    //遍历购买商品的集合
    HashMap<Item, Integer> goods = c.getGoods();
    Set<Map.Entry<Item, Integer>> entries = goods.entrySet();
    for(Map.Entry<Item, Integer> itemEntry:entries){
      System.out.println(itemEntry.toString());
    }
    System.out.println("购物车总金额:"+c.getTotalPrice());
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java生成一定规则递增编号的示例代码

    Java生成一定规则递增编号的示例代码

    项目需求中有时需要生成一定规则递增编号,本文主要介绍了Java生成一定规则递增编的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Springboot配置@Async无效的解决方案

    Springboot配置@Async无效的解决方案

    这篇文章主要介绍了Springboot配置@Async无效的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 用Rational Rose逆向工程(java)生成类图(教程和错误解决)

    用Rational Rose逆向工程(java)生成类图(教程和错误解决)

    Rational Rose有个很方便的功能,将项目中的JAVA代码自动转换成UML类图
    2013-02-02
  • JavaScript实现贪吃蛇游戏

    JavaScript实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了JavaScript实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • java中的静态代码块、构造代码块、构造方法详解

    java中的静态代码块、构造代码块、构造方法详解

    下面小编就为大家带来一篇java中的静态代码块、构造代码块、构造方法详解。小编觉得挺好的,现在分享给大家。给大家一个参考。一起跟随小编过来看看吧
    2016-03-03
  • Springboot实现Activemq死信队列详解

    Springboot实现Activemq死信队列详解

    这篇文章主要介绍了Springboot实现Activemq死信队列详解,Activemq服务端配置重新投递次数超过 MaximumRedeliveries ,则会进入死信队列,默认情况,有一个死信队列:AcitveMQ.DLQ,所有的消息都投递到此队列,包括过期消息,重投递失败消息,需要的朋友可以参考下
    2023-12-12
  • SpringMVC获取请求参数的方法详解

    SpringMVC获取请求参数的方法详解

    这篇文章主要为大家详细介绍了SpringMVC中获取请求参数的方法,例如通过ServletAPI获取和通过控制器方法的形参获取请求参数等,需要的可以参考下
    2023-07-07
  • 深入剖析Java工厂模式让你的代码更灵活

    深入剖析Java工厂模式让你的代码更灵活

    Java工厂模式是一种创建对象的设计模式,它可以在不暴露对象创建逻辑的情况下,将对象的创建委托给子类或者其他对象。本文就来深入剖析一下Java工厂模式是如何让你的代码更灵活、可扩展、易维护的
    2023-05-05
  • Java之哈夫曼压缩原理案例讲解

    Java之哈夫曼压缩原理案例讲解

    这篇文章主要介绍了Java之哈夫曼压缩原理案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java(enum)枚举用法详解

    Java(enum)枚举用法详解

    本篇文章主要介绍了Java 枚举用法详解,枚举的好处:可以将常量组织起来,统一进行管理。有兴趣的可以一起来了解一下。
    2016-11-11

最新评论