Java面向对象课程设计——购物车
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”的逻辑关系,而显然订单并不是一个购物车,因此这个设计并不符合逻辑,仅仅是实现了功能而已。因此,在设计的时候,订单并不能继承自购物车。
以下几点为设计的几个小原则:
- 方法与类必须有内在联系
比如查询商品的方法就是在商城类定义,而不能在商品类。这样才符合设计的逻辑,也方便别人想查找某个方法的时候能够一下就想到在哪里。
- 有关信息的输入输出,全在菜单(即主函数)内实现;业务类方法只返回对象
其一,这样输入输出都在菜单进行,而其他为业务的方法则在所对应的类里面,使得方法看着简洁美观且逻辑性强。其二,这样在菜单获取信息的时候只需知道该业务类方法返回的对象然后被可信对象操作即可,不用知道其他,这样就能对外部环境隐藏该方法的内部工作方式,提高了代码的模块性,且防止了对象之间不良的相互影响,实现对方法的封装。
三、git链接
https://gitee.com/WoMingZiShiGeZiBuXinNiShu/OnlineShop/tree/master/ShoppingSystem
Java面向对象课程设计——购物车的更多相关文章
- java面向对象课程设计-数学表达式计算器
项目简介 设计一个计算器,其能够: 1)由用户输入一个简单的四则运算表达式,求出其计算结果后显示. 2)特殊数学函数,如:绝对值.取整.三角函数.倒数.平方根.平方.立方等. 3)对一定范围内的数字将 ...
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...
- Java课程设计 购物车系统(个人博客) 201521123052 蓝锦明
1. 团队课程设计博客链接 课程设计团队博客 2. 个人负责模块或任务说明 (1)制作图形菜单引导界面 (2)定义各获取和输出类函数 3. 自己的代码提交记录截图 4. 自己负责模块或任务详细说明 i ...
- JAVA课程设计+购物车 个人博客
1. 团队课程设计博客链接 2.个人负责模块或任务说明 将数据库中已经存在的商品取出,用表格显示到页面中. 实现在商品页面的购买,直接弹出消息框,输出价格,实现购买. 实现在商品页面进行添加购物车,并 ...
- Java课程设计 购物车系统(个人博客)
1. 团队课程设计博客链接 课程设计 2. 个人负责模块或任务说明 编写ShoppingCart类,连接数据库 编写updateCart类,从数据库中获取商品信息,获取指定编号的商品信息 编写User ...
- java 课程设计 购物车系统 个人
Q1.团队课程设计博客链接 团队博客 Q2.个人负责模块或任务说明 我主要负责main函数的编写和系统中瞎看功能代码的编写. Q3.自己的代码提交记录截图 main函数代码如下: public sta ...
- JAVA课程设计-购物车 (201521123101 柏清晔)
1.团队课程设计博客链接 /[团队博客链接]http://www.cnblogs.com/yayaya/p/7062197.html 2.个人负责模板或任务说明 1.连接数据库 2.修改购物车的jsp ...
- Java团队课程设计——基于学院的搜索引擎
团队名称.团队成员介绍.任务分配,团队成员课程设计博客链接 姓名 成员介绍 任务分配 课程设计博客地址 谢晓淞(组长) 团队输出主力 爬虫功能实现,Web前端设计及其后端衔接 爬虫:https://w ...
- 实验二 Java面向对象程序化设计
实验二 Java面向对象程序设计 一. 实验要求 1.完成实验.撰写实验报告,以博客方式发表在博客园 2.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...
随机推荐
- SyntaxError: Non-UTF-8 code starting with '\xe5' in file ***.py on line 105, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for
用charles抓包时, 对抓到的html,放到pycharm中解析, 结果报错: SyntaxError: Non-UTF-8 code starting with '\xe5' in file * ...
- 将button或者input角变为圆弧
style="border-radius:5px;" input框时,不能用type属性
- C与C++中实现 gotoxy()函数
#include <stdio.h> #include <windows.h> void gotoxy(int x, int y) { COORD pos = {x,y}; H ...
- Tag文件的创建与应用
Tag文件,几乎和JSP文件一模一样,可以被JSP页面动态加载调用.Tag文件有什么优势呢(既然和JSP几乎一模一样,那就得想想这个必然有不一样的地方,不然要它存在干嘛) 在设计Web应用时,可以通过 ...
- GoLand tool tips
goland format code (on save ) preference -> tool -> file watcher then ,select go fmt 2, highl ...
- 取消svn关联文件夹
svn没有自带取消svn关联功能,所以我们需要以下脚本 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classe ...
- CentOS7.1 KVM虚拟化之环境准备
备注:实验没有问题,只是暂时还不知道弄这个用来干嘛,不过先留着以后查看吧 一.基础平台 1.一台装有VMware的Windows系统 (可联网) 2.CentOS7.1 64bit 镜像 二.最小化安 ...
- jdk1.9之前的版本及jdk1.9环境变量的配置
一.jdk9之前安装配置 1.下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.配置环境变量: 安装 ...
- C# to IL 18 Glossary(术语)
- sql-索引的作用
(一)深入浅出理解索引结构 何时使用聚集索引/非聚集索引 结合实际,谈索引使用的误区 其他书上没有的索引使用经验总结 其他注意事项 (二)改善SQL语句 (三)实现小数据量和海量数据的通用分页显示存储 ...