彩票购买抽奖程序

🎯 项目简介
项目背景
本项目是一个基于纯Java实现的轻量级彩票管理系统,采用单机文件存储方式,通过内置HTTP服务器提供Web访问界面。
技术特色
零框架依赖:完全使用Java标准库实现,便于理解底层原理

文件数据存储:使用Excel文件替代传统数据库,简化部署

内置Web服务器:基于HttpServer实现浏览器访问

轻量级架构:适合教学演示和小型应用场景

技术栈概览
text
语言:Java 11+
数据存储:Apache POI + Excel文件
Web服务:Java内置HttpServer
前端:HTML + JavaScript(原生)
构建工具:Maven(建议)
📊 系统功能简介

  1. 用户管理模块
    🔐 认证功能
    用户注册:新用户可通过用户名、密码、电话注册

用户登录:基于用户名密码的身份验证

会话管理:简单内存会话维护登录状态

💰 账户管理
余额查询:实时查看账户余额

在线充值:支持任意金额充值

消费记录:购买彩票自动扣款

  1. 彩票业务模块
    🎫 彩票购买
    手动选号:用户自定义7个号码(1-36)

随机选号:系统生成7个随机不重复号码

批量投注:支持多注同时购买(每注2元)

🔢 号码规则
text
号码数量:7个/注
号码范围:1-36
号码要求:不可重复
投注价格:2元/注
3. 抽奖管理模块
🎲 开奖功能
随机开奖:系统生成7个中奖号码

期号管理:自动递增开奖期号

结果记录:保存历史开奖结果

🏆 中奖计算
text
匹配规则 中奖等级 单注奖金
7个号码 特等奖 5,000,000元
6个号码 一等奖 100,000元
5个号码 二等奖 5,000元
4个号码 三等奖 100元
3个及以下 未中奖 0元
4. 查询通知模块
📋 信息查询
我的彩票:查看历史购买记录

中奖查询:查询历史中奖信息

开奖记录:查看所有开奖结果

🔔 通知系统
未读通知:新中奖记录标记为未读

实时提醒:登录时显示未读通知数量

一键已读:批量标记通知为已读

  1. 数据管理模块
    💾 持久化存储
    用户数据:data/users.xlsx

彩票数据:data/tickets.xlsx

开奖数据:data/results.xlsx

中奖记录:data/winnings.xlsx

🔄 数据同步
实时保存:每次操作后自动保存到Excel

自动加载:启动时自动加载历史数据

容错处理:文件不存在时创建默认数据

🏗️ 系统架构设计
分层架构设计
text
┌─────────────────────────────────────────┐
│ 表示层 (Presentation) │
│ ├─ PageGenerator(页面生成) │
│ ├─ ServletHandler(请求处理) │
│ └─ WebServer(HTTP服务) │
├─────────────────────────────────────────┤
│ 业务层 (Business Logic) │
│ ├─ UserService(用户服务) │
│ ├─ TicketService(彩票服务) │
│ └─ LotteryService(抽奖服务) │
├─────────────────────────────────────────┤
│ 数据访问层 (Data Access) │
│ ├─ DataManager(数据管理) │
│ ├─ ExcelDao(Excel操作) │
│ └─ IExcelDao(数据接口) │
├─────────────────────────────────────────┤
│ 持久层 (Persistence) │
│ Excel文件存储系统 │
└─────────────────────────────────────────┘
核心类图关系

设计模式应用
单例模式:DataManager确保数据唯一性

DAO模式:ExcelDao抽象数据访问

MVC模式:页面、控制、模型分离

服务层模式:业务逻辑集中管理

🚀 课程设计总结及展望
🎉 已完成成果

  1. 功能完整性 ✅
    完整的用户生命周期管理

彩票购买和开奖流程

中奖计算和通知系统

数据持久化和恢复

  1. 技术实现 ✅
    无框架Web服务器实现

Excel文件数据库设计

多线程并发处理

前后端数据交互

  1. 代码质量 ✅
    分层架构清晰

错误处理机制

代码注释规范

模块化设计

🔧 技术亮点
创新点1:轻量级数据存储
java
// 使用Excel作为轻量级数据库
public class ExcelDao {
// 支持用户、彩票、开奖结果、中奖记录四个数据表
public void saveToExcel(String filePath,
List<Map<String, Object>> data,
List headers) {
// 动态创建Excel文件并保存数据
}
}
创新点2:内置Web服务器
java
// 不依赖外部容器的Web服务
public class WebServer {
public void start() throws IOException {
server = HttpServer.create(new InetSocketAddress(port), 0);
server.createContext("/", new RootHandler());
server.setExecutor(Executors.newFixedThreadPool(10));
server.start();
}
}
创新点3:实时通知系统
java
// 中奖通知实时推送
public List<Map<String, Object>> getUnreadWinningsByUserId(int userId) {
// 查询用户未读中奖记录
// 登录时自动显示通知数量
}
📈 性能评估
指标 当前状态 优化建议
并发用户 约10-20人 使用连接池优化
响应时间 50-100ms 增加数据缓存
数据容量 千级别 考虑分页加载
启动速度 2-3秒 懒加载优化
🔮 未来展望
短期优化(1-2周)
界面美化

引入Bootstrap或CSS框架

响应式设计适配移动端

图表展示统计数据

功能增强

彩票类型扩展(双色球、大乐透)

历史数据统计分析

用户等级和积分系统

中期规划(1-2月)
技术升级

xml

org.springframework.boot spring-boot-starter-web com.h2database h2 runtime 架构改进

数据库迁移(SQLite/MySQL)

RESTful API设计

前后端分离架构

长期愿景(3-6月)
分布式扩展

微服务架构拆分

Redis缓存引入

消息队列异步处理

商业功能

支付接口集成

实名认证系统

彩票销售代理功能

💭 课程设计感想
🎓 学习收获

  1. 架构设计能力提升
    通过这次项目,我深刻理解了分层架构的重要性。从最初的所有代码混在一起,到最终清晰的MVC分层,这个重构过程让我明白了:

关注点分离让代码更易维护

接口设计提高了模块间的解耦

单一职责原则减少了bug产生

  1. 问题解决能力锻炼
    遇到的每个技术难题都是宝贵的学习机会:

java
// 问题:多用户同时购买彩票的数据竞争
// 解决方案:使用synchronized关键字
public synchronized void addTicket(Map<String, Object> ticket) {
tickets.add(ticket);
saveAll(); // 确保数据一致性
}
3. 工程实践能力培养
版本控制:学会合理提交代码

文档编写:清晰的注释和README

调试技巧:日志分析和断点调试

🤔 技术反思
选择的智慧
为什么选择无框架实现?

开始时觉得使用框架更"高级",但经过思考决定:

教学价值:理解底层原理比会用框架更重要

可控性:每个问题都需要自己解决,理解更深

轻量级:适合课程设计的规模和复杂度

实践证明:这个选择虽然增加了开发难度,但收获更大。

设计的遗憾
过度设计:初期设计过于复杂,后期简化

测试不足:缺乏单元测试,依赖手动测试

扩展性:某些设计限制了后续功能扩展

🌟 项目亮点回顾
最满意的设计
数据管理器单例模式:

java
public class DataManager {
private static DataManager instance;

public static synchronized DataManager getInstance() {
    if (instance == null) {
        instance = new DataManager();
        instance.initialize();
    }
    return instance;
}
// 统一管理所有数据访问,确保一致性

}
最具挑战的部分
Excel数据同步:确保内存数据和文件数据的一致性,处理并发访问和异常恢复。

最有趣的功能
实时中奖通知:用户登录时能看到未读中奖信息,这种即时反馈很有成就感。
🎨 美学与用户体验
虽然这是一个后端重项目,但我还是尽量考虑了用户体验:

操作流程:尽量简化用户操作步骤

反馈机制:每个操作都有明确的结果提示

错误处理:友好的错误信息而不是异常堆栈

数据展示:表格化展示,清晰易读

🔍 代码质量感悟
通过这次项目,我体会到:

好代码的标准:

可读性:别人能看懂

可维护性:容易修改和扩展

可靠性:正确处理各种边界情况

性能:在资源有限时依然高效

🏆 最终成果展示
项目最终实现了:

✅ 8000+行有效代码

✅ 20+个核心类

✅ 5个主要功能模块

✅ 完整的数据流闭环

✅ 稳定的Web服务

🌈 总结
这次课程设计不仅让我掌握了一个完整Web应用的开发流程,更重要的是培养了我的工程思维和解决问题能力。从需求分析到架构设计,从编码实现到测试调试,每个环节都让我受益匪浅。

最大的收获不是完成了多少功能,而是在这个过程中:

学会了如何在技术选型中做权衡

理解了架构设计的重要性

掌握了从零开始构建系统的能力

培养了面对困难的韧性

这不仅仅是一个课程设计,更是我编程生涯中重要的一步。它让我明白:好的程序员不仅要会写代码,更要懂得为什么这样写。

posted @ 2026-01-14 22:07  零零12  阅读(3)  评论(0)    收藏  举报