JavaWeb后台购物车类实现代码详解
作者:MrDong先生 时间:2023-11-09 23:11:26
相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;
就像我们平时去超市买东西一样,会推着购物车去买东西;
那么我们接下来看看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());
}
}
来源:https://www.cnblogs.com/MrXiaoAndDong/p/Cart.html
标签:Java,Web,后台,购物车,类
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C#实现装饰器模式
2023-06-18 04:48:16
![](https://img.aspxhome.com/file/2023/3/126103_0s.png)
Android Bitmap和Drawable的对比
2021-11-16 06:03:41
java链式创建json对象的实现
2023-11-12 12:36:51
C# 读写自定义的Config文件的实现方法
2022-09-08 23:22:35
![](https://img.aspxhome.com/file/2023/5/91365_0s.png)
深入同步访问共享的可变数据分析
2023-05-08 00:16:49
Java如何跳出当前多重循环你知道吗
2022-12-17 02:22:17
详解C#如何实现分割视频
2022-12-07 10:48:23
![](https://img.aspxhome.com/file/2023/7/85707_0s.png)
SpringBoot异步调用方法实现场景代码实例
2023-10-23 14:14:23
Android 游戏开发之Canvas画布的介绍及方法
2021-12-14 23:10:54
Java探索之Thread+IO文件的加密解密代码实例
2023-01-26 19:07:03
C#通过流写入一行数据到文件的方法
2023-08-22 13:04:08
完美解决客户端webview持有的页面缓存,不会立即释放的问题
2021-09-23 03:30:50
C# WPF如何反射加载Geometry几何图形数据图标
2021-09-06 11:39:08
![](https://img.aspxhome.com/file/2023/9/86969_0s.png)
java在网页上面抓取邮件地址的方法
2023-10-01 19:18:21
基于获取JAVA路径,包括CLASSPATH外的路径的方法详解
2022-12-20 21:30:03
Java编程实现帕斯卡三角形代码示例
2023-11-02 08:08:24
![](https://img.aspxhome.com/file/2023/3/58303_0s.gif)
C#无损转换Image为Icon的方法
2023-07-30 02:38:40
Spring Bean的线程安全问题
2023-06-07 17:15:36
超炫酷的WPF实现Loading控件效果
2023-11-19 23:53:20
![](https://img.aspxhome.com/file/2023/1/111281_0s.png)
Flutter SizedBox布局组件Widget使用示例详解
2022-02-08 18:19:44