本系统是一个基于 D 语言 (Dlang)、Raylib GUI 框架和 SDLang 数据持久化开发的高性能桌面图书管理软件。系统界面直观,响应迅速,所有图书数据均以轻量级的 Simple Data Language (SDL) 格式写入本地 .sdl 文件中。
- 纯代码极简 GUI:使用 Raylib 驱动,具备响应式按钮、高亮交互数据表格与输入框。
- SDL 文本持久化:不依赖大型数据库(如 SQLite/MySQL),所有数据以标准
.sdl文本存储,方便手动查看与备份。 - 完整 CRUD 支持:提供图书信息的查询(过滤)、添加、修改、删除和一键清空表单功能。
- 实时数据同步:对图书进行增/删/改操作后,系统会自动保存更新至本地
books.sdl文件。
| 组件 | 技术 / 库 | 说明 |
|---|---|---|
| 编程语言 | D Language (DMD / LDC) | 强类型、编译型高性能语言 |
| GUI & 渲染 | raylib-d (~>5.0.0) |
基于 Raylib C 库的 D 语言绑定 |
| 数据持久化 | sdlang-d (~>0.10.6) |
SDLang (Simple Data Language) 文本解析库 |
| 构建工具 | DUB | D 语言官方包管理与构建工具 |
| 底层依赖 | Raylib C Binaries (.dll/.lib) |
提供跨平台的底层图形与事件处理支持 |
book_manager/
├── dub.json # DUB 依赖及项目配置文件
├── raylib.dll # Raylib C 运行时动态库 (Windows 必需)
├── raylib.lib # Raylib C 导入链接库 (Windows 必需)
├── books.sdl # 数据持久化文件 (运行后自动生成)
└── source/
└── app.d # 系统主逻辑与 GUI 绘制源码
{
"name": "book_manager",
"description": "Book Management System using D, Raylib, and SDLang",
"authors": ["Developer"],
"license": "MIT",
"dependencies": {
"raylib-d": "~>5.0.0",
"sdlang-d": "~>0.10.6"
},
"libs": [
"raylib"
]
}- 安装 D 语言编译器 (DMD 或 LDC) 及 DUB。
- 安装 C++ 编译环境(如 Windows 上的 MSVC / Visual Studio Build Tools)。
-
获取 / 初始化项目:
dub init book_manager
-
配置源码与依赖:
- 将项目中的
dub.json和source/app.d替换为最新版本。
- 将项目中的
-
安装本地 Raylib C 二进制依赖库(关键步骤):
dub run raylib-d:install
说明:该命令会自动下载并复制适用于当前系统的
raylib.dll和raylib.lib至项目根目录。 -
编译并启动应用:
dub run
| 功能 | 操作方式 | 逻辑说明 |
|---|---|---|
| 列表浏览 | 鼠标点击左侧表格中的某一行 | 选中的图书高亮显示,其详细数据会自动回显填充到右侧编辑表单中。 |
| 实时查询 | 在顶部 Search 输入框中输入关键字 |
实时对图书的 ID、书名、作者、ISBN 进行不区分大小写的模糊匹配过滤。 |
| 添加图书 | 在右侧表单填入数据,点击 Add Book |
校验 ID 是否重复,无误后追加写入内存,并同步保存到 books.sdl。 |
| 修改图书 | 点击选中某行图书,修改表单内容,点击 Update Selected |
更新选中图书的各字段信息,并同步保存到 books.sdl。 |
| 删除图书 | 点击选中某行图书,点击 Delete Selected |
将选中图书从列表中移除,并同步保存到 books.sdl。 |
| 清空表单 | 点击 Clear Form |
清空右侧表单中的所有缓冲区,并重置选中状态。 |
系统数据采用 SDLang 格式存储,每本图书对应一个 book 标签,属性包含了图书的完整字段。
books.sdl 示例内容如下:
// 图书管理系统 SDL 数据存储
book id=1 title="The D Programming Language" author="Andrei Alexandrescu" year=2010 isbn="9780321635365"
book id=2 title="Clean Code" author="Robert C. Martin" year=2008 isbn="9780132350884"
-
原因:找不到 Raylib 的 C 动态库/静态库文件(
raylib.dll/raylib.lib)。 -
解决办法:在终端运行
dub run raylib-d:install,或手动将预编译好的raylib.dll和raylib.lib放置在项目根目录下,并确保dub.json中配置了"libs": ["raylib"]。
-
原因:Raylib 默认采用 ASCII 字符集作为内置字体。
-
解决办法:若需全面支持中文字符展示,可在程序初始化时通过 Raylib 的
LoadFontEx()加载系统中的中文字体(如msyh.ttc或任意.ttf字体文件)。