网上购物系统课程设计
项目概述
本项目旨在设计并实现一个功能完整、界面友好、运行稳定的B2C(企业对消费者)模式网上购物系统,系统将基于Web技术,采用前后端分离的架构,为用户提供商品浏览、搜索、购物车、订单管理等功能,同时为管理员提供商品管理、订单处理、用户管理等后台功能。
设计目标
- 功能性目标:
- 用户端:用户注册登录、商品分类浏览、商品详情查看、购物车管理(添加、删除、修改数量)、订单生成与支付(模拟)、个人中心(查看订单、地址管理)。
- 管理端:管理员登录、商品管理(增删改查)、订单管理(查看、发货)、用户管理(查看、禁用)、数据统计(可选)。
- 非功能性目标:
- 易用性:界面简洁直观,操作流程符合用户习惯。
- 安全性:用户密码加密存储,防止SQL注入、XSS等常见Web攻击,使用Session或Token进行身份认证。
- 可扩展性:系统架构设计合理,便于未来添加新功能(如优惠券、评价系统、多语言支持等)。
- 性能:确保系统在合理并发下响应迅速。
系统分析
1 功能需求分析
| 模块 | 功能点 | 描述 |
|---|---|---|
| 用户模块 | 用户注册 | 用户通过手机号/邮箱和密码注册账号。 |
| 用户登录 | 已注册用户输入账号密码登录系统。 | |
| 退出登录 | 清除用户登录状态,返回首页。 | |
| 商品模块 | 商品分类 | 按类别(如电子产品、服装、食品)展示商品。 |
| 商品列表 | 分页展示某个分类下的所有商品。 | |
| 商品搜索 | 根据商品名称或关键词搜索商品。 | |
| 商品详情 | 展示单个商品的详细信息,包括图片、价格、描述、库存等。 | |
| 购物车模块 | 添加商品 | 将商品加入购物车。 |
| 查看购物车 | 展示购物车中所有商品及总价。 | |
| 修改数量 | 在购物车中增减商品数量。 | |
| 删除商品 | 从购物车中移除商品。 | |
| 清空购物车 | 一键清空购物车所有商品。 | |
| 订单模块 | 创建订单 | 确认购物车商品信息,生成订单。 |
| 查看订单列表 | 在个人中心查看历史订单。 | |
| 查看订单详情 | 查看单个订单的详细信息(商品、金额、状态等)。 | |
| 后台管理模块 | 管理员登录 | 管理员账号登录后台系统。 |
| 商品管理 | 对商品进行添加、编辑、删除、上架/下架操作。 | |
| 订单管理 | 查看所有订单,对订单进行“发货”等状态更新。 | |
| 用户管理 | 查看所有用户信息,可对用户进行禁用/启用操作。 |
2 技术选型建议
- 前端:
- 框架: Vue.js 或 React (推荐,组件化开发效率高)
- UI库: Element Plus (Vue) / Ant Design (React) (快速构建美观界面)
- 构建工具: Vite 或 Webpack
- HTTP客户端: Axios
- 后端:
- 语言: Java (Spring Boot) / Python (Django/Flask) / Node.js (Express/NestJS)
- 框架: Spring Boot (Java) 是课程设计的绝佳选择,生态成熟,资料丰富。
- 数据库: MySQL (关系型,适合存储结构化数据如用户、商品、订单)
- 缓存 (可选): Redis (用于缓存热点数据,如商品信息,减轻数据库压力)
- 开发工具:
- IDE: IntelliJ IDEA (Java) / VS Code (通用)
- 数据库客户端: Navicat, DBeaver
- API测试: Postman, Apifox
3 数据库设计 (E-R图及表结构)
设计数据库是核心环节,以下是核心表的SQL建表语句示例。

用户表 (t_user)
CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(100) NOT NULL COMMENT '密码(加密后)', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `phone` varchar(20) DEFAULT NULL COMMENT '手机号', `role` tinyint(1) NOT NULL DEFAULT '0' COMMENT '角色: 0-普通用户, 1-管理员', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
商品分类表 (t_category)
CREATE TABLE `t_category` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID', `name` varchar(50) NOT NULL COMMENT '分类名称', `parent_id` bigint(20) DEFAULT '0' COMMENT '父分类ID (支持多级分类)', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';
商品表 (t_product)
CREATE TABLE `t_product` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', `name` varchar(100) NOT NULL COMMENT '商品名称', `category_id` bigint(20) NOT NULL COMMENT '分类ID', `price` decimal(10,2) NOT NULL COMMENT '价格', `stock` int(11) NOT NULL COMMENT '库存', `description` text COMMENT '商品描述', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态: 1-上架, 0-下架', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_category_id` (`category_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
购物车表 (t_cart)

CREATE TABLE `t_cart` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '购物车项ID', `user_id` bigint(20) NOT NULL COMMENT '用户ID', `product_id` bigint(20) NOT NULL COMMENT '商品ID', `quantity` int(11) NOT NULL COMMENT '数量', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_product_id` (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车表';
订单表 (t_order)
CREATE TABLE `t_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单ID', `order_no` varchar(50) NOT NULL COMMENT '订单号 (唯一)', `user_id` bigint(20) NOT NULL COMMENT '用户ID', `total_amount` decimal(10,2) NOT NULL COMMENT '总金额', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态: 0-待付款, 1-已付款, 2-已发货, 3-已完成, 4-已取消', `address` varchar(255) NOT NULL COMMENT '收货地址', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
订单详情表 (t_order_item)
CREATE TABLE `t_order_item` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单项ID', `order_id` bigint(20) NOT NULL COMMENT '订单ID', `product_id` bigint(20) NOT NULL COMMENT '商品ID', `product_name` varchar(100) NOT NULL COMMENT '商品名称 (快照)', `product_price` decimal(10,2) NOT NULL COMMENT '商品下单时价格 (快照)', `quantity` int(11) NOT NULL COMMENT '数量', PRIMARY KEY (`id`), KEY `idx_order_id` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单详情表';
系统设计
1 架构设计 (前后端分离)
+----------------+ HTTP/HTTPS +-------------------+
| 前端 (Vue) | <------------------> | 后端 (Spring Boot) |
| | | |
| - 用户界面 | | - RESTful API |
| - 路由管理 | | - 业务逻辑处理 |
| - 状态管理 | | - 数据访问层 |
+----------------+ +-------------------+
|
| JDBC
v
+-------------------------------------------------+
| 数据库 (MySQL) |
| - 用户表, 商品表, 订单表... |
+-------------------------------------------------+
2 核心功能模块设计 (以Spring Boot为例)
用户认证
- 登录: 用户提交用户名和密码,后端验证通过后,生成一个
JWT (JSON Web Token)返回给前端,前端后续请求携带此Token。 - 权限控制: 后端使用拦截器(Interceptor)或Spring Security,每次请求时验证Token的有效性和权限(普通用户/管理员)。
商品模块

- API设计:
GET /api/products: 获取商品列表(支持分页、分类筛选、搜索)。GET /api/products/{id}: 获取商品详情。
- 后端实现: 创建
ProductController和ProductService。Service层负责业务逻辑(如计算分页参数),Mapper层负责与数据库交互。
购物车模块
- API设计:
POST /api/cart: 添加商品到购物车。GET /api/cart: 获取当前用户的购物车。PUT /api/cart/{productId}/quantity: 修改购物车中商品数量。DELETE /api/cart/{productId}: 从购物车删除商品。
- 后端实现:
CartController和CartService,关键点在于所有操作都需要与当前登录用户(从Token中获取user_id)绑定。
订单模块
- API设计:
POST /api/orders: 创建订单(前端提交购物车商品ID列表,后端校验库存、计算总价、生成订单号和订单详情)。GET /api/orders: 获取当前用户的订单列表。GET /api/orders/{id}: 获取订单详情。
- 后端实现:
OrderController和OrderService,创建订单是一个事务性操作,需要同时更新订单表、订单详情表,并扣减商品库存,使用@Transactional注解确保数据一致性。
后台管理模块
- API设计:
POST /api/admin/products: 管理员添加商品。PUT /api/admin/products/{id}: 管理员修改商品。GET /api/admin/orders: 管理员查看所有订单。PUT /api/admin/orders/{id}/ship: 管理员发货(更新订单状态)。
- 后端实现: 创建
AdminController,所有接口都需要验证管理员权限。
3 关键代码示例 (Spring Boot)
用户登录 (生成JWT)
// JwtUtil.java
public String generateToken(UserDetails userDetails) {
Map<String, Object> claims = new HashMap<>();
return Jwts.builder()
.setClaims(claims)
.setSubject(userDetails.getUsername())
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 10小时过期
.signWith(SignatureAlgorithm.HS512, secret) // secret是一个密钥
.compact();
}
创建订单 (事务处理)
// OrderService.java
@Transactional
public Order createOrder(Long userId, List<Long> productIds) {
// 1. 检查商品是否存在,并获取商品信息(校验库存)
List<Product> products = productMapper.selectByIds(productIds);
// ... 省略库存校验逻辑 ...
// 2. 计算总金额
BigDecimal totalAmount = products.stream().map(Product::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
// 3. 生成订单号
String orderNo = generateOrderNo();
// 4. 创建主订单
Order order = new Order();
order.setOrderNo(orderNo);
order.setUserId(userId);
order.setTotalAmount(totalAmount);
order.setStatus(0); // 待付款
orderMapper.insert(order);
// 5. 创建订单详情
for (Product p : products) {
OrderItem item = new OrderItem();
item.setOrderId(order.getId());
item.setProductId(p.getId());
item.setProductName(p.getName());
item.setProductPrice(p.getPrice());
item.setQuantity(1); // 假设数量为1,实际应从前端获取
orderItemMapper.insert(item);
}
// 6. 扣减库存 (如果需要)
// for (Product p : products) {
// productMapper.decreaseStock(p.getId(), 1);
// }
return order;
}
开发计划与步骤
- 第一阶段:环境搭建与数据库设计 (1-2天)
- 安装JDK, Maven, MySQL, IDE。
- 使用Spring Initializr创建后端项目。
- 使用Vue CLI/Vite创建前端项目。
- 设计并创建数据库表结构。
- 第二阶段:后端核心开发 (3-4天)
- 实现用户注册、登录、权限认证(JWT)。
- 实现商品模块的CRUD和API。
- 实现购物车模块的API。
- 实现订单模块的API(重点是创建订单的事务)。
- 实现后台管理模块的API。
- 第三阶段:前端页面开发 (3-4天)
- 搭建前端路由和布局。
- 开发用户登录、注册页面。
- 开发商品列表、详情页面。
- 开发购物车页面。
- 开发订单列表、详情页面。
- 开发后台管理界面(商品管理、订单管理等)。
- 第四阶段:前后端联调与测试 (2天)
- 使用Postman等工具测试后端API。
- 前端调用后端API,修复接口不匹配、数据格式等问题。
- 进行功能测试,确保所有流程(从浏览到下单)通畅。
- 第五阶段:优化与文档 (1天)
- 优化代码,添加必要的注释。
- 编写课程设计报告,包括系统设计、功能实现、技术选型、总结等。
- 准备答辩PPT。
扩展功能建议 (用于拿高分)
- 支付集成: 对接真实的支付平台(如支付宝沙箱、微信支付沙箱)。
- 评价系统: 用户可以对已购买的商品进行评分和评论。
- 优惠券系统: 实现优惠券的生成、发放和使用。
- 搜索优化: 使用Elasticsearch等搜索引擎替代数据库
LIKE查询,提升搜索性能和体验。 - 商品推荐: 基于用户浏览或购买历史,实现简单的商品推荐算法。
- 多级分类与筛选: 实现更复杂的商品分类和按品牌、价格区间等筛选。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。