网上购书 (Map构建实现)
购物车:添加书、重复添加书、移除书、查看购物车、清空购物车
购物车存放:key-购物信息 (商品对象:数量)
购物车用Map实现,Map中存入key-value: key-商品编号 value-购物信息(商品和数量)
package com.derun.dian.map;
//商品类
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Book{
String isbn; //国际标准图书编号(International Standard Book Number)
String title;
double prise;
public Book() {
}
public Book(String isbn, String title, double prise) {
this.isbn = isbn;
this.title = title;
this.prise = prise;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getPrise() {
return prise;
}
public void setPrise(double prise) {
this.prise = prise;
}
}
//购物信息
class CartItem{ //购物车商品
Book book; //购买的商品
int number; //该商品的购买数量
public CartItem() {
}
public CartItem(Book book, int number) {
this.book = book;
this.number = number;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
//购物车类
class Cart {
Map<String, CartItem> myCart = new HashMap<>(); //代表购物车容器
//添加
public void add(Book book){
//先看购物车里有没有这本书 调用containsKey
boolean isHave = myCart.containsKey(book.getIsbn());
//如果没有 则创建一个新的该书的购物信息项
if(!isHave){
CartItem ci = new CartItem(book,1);
myCart.put(book.getIsbn(), ci);
}else{ //如果有 则修改该书在购物信息项中的数量
CartItem ci = myCart.get(book.getIsbn());
//CartItem ci = myCart.get(book.getIsbn());
ci.setNumber(ci.getNumber() + 1);
myCart.put(book.getIsbn(), ci);
}
}
//删除
public void remove(String isbn){
//先看购物车里有没有这本书
boolean isHave = myCart.containsKey(isbn);
//如果有 则删除
if(isHave){
myCart.remove(isbn); //直接删除
}else{ //没有 提示信息
System.out.println("没有找到该书!");
}
}
//修改
public void update(String isbn,int number){
//先看购物车里有没有这本书
boolean isHave = myCart.containsKey(isbn);
//如果没有 return
if(!isHave) return;
if(isHave){ //有 1.新数量为零 则删除该本书 //2.不为零 修改该书在购物信息项中的数量
if(number == 0){
myCart.remove(isbn);
}else{
CartItem ci = myCart.get(isbn);
ci.setNumber(number);
myCart.put(isbn, ci);
}
}
}
//清空
public void clear(){
//清空购物车
myCart.clear();
}
//查看所以商品
public Collection<CartItem> findAll(){
//遍历购物车 返回所有购物项的集合
//System.out.println(myCart.values());
//List<CartItem> allBooks = myCart.values(); // 不能用List因为Collection不能转换为List类型,只能由List类型转换为Collection
Collection<CartItem> allBooks = myCart.values();
return allBooks;
}
}
//测试程序 模拟购物过程
public class Shopping {
public static void main(String[] args) {
Cart cart = new Cart();
Book book01 = new Book("111","西游记",66.6);
cart.add(book01);
Book book02 = new Book("222","水浒传",62.6);
cart.add(book02);
Book book03 = new Book("333","世界未解之谜",35.5);
cart.add(book03);
Book book04 = new Book("444","哈利波特",33.6);
cart.add(book04);
Book book05 = new Book("111","西游记",66.6);
cart.add(book05);
System.out.println("-----------------------查看所有商品-----------------------");
Collection<CartItem> books = cart.findAll();
book(books);
System.out.println("-----------------------增加商品的数量----------------------");
cart.update("222", 3);
book(books);
System.out.println("-----------------------删除某个商品------------------------");
cart.remove("444");
book(books);
System.out.println("------------------------清空所有商品-----------------------");
cart.clear();
book(books);
}
public static void book(Collection<CartItem> cartItems){
if(cartItems==null || cartItems.size()==0){
System.out.println("您的购物车里还没有添加商品!");
}else{
System.out.println("购物车中现在的商品有:");
for(CartItem item : cartItems){
System.out.println(item.getBook().getTitle() + " " + item.getNumber());
}
}
}
}
运行结果:
-----------------------查看所有商品-----------------------
购物车中现在的商品有:
哈利波特 1
水浒传 1
西游记 2
世界未解之谜 1
-----------------------增加商品的数量----------------------
购物车中现在的商品有:
哈利波特 1
水浒传 3
西游记 2
世界未解之谜 1
-----------------------删除某个商品------------------------
购物车中现在的商品有:
水浒传 3
西游记 2
世界未解之谜 1
-----------------------清空所有商品-----------------------
您的购物车里还没有添加商品!