diff --git a/book_manager.py b/book_manager.py new file mode 100644 index 0000000..07a5b8d --- /dev/null +++ b/book_manager.py @@ -0,0 +1,180 @@ +import json +import os +from datetime import datetime + +class BookManager: + """图书管理类,负责图书信息的增删改查操作""" + + def __init__(self, data_file='books.json'): + """初始化图书管理器,加载已有图书数据""" + self.data_file = data_file + self.books = self._load_books() + + def _load_books(self): + """从文件加载图书数据""" + if os.path.exists(self.data_file): + try: + with open(self.data_file, 'r', encoding='utf-8') as f: + return json.load(f) + except (json.JSONDecodeError, IOError) as e: + print(f"加载图书数据失败: {e}") + return [] + return [] + + def _save_books(self): + """将图书数据保存到文件""" + try: + with open(self.data_file, 'w', encoding='utf-8') as f: + json.dump(self.books, f, ensure_ascii=False, indent=2) + return True + except IOError as e: + print(f"保存图书数据失败: {e}") + return False + + def add_book(self, isbn, title, author, category, quantity=1): + """ + 添加新图书 + + 参数: + isbn (str): 图书ISBN编号 + title (str): 图书标题 + author (str): 图书作者 + category (str): 图书分类 + quantity (int): 图书数量,默认为1 + + 返回: + bool: 添加成功返回True,失败返回False + """ + # 检查ISBN是否已存在 + for book in self.books: + if book['isbn'] == isbn: + print(f"错误: ISBN为 {isbn} 的图书已存在") + return False + + new_book = { + 'isbn': isbn, + 'title': title, + 'author': author, + 'category': category, + 'quantity': quantity, + 'available': quantity, # 可借阅数量 + 'added_date': datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + self.books.append(new_book) + return self._save_books() + + def search_books(self, keyword=None, category=None, author=None): + """ + 搜索图书 + + 参数: + keyword (str): 标题或ISBN中的关键词 + category (str): 图书分类 + author (str): 作者名 + + 返回: + list: 符合条件的图书列表 + """ + results = [] + + for book in self.books: + match = True + + if keyword and keyword not in book['title'] and keyword not in book['isbn']: + match = False + if category and book['category'] != category: + match = False + if author and author not in book['author']: + match = False + + if match: + results.append(book) + + return results + + def update_book(self, isbn, **kwargs): + """ + 更新图书信息 + + 参数: + isbn (str): 图书ISBN编号 + ** kwargs: 要更新的字段,如title, author, category, quantity等 + + 返回: + bool: 更新成功返回True,失败返回False + """ + for book in self.books: + if book['isbn'] == isbn: + # 计算可借阅数量的变化 + if 'quantity' in kwargs: + quantity_change = kwargs['quantity'] - book['quantity'] + book['available'] += quantity_change + + # 更新字段 + for key, value in kwargs.items(): + if key in book: + book[key] = value + + return self._save_books() + + print(f"错误: 未找到ISBN为 {isbn} 的图书") + return False + + def delete_book(self, isbn): + """ + 删除图书 + + 参数: + isbn (str): 图书ISBN编号 + + 返回: + bool: 删除成功返回True,失败返回False + """ + initial_count = len(self.books) + self.books = [book for book in self.books if book['isbn'] != isbn] + + if len(self.books) < initial_count: + return self._save_books() + + print(f"错误: 未找到ISBN为 {isbn} 的图书") + return False + + def get_book_details(self, isbn): + """获取图书详细信息""" + for book in self.books: + if book['isbn'] == isbn: + return book + return None + + def list_all_books(self): + """列出所有图书""" + return self.books + + +# 示例用法 +if __name__ == "__main__": + manager = BookManager() + + # 添加示例图书 + manager.add_book("9780134685991", "Effective Python", "Brett Slatkin", "Programming", 5) + manager.add_book("9780596007126", "Head First Design Patterns", "Eric Freeman", "Programming", 3) + manager.add_book("9780141988511", "Sapiens: A Brief History of Humankind", "Yuval Noah Harari", "History", 4) + + print("所有图书:") + for book in manager.list_all_books(): + print(f"{book['title']} by {book['author']} (ISBN: {book['isbn']}) - 可借: {book['available']}/{book['quantity']}") + + print("\n搜索编程类图书:") + programming_books = manager.search_books(category="Programming") + for book in programming_books: + print(f"- {book['title']}") + + print("\n更新图书数量:") + manager.update_book("9780134685991", quantity=7) + book = manager.get_book_details("9780134685991") + print(f"更新后数量: {book['available']}/{book['quantity']}") + + print("\n删除图书:") + manager.delete_book("9780596007126") + print(f"删除后剩余图书数量: {len(manager.list_all_books())}") diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..5195f72 --- /dev/null +++ b/readme.txt @@ -0,0 +1,120 @@ +# 图书管理系统 (Library Management System) + +## 项目简介 +本图书管理系统是一个用于高效管理图书馆资源的软件解决方案,支持图书信息录入、借阅、归还、查询、用户管理等核心功能。系统旨在简化图书馆日常运营流程,提升管理员工作效率,同时为读者提供便捷的图书查询与借阅服务。 + + +## 功能特点 +- **图书管理**:支持图书信息(书名、作者、ISBN、分类、数量等)的新增、修改、删除及批量导入导出。 +- **借阅/归还管理**:记录图书借阅信息(借阅人、借阅时间、应还时间),支持归还操作及逾期提醒。 +- **用户管理**:分为管理员和读者两种角色,管理员可管理用户权限,读者可查看个人借阅记录。 +- **查询统计**:支持按书名、作者、ISBN等多条件查询图书,提供借阅量统计、热门图书分析等功能。 +- **数据安全**:用户密码加密存储,操作日志记录关键行为,保障数据完整性与安全性。 + + +## 技术栈 +- **后端**:[例如:Java (Spring Boot) / Python (Django) / Node.js (Express)] +- **前端**:[例如:Vue.js / React / HTML+CSS+JavaScript] +- **数据库**:[例如:MySQL / PostgreSQL / SQLite] +- **开发工具**:[例如:IntelliJ IDEA / VS Code] +- **其他**:[例如:Maven / Git / Redis (缓存)] + + +## 环境要求 +- 操作系统:Windows 10/11、macOS 12+、Linux (Ubuntu 20.04+) +- 数据库:MySQL 8.0+ 或兼容版本 +- JDK:1.8+(若使用Java后端) +- Node.js:14.0+(若使用前端框架) +- 内存:至少4GB RAM + + +## 安装与部署 +1. **克隆项目** + ```bash + git clone https://github.com/your-username/library-management-system.git + cd library-management-system + ``` + +2. **配置数据库** + - 新建数据库(例如:`library_db`) + - 导入项目根目录下的 `sql/library_init.sql` 文件初始化表结构及测试数据 + - 修改后端配置文件(如 `application.properties` 或 `config.js`)中的数据库连接信息 + +3. **启动后端服务** + ```bash + # 以Spring Boot为例 + cd backend + mvn spring-boot:run + ``` + +4. **启动前端服务** + ```bash + # 以Vue为例 + cd frontend + npm install + npm run serve + ``` + +5. **访问系统** + 打开浏览器,访问 `http://localhost:8080`(前端端口根据配置调整),使用默认账号登录: + - 管理员:`admin` / `123456` + - 读者:`user1` / `123456` + + +## 使用指南 +### 管理员操作 +1. 登录后进入管理员控制台,可在「图书管理」中添加或编辑图书信息。 +2. 在「用户管理」中创建读者账号,分配借阅权限(如最大借阅数量、最长借阅天数)。 +3. 通过「统计分析」查看图书借阅数据及系统使用情况。 + +### 读者操作 +1. 登录后可在「图书查询」中搜索目标图书,查看库存状态。 +2. 在「我的借阅」中查看已借图书、续借(若未逾期)或归还。 + + +## 项目结构 +``` +library-management-system/ +├── backend/ # 后端代码 +│ ├── src/ # 源代码 +│ ├── pom.xml # 依赖配置(Maven) +│ └── README.md # 后端开发说明 +├── frontend/ # 前端代码 +│ ├── src/ # 源代码 +│ ├── package.json # 依赖配置 +│ └── README.md # 前端开发说明 +├── sql/ # 数据库初始化脚本 +├── docs/ # 项目文档(接口文档、设计图等) +└── README.md # 项目总说明(本文档) +``` + + +## 开发计划 +- [x] 基础功能开发(图书CRUD、借阅/归还) +- [x] 用户权限管理 +- [ ] 高级搜索(按分类、出版日期等) +- [ ] 移动端适配 +- [ ] 对接第三方图书API(自动获取ISBN信息) + + +## 贡献指南 +1. Fork 本仓库 +2. 创建 feature 分支(`git checkout -b feature/xxx`) +3. 提交修改(`git commit -m "add xxx"`) +4. 推送到分支(`git push origin feature/xxx`) +5. 提交 Pull Request + + +## 许可证 +本项目采用 [MIT 许可证](LICENSE) 开源,允许自由使用、修改和分发。 + + +## 联系方式 +- 项目维护者:[你的名字] +- 邮箱:[your-email@example.com] +- 问题反馈:欢迎在 GitHub Issues 中提交 Bug 报告或功能建议 + + +--- + +**备注**:以上内容可根据实际开发情况调整(如技术栈、功能模块等),建议在项目迭代过程中持续更新文档。 \ No newline at end of file