【Java项目】基于账户服务的收银宝

该项目重点介绍了结合框架、注解处理多表操作的Java项目——收银宝。难点包括使用Lombok的注解简化实体类,以及数据库的左连接处理一对多关系。核心需求涉及登录、注册、管理端用户管理和商品管理、客户端的商品浏览和订单支付等功能。项目采用了JDBC、MySQL、Stream和集合框架等技术,实现了分层设计。测试涵盖功能、性能和容错性,针对库存管理提出了解决方案,并讨论了字符界面的优缺点,提出结合JavaWeb改进用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >










项目难点

1. 结合框架、注解

本次项目通过使用注解将所有命令进行分类,利用反射机制取得注解并将不同的命令通过key-value的方式存入Map中。
(1) 在实体类给项目中四张表中的字段提供属性,得到get和set方法,所以引入了@Data注解
@Data作用:自动为当前所在类提供getter、setter、toString、equals等方法。
eg:使用注解需要在idea中安装lombok插件

以Account表为例:
在这里插入图片描述

(2)由于不同类型用户(管理员、客户)登录后看到的页面不同,可以采用注解来进行分类
(if-else也可使用,但是代码量太大,不考虑)

在这里插入图片描述
其中:
AdminCommand:管理命令
CommandMeta:存放注解名称
CustomerCommand:客户命令
EntranceCommand:入口命令

  注解释义:
  
   1、@ Retention(RetentionPolicy.RUNTIME):
      注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
      
    2、@ Target(ElementType.TYPE):
      说明了Annotation所修饰的对象范围:用于描述类、接口(包括注解类型) 或enum声明


2. 数据库多表操作

每个用户购物时下单后产生订单形成订单表和订单内包含的商品形成订单项表,订单和订单项之间是一对多的关系,在查询订单时为了简单易行,在resource中创建在这里插入图片描述
并使用左连接来处理两个表的连接


核心需求

  • 登录 注册

  • 管理端

    • 用户管理
    • 商品管理
  • 用户端

    • 商品浏览
    • 订单支付
    • 下单管理

核心技术

  1. JDBC编程
  2. MySQL数据库
  3. Stream式编程
  4. 注解技术
  5. 集合框架

功能列表

1. 公共端

在这里插入图片描述

2. 管理端

在这里插入图片描述

3. 客户端

在这里插入图片描述


技术实现

- 数据库表设计

check_stand数据库中共有四张表 :account(用户表)、goods(商品表)、order(订单表)、order_item(订单项表)
其中四张表的关系如下图所示:
在这里插入图片描述

- 项目分层设计

在这里插入图片描述
上层依赖于下层而下层不依赖于上层
!!!DAO层 (数据库访问对象)是 Data Access Object 的缩写!!!

1)我们通过 DAO层才能真正操作数据库,AccountDAO、GoodsDAO、OrderDao都继承BaseDao。
BaseDao中涉及到JDBC数据库连接步骤:
1.加载驱动,创建连接
2.创建Statement对象
3.执行SQL语句
4.释放资源

JDBC标准操作及格式可点击此处查看


2)由于我们每一次输入的命令都是通过 Command层 控制 Service层,再通过 Service层 控制 DAO层,不如建立 Command 接口,并写入 Scanner 对象来读入输入流。

public interface Command {
    //每个命令都会创建Scanner对象 在这里直接创建
    Scanner scanner = new Scanner(System.in);
    //统一调用此方法
    void execute(Subject subject);
}

3)由于我们每次执行明令都需要重启 Service层,继而操作 DAO层,浪费资源,不如定义Abstract类,并在其中启动所有服务。

public abstract class AbstractCommand implements Command {
    public AccountService accountService;//用户服务
    public GoodsService goodsService;//商品服务
    public OrderService orderService;//订单服务
    public AbstractCommand() {
        this.accountService = new AccountService();
        this.goodsService = new GoodsService();
        this.orderService = new OrderService();
    }
}

项目效果

- 客户端

  1. 注册
    在这里插入图片描述
  2. 登录
    在这里插入图片描述
  3. 浏览商品
    在这里插入图片描述
  4. 支付订单
    在这里插入图片描述
  5. 查看订单
    在这里插入图片描述

-管理端
  1. 注册
    在这里插入图片描述

  2. 启停账号、重置密码
    在这里插入图片描述

  3. 查看账号
    在这里插入图片描述
    在这里插入图片描述

  4. 上架商品
    在这里插入图片描述

  5. 下架商品
    在这里插入图片描述

  6. 浏览商品
    在这里插入图片描述

  7. 更新商品
    在这里插入图片描述


项目测试

- 功能测试
  • 先测试注册、登录,然后通过注册管理员、登录后来测试上架商品、下架商品、浏览商品、更新商品等功能;通过注册客户来测试浏览商品、支付订单、查看订单等功能(图见项目效果部分)

- 性能测试

等价类、边界值:
1)通过对管理端的上架商品中的库存进行测试(如图所示)
库存输入负数也可上架成功
在这里插入图片描述
2)通过客户端
首先浏览商品,得知库存为10瓶

在这里插入图片描述
然后在支付订单,选择支付11瓶

在这里插入图片描述
订单支付成功,库存减少为-1瓶

在这里插入图片描述


- 容错性测试

在公共端、客户端、管理端输入不是该端提示字符时,回车,再一次展示之前端
以管理端为例:
在这里插入图片描述

项目优化

  1. 功能方面不完善
    存在问题: 甲客户选择了购买的商品后,在未支付的情况下暂时退出离开,此时乙客户选择购买商品后并支付,支付成功并库存相应减少,甲客户再次前来支付会出现库存虚假的情况
    解决方案:结合实际情况,客户并不关心库存量的多少,只关心自己所需要购买的数量是否够,所以可以在当前商品库存为零时进行对未完成支付订单内是否有该商品进行查找,若有:提示该商品已售罄,并在该订单中移除此商品。
  2. 字符界面的视觉不友好性
    存在问题:该下项目的最终以字符界面呈现,用户的体验感较差,但是字符界面也有优势:1)字符界面比图形界面占用的系统资源少;2)字符界面减少了出错、被攻击的可能性。
    解决方案:结合JavaWeb来实现一个网页版的购物收银系统可以使得体验效果更佳。

项目代码

完整代码请点击此处查看

如无法点击,链接如下:https://github.com/LXL7868/Check_Stand/commit/03a20d2bf9057e24bed6f7c013dbc455b60af9a4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值