图书馆管理系统
目录
- 项目概述
- 类定义
-Book类
-Library类 - 书籍管理功能
-添加书籍
-查找书籍
-借阅书籍
-归还书籍
-列出所有书籍 - 数据持久化
-保存书籍
-加载书籍 - 操作日志记录
- 图形用户界面(GUI)
-界面设计
-功能实现 - 代码原理总结
实现界面
![](https://i-blog.csdnimg.cn/direct/5902947f852e473491d3e4677bc2ec7c.png
1. 项目概述
本项目是一个使用Python和Tkinter库开发的简单图书馆管理系统。系统提供了添加、查找、借阅、归还书籍的功能,并通过文本文件进行数据持久化。
2. 类定义
Book类
功能:表示一本书,包含书籍的基本信息。
-
属性:
book_id
:书籍的唯一标识符。title
:书名。author
:作者。is_borrowed
:借阅状态,布尔值。
-
方法:
__str__
:返回书籍的字符串表示,便于显示。
Library类
功能:管理书籍的各项操作,包括添加、查找、借阅、归还等。
-
属性:
books
:存储所有书籍的列表。filename
:存储书籍信息的文本文件名。log_filename
:存储操作日志的Excel文件名。book_id_counter
:用于生成书籍ID的计数器。
-
方法:
__init__
:初始化类实例并加载书籍数据。init_log_file
:初始化日志文件。add_book
:添加书籍到系统。find_book
:查找特定书籍。borrow_book
:借阅书籍。return_book
:归还书籍。list_books
:列出所有书籍。save_books
:保存书籍信息到文件。load_books
:从文件加载书籍信息。log_action
:记录操作日志。
3. 书籍管理功能
添加书籍
原理:通过用户输入获取书名和作者信息,生成唯一的书籍ID,将书籍添加到列表中,并保存到文件。
def add_book(self, title, author):book_id = self.book_id_counterself.book_id_counter += 1book = Book(book_id, title, author)self.books.append(book)self.save_books()self.log_action("系统", book_id, "添加书籍")
查找书籍
原理:遍历书籍列表,查找与输入书名匹配的书籍,返回书籍对象。
def find_book(self, title):for book in self.books:if book.title.lower() == title.lower():return bookreturn None
借阅书籍
原理:查找书籍并检查其借阅状态,若未借出则更新状态并记录日志。
def borrow_book(self, user_id, title):book = self.find_book(title)if book and not book.is_borrowed:book.is_borrowed = Trueself.save_books()self.log_action(user_id, book.book_id, "借阅书籍")return Truereturn False
归还书籍
原理:查找书籍并检查其借阅状态,若已借出则更新状态并记录日志。
def return_book(self, user_id, title):book = self.find_book(title)if book and book.is_borrowed:book.is_borrowed = Falseself.save_books()self.log_action(user_id, book.book_id, "归还书籍")return Truereturn False
列出所有书籍
原理:返回当前系统中所有书籍的列表。
def list_books(self):return self.books
4. 数据持久化
保存书籍
原理:将书籍信息保存到文本文件中,确保数据在程序关闭后不丢失。
def save_books(self):with open(self.filename, 'w', encoding='utf-8') as file:for book in self.books:file.write(f"{book.book_id},{book.title},{book.author},{book.is_borrowed}\n")
加载书籍
原理:从文本文件中读取书籍信息,初始化书籍列表。
def load_books(self):if os.path.exists(self.filename):with open(self.filename, 'r', encoding='utf-8') as file:for line in file:parts = line.strip().split(',')if len(parts) == 4:book_id, title, author