96 lines
2.6 KiB
Markdown
96 lines
2.6 KiB
Markdown
# Todo Manager - C++ 命令行版
|
||
|
||
将 Python Todo Manager(PyQt5 桌面版)转换为 C++ 命令行工程。
|
||
保留核心业务能力:任务创建、查询、更新、删除,以及 JSON 文件持久化。
|
||
|
||
## 技术栈
|
||
|
||
- **语言**: C++17
|
||
- **构建工具**: CMake 3.14+
|
||
- **持久化**: 纯手写简易 JSON 解析器(零外部依赖)
|
||
- **测试**: 标准库 `assert`(零外部依赖)
|
||
|
||
## 工程结构
|
||
|
||
```
|
||
codegen-runs/codegen_9ecc529e4d094130b0491b9d389ef836/
|
||
├── CMakeLists.txt # CMake 构建配置
|
||
├── README.md # 本文件
|
||
├── include/
|
||
│ └── app.hpp # TodoItem / TodoService 公开声明
|
||
├── src/
|
||
│ ├── app.cpp # TodoService 实现 + JSON 解析器
|
||
│ └── main.cpp # 命令行交互入口
|
||
├── tests/
|
||
│ └── basic_test.cpp # 单元测试(assert)
|
||
└── todos.json # 运行时自动生成的数据文件
|
||
```
|
||
|
||
## 本地编译与运行
|
||
|
||
### 前置条件
|
||
|
||
- CMake 3.14 或更高版本
|
||
- 支持 C++17 的编译器(GCC 7+、Clang 5+、MSVC 2019+)
|
||
|
||
### 编译步骤
|
||
|
||
```bash
|
||
cd codegen-runs/codegen_9ecc529e4d094130b0491b9d389ef836
|
||
mkdir -p build && cd build
|
||
cmake ..
|
||
cmake --build .
|
||
```
|
||
|
||
### 运行主程序
|
||
|
||
```bash
|
||
# Linux / macOS
|
||
./todo_manager
|
||
|
||
# Windows
|
||
todo_manager.exe
|
||
```
|
||
|
||
程序启动后显示交互菜单:
|
||
|
||
```
|
||
===== Todo Manager =====
|
||
1. 列出所有任务
|
||
2. 添加任务
|
||
3. 编辑任务
|
||
4. 删除任务
|
||
5. 退出
|
||
请选择 (1-5):
|
||
```
|
||
|
||
### 运行测试
|
||
|
||
```bash
|
||
# 在 build 目录下
|
||
./basic_test
|
||
```
|
||
|
||
测试通过时会输出:
|
||
|
||
```
|
||
✓ test_create_and_list passed
|
||
✓ test_get_by_id passed
|
||
✓ test_update passed
|
||
✓ test_delete passed
|
||
✓ test_persistence passed
|
||
|
||
✓ ✓ ✓ 所有测试通过!
|
||
```
|
||
|
||
## 与 Python 原版的差异
|
||
|
||
| 特性 | Python 原版 | C++ 版 |
|
||
|---------------------|-------------------------------|--------------------------------|
|
||
| 用户界面 | PyQt5 桌面窗口 | 命令行交互菜单 |
|
||
| 数据校验 | Pydantic BaseModel | C++ 结构体 + 运行时检查 |
|
||
| JSON 解析 | 标准库 json 模块 | 手写简易递归下降解析器 |
|
||
| 测试框架 | pytest + httpx | 标准库 assert |
|
||
| 持久化文件 | todos.json | todos.json(格式兼容) |
|
||
| 外部依赖 | PyQt5, Pydantic, pytest, httpx | **零外部依赖** |
|