# Library Management System **Repository Path**: wisterialee/Library-Management-System ## Basic Information - **Project Name**: Library Management System - **Description**: Library management system本来是我大一时的一个C语言实训作业,这是我的第一个比较完整的项目,觉得有纪念意义,于是想着保存下来。这个项目是仅使用C语言编写的。本项目主要用到的知识点有结构体,数据结构中的带有头结点的单链表,C语言的IO操作。 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-10-28 - **Last Updated**: 2026-07-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: C语言 ## README
Library Management System Logo

图书管理系统

一个基于 C 语言实现的控制台图书信息管理练手项目

简体中文 | English

## 项目说明 这是一个学生时期完成的项目,也是当年刚学完课程后写的一个 C 语言课程设计。 它更像是一个带着学习痕迹的练手作品:功能是完整跑起来的,但实现上还保留了不少学生时代的写法和思路。 先提前说明一下: > 这是一个早期学生项目,BUG 可能会有一些,个别实现也未必足够合理。毕业后再回头看,想着把它整理出来做个留档和复盘,不喜勿喷。 项目整体围绕“图书信息管理”展开,使用链表在内存中维护图书数据,再通过文本文件完成登录信息存储、外部数据导入和结果导出。 ## 功能概览 系统目前提供以下核心功能,功能入口对应主菜单 `0 ~ 9`: ### 1. 用户登录 - 启动程序后先进入登录流程。 - 登录账号和密码从 `userInfo.txt` 中读取。 - 控制台输入密码时采用掩码显示。 - 默认账号:`admin` - 默认密码:`123456` ### 2. 录入图书信息 - 可手动输入多本图书信息。 - 每本图书包含: - 书名 - 作者 - ISBN - 出版单位 - 出版时间 - 单价 - 录入时会检查 ISBN 是否重复,重复则要求重新输入。 ### 3. 浏览全部图书信息 - 以表格形式输出当前链表中的全部图书记录。 - 同时统计当前图书数量。 - 展示的是程序运行期间内存中的实时数据。 ### 4. 图书信息查询 支持三种查询方式: - 按 ISBN 查询 - 按书名查询 - 按作者名查询 查询结果会输出匹配到的全部记录。 ### 5. 图书信息删除 - 按 ISBN 精确定位图书。 - 找到后会先展示图书信息,再由用户确认是否删除。 - 删除操作直接作用于当前链表数据。 ### 6. 图书信息修改 - 支持通过 ISBN 或书名定位目标图书。 - 找到图书后,可对以下字段逐项修改: - 书名 - 作者 - ISBN - 出版单位 - 出版时间 - 单价 ### 7. 追加图书信息 - 在现有链表尾部新增一条图书记录。 - 适合在已初始化数据之后继续补录图书。 ### 8. 导出图书信息 - 将当前内存中的全部图书数据写入 `booksInfo.txt`。 - 导出格式为纯文本,一行一条记录,便于再次查看或后续处理。 ### 9. 导入外部数据 - 从 `books.txt` 读取外部图书数据。 - 读取成功后,会逐条写入当前链表。 - 适合快速初始化一批测试数据。 ### 10. 修改登录密码 - 读取当前用户名后,支持重新写入新密码到 `userInfo.txt`。 - 修改成功后程序会退出,需重新登录。 ## 技术栈与实现方式 本项目不是 Web 系统,而是一个典型的 Windows 控制台 C 语言项目。 ### 开发语言 - `C` ### 依赖的核心头文件 - `stdio.h` - `stdlib.h` - `string.h` - `stdbool.h` - `time.h` - `windows.h` - `conio.h` ### 主要实现思路 - 使用 `struct books` 定义图书节点。 - 使用带头结点的单链表管理全部图书信息。 - 使用 `struct user` 存储登录用户信息。 - 使用文本文件完成基础数据持久化: - `userInfo.txt`:账号密码 - `books.txt`:外部导入源数据 - `booksInfo.txt`:导出结果 - 使用 `system("cls")`、`system("pause")` 和 `getch()` 完成控制台交互。 ### 运行特征 - 平台偏向 Windows。 - 界面为命令行菜单式交互。 - 数据默认先存放在内存链表中,导出后才会落到文本文件。 ## 使用说明 ### 运行方式 可以选择以下任一方式体验项目: 1. 直接运行仓库中的 `main.exe` 2. 使用支持 C 的 IDE 打开 `main.c` 后编译运行,例如: - `Dev-C++` - `Code::Blocks` - `Visual Studio` - `CLion / MinGW` ### 推荐环境 - Windows - 支持 `conio.h` / `windows.h` 的编译环境 ### 基本使用流程 1. 启动程序并登录 2. 选择以下任意一种方式初始化数据: - 菜单 `1`:手动录入图书信息 - 菜单 `8`:从 `books.txt` 导入外部数据 3. 使用菜单 `2 ~ 7` 完成浏览、查询、删除、修改、追加、导出等操作 4. 如需修改登录密码,可使用菜单 `9` ## 数据文件说明 ### `userInfo.txt` - 用途:保存登录用户名和密码 - 当前示例内容: ```txt admin 123456 ``` ### `books.txt` - 用途:外部导入源文件 - 读取方式:按空格分隔字段 - 字段顺序: ```txt 书名 作者 ISBN 出版单位 出版时间 单价 ``` ### `booksInfo.txt` - 用途:导出后的图书数据文件 - 内容格式与 `books.txt` 基本一致 ## 项目结构 | 文件 / 目录 | 作用说明 | |-----------------|-------------------------------------| | `main.c` | 项目的核心源码,包含登录、菜单、增删改查、导入导出、修改密码等全部逻辑 | | `main.exe` | 已编译的可执行程序,适合直接运行体验 | | `books.txt` | 外部导入数据的示例文件 | | `booksInfo.txt` | 程序导出图书信息后的目标文件 | | `userInfo.txt` | 登录账号与密码配置文件 | | `asserts/` | README 使用的截图和 LOGO 资源目录 | | `LICENSE.lic` | 项目许可证文件 | | `.idea/` | IDE 生成的工程配置目录 | ## 效果图
登录界面
登录界面
主菜单
主菜单
录入图书信息
录入图书信息
浏览图书信息
浏览图书信息
图书信息查询
图书信息查询
删除图书信息
删除图书信息
修改图书信息
修改图书信息
追加图书信息
追加图书信息
导出图书信息
导出图书信息
导入外部数据
导入外部数据
修改登录密码
修改登录密码
导入后的展示
导入后的展示
导出文件查看
导出文件查看
程序运行效果
程序运行效果
## 当前项目的一些说明 因为这是早期课程设计项目,所以它保留了比较明显的学习阶段特征。为了避免误解,这里也把实际情况说清楚: - 项目目标偏向课程练习和功能实现,不是工业级工程化项目 - 程序以控制台交互为主,界面和输入校验都比较朴素 - 某些输入场景依赖空格分隔,因此不太适合包含空格的复杂文本 - 异常处理、边界判断、内存释放等方面仍有继续优化空间 不过也正因为它是一个很早期的作品,所以能比较真实地看到当时在结构体、链表、文件 IO、菜单交互这些基础知识上的练习过程。 ## 许可证 本项目采用 MIT License,许可证文件见:[LICENSE.lic](./LICENSE.lic) ## 致谢 感谢你愿意看到这里。 这个项目更像是一份学生时代的代码档案,既有青涩的地方,也有认真完成课程设计时留下的痕迹。现在把它整理出来,一方面是留档,另一方面也是提醒自己:很多能力,都是从这些并不完美的小项目开始的。