Java 课程设计|JDK17+Swing+MySQL 福利彩票 36 选 7 系统 完整分层项目(含 10 万用户批量测试、GUI 滚动动画、源码 + SQL)
2026/6/29 22:16:55 网站建设 项目流程

一、项目概述

1. 开发环境

  • JDK 版本:JDK 17
  • IDE:IntelliJ IDEA
  • 数据库:MySQL 8.0
  • 构建工具:Maven
  • 核心技术:Java Swing 桌面 GUI、HikariCP 数据库连接池、分层架构(Model-DAO-Service-GUI)
  • 项目难度:B 级课程设计,单人独立完成

2. 需求原文(课程作业标准)

模拟福利彩票 36 选 7,完整实现 5 大硬性需求:

  1. 用户注册登录,存储用户 ID、用户名、密码、账户余额、手机号;
  2. 购彩功能:手动选号 / 随机选号、自定义投注倍数;
  3. 可视化抽奖:号码滚动动画,点击停止生成开奖号码,区分特等奖 / 一至五等奖,展示中奖用户与投注倍数;
  4. 登录自动中奖弹窗通知,实时提示当期中奖信息;
  5. 批量测试工具:一键注册 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=10

3. SQL 脚本说明

lottery_db.sql可一键执行,自动创建 lottery_db 数据库、三张数据表、初始化测试管理员账号 admin(初始余额 10000)。

  1. 用户模块:注册、登录、账户余额管理、登录中奖提醒
  2. 购彩模块:手动选号、一键随机 7 码、投注倍数设置、余额扣费校验
  3. 开奖模块:动态号码滚动动画、停止开奖、自动匹配中奖、奖金发放
  4. 数据查询:我的彩票记录、历史开奖记录、中奖标红高亮
  5. 批量测试模块:十万用户批量注册、自动购彩、批量开奖统计
  6. 统一启动入口:单类启动,可选打开 GUI 或运行批量测试

    二、系统分层架构设计(核心重点)

    整体层级调用流程(自上而下单向调用)

    plaintext

    GUI视图层(com.lottery.gui) ↓ 仅调用Service Service业务层(com.lottery.service) ↓ 仅调用DAO DAO数据访问层(com.lottery.dao) ↓ 调用工具类获取连接 Util工具层 DBUtil(com.lottery.util) ↓ 操作MySQL数据库 Model实体层(全层通用,数据载体) Test测试包(独立批量测试入口)

    各层职责详解

  7. Model 实体层(com.lottery.model)封装 User、LotteryTicket、LotteryResult 三个实体,映射数据库三张表,提供 get/set、构造方法,作为全项目数据传输载体,不处理任何业务与数据库操作。

  8. GUI 视图层(com.lottery.gui)纯界面展示、按钮监听事件,禁止直接操作数据库,所有业务请求转发给 Service。 包含登录注册窗口、购彩面板、滚动开奖面板、历史记录、中奖弹窗。 踩坑修复:原生 JButton 白底白字看不见,通过setOpaque(true)修复按钮渲染问题。

  9. Service 业务逻辑层(核心)处理全部业务规则:号码合法性校验、余额判断、中奖匹配算法、奖金计算、奖项分级、账户余额增减。 项目重难点:36 选 7 号码交集匹配算法、多投注倍数奖金换算逻辑。

  10. DAO 数据访问层只负责执行 SQL 增删改查,无业务判断;UserDao、LotteryTicketDao、LotteryResultDao 统一调用 DBUtil 获取数据库连接。

  11. Util 工具层 DBUtil数据库连接池工具类,基于 HikariCP 实现,统一读取db.properties配置文件,封装获取连接、关闭资源方法,解决重复 JDBC 代码、数据库频繁创建连接卡顿、MySQL8.0 连接报错问题。

  12. Test 测试包独立批量测试程序,不影响 GUI 正常运行,一键生成 10 万用户、自动购彩、批量开奖并控制台输出各奖项统计数据。

  13. user 用户表:存储账户、手机号、余额
  14. lottery_ticket 彩票订单表:用户外键、投注号码、倍数、期号、中奖状态、奖金
  15. lottery_result 开奖结果表:期号、中奖号码、开奖时间

四、核心功能代码讲解

1. DBUtil 数据库连接工具(工具层核心)

作用:统一管理数据库连接池,消除重复 JDBC 代码,自动读取外部配置文件,统一关闭资源防止连接泄漏。 核心逻辑:

  1. 项目启动加载 db.properties 参数;
  2. 初始化 Hikari 连接池,缓存数据库连接;
  3. 对外提供 getConnection () 供所有 DAO 调用;
  4. close () 统一关闭 Connection、PreparedStatement、ResultSet。 调用链路:DAO → DBUtil → MySQL。

2. 中奖匹配核心算法(LotteryService)

项目重难点,实现 36 选 7 不重复号码比对:

  1. 将用户投注号码、当期开奖号码转为 HashSet 集合;
  2. 集合交集快速统计匹配号码数量;
  3. 根据匹配数量划分 6 档奖项:7 中特等奖、6 中一等奖、5 中二、4 中三、3 中四、2 中五等奖;
  4. 奖金 = 单注奖金 × 投注倍数,自动更新用户账户余额,标记彩票中奖状态。

3. Swing 滚动开奖动画(DrawLotteryPanel)

使用 Swing 专属 Timer 定时器实现号码动态滚动,规避普通 Thread 刷新 UI 导致界面卡顿问题:

  1. 点击【开始】启动定时器,循环随机生成 1-36 数字刷新 7 个号码球;
  2. 点击【停止】关闭定时器,加载正式开奖号码;
  3. 调用 LotteryService 执行批量匹配中奖逻辑,弹窗展示全部中奖用户 ID、投注倍数、总奖金。

4. 批量十万用户测试程序 BatchRegisterAndBuyTest

独立 main 入口,无需打开 GUI 即可运行:

  1. 循环批量注册 10 万用户存入数据库;
  2. 自动为每个用户随机购买 1~5 注彩票;
  3. 模拟完整开奖流程,批量匹配所有彩票;
  4. 控制台打印特等奖、一二三四五等奖中奖人数、中奖率,用于校验整套业务逻辑无漏洞。

五、界面展示与功能演示

  1. 统一启动界面:运行 Main 类,可选启动 GUI 系统 / 运行批量测试;
  2. 登录注册界面:账号密码校验、新用户注册、修复按钮文字白色不可见 bug;
  3. 购彩界面:36 个数字选号按钮、随机选号、倍数输入框、余额不足拦截;
  4. 开奖大厅:7 个动态滚动号码球、开始 / 停止按钮、中奖名单展示;
  5. 我的彩票 / 开奖历史:JTable 表格展示,中奖记录红色高亮;
  6. 中奖通知弹窗:用户登录自动触发,展示中奖注数与总奖金。

六、开发踩坑记录(学习干货)

  1. MySQL8.0 Public Key Retrieval 报错解决:URL 追加&allowPublicKeyRetrieval=true参数;
  2. 登录提示 Access denied 密码错误解决:db.properties 修改为本地 MySQL 真实账号密码;
  3. Swing 按钮背景白色、文字白色看不见原因:JButton 默认不开启背景渲染; 修复代码:

java

运行

btn.setOpaque(true); btn.setBorderPainted(false);
  1. 开奖动画多线程刷新界面卡顿 解决:使用 javax.swing.Timer,禁止普通 Thread 直接操作 UI 组件;
  2. 十万用户批量插入数据库速度慢 优化:DAO 层编写批量插入 batchInsert 方法,减少单条 SQLIO 消耗;
  3. 分层调用混乱,GUI 直接操作数据库 规范:严格单向调用,GUI 只调用 Service,禁止跨层直连 DAO/DBUtil。

七、项目运行步骤

  1. 本地启动 MySQL,执行 lottery_db.sql 脚本创建库与表;
  2. IDEA 解压导入项目,等待 Maven 自动下载依赖;
  3. 修改 src/main/resources/db.properties 数据库账号密码;
  4. 两种启动方式:
    • 正常使用 GUI:运行 com.lottery.Main → 选择启动 GUI;
    • 批量十万用户测试:运行 com.lottery.test.BatchRegisterAndBuyTest;
  5. 测试账号:admin / 123456,初始账户余额 10000 元。

八、项目不足与优化展望

现有缺陷

  1. 用户密码明文存储数据库,无加密;
  2. Swing 原生界面简陋,无美化组件;
  3. 无日志文件记录操作与异常;
  4. 大批量数据插入效率仍有优化空间。

后续拓展方向

  1. 使用 MD5 加密用户密码,提升账户安全;
  2. 引入第三方 UI 美化库优化界面;
  3. 新增日志框架记录操作记录;
  4. 学习 JUnit 为核心中奖算法编写单元测试;
  5. 重构为 SpringBoot 网页版彩票系统;
  6. 新增密码修改、账户充值提现、彩票记录导出功能。

九、课程设计开发心得

本次项目为单人独立完成,完整贯彻 Java 面向对象封装、继承、多态思想,分层架构实现代码解耦。开发过程中解决数据库连接、Swing 界面渲染、大批量数据处理、动画线程冲突等大量问题,深刻理解 DAO、Service 分层开发、数据库连接池、GUI 事件驱动编程的实际应用。 前期未分层导致代码混乱,重构分层后调试 bug 效率大幅提升;批量十万用户测试工具也验证了整套业务逻辑的完整性,非常适合作为 Java 面向对象课程设计标准参考项目。

十、资源说明

项目包含完整 IDEA Maven 工程、MySQL 建库 SQL 脚本,所有代码无删减,可直接导入运行,适配 JDK17 环境,无第三方复杂依赖,课程设计、大作业可直接使用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询