在线电影票购买系统
一、项目概述
本系统是一个基于Spring MVC + MyBatis架构的在线电影票购买系统,采用经典的三层架构设计,提供用户端和管理端两套界面,实现电影信息展示、场次管理、选座购票等核心功能。
二、技术栈
| 分类 | 技术 | 版本 |
|---|
| 语言 | Java | 1.8 |
| 框架 | Spring MVC | 5.0.2.RELEASE |
| ORM | MyBatis | 3.4.5 |
| 数据库 | MySQL | 8.0.11 |
| 连接池 | C3P0 | 0.9.2.1 |
| 前端 | Bootstrap | 3.x |
| 构建工具 | Maven | 3.x |
核心依赖 JAR 包列表:
spring-webmvc-5.0.2.RELEASE.jar- Spring MVC 核心spring-jdbc-5.0.2.RELEASE.jar- Spring JDBC 支持mybatis-3.4.5.jar- MyBatis ORMmybatis-spring-1.3.1.jar- MyBatis 与 Spring 集成c3p0-0.9.2.1.jar- 数据库连接池mysql-connector-java-8.0.11.jar- MySQL 驱动commons-fileupload-1.3.1.jar- 文件上传支持fastjson-1.2.47.jar- JSON 处理
三、项目结构
film/ # 项目根目录 ├── lib/ # 本地依赖 JAR 包(36个) ├── sql/ # 数据库脚本 │ └── film.sql # 数据库初始化脚本 ├── src/ │ └── main/ │ ├── java/ │ │ └── com/mecol/film/ │ │ ├── controller/ # 控制器层(3个类) │ │ │ ├── AdminController.java # 管理员控制器 │ │ │ ├── ReceptionController.java # 用户业务控制器 │ │ │ └── ViewController.java # 页面视图控制器 │ │ ├── entity/ # 实体类(10个) │ │ │ ├── Admin, Film, FilmCategory, Performer │ │ │ ├── Play, Room, Screenwriter, Seat │ │ │ ├── Ticket, Users │ │ ├── interceptor/ # 拦截器 │ │ │ └── AdminInterceptor.java # 管理员登录拦截 │ │ ├── mapper/ # Mapper 接口(11个) │ │ │ ├── AdminMapper, FilmMapper, FilmCategoryMapper │ │ │ ├── PerformerMapper, PlayMapper, RoomMapper │ │ │ ├── ScreenwriterMapper, SeatMapper, TicketMapper │ │ │ ├── UserMapper, TestDao │ │ ├── pojo/ # 自定义数据对象(7个) │ │ │ ├── FilmAndType, FilmPojo, PlayPojo │ │ │ ├── ScreenwriterFilm, Star, Tic, TicA, UserPojo │ │ └── service/ # 服务层 │ │ ├── impl/ # 服务实现类(7个) │ │ └── *.java # 服务接口(7个) │ ├── resources/ # 配置文件 │ │ ├── mapper/ # MyBatis Mapper XML(11个) │ │ ├── applicationContext.xml # Spring 核心配置 │ │ ├── log4j.properties # 日志配置 │ │ └── mybatis-config.xml # MyBatis 配置 │ └── webapp/ │ ├── WEB-INF/ │ │ ├── admin/ # 管理员页面 │ │ │ ├── login.jsp │ │ │ └── admin/ # 管理员首页及功能页 │ │ ├── user/ # 用户页面 │ │ │ ├── home.jsp, film.jsp, goupiao.jsp │ │ │ ├── jies.jsp, listfilm.jsp, noPlay.jsp, personal.jsp │ │ ├── springmvc-servlet.xml # Spring MVC 配置 │ │ └── web.xml # Web 应用配置 │ ├── css/ # 样式文件 │ └── img/ # 图片资源 ├── .classpath # Eclipse 项目配置 └── .project # Eclipse 项目配置
四、项目功能
4.1 用户端功能
| 功能模块 | 功能描述 | 对应控制器 |
|---|
| 首页展示 | 热门电影轮播、电影列表展示 | ViewController |
| 电影详情 | 查看电影详情、海报、导演、主演信息 | ViewController |
| 用户注册/登录 | 用户注册、登录、密码验证 | ReceptionController |
| 选座购票 | 选择场次、座位,生成订单 | ReceptionController |
| 个人中心 | 查看个人信息、已购订单 | ReceptionController |
4.2 管理端功能
| 功能模块 | 功能描述 | 对应控制器 |
|---|
| 管理员登录 | 管理员账号密码验证 | AdminController |
| 电影管理 | 电影信息的增删改查 | AdminController |
| 场次管理 | 排片计划、场次添加/删除 | AdminController |
| 影厅管理 | 影厅信息管理 | AdminController |
| 类型管理 | 电影分类管理 | AdminController |
| 订单管理 | 查看所有订单记录 | AdminController |
4.3 核心业务流程
用户浏览 → 选择电影 → 选择场次 → 选择座位 → 确认购票 → 生成订单
五、数据库表结构
5.1 数据库关系图
admin (管理员) users (用户) ↓ ticket (订单) ←→ play (场次) ←→ film (电影) ↓ ↓ room (影厅) film_and_type ←→ film_category (分类) star ←→ performer (演员) screenwriter_film ←→ screenwriter (编剧)
5.2 核心表结构详解
| 表名 | 功能说明 | 主键 | 核心字段 |
|---|
| admin | 管理员信息 | admin_id | admin_name,account,admin_pwd |
| users | 用户信息 | user_id | user_name,user_account,user_password,user_money |
| film | 电影信息 | film_id | film_name,film_time,director,play_time,poster_url |
| film_category | 电影分类 | category_id | film_category |
| film_and_type | 电影-分类关联 | type_id | category_id,film_id |
| play | 场次信息 | play_id | play_time,film_id,room_id,money |
| room | 影厅信息 | room_id | room_name |
| seat | 座位信息 | seat_id | seat(格式: 行-列) |
| ticket | 订单信息 | ticket_id | play_id,user_id,seat_id,buying_time |
| performer | 演员信息 | performer_id | performer_name |
| screenwriter | 编剧信息 | screenwriter_id | screenwriter_name |
| star | 电影-演员关联 | star_id | film_id,performer_id |
| screenwriter_film | 电影-编剧关联 | id | film_id,screenwriter_id |
5.3 关键表字段说明
film (电影表)
| 字段 | 类型 | 说明 |
|---|
film_id | int | 电影ID(自增主键) |
film_name | varchar(255) | 电影名称 |
film_time | date | 上映日期 |
director | varchar(255) | 导演 |
play_time | int | 片长(分钟) |
poster_url | varchar(255) | 海报路径 |
is_delete | int | 删除标记(1=正常,0=已删除) |
play (场次表)
| 字段 | 类型 | 说明 |
|---|
play_id | int | 场次ID |
play_time | datetime | 播放时间 |
film_id | int | 关联电影ID |
room_id | int | 关联影厅ID |
money | double(11,2) | 票价 |
is_delete | int | 删除标记 |
ticket (订单表)
| 字段 | 类型 | 说明 |
|---|
ticket_id | int | 订单ID |
play_id | int | 关联场次ID |
user_id | int | 关联用户ID |
seat_id | int | 关联座位ID |
buying_time | datetime | 购买时间 |
六、核心配置说明
6.1 数据源配置 (applicationContext.xml)
<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="driverClass"value="com.mysql.cj.jdbc.Driver"/><propertyname="jdbcUrl"value="jdbc:mysql://127.0.0.1:3306/film?characterEncoding=utf8&useSSL=false&serverTimezone=CTT"/><propertyname="user"value="root"/><propertyname="password"value="123456"/></bean>
6.2 数据库连接信息
| 属性 | 值 |
|---|
| 数据库名 | film |
| 用户名 | root |
| 密码 | 123456 |
| 端口 | 3306 |
| 时区 | CTT(中国标准时间) |
七、启动方式
7.1 环境要求
- JDK 1.8+
- MySQL 5.7+ / 8.0+
- Tomcat 8.5+
7.2 部署步骤
- 创建数据库:执行
sql/film.sql初始化数据库 - 配置数据源:根据实际环境修改
applicationContext.xml中的数据库连接信息 - 构建项目:使用 Maven 构建 WAR 包
- 部署到 Tomcat:将 WAR 包放入 Tomcat 的
webapps目录 - 启动服务:启动 Tomcat 服务器
7.3 默认账号
| 类型 | 账号 | 密码 |
|---|
| 管理员 | admin | 123456(MD5: e10adc3949ba59abbe56e057f20f883e) |
| 用户 | test | 123456 |
八、项目特点
- 分层架构:采用 Controller-Service-Mapper 三层架构,职责清晰
- 事务管理:Spring 声明式事务,保证数据一致性
- 拦截器机制:管理员操作需登录验证
- MyBatis 集成:支持 XML 配置和注解两种方式
- C3P0 连接池:高效的数据库连接管理
- Bootstrap 前端:响应式页面设计