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.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...
随机推荐
- Sublime Text 3(中文)在Windows下的配置、安装、运行
Sublime Text 3(中文)下载.安装.运行! 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 具体 ...
- HDU - 5421:Victor and String (回文树,支持首尾插入新字符)
Sample Input 6 1 a 1 b 2 a 2 c 3 4 8 1 a 2 a 2 a 1 a 3 1 b 3 4 Sample Output 4 5 4 5 11 题意:多组输入,开始字符 ...
- 论container的前世今生
why Normally, thin-client multitiered applications are hard to write because they involve many lines ...
- lesson4Embedding-fastai
dense layer:mnist识别中,需要十组dense权重矩阵来计算这十个输出内容,conv矩阵每一个元素乘以另一个矩阵的元素并相加,得到一个值,最后加上sigmoid(softmax在二元情况 ...
- HDU 6015 Skip the Class 优先队列 map的使用
Skip the Class Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- (8)Python连接操作MySQL
pymysql模块下的方法 '''必须实例化对象才能建立连接''' 1.pymysql.connect #和MySQL建立连接 '''得由对象去调用定义游标''' 2.xxx.sursor() # ...
- LG4980 【模板】Polya定理
题意 题目描述 给定一个$n$个点,$n$条边的环,有$n$种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对$10^9+7$取模 注意本题的本质不同,定义为:只需要不能通过旋转与别的染色方 ...
- jenkins安装教程
首先部署java环境 然后部署tomacat(部署之后无需开启tomcat服务) sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenk ...
- unzip命令
unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...
- Python基础_私有变量访问限制
Python内置了一些特殊变量,以前后上下划线标注,同时我们自己要想定义一些变量,不想让外部访问,又该怎么做呢?更多内容请参考:Python学习指南 访问限制 在class内部,可以有属性和方法,而外 ...