add book_manager

pull/1/head
katon 5 months ago
parent f5a3407257
commit 87e625abb2

@ -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())}")
Loading…
Cancel
Save