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.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...
随机推荐
- linux 如何使用密钥登录 (CentOs)
说明:一般的密码方式登录容易被密码暴力破解.所以一般我们会将 SSH 的端口设置为默认22以外的端口,或者禁用root账户登录.其实可以通过密钥登录这种方式来更好地保证安全. 密钥形式登录的原理是:利 ...
- NOI-1.1-04输出保留3位小数的浮点数
04:输出保留3位小数的浮点数 总时间限制: 1000ms 内存限制: 65536kB 描述 读入一个单精度浮点数,保留3位小数输出这个浮点数. 输入 只有一行,一个单精度浮点数. 输出 也只有一 ...
- urllib模块通过post请求获取数据
功能: 输入你要查找的单词,会返回相对应的结果 import urllib.request import urllib.parse import json class youdaoSpider: de ...
- SQLAlchemy中表结构的一对一
1.先导入相对应的库 from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.in ...
- 重绘和回流(reflow和repaint)
由于DOM操作会导致浏览器的回流,回流需要花费大量的时间进行样式计算和节点重绘与渲染,所以应当尽量减少回流次数. 以下是几种常见的减少重绘和回流的方法: 一.不要一项一项的更改页面的样式,尽量一口气写 ...
- SQL Server 表分区备忘
1.创建的代码如下: )) AS RANGE LEFT FOR VALUES ( N', N', N',... ) CREATE PARTITION SCHEME [01_SubjectiveScor ...
- centos7部署phpipam(ip管理系统)
安装必要的软件 yum install httpd mariadb-server php php-cli php-gd php-common php-ldap php-pdo php-pear php ...
- linux 之sed
sed 用法 sed [-nefr] [action] -i 直接修改文件内容,而不是像其他命令那样只是输出到终端 a新增c取代d删除i插入p列印常与sed -n 使用s取代 有一点需要注意的是:如果 ...
- initrd in linux 2.6.32.27
2.6.32.27可以不指定initrd选项 如果指定initrd选项,则自动调用initrd内的linuxrc或init进行一切必要的初始化.Kernel启动参数全部会作为变量传递给这两个脚本.如r ...
- mysqldump命令之常用选项
===============================================mysqldump常用选项-h, --host=name:服务器IP-u, --user=name:登录名 ...