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

小组成员:余景胜、刘格铭、陈国雄、达瓦次仁

一、前期调查

流程

客人(Buyer)先在商城(Mall)中浏览商品(Commidity),将浏览的商品加入购物车(Shopping Cart),最后通过购物车生成订单(Order),在购买时填写顾客地址信息(address),购买结束。

二、购物车

1.图表

业务流程图

功能结构图

UML图

2.包

包结构

3.类

(代码中均省略了自动生成的getter/setter)

Mall

代码
public class Mall {// 商场
private List<Commodity> commodities = new ArrayList<>();
{                                      // 初始化商品
commodities.add(new Commodity("耐克 AJ1 GS", 3999, 1, "shoes"));
commodities.add(new Commodity("OnePlus 6", 3599, 2, "phone"));
commodities.add(new Commodity("苹果iPhone XS", 8699, 3, "phone"));
commodities.add(new Commodity("联想拯救者Y7000", 7499, 4, "computer"));
commodities.add(new Commodity("森马T恤", 65.9, 5, "cloth"));
commodities.add(new Commodity("匡威男式板鞋", 419.0, 6, "shoes"));
commodities.add(new Commodity("七匹狼休闲裤", 278, 7, "cloth"));
commodities.add(new Commodity("黑人牙膏", 13.9, 8, "dailylife"));
commodities.add(new Commodity("黑人牙刷", 15.9, 9, "dailylife"));
commodities.add(new Commodity("戴尔灵越367", 5099, 10, "computer"));
}
public List<Commodity> showGoods() {// 展示商品
return this.commodities;
}
public Commodity searchGoodById(int id) {// 按编号搜索商品
int i = 0, flag = 1;
for (i = 0; i < commodities.size(); i++) {
if (commodities.get(i).getId() == (id)) {
return commodities.get(i);
}
}
if (flag == 1)
System.out.println("对不起,您要找的商品我们没有");
return null;
} public List<Commodity> searchGoodsByType(String type) {// 按类型搜索商品
int i = 0;
List<Commodity> list = new ArrayList<>();
for (i = 0; i < commodities.size(); i++) {
if (commodities.get(i).getType().equals(type)) {
list.add(commodities.get(i));
}
}
return list;
} }

功能:
  • 默认开始对商城进行初始化
  • 展示商城所有商品
  • 输入编号搜索商品,并将商品信息输出;反之则输出无法找到相应商品
  • 输入类型搜索商品,将该类商品全部输出;不存在则直接输出不存在

Commodity

代码
public class Commodity {//商品
private String name;
private double price;
private Integer id;
private String type;
public Commodity(String name, double price, Integer id, String type) {
this.name = name;
this.price = price;
this.id = id;
this.type = type;
}
public Commodity() { }
功能:
  • 存储商品信息 :姓名 价格 编号 种类

ShoppingCart

代码
方法部分
public class ShoppingCart {
private List<ItemEntry> itemList = new ArrayList<>(); public void addToCart(Commodity e) { int index = findById(e.getId());
if (index == -1) {
itemList.add(new ItemEntry(e)); } else {
itemList.get(index).increase();
}
} public List<ItemEntry> getItemList() {
return itemList;
}
public List<ItemEntry> emptyCart(){
itemList.clear();
return itemList;
}
public List<ItemEntry> seeMyCart() {
return itemList;
} public Order putInOrder() {
Order ord = new Order();
ord.setOrderList(itemList);
return ord;
} public boolean remove(Integer id) {
if (id == null)
return false;
int index = findById(id);
if (index == -1) {// 未找到
return false;
} else {
ItemEntry entry = this.itemList.get(index);
if (entry.getPiece() <= 1) {
this.itemList.remove(index);
} else {
entry.decrease();
}
}
return true;
} private int findById(Integer id) {
int index = -1;
if (itemList.size() > 0) {
for (int i = 0; i < itemList.size(); i++) {
if (itemList.get(i).getItem().getId() == id)
index = i;
}
}
return index;
}
ShoppingCart的内部类ItemEntry
public class ItemEntry {
Commodity item;
Integer piece; public ItemEntry(Commodity item) {
this.item = item;
piece = 1;
} public void increase() {
piece++;
} public void decrease() {
piece--;
}
/*......*/
public String toString() {
return "ItemEntry [item=" + item + ", piece=" + piece + "]";
} }
}
功能:
  • 添加商品到购物车:若不存在则添加新商品;若存在则在已有的数量上加一
  • 查看购物车商品清单
  • 清空购物车
  • 查看商品列表
  • 生成订单:将购物车中的商品穿给订单类
  • 按编号删除商品:若商品存在且数量不为一,则数量减一;若数量为一,则商品删除;若商品不存在则返回false
  • 找到输入编号的商品:若存在则返回其在List中的位置,否则返回-1;

内置类ItemEntry

  • 存储购物车中条目:商品 数量
  • 初始化新加入的商品,数量默认为一
  • 操作商品数量
  • 输出条目信息

Order

代码
public class Order {
private Buyer buyer;
private List<ItemEntry>orderList=new ArrayList<>() ;
private String orderId; public List<ItemEntry> checkOrder() {
if(orderList.size()>0) {
return orderList;
}else {
return null;
}
}
public String getOrderId() {
return orderId;
}
public void setOrderId() {
int x=new Random().nextInt(100);
this.orderId = " "+x;
}
/*......*/
功能:
  • 检查购物车中是否存在商品
  • 生成订单信息

Buyer

代码
public class Buyer {
private String name;
private int zip;
private String tel;
private String email;
private Address address;
public Buyer allImformation(Buyer you) {
return you;
}
/*......*/
功能:
  • 存储买家相关信息

Address

代码
public class Address {
private String city;
private String street;
private String location;
/*.......*/
功能:
  • 存储地址信息

4.实现思路

简易购物车系统具体功能设计:

1、商城功能:包括所有上架商品展示、按类型查找商品和被选定商品详细信息展示。

2、购物车功能:包括选定商品到购物车,查看、清空购物车以及从购物车删除某商品。

3、订单功能:包括获取购物车的信息以及获取购买者的一些联系信息,最后就是结账了。

简易购物车系统的面向对象(这里只体现在封装上)

众所周知,JAVA是面向对象的编程语言,所以我们在设计类以及方法的时候不能只看重功能可行性,更重要的是要符合逻辑。举个例子,对于订单与购物车,如果不考虑符不符合逻辑,让订单直接继承自购物车的话就很简单,可以省去不少代码,但是考虑到类的继承必须要符合“is-a”的逻辑关系,而显然订单并不是一个购物车,因此这个设计并不符合逻辑,仅仅是实现了功能而已。因此,在设计的时候,订单并不能继承自购物车。

以下几点为设计的几个小原则:

  1. 方法与类必须有内在联系  

比如查询商品的方法就是在商城类定义,而不能在商品类。这样才符合设计的逻辑,也方便别人想查找某个方法的时候能够一下就想到在哪里。

  1. 有关信息的输入输出,全在菜单(即主函数)内实现;业务类方法只返回对象 

     其一,这样输入输出都在菜单进行,而其他为业务的方法则在所对应的类里面,使得方法看着简洁美观且逻辑性强。其二,这样在菜单获取信息的时候只需知道该业务类方法返回的对象然后被可信对象操作即可,不用知道其他,这样就能对外部环境隐藏该方法的内部工作方式,提高了代码的模块性,且防止了对象之间不良的相互影响,实现对方法的封装。

三、git链接

https://gitee.com/WoMingZiShiGeZiBuXinNiShu/OnlineShop/tree/master/ShoppingSystem

Java面向对象课程设计——购物车的更多相关文章

  1. java面向对象课程设计-数学表达式计算器

    项目简介 设计一个计算器,其能够: 1)由用户输入一个简单的四则运算表达式,求出其计算结果后显示. 2)特殊数学函数,如:绝对值.取整.三角函数.倒数.平方根.平方.立方等. 3)对一定范围内的数字将 ...

  2. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  3. Java课程设计 购物车系统(个人博客) 201521123052 蓝锦明

    1. 团队课程设计博客链接 课程设计团队博客 2. 个人负责模块或任务说明 (1)制作图形菜单引导界面 (2)定义各获取和输出类函数 3. 自己的代码提交记录截图 4. 自己负责模块或任务详细说明 i ...

  4. JAVA课程设计+购物车 个人博客

    1. 团队课程设计博客链接 2.个人负责模块或任务说明 将数据库中已经存在的商品取出,用表格显示到页面中. 实现在商品页面的购买,直接弹出消息框,输出价格,实现购买. 实现在商品页面进行添加购物车,并 ...

  5. Java课程设计 购物车系统(个人博客)

    1. 团队课程设计博客链接 课程设计 2. 个人负责模块或任务说明 编写ShoppingCart类,连接数据库 编写updateCart类,从数据库中获取商品信息,获取指定编号的商品信息 编写User ...

  6. java 课程设计 购物车系统 个人

    Q1.团队课程设计博客链接 团队博客 Q2.个人负责模块或任务说明 我主要负责main函数的编写和系统中瞎看功能代码的编写. Q3.自己的代码提交记录截图 main函数代码如下: public sta ...

  7. JAVA课程设计-购物车 (201521123101 柏清晔)

    1.团队课程设计博客链接 /[团队博客链接]http://www.cnblogs.com/yayaya/p/7062197.html 2.个人负责模板或任务说明 1.连接数据库 2.修改购物车的jsp ...

  8. Java团队课程设计——基于学院的搜索引擎

    团队名称.团队成员介绍.任务分配,团队成员课程设计博客链接 姓名 成员介绍 任务分配 课程设计博客地址 谢晓淞(组长) 团队输出主力 爬虫功能实现,Web前端设计及其后端衔接 爬虫:https://w ...

  9. 实验二 Java面向对象程序化设计

    实验二 Java面向对象程序设计 一.  实验要求 1.完成实验.撰写实验报告,以博客方式发表在博客园 2.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...

随机推荐

  1. Linux Kernel Stack

    整理一些杂乱的内容.以下x86架构. Linux 内核栈大小 内核栈大小是固定的,默认为8k,曾经有选项可以设置为4k栈.由于大小固定,申请过大的栈内存,或者函数调用层次过深,都可能导致栈溢出. 关注 ...

  2. ss server端配置

    关于ss server的配置,可以参考一个网址 关于服务器的购买可以上VIRMACH购买 和本地安装ss类似,首先安装ss,pip install shadowsocks 配置服务器参数,vim /e ...

  3. CF446 (Div. 1)简单题解

    A .DZY Loves Sequences pro:给定长度为N的序列,你最多可以改变一个数的值,问最长严格上升子序列长度. N<1e5. sol:分几种情况,一种的不改变: 一种是改变,然后 ...

  4. P2279 消防局的设立(贪心+dp)

    题目链接:传送门 题目大意: 给定一棵树(N个基地N-1条边): 用半径为2的消防局覆盖这N个基地,问最小的消防局数量. (树上距离为k的最小覆盖问题) 思路: 每次贪心地找到不被覆盖的最深的一个节点 ...

  5. MyBatis like函数使用注意事项

    百分号后面必须要加上空格,不然会将后面的字符串全部都黏在一起,导致sql语句运行报错

  6. jeecg-org.jeecgframework.web.system.listener.InitListener

    早上启动项目 发现报错 百度之后,发现这属于jeecg常见问题: http://www.jeecg.org/forum.php?mod=viewthread&tid=1830&extr ...

  7. MySQL用户管理、常用sql语句、MySQL数据库备份恢复

    1.MySQL用户管理 给远程登陆用户授权:grant all on *.* to 'user1'@'127.0.0.1' identified by '123456' (这里的127.0.0.1是指 ...

  8. import sys

    目录 sys模块的常见函数列表 1.sys.argv 2.sys.platform 3.sys.path 4.sys.exit(n) sys模块提供了一系列有关Python运行环境的变量和函数. 回到 ...

  9. centos6下安装opencv3

    环境 centos6.5 opencv3.3.0 python3.4.9 下载 opencv可从GitHub下载https://github.com/opencv/opencv/tree/3.4.3可 ...

  10. centos7之zabbix入门(一)

    初始化状态如下 首先按照下面的步骤进行,主机名和可见名可以自己起,dns那里最好也填一下,其它默认就可以了 点击确认后,自动跳转到以下页面 可以看到zbx那里没有亮起来,说明还没有配置成功,接下来点击 ...