Skip to content

zhoumiuzi/Shopping

Repository files navigation

一、数据库设计:网络书城系统

本项目使用 MySQL 作为后端数据库,包含 5 张核心表:

  1. 用户表 user
  2. 图书表 book
  3. 购物车项表 cart_item
  4. 订单表 order
  5. 订单明细表 order_item

1. 用户表 user

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='用户信息表';

2. 图书表 book

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='图书信息表';

3. 购物车项表 cart_item

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='购物车项表';

4.订单表 order

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='订单总表';

5. 订单明细表 order_item

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='订单详情表';

二、系统功能与实现

共实现以下主要模块,涵盖用户操作、图书浏览、购物车管理、订单结算和历史订单查询等核心功能:

1. 用户模块

功能说明:

  • 用户注册(register.jsp)
  • 用户登录(login.jsp)
  • 登录信息保存在 Session 中,控制访问权限

核心实现:

  • 登录逻辑在 LoginServlet 中完成,验证后写入 session。
User user = userDao.findByUsernameAndPassword(username, password);
if (user != null) {
    session.setAttribute("user", user);
    response.sendRedirect("index.jsp");
}

2. 图书浏览模块

功能说明:

  • 展示所有图书(index.jsp)
  • 显示封面、标题、价格、分类等信息

核心实现:

  • 后端从数据库查询图书数据,前端通过 JSTL <c:forEach> 标签动态展示。
List<Book> books = bookDao.findAll();
request.setAttribute("books", books);
request.getRequestDispatcher("index.jsp").forward(request, response);

3. 购物车模块

功能说明:

  • 添加图书到购物车(addCart)
  • 查看购物车内容(cart.jsp)
  • 数量加减操作、删除图书、清空购物车
  • 实时更新购物车数量

核心实现:

  • 判断是否登录,调用 CartService 增加购物车记录。
if (user == null) {
    response.getWriter().write("not_logged_in");
    return;
}
cartService.addCartItem(user.getUserid(), bookid);

4. 结账模块

功能说明:

  • 支持全选或部分勾选图书结账
  • 写入订单信息到 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);

5. 订单查询模块

功能说明:

  • 用户可以查看自己的历史订单记录(order.jsp)
  • 每个订单包含图书封面、单价、数量、订单时间和总金额

核心实现:

  • 联合 order 与 order_item 表查询,按用户ID筛选
List<Order> orders = orderService.getOrdersByUserId(user.getUserid());
request.setAttribute("orders", orders);
request.getRequestDispatcher("order.jsp").forward(request, response);

About

提交了广大本学期的web课程设计:简易网络书城实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors