324 lines
30 KiB
Markdown
324 lines
30 KiB
Markdown
# 四川大学软件学院 2026 年夏 C/C++ 项目实习实训方案书 V1.2
|
||
|
||
> 来源:项目根目录 PDF 原件
|
||
> `四川大学软件学院2026年夏C&C++项目实习实训(10天)方案书v1.2.pdf`(提取时间:2026-07-02)
|
||
|
||
## 一、实训对象
|
||
|
||
- **实训对象**:适用于四川大学软件学院相关专业学生。
|
||
- **进入条件**:
|
||
- 具备软件开发基础,至少熟悉一种编程语言,如 C、C++ 等;
|
||
- 英语能力达到 3 级或以上水平;
|
||
- 对软件开发感兴趣,有志于从事 IT 行业发展;
|
||
- 具备良好的问题分析和问题解决能力。
|
||
|
||
## 二、实训时间
|
||
|
||
- **实训周期**:10 天
|
||
- **实训时间**:2026 年 7 月 __ 日 – 2026 年 7 月 __ 日(原文档具体日期留空)
|
||
|
||
## 三、实训目标
|
||
|
||
**技能目标**
|
||
- 熟练掌握 C/C++ 编程语言;
|
||
- 熟悉 Linux 常用命令以及进程、IO 等 API 进行开发;
|
||
- 掌握使用 Qt 开发图形界面程序;
|
||
- 理解并掌握软件项目开发的流程、模型、原理、估算及决策等;
|
||
- 熟悉并理解企业常用的技术、工具及方法等。
|
||
|
||
**职业目标**
|
||
- 体验企业文化、具备良好的职业素质,具备成熟的团队协作意识;
|
||
- 具有良好的沟通与理解能力、具备良好的问题分析和问题解决能力。
|
||
|
||
## 四、实训内容
|
||
|
||
### (一) 阶段过程描述
|
||
|
||
- **立项/规划阶段**:达成项目目标共识、确定需求范围及团队成员,召开项目启动会完成产品版本计划、迭代计划。
|
||
- **需求分析(迭代计划会)**:确定当前迭代的用户故事及拆解、细化和估算,并编写相关测试用例。
|
||
- **项目设计阶段**:完成项目的设计分析。
|
||
- **编码实现**:学员独立开发进行项目编码实现,教员指导,需完成自己功能的单元测试。
|
||
- **测试及回归**:测试人员根据测试用例进行测试,在 Jira 中提交测试 bug,并给出产品是否发布的意见。
|
||
- **技术讲解**:教员通过讲座或讲练方式,对项目开发中的主要技术进行讲解,让学员快速掌握使用。
|
||
- **项目交付**:项目最终评审,对学员项目打分,形成《成绩考核表》。
|
||
|
||
### (二) 阶段内容
|
||
|
||
| 阶段 | 主要内容 | 目标 |
|
||
|---|---|---|
|
||
| 项目立项规划阶段 | 1) 熟悉软件开发流程 2) 商业项目介绍 3) 确定项目初步目标并达成共识 4) 召开项目启动会 | 1) 熟悉敏捷开发流程及相关活动 2) 掌握项目分析方法,能够分析需求范围、预测项目风险及规模、技术可行性及成本预算等 3) 了解项目启动会流程 |
|
||
| 需求分析阶段 | 1) 需求分析与管理、需求分析过程 2) 编写用户故事(User Story) 3) 测试用例编写 4) 迭代计划会议 | 1) 了解软件项目需求管理流程 2) 掌握软件需求分析方法 3) 掌握需求管理工具 4) 掌握测试用例编写 5) 熟悉迭代计划会议流程 |
|
||
| 项目需求分析评审 | 1) 项目需求分析评审 2) 用户故事分析合理性 3) 项目可行性 | 个人成绩 |
|
||
| 项目设计阶段 | 1) 软件设计方法及实用原则 2) 数据库设计 3) 架构、模块、接口设计 4) 原型设计 | 1) 深入理解软件设计方法 2) 理解数据库设计 3) 熟练进行原型设计 4) 掌握《概要设计说明书》编写 |
|
||
| 项目设计评审 | 《概要设计》评审 | 个人成绩 |
|
||
| 技术讲解阶段 | 1) C/C++ 语言回顾 2) Linux 常用命令及 IO/进程库等 3) Qt 图形开发 4) Git 代码管理工具 | 1) 掌握 C 项目开发技术 2) 掌握 Linux 操作及 Linux 下 C 编程 3) 掌握 Qt 图形程序开发 4) 熟练使用 Qt 进行代码协作 5) 掌握常用项目管理工具 6) 具有独立开发小型项目能力 7) 理解常用项目的开发流程 |
|
||
| 编码实现阶段 | 1) 学员编码 2) 教员辅导、调试 | 开发过程中熟练进行代码调试 |
|
||
| 项目测试及回归阶段 | 1) 软件测试工具与方法讲解(单元、集成、性能测试) 2)《系统测试报告》 | 1) 了解市场主流软件测试方式和测试工具 2) 掌握《系统测试报告》编写 |
|
||
| 项目交付阶段 | 1) 成果展示 2) 项目最终评审 3)《项目总结报告》 | 1) 个人成绩同时计入最终成绩 2)《成绩考核表》 |
|
||
|
||
## 五、执行计划
|
||
|
||
项目执行总时间 10 天:4 天知识讲解与练习、1 天项目案例讲解与练习,5 天项目开发训练。
|
||
|
||
### (一) Linux C 方向
|
||
|
||
| 时间 | 技能内容 | 实施方式 | 成果物 |
|
||
|---|---|---|---|
|
||
| 第一天 上午 | 1) 开训典礼(公司、团队建设及文化;实训安排、考评要求和其他相关事宜) 2) 项目分组及选题 3) 现代 Linux C 语言开发模式介绍 4) Linux C 开发环境搭建 5) CMake 项目构建工具基础 6) Vcpkg 包管理器入门 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第一天 下午 | 1) Linux 操作系统环境介绍 2) Linux Bash 常用命令与权限管理 3) Linux 远程调试技巧 (GDB/CLion) 4) 案例:实现简单的自定义 Linux 命令 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第二天 全天 | 1) Linux 系统调用与 C 库函数对比 2) Linux 文件描述符与 inode 结构 3) Linux 读写文件操作 (open, read, write) 4) 现代 Linux 嵌入式 GUI 框架:LVGL 简介 5) 使用 SquareLine Studio 设计绘制 UI 6) 案例:本地系统日志查看器 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第三天 全天 | 1) Linux 进程与内存结构 (虚拟内存、malloc/free 基础) 2) Linux 线程创建与销毁 3) Linux 并发控制与互斥锁 (Mutex) 4) 线程安全与 GUI 渲染规则 5) 案例:智能车载/物联网仪表盘 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第四天 全天 | 1) C 语言内存分配精讲:malloc, free, realloc 的安全使用与内存泄漏排查 2) 字符串处理与协议解析 3) 数据文件存储与解析 4) 案例:无网络版 Redis 数据库实现 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第五天 全天 | 1) 综合项目开发讲解与指导 2)【提升】网络版 Redis 数据库实现 3)【提升】基于 LVGL 图形化 Redis 客户端 4) 代码团队协同开发 | 讲座 / 讲练 / 指导 | 《源码》 |
|
||
| 第六天 全天 | 学员编码与指导 | 讲练 / 指导 | 《源码》 |
|
||
| 第七天 上午 ~ 第十天 下午 | 1) 学员编码与指导 2) 学员编码 3) 项目经验总结 4) 成果展示 5) 项目交付 | 讲练 / 指导 / 评审 | 《源码》《项目开发总结报告》《答辩 PPT》《成绩考核表》 |
|
||
|
||
### (二) C++ 方向
|
||
|
||
| 时间 | 技能内容 | 实施方式 | 成果物 |
|
||
|---|---|---|---|
|
||
| 第一天 上午 | 1) 开训典礼(公司、团队建设及文化;实训安排、考评要求和其他相关事宜) 2) 敏捷 Scrum 项目开发管理 3) C++ 在企业中的应用 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第一天 下午 | 1) C++ 开发环境搭建/进阶 2) C++ 高级程序开发回顾和提升 3) CMake 跨平台项目构建工具 4) Vcpkg 包管理器入门 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第二天 全天 | 1) Qt 开发环境 2) Qt 核心通信机制:信号与槽 3) 常用基础 UI 控件、布局管理与 QSS 界面美化 4) 案例:基于 Qt 开发带现代 UI 风格的简易计算器 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第三天 全天 | 1) 高级控件应用与 Model/View 模型视图架构 2) Qt 事件循环机制与自定义事件处理拦截 3) Qt 文件 IO 操作与 JSON 等主流数据格式解析 4) 案例:基于 Qt 的本地数据存储程序 | 讲座 / 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第四天 全天 | 1) Qt 2D 图形绘制引擎 2) Qt 多线程编程(QThread、互斥锁与防止 UI 阻塞机制) 3) Qt 动画框架(QPropertyAnimation)与状态机实战 4) 案例:基于 Qt 动画框架与多线程的交互式小游戏 | 讲练 / 指导 | 课堂笔记 / 课堂代码 |
|
||
| 第五天 全天 | 1) 代码团队协同开发 2) 案例:综合案例讲解 3) OpenCV 与 AI 机器学习(可选择) 4) 案例:基于 OpenCV 的目标检测(可选择) | 讲练 / 指导 | 课堂笔记 / 课堂代码 / 《源码》 |
|
||
| 第六天 全天 | 学员编码与指导 | 讲练 / 指导 | 《源码》 |
|
||
| 第七天 上午 ~ 第十天 下午 | 1) 学员编码 2) 项目经验总结 3) 成果展示 4) 项目交付 | 讲练 / 指导 / 评审 | 《源码》《项目开发总结》《成绩考核表》 |
|
||
|
||
## 六、实习实训服务流程
|
||
|
||

|
||
|
||
## 七、质量保证
|
||
|
||

|
||
|
||
### (一) 项目开发过程管理——事务与项目跟踪管理系统 JIRA
|
||
|
||
JIRA 是集项目计划、任务分配、需求管理、缺陷跟踪于一体的管理系统,对项目组实训项目进行缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷开发管理。
|
||
|
||
实训过程中以项目为主线,产品、测试结合管理,通过 issue 驱动管理、分工、以及团队协作,结合企业级工作流定制,规范项目开发各个流程。
|
||
|
||
1. **标准化工作流:敏捷开发流程** —— 可自定义多个工作流,每个工作流可配置多个自定义动作和状态,可视化工作流设计器,支持自定义触发条件与自动执行操作。
|
||
2. **任务驱动** —— 对故事、缺陷任务类型进行估算和跟踪,每个问题以故事描述,开发时根据描述进行时间估算。
|
||
3. **项目追踪** —— 时间追踪、用户工作量、问题统计;每个项目有概览页面,包括项目详细信息、最新更新情况及报告快捷方式;支持按状态/是否解决等分类统计、项目分类分组、独立邮件通知发件地址、自定义安全级别、指定组件/模块负责人。
|
||
4. **通知** —— 通过邮件通知方案在关键阶段自动发送通知;支持问题关注订阅、定期接收超期/未更新报告、RSS 订阅、页面顶部公告发布。
|
||
|
||
### (二) 分布式版本控制系统 Git——有效、高速地对项目进行版本管理
|
||
|
||
Git 能很好地解决不同开发人员编写代码之间的冲突,以及不同分支的合并;可实时查看小组成员提交的代码。
|
||
|
||
实训过程中,每个小组选择项目后在 Git 上建立项目仓库,所有代码存放于该仓库中。小组成员每完成一个任务需提交代码并添加任务描述;Git 清楚记录新增、修改、删除的代码,误删时可通过命令回滚还原;成员可拉取他人提交代码,较好地解决代码合并冲突问题。
|
||
|
||
### (三) OASIS 绿洲实训管理平台——实现对每个项目组和成员实训流程的全过程管理
|
||
|
||
用于实训过程标准化、规范化跟踪管理,内容包括:档案管理、任务管理、分组管理、测评管理、过程资料(项目输出文档、源码、会议记录、考核结果、考勤数据、学员反馈等)管理、代码质量管理。
|
||
|
||

|
||
|
||
平台主要功能:
|
||
|
||
1. 为高校工程师提供专门账号,随时查看实训学员所在小组的项目进度、学习阶段。
|
||
2. **开训测试**:学员开训前考试,针对不同方向提供不同类型、难度试题,系统批改打分。
|
||
3. **智能分组**:根据学员考试成绩、男女生比例、专业等分组。
|
||
4. **项目确定**:小组内部讨论后,项目经理在系统中选择小组项目,也可自拟项目提交工程师审核。
|
||
5. **需求评审**:平台与 Jira 结合,每个小组在 Jira 上编写项目需求,需求评审人员进行视频会议分析、讲解、指导修改,最后对总体需求评审打分。
|
||
6. **代码查重**:对学员每天提交的代码进行比较,对抄袭同学严肃处理。
|
||
7. **代码提交统计**:统计每个组成员的代码提交总次数,尽早发现学习态度问题并由指导人员提醒。
|
||
8. **项目库**:与公司 wiki 知识库结合,针对不同方向提供不同难度专业项目,由工程师辅导答疑。
|
||
9. **进度管理**:与 Jira 结合,针对不同分组项目进行管理跟踪,由专门管理人员检查项目进度。
|
||
10. **项目评审**:由专门评审人员通过钉钉视频会议评审,对每个成员任务完成度、项目总体完成情况、质量评分。
|
||
11. **成绩汇总**:系统统计各阶段评审成绩,计算每个实训学员的成绩,管理员可导出成绩。
|
||
|
||
OASIS 平台提供标准化管理,覆盖实训各阶段;同时提供微信小程序,学员可通过小程序提交作业及相关文档。
|
||
|
||
### (四) Wiki 知识库——专业的知识文档库
|
||
|
||
使用 Confluence 知识库软件管理实习过程中的所有档案资料,涵盖内容包括(不限于):
|
||
|
||
1. 《学员实习实训安全纪律要求》
|
||
2. 《实习实训执行计划书》
|
||
3. 课程 PPT
|
||
4. 学员自学及拓展资料
|
||
5. 课程过程录制视频
|
||
6. 企业级项目实战内容
|
||
7. 就业计划
|
||
8. 面试辅导学习资料
|
||
9. 模拟笔试(试题库)
|
||
10. 项目管理及工具
|
||
|
||
**公用知识库**:由多名项目经验丰富、开发能力优秀的工程师花费大量时间为实训定制,主要技术方向有 C、C++、Java、HTML5+全栈、Vue、Python+分布式、大数据、全栈软件测试等,从入门到项目实战详细步骤及注意事项,并提供各方向教学计划及项目库。
|
||
|
||
**定制知识库**(四川大学软件学院实训专用):
|
||
|
||
1. 针对川大软件学院实训方案及目标提供匹配的教学资料及教学计划。
|
||
2. 针对不同方向专业细致打造每个知识点,提供专业练习题,即学即用;提供学习方向、视频、PPT、工作文档,帮助学员掌握企业项目开发整套流程及良好编码规范。
|
||
3. 每个学员配有专门的 wiki 账号,存放实训项目所有需求,小组据此决定选择项目库中的项目或自拟项目。
|
||
4. 知识库内容与工程师授课内容对应,细化到每一步,基础好的同学可自学,基础较弱的同学可结合课堂讲解与知识库达到掌握目的。
|
||
|
||
### (五) 标准化的考核标准
|
||
|
||

|
||
|
||
## 八、备选商业项目介绍
|
||
|
||
以下仅展示部分参考项目,完整项目清单将于开训时提供。
|
||
|
||
### (一) Linux C 方向
|
||
|
||
> 注:本方向侧重于 Linux 底层核心技术与系统级编程。为满足不同技术路线和目标的实训需求,选择本方向的同学不仅可以从以下核心项目中选择,也可以跨方向选择"C++ 方向"中的任意图形化或综合类项目作为实训课题。
|
||
|
||
#### 高并发 NoSQL 数据库
|
||
|
||
实现一个高并发的键值对存储 NoSQL 数据库,实现键值对的存储和获取,功能如下:
|
||
|
||
1. 存储功能:实现键值对的添加、删除(通过键)、模糊查询、更新值操作;
|
||
2. 存储数据类型:键的类型固定为字符串,值的类型可为字符串、列表等;
|
||
3. 数据持久化:数据存放在内存中,可通过手动或定时程序同步到磁盘;
|
||
4. 缓存设置:提供缓存功能,可对键设定存活时间,超过指定秒/毫秒数后自动删除生存时间为 0 的键;
|
||
5. 【扩展及提升】支持网络:通过网络操作服务器(服务端负责多客户端连接及命令处理;客户端向服务器发送命令请求并接收回复);
|
||
6. 【扩展及提升】图形化客户端:通过 Qt 或 LVGL 实现图形化客户端,实现图形化查看及常用操作。
|
||
|
||
#### 高性能 HTTP 服务器
|
||
|
||
(仅限对网络编程有兴趣的同学选择)实现一个高性能的 HTTP 服务器,功能如下:
|
||
|
||
1. 能够处理并发连接要求,能够处理长连接与超时关闭;
|
||
2. 处理消息的接收和发送及其异常;
|
||
3. 编写解析 HTTP 请求的程序,能处理不同 HTTP 方法(Get、Post 等)及数据;
|
||
4. 编写 HTTP 回复构造的程序;
|
||
5. 实现 URL 路由,根据 URL 地址将不同路径交给不同程序执行;
|
||
6. 通过配置文件配置服务器端口、路由规则等;
|
||
7. 支持反向代理、静态内容、动态内容等路由规则;
|
||
8. 要求支持高并发,建议采用异步非阻塞模型;
|
||
9. 使用状态机处理 HTTP 请求;
|
||
10. 能正确管理系统内存并有内存泄漏检测机制;
|
||
11. 支持页面缓存及缓存时间/规则设置;
|
||
12. 使用 epoll 等机制提高吞吐量。
|
||
|
||
#### 简易 Linux Shell
|
||
|
||
本项目旨在设计并实现一个轻量级的 Linux 命令行解释器 MiniShell,模拟标准 Shell 的核心交互范式。通过纯命令行接收解析输入,深入应用 Linux 进程控制、文件描述符管理、I/O 重定向及管道通信等核心底层编程技术,功能如下:
|
||
|
||
1. **核心命令解析与执行**:实现持续的命令循环,解析用户输入的参数列表;使用进程控制模型创建子进程以执行外部程序,并支持无需新进程的内置命令。
|
||
2. **I/O 重定向与管道通信**:支持标准输入输出的重定向操作(覆盖写入、追加写入、输入重定向),支持使用管道符将多个独立命令连接形成数据流流水线。
|
||
3. **丰富的内置命令集**:实现核心系统控制(退出、清屏)、目录导航(切换目录、打印路径)、简化的文件系统操作(列出内容、创建目录及文件、删除操作)。
|
||
4. **环境与用户体验管理**:支持环境变量的查看、创建与删除;提供终端打印、命令别名绑定与删除、历史命令列表查看以及执行挂起等效率工具。
|
||
5. **作业控制与信号处理**:支持通过特定符号使命令在后台异步执行,并提供内置命令查询后台作业状态;精准拦截并处理中断与挂起信号,确保仅作用于前台作业而不导致解释器崩溃。
|
||
|
||
#### HTTP 文件下载工具
|
||
|
||
(仅限对网络编程有兴趣的同学选择)本项目旨在设计并实现一个功能精简、稳定高效的命令行 HTTP 文件下载工具,适合具备计算机网络基础的同学。该工具模拟著名下载软件 wget 的核心操作,在纯命令行环境下完成远程文件的拉取,深入应用 Linux 网络编程、HTTP 协议解析和文件 I/O 等底层核心技术,功能如下:
|
||
|
||
1. **URL 解析与网络连接**:正确解析标准 URL 字符串以提取协议、主机名、端口与路径,通过底层系统调用完成域名 DNS 解析,并使用 Socket API 与目标服务器建立可靠的 TCP 连接;
|
||
2. **HTTP 协议交互**:动态构造符合 HTTP/1.1 规范的 GET 请求报文并发送,逐行解析服务器返回的响应头,精准提取状态码与文件大小信息,并对不同状态码(如 404 未找到、重定向等)进行严谨的错误处理;
|
||
3. **文件写入与实时进度**:在本地建立对应文件并持续写入接收到的响应体数据,严格依据报文长度实现精确接收以确保文件完整性;利用终端控制技术在命令行实时显示动态进度条、下载速度、已下载量及剩余时间估算;
|
||
4. **断点续传扩展项(难点)**:在 HTTP 请求中追加 Range 头部字段,结合本地临时文件状态实现中断位置的继续下载,并处理服务器的 206 部分内容响应;
|
||
5. **多线程并发提升项(难点)**:引入多线程编程机制,将待下载的大文件分割为多个数据块并行发起请求下载,所有线程完成后按序合并文件块,大幅提升整体下载吞吐量;
|
||
6. 【扩展及提升】图形化界面:将命令行转化为图形化界面工具。
|
||
|
||
#### 极简本地文件同步工具
|
||
|
||
本项目旨在利用 C 语言和 POSIX API 开发一个单向的本地文件同步工具,模拟 rsync 的极简子集。工具通过递归遍历目录树并对比文件的元信息,将源目录中新增或修改过的文件高效复制到目标路径,重点应用目录操作、状态对比及底层文件 I/O 技术,功能如下:
|
||
|
||
1. **递归目录遍历**:编写递归算法并结合底层目录读取接口,深入遍历当前及子目录下的所有条目,实现对整个目录树的深度优先解析与路径拼接;
|
||
2. **文件状态对比与同步决策**:利用系统调用获取文件的修改时间与大小等关键元信息,通过严谨的逻辑判断比对源文件与目标文件的状态,智能决策是否执行新建或覆盖操作,状态一致的文件则直接跳过;
|
||
3. **基础文件复制与权限同步**:使用底层文件输入输出接口完成稳定可靠的数据流循环复制,并依据源文件的属性信息,同步更新目标文件的访问权限以保持两端一致;
|
||
4. **零拷贝性能提升项**:引入系统调用 sendfile,实现从一个文件描述符到另一个的底层直接数据传输,数据流动完全在内核空间完成,极大提升大文件同步过程中的执行效率;
|
||
5. **冗余文件清理扩展项**:提供反向检查机制及命令行选项支持,当开启该模式时,遍历并对比目标目录,自动清理在源目录中已不存在的多余文件,实现源端与目的端的绝对一致性。
|
||
|
||
#### 内存池管理程序
|
||
|
||
内存池(Memory Pool)是一种动态内存分配与管理技术,经常应用于操作系统、Java 虚拟机、线程池、连接池等。内存池是在真正使用内存之前,预先申请分配一大块内存(内存池)留作备用;需要使用内存时从池中取出一块使用,使用完后将释放的内存放回池中,供下一次使用。
|
||
|
||
使用内存池时,有以下问题留待解决:
|
||
|
||
1. **内存的分配和管理**:通过数据结构管理已分配内存,当有新的内存使用申请时,能够从内存池中分配一块连续内存区域使用,使用完后能够申请退还给内存池。
|
||
2. **内存碎片问题**:内部碎片是指已分配的块比有效内存大时发生的(假设以前分配了 100M 内存,现在只用了 5M,剩下的 95M 就会成为碎片),使用多种算法尽可能提高内存块使用效率。
|
||
3. **内存整理问题**:当内存池频繁使用后存在大量内存碎片,已无法分配所需连续内存大小,此时需要内存整理,将正在使用的内存合并为连续内存,剩余内存即可继续分配使用,整理过程中尽量避免 stop the world(停止程序响应时间)。
|
||
|
||
#### 物联网分布式边缘网关
|
||
|
||
在物联网(IoT)场景中,部署在前端的边缘网关承担着数据采集、告警和上报的重要角色。实现一个物联网边缘数据采集与上报控制台,功能如下:
|
||
|
||
1. **多路传感器数据采集**:编写多个子线程,分别模拟采集温度、湿度、电压等传感器数据;
|
||
2. **边缘阈值告警机制**:实现一个本地状态机,对采集到的数据进行实时比对,超过特定阈值时触发本地告警逻辑;
|
||
3. **本地日志持久化**:将所有采集数据和告警事件带上精确的时间戳,通过 Linux 标准文件操作以自定义格式持续写入本地磁盘;
|
||
4. 使用 LVGL 或 Qt 开发智能硬件触控交互界面;强制要求后台采集线程与前端 UI 渲染线程分离,通过互斥锁保护共享数据结构;在界面上设计开关按钮完成反向控制物理层的闭环;
|
||
5. 【扩展及提升】网络功能:实现一个基于 Socket 的网络客户端程序,图形化界面通过网络连接读取和操作数据。
|
||
|
||
### (二) C++ 方向
|
||
|
||
#### 基于 OpenCV 的面部识别系统
|
||
|
||
基于 OpenCV 开发一款能够采集人脸数据及自动识别的系统:
|
||
|
||
1. **人脸采集**:通过摄像头或图片录入人脸信息;
|
||
2. **人脸库管理**:管理录入用户的基本信息及人脸,支持更新相关数据;
|
||
3. **人脸检测**:对人脸数据进行光线补偿、灰度变换等处理,减少各种条件的限制干扰,并在图像中标注人脸位置、结构特征,和库中人脸进行对比和查询,输出匹配度;
|
||
4. **笑脸检测**:检测是否是笑脸;
|
||
5. **算法改进(选做)**:利用深度学习等算法改善人脸识别的准确度。
|
||
|
||
#### 基于 Qt 的本地音乐播放器
|
||
|
||
设计实现一款基于 Qt 的跨平台本地音乐播放器。项目结合多媒体模块与 C++ 底层数据结构,优化音频播放与交互性能,功能如下:
|
||
|
||
1. **列表管理与持久化**:基于 Model/View 架构构建 UI,支持批量导入与动态移除本地音频文件;实现播放列表的本地持久化保存与启动自动恢复;
|
||
2. **核心播放引擎**:提供基础播放控制及多模式切换(单曲/列表循环、随机播放);支持进度条拖拽精准定位、实时渲染及音量调节功能;
|
||
3. **元数据与封面展现**:自动解析音频 ID3 等标签,实时展示歌曲与专辑信息;智能提取文件内嵌封面或加载同级目录图片进行图形化渲染;
|
||
4. **系统级交互体验**:集成系统托盘实现后台快捷控制;支持跨平台切歌桌面弹窗通知,以及明暗多套视觉主题的无缝切换;
|
||
5. **底层算法与架构优化**:采用双向链表提升切歌效率,引入前缀树或倒排索引实现本地极速检索;使用洗牌算法重构真随机播放机制;进阶可实现 LRC 歌词解析与基于二分查找的精准高亮同步。
|
||
|
||
#### 局域网即时通讯 (IM) 系统
|
||
|
||
(仅限对网络编程有兴趣的同学选择)设计图形界面下的高可靠局域网通讯软件,模拟主流 IM 软件架构,功能如下:
|
||
|
||
1. **多媒体通讯引擎**:实现基础的文本聊天机制以及语音交互功能;
|
||
2. **好友查找及添加**:可以查找在线的用户,并添加好友;
|
||
3. **传输协议开发**:实现文件点对点传送机制,以及基于服务端暂存的离线文件传送;
|
||
4. **群组与社群功能**:支持多人群组聊天机制,实现群内文本广播及群文件的高效发送;
|
||
5. **离线消息缓冲**:服务端引入消息缓冲机制,保障客户端离线时的消息可靠暂存与重传;
|
||
6. **架构展现提升项**:基于 Qt 实现好友列表、侧边栏及气泡对话框界面,支持多人团队协同开发与接口联调。
|
||
|
||
#### 图形化棋牌类游戏系统
|
||
|
||
设计实现带有图形界面的传统棋牌类对战游戏,侧重于游戏核心逻辑与界面呈现,功能如下:
|
||
|
||
1. **核心游戏界面**:使用 Qt 图形框架绘制标准棋盘与棋子,实现流畅的鼠标交互落子响应与界面动态刷新;
|
||
2. **规则校验引擎**:实现完整的核心游戏逻辑与胜负判定规则,加入严谨的走法合法性校验,拦截并拒绝执行无效操作;
|
||
3. **对局状态控制**:管理完整的游戏生命周期,支持回合交替切换,实现悔棋、认输、求和及重新开始等标准对局操作;
|
||
4. **视听交互反馈**:引入音频模块与定时器机制,支持背景音乐、落子音效、单步倒计时提示以及结算画面的呈现;
|
||
5. **局域网联机与大厅扩展项(可选)**:引入网络模块实现双人局域网联机对战;进阶可扩展为对战大厅模式,支持显示多张对弈桌、旁观者围观同步棋局以及玩家间的文字聊天交互功能。
|
||
|
||
#### 高校教务与选课综合管理平台
|
||
|
||
整合成绩管理、学生档案与选课系统,开发一套完整的 C++ 后台处理程序与前端视图,功能如下:
|
||
|
||
1. **核心内存管理**:将持久化文件中的数据读入内存,实现高效增删改查及覆盖同步写入;
|
||
2. **视图与权限隔离**:区分管理员与学生端,实现特定视图的数据抽取、装载与定向呈现;
|
||
3. **选课与学分引擎**:设定各类课程的学分限制条件,提供选课冲突校验,统计学分达标情况并按成绩排序输出;
|
||
4. **多维查询引挚**:支持按姓名模糊搜索、按学号精确检索,无对应数据时提供严谨的安全提示;
|
||
5. **图形化**:全面使用 Qt 构建现代教务管理后台,提供多标签页导航,利用数据表格控件代替传统的命令行打印;
|
||
6. **排课与选课引擎**:实现教务端的智能排课逻辑与学生端的选课功能,通过算法校验确保同一时间段内教师的授课时间与学生的上课时间无冲突。
|
||
|
||
#### 基于高阶比对算法的文档与代码查重系统
|
||
|
||
设计基于高效文本特征提取与比对算法的图形界面查重分析系统,适用于代码审计或教务审查,功能如下:
|
||
|
||
1. **核心特征提取算法**:摒弃简单的全文纯文本匹配,引入特征窗算法或其他解析算法,实现对文本内容和代码逻辑的深度"数字指纹"特征提取;
|
||
2. **文本预处理与比对引擎**:系统自动读取指定文件,进行去格式化、注释过滤、变量名混淆还原等预处理操作;利用动态规划(如编辑距离)或局部敏感哈希算法,与特征库数据进行高效的查重比对分析;
|
||
3. **特征指纹库管理**:建立本地数据库或构建倒排索引数据结构,长期保存历次分析过的文件特征属性与哈希指纹,构建支持快速检索的对比特征库;
|
||
4. **结果精准可视化**:分析完成后,客户端以图表或高亮文本框的图形化形式,精准追踪并标红高度相似的代码块或文本段落,直观指明综合重复率与相似源;
|
||
5. **并发运算与算法提升项**:针对海量文件查重带来的 CPU 计算瓶颈,底层采用多线程或线程池处理并发比对运算;进阶可研究并优化匹配算法的时间与空间复杂度,大幅提升系统的查重吞吐量。
|
||
|
||
#### 智能售货机终端状态机与控制系统
|
||
|
||
为无人值守自动贩卖机编写底层核心控制软件,深度结合 C++ 状态机与业务逻辑,功能如下:
|
||
|
||
1. **交易核心状态机**:顾客投入纸币并选择商品,机器处理吐出商品并找零,使用有限状态机严格控制机器状态流转;
|
||
2. **异常与容错处理**:当商品售罄或零钱不足以找零时,系统平滑拦截并给出提示,执行退还纸币动作;
|
||
3. **后台仓储管理**:支持库存查询检索,以及商品人工上架操作,动态增加或减少储量;
|
||
4. **经营数据审计**:分别统计当日商品的销量和销售额,并统计往来账目及剩余零钞数目;
|
||
5. **图形化交互**:使用 LVGL 或 Qt 开发购物交互界面及后台管理面板,将营收数据转化为可视化统计图表。
|