Java面向对象课程设计——购物车

 一、前期调查

流程

首先,用户(User)要在货架(ShelfDaoArrayListImpl)上选择自己所需要的商品(Item),然后将自己所需商品加入购物车(ShoppingCart),有些商品,除了基本的属性(商品名,商品描述,商品单价等),还有有些特殊属性,如手机(Phone)、书(Book)。 根据以上需要,我们创建了User、ShelfDao、Item、ShoppingCart、Phone、Book等类。

根据调研,我们也在GUI界面中加入了加购后的显示商品信息以及结算功能,以及购物车页面的商品详情、单种商品数目,商品总数,商品单价总价等。

二、系统功能结构图

 

三、系统业务流程图

 

 

 四、UML类图

 

五、系统描述(控制台版)

1.文字描述

  1. 首先创建一个货架(Shelf)列表,新建一个用户(User)和一个用以临时存储商品的Item。
  2. 向货架添加(add)商品,将当前用户ID显示(showUser)在控制台,将所有商品信息显示(showShelf)在控制台,获取用户选择(getChoice)。
  3. 当用户选择“1”时,进入购物商品添加模块,显示增购提示信息(showAdd)根据用户输入的商品ID,读取(readItem)购物车列表里是否有此ID并检验,如ID不存在则反馈读取失败(showReadShelfFailMessage),如果添加成功则反馈成功提示(showSuccessMessage)。
  4. 当用户选择“2”时,进入购物车商品删除模块,显示删购提示信息(showDelete)首先展示购物车信息(printShoppingcart),根据用户输入的商品ID,读取购物车列表里是否有次ID并检验,如ID不存在则反馈读取失败,如果删除成功反馈成功提示,删除出错反馈出错提示(showOperateCartFailMessage)。
  5. 当用户选择“3”时,进入购物车展示模块,展示购物车(printShoppingcart),并暂停页面(pause)。
  6. 当用户输入“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 }

功能 

  1. 购物车添加商品
  2. 删除商品
  3. 计算总价
  4. 输出购物车商品列表
  5. 判定用户输入

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 }

 

功能:

  1. 利用列表实现商品货架功能
  2. 可增加和删除货架中的商品
  3. 展示货架
  4. 读取货架中的商品

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 }

 

功能:

  1. 储存商品的各项信息,给拓展类提供继承。
  2. 判断添加的商品是否相同
  3. 重载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     }

 

功能:

  1. 储存用户ID
  2. 储存购物车信息

 

 七、运行展示

  • 登录界面

 

 

  •  菜单界面,选购商品的同时可以直观地看到购物车的内容

 

  • 可添加、删除、清空购物车,选择结算则显示商品详情及总价,并清空购物车

 

  •  功能动态展示

 

 

八、git地址

https://gitee.com/gitzzh20/shopping-cart/tree/master

 

 

 

posted @ 2020-11-30 20:04  Reaches  阅读(225)  评论(0编辑  收藏  举报