# HIS 使用说明(自动生成目录文档) 此文档直接来自代码分析,优先参考 `include/core`、`src/*`、`include/models`、`src/models` 及 `include/utils`。 ## 1. 项目概述 - 名称:HIS(Hospital Information System) - 语言:C++(C++17+) - 构建:CMake - 目标:小型医院病房管理(病房、床位、住院患者分配与释放),模块化可扩展 - 数据结构:链表(`LinkedList`))、并以 JSON 文件持久化 ## 2. 目录结构 ``` HIS/ CMakeLists.txt # 构建配置 README.md # 简要项目名 build/ # 构建输出 data/ # 默认数据存放(示例:wards_bed) demo/ # 演示 docs/ # 文档(此处新建 usage) include/ # 头文件 cli/ repl_shell.h # 交互式命令行类 core/ his_core.h his_context.h patient_service.h report_service.h ward_service.h models/ ward.h utils/ linkedlist.hpp file_manager.h src/ # 源码实现 cli/ repl_shell.cpp core/ core.cpp (空实现) models/ ward.cpp utils/ file_manager.cpp main_shell.cpp main_noshell.cpp tests/ # 测试(见项目现有内容) ``` ## 3. 核心架构(Core) ### 3.1 `include/core/his_core.h` - `core::HisCore` 作为组合根 - `HisContext ctx_` 持有全局内存状态 - 初始化: `WardService ctx_`、`PatientService ctx_`、`ReportService ctx_` ### 3.2 `include/core/his_context.h` - `core::HisContext` 包含: - `LinkedList wards;`(基于 `utils::LinkedList`) ### 3.3 `include/core/ward_service.h` - 核心 CRUD + 文件同步: - `wardCount()` - `findWard(wardId)` - `for_eachWard(visitor)` - `addWard(Ward)`,`removeWard(wardId)` - `loadFromFile(path, outError)` => 使用 `FileManager::loadWardListFromFile` - `saveToFile(path, outError, indent)` => 使用 `FileManager::saveWardListToFile` ### 3.4 `include/core/patient_service.h` - 住院/出院逻辑: - `admitPatient(wardId, patientId, outBedId)` - `releaseBed(wardId, bedId)` - `releasePatient(wardId, patientId)` - 依赖 `Ward::admitPatient/releaseBed/releasePatient` ### 3.5 `include/core/report_service.h` - 报表简化: - `wardOccupancyRate(wardId)` => `Ward::occupancyRate()` ## 4. 模型:病房与床位(Ward) ### 4.1 `include/models/ward.h` + `src/models/ward.cpp` `WardType {Normal, Special, ICU}`、`BedStatus {Free, Occupied}`。 `Bed` 功能: - `isFree()` - `assignPatient(patientId)` - `release()` - JSON:`toJson()` / `fromJson()` `Ward` 功能: - 构造时创建 `MaxBeds` 个床位,ID 生成 `wardID_B1`... - `getFreeBedID(outBedId)`:查询首个空闲床位 - `admitPatient(patientId, outBedId)`:分配患者 - `releaseBed(bedId)` - `releasePatient(patientId)` - `freeBedCount()`, `occupiedBedCount()`, `occupancyRate()` - JSON:`toJson()` / `fromJson()` 包括 beds 数据 ## 5. 工具:链表与文件 ### 5.1 `include/utils/linkedlist.hpp` - `LinkedList`:双向链表 + HashMap 索引 - 节点:`ListNode` - 核心操作:`insert_front`, `remove`, `find`, `move_to_front`, `remove_tail`, `size`, `for_each` ### 5.2 `include/utils/file_manager.h` + `src/utils/file_manager.cpp` - 文件基本:`readTextFile`, `writeTextFile`, `createFile`, `deleteFile` - JSON 辅助:`deleteJsonField` - Ward 文件:`loadWardListFromFile`, `saveWardListToFile` - 指定 `data/wards_bed/wards.json` 默认路径(CLI) ## 6. CLI(命令行操作) ### 6.1 `include/cli/repl_shell.h` + `src/cli/repl_shell.cpp` - `ReplShell` 使用 `core::HisCore` 对象 `core_` - 常用命令: - `help` - `exit/quit` - `path ` - `load [file]`, `save [file]` - `file create/delete`, `file rm-field ` - `list wards`, `show ward ` - `add ward ` - `rm ward ` - `admit ` - `release bed ` - `release patient ` ### 6.2 交互输出 - `list wards`: 表格展示病房概览 - `show ward `: 床位详情 ## 7. 入口 - `src/main_shell.cpp`:启动 `ReplShell`(交互式) - `src/main_noshell.cpp`:无交互入口(可能预留为脚本/测试调用) ## 8. 数据文件路径 - 默认 `data/wards_bed/wards.json` - 通过 `path` 命令或 `load/save` 命令可替换为任意文件路径 ## 9. 运行步骤 ```bash cd /home/e2hang/code/HIS mkdir -p build && cd build cmake .. make -j ./his_shell # 或/可能为可执行名 ``` ## 10. 测试 - `tests/` 目录(源码未详细列出) - 可用 `ctest --output-on-failure` 执行(若 cmake 生成测试目标) ## 11. 代码要点 - 无数据库,全部基于内存 `LinkedList` + JSON 持久化 - `Ward` 负责床位状态;`WardService` 负责病房列表维护/持久化;`PatientService` 负责入出院工单;`ReportService` 负责占用率查询 - 前后端交互仅命令行,后续可做 API / GUI 适配