本项目使用 MySQL 作为后端数据库,包含 5 张核心表:
- 用户表
user - 图书表
book - 购物车项表
cart_item - 订单表
order - 订单明细表
order_item
CREATE TABLE `user` (
`userid` INT NOT NULL AUTO_INCREMENT COMMENT '唯一的id',
`username` VARCHAR(20) NOT NULL DEFAULT 'momo',
`password` VARCHAR(20) NOT NULL DEFAULT '123456',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';CREATE TABLE `book` (
`bookid` INT NOT NULL AUTO_INCREMENT COMMENT '图书唯一ID',
`title` VARCHAR(100) NOT NULL COMMENT '书名',
`author` VARCHAR(50) NOT NULL COMMENT '作者',
`price` DECIMAL(10, 2) NOT NULL COMMENT '价格',
`stock` INT NOT NULL DEFAULT 0 COMMENT '库存数量',
`category` VARCHAR(30) COMMENT '分类(如小说、技术)',
`cover` VARCHAR(255) COMMENT '封面图片路径',
`description` TEXT COMMENT '图书简介',
PRIMARY KEY (`bookid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书信息表';CREATE TABLE `cart_item` (
`itemid` INT NOT NULL AUTO_INCREMENT,
`userid` INT NOT NULL COMMENT '用户ID',
`bookid` INT NOT NULL COMMENT '图书ID',
`quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量',
PRIMARY KEY (`itemid`),
FOREIGN KEY (`userid`) REFERENCES `user`(`userid`) ON DELETE CASCADE,
FOREIGN KEY (`bookid`) REFERENCES `book`(`bookid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车项表';CREATE TABLE `order` (
`orderid` INT NOT NULL AUTO_INCREMENT,
`userid` INT NOT NULL COMMENT '用户ID',
`total_amount` DECIMAL(10, 2) NOT NULL COMMENT '订单总金额',
`order_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',
`status` VARCHAR(20) DEFAULT '未支付' COMMENT '订单状态',
PRIMARY KEY (`orderid`),
FOREIGN KEY (`userid`) REFERENCES `user`(`userid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单总表';CREATE TABLE `order_item` (
`id` INT NOT NULL AUTO_INCREMENT,
`orderid` INT NOT NULL COMMENT '订单ID',
`bookid` INT NOT NULL COMMENT '图书ID',
`quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量',
`price` DECIMAL(10, 2) NOT NULL COMMENT '下单时图书单价',
PRIMARY KEY (`id`),
FOREIGN KEY (`orderid`) REFERENCES `order`(`orderid`) ON DELETE CASCADE,
FOREIGN KEY (`bookid`) REFERENCES `book`(`bookid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单详情表';共实现以下主要模块,涵盖用户操作、图书浏览、购物车管理、订单结算和历史订单查询等核心功能:
功能说明:
- 用户注册(register.jsp)
- 用户登录(login.jsp)
- 登录信息保存在 Session 中,控制访问权限
核心实现:
- 登录逻辑在 LoginServlet 中完成,验证后写入 session。
User user = userDao.findByUsernameAndPassword(username, password);
if (user != null) {
session.setAttribute("user", user);
response.sendRedirect("index.jsp");
}功能说明:
- 展示所有图书(index.jsp)
- 显示封面、标题、价格、分类等信息
核心实现:
- 后端从数据库查询图书数据,前端通过 JSTL
<c:forEach>标签动态展示。
List<Book> books = bookDao.findAll();
request.setAttribute("books", books);
request.getRequestDispatcher("index.jsp").forward(request, response);功能说明:
- 添加图书到购物车(addCart)
- 查看购物车内容(cart.jsp)
- 数量加减操作、删除图书、清空购物车
- 实时更新购物车数量
核心实现:
- 判断是否登录,调用 CartService 增加购物车记录。
if (user == null) {
response.getWriter().write("not_logged_in");
return;
}
cartService.addCartItem(user.getUserid(), bookid);功能说明:
- 支持全选或部分勾选图书结账
- 写入订单信息到 order 与 order_item 表
- 清除已购买图书的购物车记录
- 跳转 checkout_success.jsp 显示总金额
核心实现:
int orderId = orderDao.createOrder(user.getUserid(), totalAmount);
for (int bookId : bookIds) {
orderDao.insertOrderItem(orderId, bookId, quantity, price);
}
cartDao.removeCartItems(user.getUserid(), bookIds);功能说明:
- 用户可以查看自己的历史订单记录(order.jsp)
- 每个订单包含图书封面、单价、数量、订单时间和总金额
核心实现:
- 联合 order 与 order_item 表查询,按用户ID筛选
List<Order> orders = orderService.getOrdersByUserId(user.getUserid());
request.setAttribute("orders", orders);
request.getRequestDispatcher("order.jsp").forward(request, response);