一、项目概述
1. 开发环境
- JDK 版本:JDK 17
- IDE:IntelliJ IDEA
- 数据库:MySQL 8.0
- 构建工具:Maven
- 核心技术:Java Swing 桌面 GUI、HikariCP 数据库连接池、分层架构(Model-DAO-Service-GUI)
- 项目难度:B 级课程设计,单人独立完成
2. 需求原文(课程作业标准)
模拟福利彩票 36 选 7,完整实现 5 大硬性需求:
- 用户注册登录,存储用户 ID、用户名、密码、账户余额、手机号;
- 购彩功能:手动选号 / 随机选号、自定义投注倍数;
- 可视化抽奖:号码滚动动画,点击停止生成开奖号码,区分特等奖 / 一至五等奖,展示中奖用户与投注倍数;
- 登录自动中奖弹窗通知,实时提示当期中奖信息;
- 批量测试工具:一键注册 10 万用户、自动批量购彩、模拟开奖校验业务逻辑。
3. 整体功能清单
三、数据库设计
1. 三张数据表(符合第三范式)
2. 数据库连接配置 db.properties
properties
# MySQL连接配置,适配MySQL8.0修复公钥报错 db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/lottery_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true db.username=root db.password=你的数据库密码 # Hikari连接池大小 db.pool.size=103. SQL 脚本说明
lottery_db.sql可一键执行,自动创建 lottery_db 数据库、三张数据表、初始化测试管理员账号 admin(初始余额 10000)。
- 用户模块:注册、登录、账户余额管理、登录中奖提醒
- 购彩模块:手动选号、一键随机 7 码、投注倍数设置、余额扣费校验
- 开奖模块:动态号码滚动动画、停止开奖、自动匹配中奖、奖金发放
- 数据查询:我的彩票记录、历史开奖记录、中奖标红高亮
- 批量测试模块:十万用户批量注册、自动购彩、批量开奖统计
- 统一启动入口:单类启动,可选打开 GUI 或运行批量测试
二、系统分层架构设计(核心重点)
整体层级调用流程(自上而下单向调用)
plaintext
GUI视图层(com.lottery.gui) ↓ 仅调用Service Service业务层(com.lottery.service) ↓ 仅调用DAO DAO数据访问层(com.lottery.dao) ↓ 调用工具类获取连接 Util工具层 DBUtil(com.lottery.util) ↓ 操作MySQL数据库 Model实体层(全层通用,数据载体) Test测试包(独立批量测试入口)各层职责详解
Model 实体层(com.lottery.model)封装 User、LotteryTicket、LotteryResult 三个实体,映射数据库三张表,提供 get/set、构造方法,作为全项目数据传输载体,不处理任何业务与数据库操作。
GUI 视图层(com.lottery.gui)纯界面展示、按钮监听事件,禁止直接操作数据库,所有业务请求转发给 Service。 包含登录注册窗口、购彩面板、滚动开奖面板、历史记录、中奖弹窗。 踩坑修复:原生 JButton 白底白字看不见,通过
setOpaque(true)修复按钮渲染问题。Service 业务逻辑层(核心)处理全部业务规则:号码合法性校验、余额判断、中奖匹配算法、奖金计算、奖项分级、账户余额增减。 项目重难点:36 选 7 号码交集匹配算法、多投注倍数奖金换算逻辑。
DAO 数据访问层只负责执行 SQL 增删改查,无业务判断;UserDao、LotteryTicketDao、LotteryResultDao 统一调用 DBUtil 获取数据库连接。
Util 工具层 DBUtil数据库连接池工具类,基于 HikariCP 实现,统一读取
db.properties配置文件,封装获取连接、关闭资源方法,解决重复 JDBC 代码、数据库频繁创建连接卡顿、MySQL8.0 连接报错问题。Test 测试包独立批量测试程序,不影响 GUI 正常运行,一键生成 10 万用户、自动购彩、批量开奖并控制台输出各奖项统计数据。
- user 用户表:存储账户、手机号、余额
- lottery_ticket 彩票订单表:用户外键、投注号码、倍数、期号、中奖状态、奖金
- lottery_result 开奖结果表:期号、中奖号码、开奖时间
四、核心功能代码讲解
1. DBUtil 数据库连接工具(工具层核心)
作用:统一管理数据库连接池,消除重复 JDBC 代码,自动读取外部配置文件,统一关闭资源防止连接泄漏。 核心逻辑:
- 项目启动加载 db.properties 参数;
- 初始化 Hikari 连接池,缓存数据库连接;
- 对外提供 getConnection () 供所有 DAO 调用;
- close () 统一关闭 Connection、PreparedStatement、ResultSet。 调用链路:DAO → DBUtil → MySQL。
2. 中奖匹配核心算法(LotteryService)
项目重难点,实现 36 选 7 不重复号码比对:
- 将用户投注号码、当期开奖号码转为 HashSet 集合;
- 集合交集快速统计匹配号码数量;
- 根据匹配数量划分 6 档奖项:7 中特等奖、6 中一等奖、5 中二、4 中三、3 中四、2 中五等奖;
- 奖金 = 单注奖金 × 投注倍数,自动更新用户账户余额,标记彩票中奖状态。
3. Swing 滚动开奖动画(DrawLotteryPanel)
使用 Swing 专属 Timer 定时器实现号码动态滚动,规避普通 Thread 刷新 UI 导致界面卡顿问题:
- 点击【开始】启动定时器,循环随机生成 1-36 数字刷新 7 个号码球;
- 点击【停止】关闭定时器,加载正式开奖号码;
- 调用 LotteryService 执行批量匹配中奖逻辑,弹窗展示全部中奖用户 ID、投注倍数、总奖金。
4. 批量十万用户测试程序 BatchRegisterAndBuyTest
独立 main 入口,无需打开 GUI 即可运行:
- 循环批量注册 10 万用户存入数据库;
- 自动为每个用户随机购买 1~5 注彩票;
- 模拟完整开奖流程,批量匹配所有彩票;
- 控制台打印特等奖、一二三四五等奖中奖人数、中奖率,用于校验整套业务逻辑无漏洞。
五、界面展示与功能演示
- 统一启动界面:运行 Main 类,可选启动 GUI 系统 / 运行批量测试;
- 登录注册界面:账号密码校验、新用户注册、修复按钮文字白色不可见 bug;
- 购彩界面:36 个数字选号按钮、随机选号、倍数输入框、余额不足拦截;
- 开奖大厅:7 个动态滚动号码球、开始 / 停止按钮、中奖名单展示;
- 我的彩票 / 开奖历史:JTable 表格展示,中奖记录红色高亮;
- 中奖通知弹窗:用户登录自动触发,展示中奖注数与总奖金。
六、开发踩坑记录(学习干货)
- MySQL8.0 Public Key Retrieval 报错解决:URL 追加
&allowPublicKeyRetrieval=true参数; - 登录提示 Access denied 密码错误解决:db.properties 修改为本地 MySQL 真实账号密码;
- Swing 按钮背景白色、文字白色看不见原因:JButton 默认不开启背景渲染; 修复代码:
java
运行
btn.setOpaque(true); btn.setBorderPainted(false);- 开奖动画多线程刷新界面卡顿 解决:使用 javax.swing.Timer,禁止普通 Thread 直接操作 UI 组件;
- 十万用户批量插入数据库速度慢 优化:DAO 层编写批量插入 batchInsert 方法,减少单条 SQLIO 消耗;
- 分层调用混乱,GUI 直接操作数据库 规范:严格单向调用,GUI 只调用 Service,禁止跨层直连 DAO/DBUtil。
七、项目运行步骤
- 本地启动 MySQL,执行 lottery_db.sql 脚本创建库与表;
- IDEA 解压导入项目,等待 Maven 自动下载依赖;
- 修改 src/main/resources/db.properties 数据库账号密码;
- 两种启动方式:
- 正常使用 GUI:运行 com.lottery.Main → 选择启动 GUI;
- 批量十万用户测试:运行 com.lottery.test.BatchRegisterAndBuyTest;
- 测试账号:admin / 123456,初始账户余额 10000 元。
八、项目不足与优化展望
现有缺陷
- 用户密码明文存储数据库,无加密;
- Swing 原生界面简陋,无美化组件;
- 无日志文件记录操作与异常;
- 大批量数据插入效率仍有优化空间。
后续拓展方向
- 使用 MD5 加密用户密码,提升账户安全;
- 引入第三方 UI 美化库优化界面;
- 新增日志框架记录操作记录;
- 学习 JUnit 为核心中奖算法编写单元测试;
- 重构为 SpringBoot 网页版彩票系统;
- 新增密码修改、账户充值提现、彩票记录导出功能。
九、课程设计开发心得
本次项目为单人独立完成,完整贯彻 Java 面向对象封装、继承、多态思想,分层架构实现代码解耦。开发过程中解决数据库连接、Swing 界面渲染、大批量数据处理、动画线程冲突等大量问题,深刻理解 DAO、Service 分层开发、数据库连接池、GUI 事件驱动编程的实际应用。 前期未分层导致代码混乱,重构分层后调试 bug 效率大幅提升;批量十万用户测试工具也验证了整套业务逻辑的完整性,非常适合作为 Java 面向对象课程设计标准参考项目。
十、资源说明
项目包含完整 IDEA Maven 工程、MySQL 建库 SQL 脚本,所有代码无删减,可直接导入运行,适配 JDK17 环境,无第三方复杂依赖,课程设计、大作业可直接使用。