import json import os from datetime import datetime class BookManager: """图书管理类,负责图书信息的增删改查操作""" def __init__(self, data_file='books.json'): """初始化图书管理器,加载已有图书数据""" #self.data_file = data_file 111111111111111111122222222222 #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())}")