Java面向对象课程设计——购物车
一、前期调查
流程
首先,用户(User)要在货架(ShelfDaoArrayListImpl)上选择自己所需要的商品(Item),然后将自己所需商品加入购物车(ShoppingCart),有些商品,除了基本的属性(商品名,商品描述,商品单价等),还有有些特殊属性,如手机(Phone)、书(Book)。 根据以上需要,我们创建了User、ShelfDao、Item、ShoppingCart、Phone、Book等类。
根据调研,我们也在GUI界面中加入了加购后的显示商品信息以及结算功能,以及购物车页面的商品详情、单种商品数目,商品总数,商品单价总价等。
二、系统功能结构图
三、系统业务流程图
四、UML类图
五、系统描述(控制台版)
1.文字描述
- 首先创建一个货架(Shelf)列表,新建一个用户(User)和一个用以临时存储商品的Item。
- 向货架添加(add)商品,将当前用户ID显示(showUser)在控制台,将所有商品信息显示(showShelf)在控制台,获取用户选择(getChoice)。
- 当用户选择“1”时,进入购物商品添加模块,显示增购提示信息(showAdd)根据用户输入的商品ID,读取(readItem)购物车列表里是否有此ID并检验,如ID不存在则反馈读取失败(showReadShelfFailMessage),如果添加成功则反馈成功提示(showSuccessMessage)。
- 当用户选择“2”时,进入购物车商品删除模块,显示删购提示信息(showDelete)首先展示购物车信息(printShoppingcart),根据用户输入的商品ID,读取购物车列表里是否有次ID并检验,如ID不存在则反馈读取失败,如果删除成功反馈成功提示,删除出错反馈出错提示(showOperateCartFailMessage)。
- 当用户选择“3”时,进入购物车展示模块,展示购物车(printShoppingcart),并暂停页面(pause)。
- 当用户输入“4”时,退出程序。
2.包结构
此包结构划分了DAO包、模型对象(model)包、主程序(shoppingcart)包、和界面设计(ui)包, 这样分类有助于后期的拓展和维护,程序运行调试,和UI界面的升级
六、核心代码
ShelfDao
1 package dao; 2 3 import model.Item; 4 5 public interface ShelfDao { //货架接口 6 7 public boolean add(Item item); //向货架添加商品 8 public boolean delete(Item item); //删除货架中的商品 9 public void showShelf(); //展示货架 10 public Item readItem(String id); //读取货架上的商品 11 12 }
功能:为数组储存ShelfDaoArrayImpl和列表储存ShelfDaoArrayListImpl提供接口
ShoppingCart
1 package model; 2 3 import java.util.ArrayList; 4 import java.util.Date; 5 6 public class ShoppingCart { //购物车类 7 8 ArrayList<ItemEntry> items = new ArrayList<ItemEntry>(); //存放所选商品 9 10 public boolean add(Item i) { //添加商品 11 if (i == null) 12 return false; 13 int index = getItemById(i.getId()); 14 if (index == -1) { //购物车中尚无此商品,new 15 i.setDate(new Date()); 16 items.add(new ItemEntry(i)); 17 } 18 else { //存在,商品数+1 19 items.get(index).increase(); 20 items.get(index).getItem().setDate(new Date()); 21 } 22 return true; 23 } 24 25 public boolean delete(Item i) { //删除商品 26 if (i == null) 27 return false; 28 int index = getItemById(i.getId()); 29 if (index == -1) //不存在,提示错误信息 30 return false; 31 else { 32 if (items.get(index).getNum() <= 1) //数量减为0,remove 33 items.remove(index); 34 else { //够减,商品数-1 35 items.get(index).decrease(); 36 items.get(index).getItem().setDate(new Date()); 37 } 38 return true; 39 } 40 } 41 42 private double sumPrice() { //计算总价 43 double sum = 0.0; 44 45 for (ItemEntry e : items) { 46 sum += e.getNum()*e.getItem().getPrice(); 47 } 48 return sum; 49 } 50 51 public void printShoppingcart() { //输出购物车所有商品 52 int num = 0; 53 54 System.out.println("您所选购所有的商品如下所示:"); 55 for (ItemEntry e : items) { 56 System.out.println(e); 57 num += e.getNum(); 58 } 59 System.out.println("共"+num+"件商品, 合计"+sumPrice()+"元"); 60 } 61 62 private int getItemById(String id) { //根据id获取商品下标 63 if (id == null) 64 return -1; 65 int index = 0; 66 for (ItemEntry e : items) { 67 if (e.getItem().getId().equals(id)) 68 return index; 69 index++; 70 } 71 return -1; 72 } 73 74 private class ItemEntry{ //商品条目内部类 75 76 Item item; //商品 77 Integer num; //商品数量 78 79 public ItemEntry(Item item) { 80 this.item = item; 81 num = 1; //新建商品,数量为1 82 } 83 84 public Item getItem() { 85 return item; 86 } 87 88 public void setItem(Item item) { 89 this.item = item; 90 } 91 92 public Integer getNum() { 93 return num; 94 } 95 96 public void setNum(Integer num) { 97 this.num = num; 98 } 99 100 @Override 101 public String toString() { 102 return item.toString() + "\t商品数量:" + num; 103 } 104 105 public void increase() { //商品数+1 106 num++; 107 } 108 109 public void decrease() { //商品数-1 110 num--; 111 } 112 113 } 114 115 }
功能
- 购物车添加商品
- 删除商品
- 计算总价
- 输出购物车商品列表
- 判定用户输入
ShelfDaoArrayListImpl
1 package model; 2 3 import java.util.ArrayList; 4 import java.util.Date; 5 6 import dao.ShelfDao; 7 8 public class ShelfDaoArrayListImpl implements ShelfDao { //货架接口列表实现 9 10 ArrayList<Item> shelf = new ArrayList<Item>(); //货架 11 12 //g/s 13 public ArrayList<Item> getShelf() { 14 return shelf; 15 } 16 17 public void setShelf(ArrayList<Item> shelf) { 18 this.shelf = shelf; 19 } 20 21 private int getItemById(String id) { //根据id获取商品下标 22 if (id == null) 23 return -1; 24 int index = 0; 25 for (Item e : shelf) { 26 if (e.getId().equals(id)) 27 return index; 28 index++; 29 } 30 return -1; 31 } 32 33 @Override 34 public boolean add(Item item) { //向货架添加商品 35 if (item == null) 36 return false; 37 int index = getItemById(item.getId()); 38 if (index == -1) { //货架中尚无此商品,添加 39 item.setDate(new Date()); 40 shelf.add(item); 41 return true; 42 } 43 else //已存在,不添加 44 return false; 45 } 46 47 @Override 48 public boolean delete(Item item) { //删除货架中的商品 49 if (item == null) 50 return false; 51 int index = getItemById(item.getId()); 52 if (index == -1) 53 return false; 54 else { 55 shelf.remove(index); 56 return true; 57 } 58 } 59 60 @Override 61 public void showShelf() { //展示货架 62 for (Item e : shelf) { 63 System.out.println(e); 64 } 65 } 66 67 @Override 68 public Item readItem(String id) { //读取货架上的商品 69 if (id == null) 70 return null; 71 int index = getItemById(id); 72 if (index == -1) 73 return null; 74 else 75 return shelf.get(index); 76 } 77 78 }
功能:
- 利用列表实现商品货架功能
- 可增加和删除货架中的商品
- 展示货架
- 读取货架中的商品
Item
1 package model; 2 3 import java.util.Date; 4 5 public class Item { //商品类 6 7 private String name; //商品名 8 private String details; //商品描述 9 private Double price; //商品单价 10 private String id; //商品唯一标识 11 private Date date; //最后一次更新商品信息的时间 12 13 public Item(String name, String details, double price, String id) { //构造函数 14 this.name = name; 15 this.details = details; 16 this.price = price; 17 this.id = id; 18 } 19 @Override 20 public boolean equals(Object obj) { //每件商品具有唯一标识id,id相同即为同一件商品 21 if (this == obj) 22 return true; 23 if (obj == null) 24 return false; 25 if (getClass() != obj.getClass()) 26 return false; 27 Item other = (Item) obj; 28 if (id == null) { 29 if (other.id != null) 30 return false; 31 } else if (!id.equals(other.id)) 32 return false; 33 return true; 34 } 35 36 @Override 37 public String toString() { 38 return "商品id:" + id + "\t更新时间:" + date + "\t商品名称:" + name + "\t商品描述:" + details + "\t单价:" + price; 39 } 40 41 }
功能:
- 储存商品的各项信息,给拓展类提供继承。
- 判断添加的商品是否相同
- 重载toString
User
1 package model; 2 3 public class User { //用户类 4 5 private String id; //用户唯一标识id 6 private ShoppingCart cart; //用户的购物车 7 8 public User(String id) { 9 this.id = id; 10 cart = new ShoppingCart(); 11 }
功能:
- 储存用户ID
- 储存购物车信息
七、运行展示
- 登录界面
- 菜单界面,选购商品的同时可以直观地看到购物车的内容
- 可添加、删除、清空购物车,选择结算则显示商品详情及总价,并清空购物车
- 功能动态展示
八、git地址
https://gitee.com/gitzzh20/shopping-cart/tree/master