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. 【c++】函数默认参数

    c++ Prime Plus sixth edition page274 如何设置默认值呢?必须通过函数原型. 只有原型指定了默认值.函数定义与没有默认参数时完全相同. 参考 1. http://ww ...

  2. 12.double的int方

    给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 不要用Math.pow(double,double)哟.效率极其低下,比连成慢好多: 题 ...

  3. javascript文档DOC

    python.java都有官网,有官方文档 javascript却找不到官网和官方文档 js大全 https://github.com/jobbole/awesome-javascript-cn md ...

  4. SQLI DUMB SERIES-5

    less5 (1)输入单引号,回显错误,说明存在注入点.输入的Id被一对单引号所包围,可以闭合单引号 (2)输入正常时:?id=1 说明没有显示位,因此不能使用联合查询了:可以使用报错注入,有两种方式 ...

  5. python------模块定义、导入、优化 ------->sys模块,shutil模块

    1.sys模块 import sys sys.argv #命令行参数List,第一个元素是程序本身路径sys.exit(n) #退出程序,正常退出时exit(0).sys.version #获取Pyt ...

  6. test20190409 线段

    题意 线段(segment) [题目描述] 给定n条线段,第i条线段的左端点为\(l_i\),右端点为\(r_i\).第i条线段覆盖了点x当且仅当\(l_i ≤x ≤ r_i\). 给定Q个询问,第i ...

  7. zabbix使用自定义key进行监控

    我的zabbix-server是安装在另一台虚拟机上的,用来监控下图中的这台虚拟机 先修改zabbix的客户端配置文件,增加UserParameter那行,这里我只是用来测试,所以就随便起了一个名为p ...

  8. linux面试题(自己添加了一些注释说明)

    1.linux如何挂在windows下的共享目录 首先需要在Windows中创建一个文件夹用来共享,例如下面就是server是用来共享的,貌似在哪个位置创建都可以,我是在d盘创建的 1 mount.c ...

  9. hiveserver 占用内存过大的问题

    今天为了求解hiveserver占用内存过大的问题,特地加了hive在apache的邮件列表,讨论半天.特别说的是 里面的人确实很热情啊 ,外国人做事确实很认真,讨论帖发的时候都狠详细. 粘出一些记录 ...

  10. go-elasticsearch 来自官方的 golang es client

    elasticsearch 终于有了官方的golang sdk 了,地址 https://github.com/elastic/go-elasticsearch 当前还不稳定,同时主要是对于es7 的 ...