这个基于SpringBoot+Vue的电影院购票系统是一个典型的Java Web毕业设计项目,它完整实现了现代影院在线购票的核心业务流程。系统采用前后端分离架构,后端使用SpringBoot框架提供RESTful API接口,前端采用Vue.js构建用户界面,数据库使用MySQL存储影院、影片、场次、订单等核心数据。
作为一个毕业设计级别的项目,它不仅包含了完整的源码和SQL脚本,还附带了详细的接口文档,非常适合计算机相关专业的学生作为毕业设计参考。系统实现了用户注册登录、影片查询、场次选择、座位预订、在线支付、订单管理等完整功能链,涵盖了Web开发的绝大部分核心技术点。
后端采用SpringBoot 2.x作为基础框架,这是目前Java领域最流行的微服务开发框架。它内置了Tomcat服务器,通过自动配置大大简化了Spring应用的初始搭建和开发过程。项目中主要使用了以下Spring生态组件:
数据库选用MySQL 5.7+,这是一个关系型数据库,适合存储结构化的影院数据。项目提供了完整的SQL脚本,包含以下几张核心表:
前端采用Vue.js 2.x框架,配合以下主要技术:
前端工程使用Webpack打包,通过RESTful API与后端交互,实现了前后端完全分离的开发模式。这种架构使得前端可以独立开发和部署,提高了开发效率。
用户模块实现了注册、登录、个人信息管理等功能。关键技术点包括:
java复制// 用户登录核心代码示例
@PostMapping("/login")
public Result login(@RequestBody User user) {
// 验证用户名密码
User dbUser = userService.findByUsername(user.getUsername());
if(dbUser == null || !passwordEncoder.matches(user.getPassword(), dbUser.getPassword())) {
return Result.error("用户名或密码错误");
}
// 生成JWT token
String token = JwtUtil.generateToken(dbUser);
return Result.ok().put("token", token);
}
影片管理包括影片信息的CRUD操作,以及影片分类、评分等功能。主要特点:
java复制// 影片分页查询示例
@GetMapping("/movies")
public Result getMovies(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String type) {
PageHelper.startPage(pageNum, pageSize);
List<Movie> movies = movieService.findByType(type);
PageInfo<Movie> pageInfo = new PageInfo<>(movies);
return Result.ok().put("pageInfo", pageInfo);
}
这是系统的核心模块,实现了:
关键技术点:
java复制// 座位锁定逻辑
@Transactional
public Result lockSeats(Integer scheduleId, List<Integer> seatIds) {
// 检查座位是否可用
List<Seat> seats = seatService.findByIds(seatIds);
for(Seat seat : seats) {
if(seat.getStatus() != 0) { // 0表示可用
throw new RuntimeException("座位"+seat.getId()+"已被预订");
}
}
// 锁定座位
seatService.updateStatus(seatIds, 1); // 1表示锁定
return Result.ok();
}
订单模块处理完整的购票流程:
关键技术:
java复制// 订单超时处理
@Scheduled(fixedRate = 60000) // 每分钟检查一次
public void checkExpiredOrders() {
List<Order> orders = orderService.findExpiredOrders();
for(Order order : orders) {
// 释放座位
seatService.unlockSeats(order.getSeatIds());
// 更新订单状态
orderService.updateStatus(order.getId(), OrderStatus.EXPIRED);
}
}
sql复制CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`phone` varchar(20) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`role` varchar(20) DEFAULT 'USER',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
sql复制CREATE TABLE `movie` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`director` varchar(50) DEFAULT NULL,
`actors` varchar(255) DEFAULT NULL,
`type` varchar(50) DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
`release_date` date DEFAULT NULL,
`poster` varchar(255) DEFAULT NULL,
`score` decimal(3,1) DEFAULT '0.0',
`description` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
sql复制CREATE TABLE `schedule` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`movie_id` int(11) NOT NULL,
`hall_id` int(11) NOT NULL,
`start_time` datetime NOT NULL,
`end_time` datetime NOT NULL,
`price` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `movie_id` (`movie_id`),
KEY `hall_id` (`hall_id`),
CONSTRAINT `schedule_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`id`),
CONSTRAINT `schedule_ibfk_2` FOREIGN KEY (`hall_id`) REFERENCES `hall` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
系统采用关系型数据库设计,主要表之间的关系如下:
这种设计既满足了业务需求,又避免了数据冗余,符合数据库规范化原则。
系统采用RESTful风格设计API,主要特点:
示例API:
code复制GET /api/movies - 获取电影列表
POST /api/movies - 添加新电影
GET /api/movies/{id} - 获取指定电影详情
PUT /api/movies/{id} - 更新电影信息
DELETE /api/movies/{id} - 删除电影
GET /api/schedules?movieId=1 - 获取某电影的场次
POST /api/orders - 创建订单
项目集成了Swagger,自动生成API文档。访问地址通常是:
code复制http://localhost:8080/swagger-ui.html
Swagger提供了以下功能:
配置示例:
java复制@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.cinema.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("影院购票系统API文档")
.description("毕业设计项目接口文档")
.version("1.0")
.build();
}
}
sql复制CREATE DATABASE cinema DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
bash复制mysql -u root -p cinema < cinema.sql
yaml复制# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/cinema?useSSL=false
username: root
password: yourpassword
bash复制mvn spring-boot:run
bash复制npm install
bash复制npm run serve
bash复制npm run build
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
这个电影院购票系统项目涵盖了Java Web开发的绝大部分核心技术,从数据库设计到前后端交互,从业务逻辑实现到系统安全考虑,是一个非常适合作为毕业设计的完整项目。通过学习和扩展这个项目,学生可以全面掌握现代Web开发的各项技能。