news 2026/5/30 6:23:41

咖啡店管理系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
咖啡店管理系统

咖啡店管理系统

一、项目背景与目标

大三上学期,为了将Java面向对象编程、数据库操作与分层架构设计的知识落地实践,我开发了这套咖啡店管理系统。当时的目标是解决小型咖啡店日常运营中的痛点:手工记账易出错、库存管理混乱、销售数据无法统计,因此设计了一套集点单、库存、员工、销售统计于一体的桌面管理系统,让门店运营更高效、数据更清晰。

二、技术选型与整体架构

1. 技术栈

开发语言:Java 8

架构模式:经典三层架构(表现层UI、业务逻辑层Service、数据访问层DAO)

数据库:MySQL 8.0

核心技术:JDBC、Swing(桌面UI)、面向对象编程(封装/继承/多态)

开发工具:IntelliJ IDEA、Navicat Premium

2. 三层架构设计详解

①表现层(UI)

提供用户交互界面,接收用户输入并展示处理结果 com.coffee.ui 包下的 LoginFrame.java 、 OrderFrame.java 等

②业务逻辑层(Service)

封装业务规则,处理核心业务逻辑,调用DAO层完成数据操作 com.coffee.service 包下的 OrderService.java 、 InventoryService.java 等

③数据访问层(DAO)

直接与MySQL交互,封装增删改查操作,为Service层提供数据支持 com.coffee.dao 包下的 OrderDAO.java 、 InventoryDAO.java 等

这种分层设计的优势非常明显:比如后续要把桌面版改成网页版,只需要重写表现层,Service和DAO层的代码几乎不用改动;修改数据库字段时,也只需要调整DAO层的SQL语句,不会影响上层业务逻辑

三、核心功能模块与代码片段

1. 数据访问层(DAO层)核心代码示例

以订单数据操作为例, OrderDAO.java 中封装了订单新增、查询的核心逻辑,使用JDBC完成数据库交互:

package com.coffee.dao;

import com.coffee.entity.Order;

import com.coffee.utils.DBUtil;

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

public class OrderDAO {

// 新增订单

public boolean addOrder(Order order) {

String sql = "INSERT INTO orders(order_id, user_id, total_price, create_time, status) VALUES (?, ?, ?, ?, ?)";

Connection conn = null;

PreparedStatement pstmt = null;

try {

// 获取数据库连接

conn = DBUtil.getConnection();

pstmt = conn.prepareStatement(sql);

// 设置SQL参数

pstmt.setString(1, order.getOrderId());

pstmt.setInt(2, order.getUserId());

pstmt.setDouble(3, order.getTotalPrice());

pstmt.setTimestamp(4, new Timestamp(System.currentTimeMillis()));

pstmt.setInt(5, order.getStatus());

// 执行SQL

return pstmt.executeUpdate() > 0;

} catch (SQLException e) {

e.printStackTrace();

return false;

} finally {

// 关闭资源

DBUtil.close(conn, pstmt, null);

}

}

// 根据订单ID查询订单

public Order getOrderById(String orderId) {

String sql = "SELECT * FROM orders WHERE order_id = ?";

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

conn = DBUtil.getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, orderId);

rs = pstmt.executeQuery();

if (rs.next()) {

Order order = new Order();

order.setOrderId(rs.getString("order_id"));

order.setUserId(rs.getInt("user_id"));

order.setTotalPrice(rs.getDouble("total_price"));

order.setCreateTime(rs.getTimestamp("create_time"));

order.setStatus(rs.getInt("status"));

return order;

}

return null;

} catch (SQLException e) {

e.printStackTrace();

return null;

} finally {

DBUtil.close(conn, pstmt, rs);

}

}

这里的 DBUtil.java 是工具类,封装了数据库连接与关闭操作,避免了重复代码,提升了代码复用率。

2. 业务逻辑层(Service层)核心代码示例

OrderService.java 调用DAO层的方法,同时封装订单业务逻辑,比如订单创建时的库存扣减、金额校验:

package com.coffee.service;

import com.coffee.dao.OrderDAO;

import com.coffee.dao.InventoryDAO;

import com.coffee.entity.Order;

import com.coffee.entity.OrderItem;

import java.util.List;

import java.util.UUID;

public class OrderService {

private OrderDAO orderDAO = new OrderDAO();

private InventoryDAO inventoryDAO = new InventoryDAO();

// 创建订单并扣减库存

public boolean createOrder(int userId, List<OrderItem> items) {

// 1. 生成唯一订单号

String orderId = UUID.randomUUID().toString().replace("-", "").substring(0, 16);

double totalPrice = 0;

// 2. 校验库存并计算总金额

for (OrderItem item : items) {

// 检查商品库存是否充足

if (!inventoryDAO.checkStock(item.getProductId(), item.getQuantity())) {

throw new RuntimeException("商品" + item.getProductName() + "库存不足,无法下单!");

}

// 累加订单总金额

totalPrice += item.getPrice() * item.getQuantity();

}

// 3. 扣减库存

for (OrderItem item : items) {

inventoryDAO.reduceStock(item.getProductId(), item.getQuantity());

}

// 4. 封装订单对象并保存

Order order = new Order();

order.setOrderId(orderId);

order.setUserId(userId);

order.setTotalPrice(totalPrice);

order.setStatus(1); // 1表示待支付

return orderDAO.addOrder(order);

}

}

这里体现了业务逻辑层的核心作用:它不是简单地调用DAO层方法,而是把“库存校验-金额计算-扣减库存-创建订单”这一完整的业务流程串联起来,同时处理异常情况,确保数据一致性。

3. 表现层(UI层)核心代码示例

以订单结算按钮的事件监听为例, OrderFrame.java 中处理用户点击事件,调用Service层完成订单创建:

package com.coffee.ui;

import com.coffee.entity.OrderItem;

import com.coffee.service.OrderService;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.List;

public class OrderFrame extends JFrame {

private OrderService orderService = new OrderService();

private List<OrderItem> selectedItems; // 已选商品列表

private int currentUserId; // 当前登录用户ID

// 结算按钮事件监听

private void initSubmitButton() {

JButton submitBtn = new JButton("结算订单");

submitBtn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if (selectedItems == null || selectedItems.isEmpty()) {

JOptionPane.showMessageDialog(OrderFrame.this, "请先选择商品!", "提示", JOptionPane.WARNING_MESSAGE);

return;

}

try {

// 调用Service层创建订单

boolean success = orderService.createOrder(currentUserId, selectedItems);

if (success) {

JOptionPane.showMessageDialog(OrderFrame.this, "订单创建成功!", "成功", JOptionPane.INFORMATION_MESSAGE);

// 清空已选商品,刷新界面

selectedItems.clear();

refreshOrderList();

} else {

JOptionPane.showMessageDialog(OrderFrame.this, "订单创建失败,请重试!", "错误", JOptionPane.ERROR_MESSAGE);

}

} catch (RuntimeException ex) {

JOptionPane.showMessageDialog(OrderFrame.this, ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);

}

}

});

}

// 刷新订单列表界面(省略具体实现)

private void refreshOrderList() {

// 清空界面上的商品列表,重新加载

}

}

表现层只负责处理用户交互,不包含任何业务逻辑,所有核心流程都交给Service层处理,这样的设计让界面和业务逻辑解耦,后续修改界面时不会影响业务代码。

四、项目功能与亮点

1. 核心功能清单

权限管理:区分管理员/员工角色,管理员可管理商品、库存、员工信息,员工仅能点单、查看订单

订单管理:支持点单、修改订单、结算、查询历史订单,自动生成订单编号

库存管理:商品库存实时监控,库存不足时弹出预警,支持商品新增/修改/删除

销售统计:按日/周/月统计销售额、订单量、热门商品排行,生成简易报表

员工管理:员工信息录入、账号管理、岗位分配,关联操作日志

2. 项目亮点

1. 分层架构实践:严格按照三层架构开发,代码解耦性强,后续维护和扩展非常方便,让我彻底理解了分层设计的思想。

2. 异常处理机制:在DAO、Service层都做了完善的异常捕获,比如库存不足、数据库连接失败等场景都有对应的提示,系统稳定性更高。

3. 面向对象应用:把商品、订单、员工等实体封装成Java类,通过封装和继承简化了代码结构,也让业务模型更清晰。

五、项目收获与反思

这次项目让我第一次完整经历了“需求分析-架构设计-代码实现-测试优化”的开发流程,收获远不止技术层面:

技术上,熟练掌握了JDBC数据库操作、Swing桌面开发,理解了三层架构的设计思想,也学会了如何把业务需求转化为技术实现方案。

问题解决上,遇到了很多实际问题,比如数据库连接池优化、多角色权限控制、订单和库存的数据一致性问题,通过查资料、调试代码,一步步解决了这些问题,debug能力提升了很多。

不足也很明显:当时的UI界面比较简陋,没有做界面美化;数据库没有使用连接池,高并发场景下性能较差;也没有做单元测试,代码的健壮性还有提升空间。如果后续优化,会引入数据库连接池、优化UI界面,并添加单元测试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 6:21:04

Google AAOS 2026发布深度解析与对中国车企出海的战略启示

摘要本文深入分析了Google AAOS 2026年发布的核心内容及其对中国车企出海的战略影响。研究发现&#xff0c;AAOS 2026通过Gemini 3.5 Flash的深度整合、3D沉浸式导航和开发者工具升级&#xff0c;构建了更强大的智能座舱平台。分析了下了中国车企出海的两大技术路线&#xff1a…

作者头像 李华
网站建设 2026/5/30 6:12:57

ttyd Web终端安装指南(OpenCloudOS 9)

ttyd Web终端安装指南&#xff08;OpenCloudOS 9&#xff09;基于实际踩坑经验总结&#xff0c;适用于 OpenCloudOS 9 / CentOS 9 Stream / RHEL 9 系列一、环境信息项目说明操作系统OpenCloudOS 9 (x86_64)ttyd版本1.7.7libwebsockets版本4.3.2tmux版本3.4目标端口7681 二、完…

作者头像 李华
网站建设 2026/5/30 6:12:56

RAG技术如何提升LLM代码转译的安全性与可靠性

1. 项目概述&#xff1a;当RAG遇上Rust转译&#xff0c;如何让LLM的代码生成更靠谱&#xff1f;在系统编程的世界里&#xff0c;把陈旧的C/C代码库迁移到Rust&#xff0c;正从一个前沿探索变成一项迫切的工程任务。背后的驱动力很直接&#xff1a;内存安全。悬垂指针、缓冲区溢…

作者头像 李华