使用java容器(集合类)模拟商城

来源:互联网 发布:淘宝收到货后怎么评价 编辑:程序博客网 时间:2024/06/05 16:32

我们这里的商城,需要实现的功能有:

1.添加商品;

2.查看商品;

3.添加商品到购物车;

4.查看商品;

5.退出;

6.退出时将商品存到文件中,

7.前后分离,通过接口连接。

部分效果如下:

******欢迎光临xxx购物系统v1.0******
1、添加商品
2、查看商品
3、添加商品到购物车
4、查看购物车
5、退出
请输入你要选择的功能:1~5
2
商品id 商品名称 商品颜色 商品价格 商品尺寸 商品库存
******欢迎光临xxx购物系统v1.0******
1、添加商品
2、查看商品
3、添加商品到购物车
4、查看购物车
5、退出
请输入你要选择的功能:1~5
1
请输入商品的id
1001
请输入商品的名称
苹果
请输入商品的颜色
红色
请输入商品的价格
200
请输入商品的尺寸
10
请输入商品的库存
200
******欢迎光临xxx购物系统v1.0******
1、添加商品
2、查看商品
3、添加商品到购物车
4、查看购物车
5、退出
请输入你要选择的功能:1~5
4
商品id 商品名称 商品价格 商品数量
----------------------------------
应付款:0.0
******欢迎光临xxx购物系统v1.0******
1、添加商品
2、查看商品
3、添加商品到购物车
4、查看购物车
5、退出
请输入你要选择的功能:1~5
3
请输入你要添加到购物车商品的id
1001
请输入你要添加到购物车商品的数量
20
******欢迎光临xxx购物系统v1.0******
1、添加商品
2、查看商品
3、添加商品到购物车
4、查看购物车
5、退出
请输入你要选择的功能:1~5
4
商品id 商品名称 商品价格 商品数量
1001 苹果 200.0 20
----------------------------------
应付款:4000.0


下面,我们开始分析:

1.首先我们创建一个实体包(com.uwo9.shopping.entity),来存放购物车类和商品类:

商品有商品id,商品价格,商品颜色,商品尺寸,商品库存;

购物出有商品ID,商品名称,商品价格,商品数量。

package com.uwo9.shopping.entity;import java.io.Serializable;/** * 商品id 商品名称 商品价格 商品颜色 商品尺寸 商品库存 * */public class Product implements Serializable {private static final long serialVersionUID = -115564062185984193L;private int id;private String name;private String color;private double price;private double size;private int store;public Product() {super();}public Product(int id, String name, String color, double price, double size, int store) {super();this.id = id;this.name = name;this.color = color;this.price = price;this.size = size;this.store = store;}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 getColor() {return color;}public void setColor(String color) {this.color = color;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public double getSize() {return size;}public void setSize(double size) {this.size = size;}public int getStore() {return store;}public void setStore(int store) {this.store = store;}@Overridepublic String toString() {return id + "\t" + name + "\t" + color + "\t" + price + "\t" + size + "\t" + store;}}
package com.uwo9.shopping.entity;/** * id 名字 单价 数量 * */public class CartItem {private String name;private int id;private double price;private int count;public CartItem() {}public CartItem(String name, int id, double price, int count) {super();this.name = name;this.id = id;this.price = price;this.count = count;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic String toString() {return id + "\t" + name + "\t" + price + "\t" + count;}}

2.来创建一个接口包(com.uwo9.shopping.dao),来规范我们需要实现的功能。

商品接口需要实现的功能有:

添加商品,展示所有商品,通过id查看商品信息,将商品保存到文件中。

package com.uwo9.shopping.dao;import com.uwo9.shopping.entity.Product;/** * 商品的接口 * */public interface ProductDao {/** * 添加商品方法 *  * @param product */void addProduct(Product product);/** * 展示所有商品 */void showAllProduct();/** * 通过id获取商品 *  * @param id * @return */Product getProduceById(int id);/** * 将商品保存到文件中 */void saveProducts();}

购物车接口需要实现的功能有:

添加商品到购物车,展示购物车中所有的条目。

package com.uwo9.shopping.dao;import com.uwo9.shopping.entity.CartItem;/** * 购物车接口 * */public interface CartItemDao {/** * 添加商品到购物车 *  * @param item */void addCartItem(CartItem item);/** * 展示购物车中所有的条目 */void showItems();}
3.下面,我们来实现这些接口功能,我们再创建 一个包(com.uwo9.shopping.dao.impl)。

实现商品接口:

package com.uwo9.shopping.dao.impl;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.Collection;import java.util.LinkedHashMap;import com.uwo9.shopping.dao.ProductDao;import com.uwo9.shopping.entity.Product;@SuppressWarnings("unchecked")public class ProductDaoImpl implements ProductDao {// 用来存储所有商品(使用静态的成员变量,保证所有对象共享)static LinkedHashMap<Integer, Product> lkMap = new LinkedHashMap<>();// 商品信息初始化static {File file = new File("products.txt");if (file.exists()) {ObjectInputStream oiStream = null;try {oiStream = new ObjectInputStream(new FileInputStream(file));lkMap = (LinkedHashMap<Integer, Product>) oiStream.readObject();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {oiStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}@Overridepublic void addProduct(Product product) {Product product2 = lkMap.get(product.getId());if (product2 != null) {product2.setStore(product2.getStore() + product.getStore());product2 = null;} else {// 将前台传来的对象存储到容器中lkMap.put(product.getId(), product);}}@Overridepublic void showAllProduct() {Collection<Product> products = lkMap.values();System.out.println("商品id\t商品名称\t商品颜色\t商品价格\t商品尺寸\t商品库存");for (Product product : products) {System.out.println(product);}}/** * 通过id获取商品的方法 *  * @param id * @return */@Overridepublic Product getProduceById(int id) {return lkMap.get(id);}@Overridepublic void saveProducts() {if (!lkMap.isEmpty()) {File productsFile = new File("products.txt");ObjectOutputStream ooStream = null;try {ooStream = new ObjectOutputStream(new FileOutputStream(productsFile));ooStream.writeObject(lkMap);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {ooStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
实现购物车接口:

package com.uwo9.shopping.dao.impl;import java.util.Collection;import java.util.LinkedHashMap;import com.uwo9.shopping.dao.CartItemDao;import com.uwo9.shopping.entity.CartItem;import com.uwo9.shopping.entity.Product;public class CartItemDaoImpl implements CartItemDao {// 用来存储所有购物车商品(使用静态的成员变量,保证所有对象共享)static LinkedHashMap<Integer, CartItem> lkMap = new LinkedHashMap<>();/** * 添加商品到购物车 */@Overridepublic void addCartItem(CartItem item) {CartItem item2 = lkMap.get(item.getId());// 判断该商品是否存在,如果存在则直接叠加数量,否者创建新的if (item2 != null) {item2.setCount(item2.getCount() + item.getCount());} else {lkMap.put(item.getId(), item);}// 获取商品信息Product product = new ProductDaoImpl().getProduceById(item.getId());// 修改商品库存数量product.setStore(product.getStore() - item.getCount());}/** * 展示购物车中所有的条目 */@Overridepublic void showItems() {System.out.println("商品id\t商品名称\t商品价格\t商品数量");Collection<CartItem> items = lkMap.values();double total = 0;// 购物车物品总价for (CartItem cartItem : items) {System.out.println(cartItem);total += cartItem.getPrice() * cartItem.getCount();}System.out.println("----------------------------------");System.out.println("应付款:" + total);}}
4.最后我们来创建一个包来模拟前台(com.uwo9.shooping.test)。

package com.uwo9.shooping.test;import java.util.Scanner;import com.uwo9.shopping.dao.CartItemDao;import com.uwo9.shopping.dao.ProductDao;import com.uwo9.shopping.dao.impl.CartItemDaoImpl;import com.uwo9.shopping.dao.impl.ProductDaoImpl;import com.uwo9.shopping.entity.CartItem;import com.uwo9.shopping.entity.Product;/** * 模拟的前台操作 * */public class Test01 {static Scanner scanner = new Scanner(System.in);public static void main(String[] args) {do {showMenu();// 展示主菜单方法try {int number = scanner.nextInt();switch (number) {case 1:// 添加商品addPro();break;case 2:// 查看商品showProducts();break;case 3:// 添加商品到购物车addItem();break;case 4:// 查看购物车showAllItems();break;case 5:// 退出systemExit();break;default:System.out.println("输入错误,请重新选择!");break;}} catch (Exception e) {System.out.println("输入错误,请重新选择!");scanner.next();}} while (true);}/** * 展示主菜单方法 */public static void showMenu() {System.out.println("******欢迎光临xxx购物系统v1.0******");System.out.println("\t1、添加商品");System.out.println("\t2、查看商品");System.out.println("\t3、添加商品到购物车");System.out.println("\t4、查看购物车");System.out.println("\t5、退出");System.out.println("请输入你要选择的功能:1~5");}/** * 前台添加商品 */public static void addPro() {System.out.println("请输入商品的id");int id = scanner.nextInt();System.out.println("请输入商品的名称");String name = scanner.next();System.out.println("请输入商品的颜色");String color = scanner.next();System.out.println("请输入商品的价格");double price = scanner.nextDouble();System.out.println("请输入商品的尺寸");double size = scanner.nextDouble();System.out.println("请输入商品的库存");int store = scanner.nextInt();// 商品的信息从控制台输入Product product = new Product(id, name, color, price, size, store);ProductDao productDao = new ProductDaoImpl();productDao.addProduct(product);}/** * 展示所有商品 */public static void showProducts() {ProductDao productDao = new ProductDaoImpl();productDao.showAllProduct();}/** * 添加到购物车 */public static void addItem() {System.out.println("请输入你要添加到购物车商品的id");int id = scanner.nextInt();// 通过id,获取商品是否拥有Product product = new ProductDaoImpl().getProduceById(id);if (product != null) {System.out.println("请输入你要添加到购物车商品的数量");int count = scanner.nextInt();CartItem item = new CartItem(product.getName(), id, product.getPrice(), count);// 调用购物车后台方法CartItemDao cartItemDao = new CartItemDaoImpl();cartItemDao.addCartItem(item);} else {System.out.println("没有该商品");}}/** * 展示购物车内所有商品条目 */public static void showAllItems() {new CartItemDaoImpl().showItems();}/** * 退出系统 */public static void systemExit() {// 退出系统前将商品数据保存到文件中ProductDao pDao = new ProductDaoImpl();pDao.saveProducts();System.out.println("谢谢惠顾");scanner.close();System.exit(0);}}

好了,我们需要实现的功能完成了,大家也可以自己拓展一些功能。