# hallofbooks **Repository Path**: litinyana/hallofbooks ## Basic Information - **Project Name**: hallofbooks - **Description**: Alexándreia,亚历山大——既指那座古代世界最大的图书馆,也象征“人类的守护与求索。 全C语言构建的图书管理系统,非常适合C语言入门项目练习,目前我也在做中学,所以并不是完全完美,非常大家提建议和共同参与构建。 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-11-29 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Αλεξάνδρεια / Alexandria 📚🕯️ ## 🌍 神话与重生 > 让卷轴在终端里展开,让文字在比特中永生。 > 这是一座用 C 语言砌成的图书馆——没有火焰能烧毁,没有岁月能侵蚀。 公元前 48 年,亚历山大图书馆在战火中坍圮,70 万卷典籍化为灰烬,人类文明的灯塔一度熄灭。千年之后,我们以键盘为凿、代码为石,在二进制的世界中重建这座智慧殿堂: - 用 **结构体** 构建永恒书架,以 **CSV** 书写不朽借阅档案 - 以 `main()` 为新的法罗斯灯塔,为知识航船引路 - 让指针穿梭于馆藏之间,用算法守护文明火种 **Alexandria 不只是一座数字图书馆——它是对「知识永存」这一古老信念的现代回响。** ## 🏗️ 架构蓝图 项目采用清晰的模块化设计,便于扩展与协作: > 后续如此,目前暂时只有一个 main.c,因为时间确实有点紧张 ```plaintext alexandria/ ├── main.c # 程序入口与主控逻辑 ├── src/ # 核心功能模块(逐步实现中) │ ├── bookshelf/ # 图书管理:增删查、状态维护 │ ├── records/ # 借阅记录处理:关联用户与图书 │ └── scroll/ # 文本与数据显示:格式化输出与交互 └── data/ # 持久化存储(CSV 格式) ├── books.csv # 图书数据 ├── users.csv # 用户档案 └── lends.csv # 借阅关系记录 ``` ### ✨ 技术路线亮点 - **内存优先,持久化保障**:启动时一次性加载所有数据至内存,提升运行时性能;关键操作后自动/手动保存至 CSV,确保数据不丢失。 - **纯 C 实现**:不依赖外部库,跨平台兼容(尤其适配 Linux 服务器部署)。 - **面向终端的交互体验**:简洁、高效、专注内容本身,致敬命令行时代的优雅。 ## 💻 平台支持 | 平台 | 编译方式 | 注意事项 | | ----------------- | -------------- | ---------------- | | **Linux / macOS** | `make` | 需安装 GCC, Make | | **Windows** | MSYS2 +`make` | [安装指南](#) | | **Dev-C++** | 导入 `.c` 文件 | 仅限基础功能 | ### 注意: --- > 【版本说明】 - main.c 为项目初始基础版本,仅保留核心初始逻辑; - 后续所有功能更新、迭代版本均统一维护在 src 目录下; - 当 main.c 可独立稳定运行后,其已完成历史使命,不再作为主开发载体; - 建议通过项目根目录的 make 命令编译运行 src 下的最新版本,以获取完整功能。 --- ## ▶️ 快速开始(30 秒上手) ```bash # 1. 克隆项目(若未下载) git clone https://gitee.com/litinyana/hallofbooks.git cd hallofbooks # 2. 编译(需 GCC + Make) make # 3. 首次运行(自动创建 data/ 目录) ./alexandria # 4. 默认读者账号 # 注册后,可手动修改 data/user.csv 将 user_type 改为 2(管理员账号) ``` ## 🧠 系统架构 ### 三层设计原则 ```plaintext ┌───────────────────────┐ │ 表示层 (UI) │ ← 菜单、提示、数据展示(如 showDashboard) ├───────────────────────┤ │ 业务逻辑层 (Core) │ ← 借阅、归还、查询、状态校验等核心流程 ├───────────────────────┤ │ 数据访问层 (I/O) │ ← CSV 文件读写(load/save 系列函数) └───────────────────────┘ ``` ### 数据模型关系 ```plaintext User ──── LendRecord ──── Book │ │ │ │ ├─ book_id ├─ is_available │ ├─ user_id └─ metadata... │ └─ timestamp └─ profile... ``` 数据的持久化存储都会在csv文件当中进行,每次初始化的时候都会从csv当中读取数据,然后使用内存进行相关操作,极大提高了操作效率。 同时所有数据在内存中以链表或数组组织,支持后续扩展高效搜索(如二分查找、哈希索引等)。 现在只是基础实现了操作可行性,但是更加细致的操作我会后续更新,不过就是时间问题,因为现在还有好几个项目共同推进,同时需要学习的东西也还有很多,但是我会尽力滴! ## 🚀 开发愿景 - **零依赖、高可移植**:仅需标准 C 库,可在任何 POSIX 系统运行。 - **学习友好**:适合 C 语言学习者理解项目结构、内存管理与文件 I/O。 - **开源共建**:欢迎贡献代码、文档、测试用例,或提出新功能构想(如多语言支持、远程同步等)。 --- > **Built with C, powered by curiosity.** > 在 0 与 1 的星河中,让文明永不落幕。 --- 外面的main.c是最开始的源代码,因为我怕后续搞错,所以就留着,同时也是留个纪念~ ## 🔒 安全设计 - **输入安全**:所有字符串输入均带长度限制(如 `%31s`),杜绝缓冲区溢出 - **数据校验**:关键操作前验证用户状态、图书可用性 - **内存管理**:动态分配后严格释放,避免泄漏 **📌 \*\***项目结构说明\*\* - `main.c`: **历史快照** **(v0.1 初始版本,仅作参考)** - `src/`: **当前开发主干** **(v1.0+ 模块化版本,通过 **`make` 编译) ### 运行方式: 一:make 编译运行: ```bash make ./alexandria ``` 更改后重新编译方式: ```bash make clean make ./alexandria ``` 二:(main.c 为项目初始基础版本,仅保留核心初始逻辑;后续所有功能更新、迭代版本均统一维护在 src 目录下) (当 main.c 可独立稳定运行后,其已完成历史使命,不再作为主开发载体;建议通过项目根目录的 make 命令编译运行 src 下的最新版本,以获取完整功能。) ```bash gcc main.c -o main ./main ``` 📚 欢迎加入重建亚历山大图书馆的行列。每一行代码,都是对智慧的一次致敬。 ## ✅ 当前功能 - **用户系统**:注册、登录(ID/用户名)、密码修改 - **图书管理**:增删查(管理员)、借阅状态跟踪 - **借阅流程**:借书、还书、逾期计算、滞纳金提示 - **数据持久化**:CSV 自动保存/加载,支持意外中断恢复 ## 🗺️ 路线图(2025) - [ ] 图书模糊搜索(支持书名/作者) - [ ] 借阅历史导出(生成报表) - [ ] 多语言支持(UTF-8 完善) ### 使用提示: 1.所有数据文件将会在 data 文件夹下 后续需要修复的 ``` 原代码:scanf("%s", user->password); → 无长度限制,可能超出 PASS_LEN修复(所有输入字段都要加长度限制): ``` ---