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());
  }
}

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

(0)

相关推荐

  • eclipse的web项目实现Javaweb购物车的方法

    本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车.文章会在问题分析.具体实现和常见问题这三块为大家详细解说. 问题分析: 首先我们要了解我们要完成的是什么----购物车.然后那实现购物车的什么呢?是不是往购物车添加心仪商品呢.那是不是还要实现价格的计算呢?既然我们了解问题本质了,那我们接下来就要进行具体实现了. 具体实现: 首先我们要看一下项目整体的结构 下面我们要先创建实体类,就是我们的商品.预购商品和购物车这三个实体类. Beans Cart类(这个类是购物车

  • Java Web开发之基于Session的购物商店实现方法

    本文实例讲述了Java Web开发之基于Session的购物商店实现方法.分享给大家供大家参考,具体如下: package cn.com.shopping; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.s

  • java web开发之购物车功能实现示例代码

    之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: 分析一下这三种方法的优缺点: 1.单纯有cookie实现购物车,这样的购物车不是很理想,设想一下,如果客户端的浏览器把cookie给禁用了,这种方法就会在这里流产- 2.session中保存购物车的信息,这个只是在一个会话中可用,如果用户没有

  • javaweb购物车案列学习开发

    本文实例为大家分享了javaweb购物车案列的具体代码,供大家参考,具体内容如下 一.项目目录结构   二.源代码 dao包--dao层:BookDao.java package com.dao; import java.util.Map; import com.DB.DB; import com.domain.Book; public class BookDao { public Map getAll(){ return DB.getAll(); } public Book find(Stri

  • javaweb图书商城设计之购物车模块(3)

    本文继续为大家分享了javaweb图书商城中购物车模块,供大家参考,具体内容如下 购物车存储 保存在session中 保存在cookie中 保存在数据库中 1.创建相关类 购物车的结构: CartItem:购物车条目,包含图书和数量 Cart:购物车,包含一个Map /** * 购物车类 */ public class Cart { private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); /*

  • java web开发之实现购物车功能

    为了方便自己以后复习,所以写的比较仔细,记录下自己的成长.  既然是做购物车,那么前提条件是首先需要一系列商品,也就是要建一个实体,这里建了一个商品表. 通过查询在浏览器上显示 基本显示已经做好了,现在进入我们的重头戏,Servlet  点击放入购物车时,将访问Servlet 购物车代码 package com.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; im

  • JavaWeb开发使用Cookie创建-获取-持久化、自动登录、购物记录、作用路径

    1.cookie是啥?随手百度了网友的说说 简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你. 2.cookie在哪里? 3.cookie可以删除吗? 4.cookie实现原理 第一次请求浏览器,在浏览器的cookie存储区,没有co

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

    相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车: 就像我们平时去超市买东西一样,会推着购物车去买东西: 那么我们接下来看看java怎么实现购物车的功能,其实原理很简单,java的特点就是面向对象,并且有着封装继承多态三大特性: java实现这个购物车功能是通过内存来实现的而不是将数据添加到数据库中 首先是Item类,一个Item就代表购物车里面的一行数据 package com.wxd.shopping; public cl

  • Laravel 5.5 的自定义验证对象/类示例代码详解

    Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代. Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代..很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend 来扩展一个自定义的规则.但在 Laravel 5.5 版本中,我们有了新的手段,只要定义一个实现 Illuminate\Contracts

  • Java中Math类常用方法代码详解

    近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void main(String args[]){ /** *Math.sqrt()//计算平方根 *Math.cbrt()//计算立方根 *Math.pow(a, b)//计算a的b次方 *Math.max( , );//计算最大值 *Math.min( , );//计算最小值 */ System.out.pri

  • 使用jquery-easyui的布局layout写后台管理页面的代码详解

    先在官网下载easyui文档 引入头部文件 <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/static/jquery-easyui-1.3.3/themes/default/easyui.css" rel="external nofollow" rel="external nofollow"

  • Android快速开发系列 10个常用工具类实例代码详解

    打开大家手上的项目,基本都会有一大批的辅助类,今天特此整理出10个基本每个项目中都会使用的工具类,用于快速开发~~在此感谢群里给我发项目中工具类的兄弟/姐妹~ 1.日志工具类L.java package com.zhy.utils; import android.util.Log; /** * Log统一管理类 * * * */ public class L { private L() { /* cannot be instantiated */ throw new UnsupportedOpe

  • jsonp格式前端发送和后台接受写法的代码详解

    什么是JSONP? 先说说JSONP是怎么产生的: 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题,看看是否有帮助. 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准: 2.不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签

  • C++/java 继承类的多态详解及实例代码

    C++/java 继承类的多态详解 学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装.继承.多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同. 首先我们各看一个案例. C++ //测试继承与多态 class Animal { public: char name[128]; char behavior[128]; void outPut() { cout << "Animal" << endl

  • C++ 静态成员的类内初始化详解及实例代码

    C++ 静态成员的类内初始化详解及实例代码 一般来说,关于C++类静态成员的初始化,并不会让人感到难以理解,但是提到C++ 静态成员的"类内初始化"那就容易迷糊了. 我们来看如下代码: //example.h #include<iostream> #include<vector> using namespace std; class Example{ public: static double rate = 6.5; static const int vecSi

  • PHP验证码类文件及调用方式代码详解

    代码如下所示: //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 private $width = 130;//宽度 private $height = 50;//高度 private $img;//图形资源句柄 private $fon

  • python类的方法属性与方法属性的动态绑定代码详解

    动态语言与静态语言有很多不同,最大的特性之一就是可以实现动态的对类和实例进行修改,在Python中,我们创建了一个类后可以对实例和类绑定心的方法或者属性,实现动态绑定. 最近在学习python,纯粹是自己的兴趣爱好,然而并没有系统地看python编程书籍,觉得上面描述过于繁琐,在网站找了一些学习的网站,发现廖雪峰老师的网站上面的学习资源很不错,而且言简意赅,提取了一些python中的重要的语法和案例.重要的是可以在线测试python的运行代码,缺点就是没有系统的看python的书籍,不能及时的将

随机推荐