菜品抽奖活动MFC+服务端

MFC 项目采用严格前后端分离架构,客户端仅实现 UI 渲染、接口请求、数据展示、异常提示。无算法、无核心业务存储、无权限判定逻辑,所有业务逻辑、抽奖规则、权限校验全部由后端接口实现,基于 HTTP/JSON 通信、Token 登录鉴权、401/403 权限拦截,完全符合企业工控上位机开发规范。

day1 MFC 基础框架

今日任务

MFC 工程创建、HTTP/JSON 库集成、登录 UI、Token 缓存

今日必背 3 题

  1. 交叉编译概念、嵌入式为何必须使用交叉编译?
  2. /dev、/sys、/proc 三个文件系统作用区别?
  3. 多线程互斥锁与条件变量解决的核心问题?

当日交付

MFC 登录工程

小时拆分

19:30--20:30 VS 新建 MFC 工程、引入 HTTP/JSON 库、登录 UI 布局

20:30--21:00 前端输入校验、Token 缓存框架搭建

一、VS 新建 MFC 工程

二、引入 HTTP/JSON 库(网络请求 + 数据解析,适配抽奖登录)

MFC 原生不支持 HTTP/JSON,我们用轻量、无依赖、最适合 MFC的两个库:

  • JSON 解析nlohmann/json(头文件 - only,无需编译)
  • HTTP 请求WinINet(Windows 系统自带 API,无需额外安装)

引入JSON:

  • 下载库文件进入官网:https://github.com/nlohmann/json/releases下载最新版的 json.hpp(单头文件)

  • 放入工程目录

    1. 打开你的项目文件夹(MenuLottery
    2. json.hpp复制到你项目根目录下新建的include文件夹内
  • VS 中添加头文件到工程

    1. 右侧解决方案资源管理器 → 右键项目 → 属性
    2. 选中C++ → 外部依赖库 → 给到include/路径
    3. 在需要用 JSON 的文件(如MenuLotteryDlg.cpp)顶部添加:
复制代码
#include <nlohmann/json.hpp> // 使用 nlohmann/json 单头文件
using nlohmann::json;

添加HTTP:

WinINet 是 Windows 内置网络库,直接在工程中开启即可:

  1. 打开项目属性右键项目 → 属性配置属性链接器输入

  2. 添加依赖库在附加依赖项中添加:

WinINet.lib

  • 点击确定保存

  • 包含头文件在pch.h(预编译头)顶部添加:

#include <afxwin.h>

#include <WinINet.h> // HTTP请求

#include <tchar.h>

三、登录 UI 布局

登录界面需求:账号输入框、密码输入框、登录按钮、退出按钮、提示文本、背景优化

控件类型 控件 ID 标题 (Caption) 说明
静态文本 IDC_STATIC 登录页面 标题(居中、大号字体)
静态文本 ------ 账号: 账号标签
编辑框 (Edit) IDC_EDIT_USER 账号输入
静态文本 ------ 密码: 密码标签
编辑框 (Edit) IDC_EDIT_PWD 密码输入(加密)
按钮 IDC_BTN_LOGIN 登录 登录请求按钮
按钮 IDCANCEL 退出 关闭窗口

四、Token 缓存

登录成功后拿到后端 Token,做两件事:

  1. 内存全局缓存 Token,后续请求自动带 Token
  2. 本地写入 ini 配置文件,重启软件免登录

五、交付物

MFC 登录工程

第 2 天 MFC 双业务页面

今日任务

MFC 登录接口联调、Token 保存、角色权限控显隐、活动 / 菜品页面开发

今日必背 3 题+必备通用技能

  1. Qt 信号槽原理,跨线程操作 UI 的禁忌?
  2. V4L2 摄像头完整采集流程?
  3. 串口通信如何处理丢包、数据异常问题?
  4. Linux:进程查看 ps、kill、后台运行 &、nohup
  5. C++:引用、指针与引用区别

当日交付

MFC 登录鉴权 +MFC 双业务界面

一、MFC 登录接口联调

二、Token 保存

三、角色权限控显隐

四、活动 / 菜品页面开发

五、交付物

5.1 MFC 登录鉴权

登录成功后将 Token 写入注册表,抽奖请求自动携带 Authorization: Bearer 头。

5.2 MFC 双业务界面

通过两个独立对话框实现,登录成功后销毁登录对话框,显示抽奖主对话框。

第 3 天MFC 抽奖 UI

今日任务

MFC 抽奖动画、倒计时、中奖弹窗、抽奖池接口对接、防重复请求

今日必背 3 题

  1. 嵌入式状态机设计的优势?
  2. 嵌入式设备本地数据持久化实现方式?
  3. MFC 消息映射机制原理?

当日交付

MFC 抽奖 UI 与数据渲染功能

一、MFC 抽奖动画

二、倒计时

三、中奖弹窗

四、抽奖池接口对接

五、防重复请求

六、交付物

6.1 MFC 抽奖 UI

通过定时器控制 GDI + 绘制的转盘旋转角度,实现减速动画效果,最终停在中奖菜品上。

6.2 数据渲染功能

从 SQLite 读取菜品表,按类别生成转盘 / 九宫格的选项,动态绘制文本和扇形区域。

第 4 天 MFC 统计导出

今日任务

MFC 中奖核销、状态流转、数据统计看板、图表渲染、Excel 导出、日志容错

今日必背 3 题

  1. 音视频项目为何信令用 TCP、媒体流用 UDP?
  2. 网络粘包、拆包的完整解决方案?
  3. 嵌入式音视频延迟、音画不同步如何优化?
  4. Linux:静态编译、动态编译、库文件.so/.a
  5. 网络基础:IP、端口、TCP/UDP 基础概念

当日交付

MFC 完整前后端交互业务闭环

一、MFC 中奖核销

二、状态流转

三、数据统计看板

四、图表渲染

五、Excel 导出

六、日志容错

七、交付物

MFC 完整前后端交互业务闭环

MFC 核销 + 统计 + Excel 导出全功能

相关推荐
ouliten1 小时前
C++笔记:Lambda表达式
c++·笔记
Kiling_07041 小时前
Java集合进阶:Collection与List详解
java·windows·list
minji...1 小时前
Linux 网络基础(五)守护进程化,前后台进程组,作业,会话,setsid(),daemon(),端口号频繁更换问题
linux·运维·服务器·网络·c++·tcp/ip
Brilliantwxx1 小时前
【算法题】递归树+哈希表+分治异或+双指针
开发语言·c++·笔记·算法
Hello:CodeWorld1 小时前
高性能多线程数据采集与持久化方案设计与实现
开发语言·c++
Byron Loong1 小时前
【逆向】PE 解析器 / 加壳器 + 加壳步骤 + 手动脱壳思路
windows
程序猿编码1 小时前
Linux 高负载场景下 Web 服务访问日志极速定位工具实现解析(C/C++代码实现)
linux·服务器·c语言·前端·c++
无限进步_1 小时前
【C++】智能指针族谱:auto_ptr、unique_ptr、shared_ptr
java·开发语言·数据结构·c++·算法
Brilliantwxx1 小时前
【C++】Stack和Queue(初认识和算法题OJ)
开发语言·c++·笔记·算法