图书管理系统后台
import os.path import pickle class Book(object): def __init__(self, num, name, position): self.num = num self.name = name self.position = position # 重写对象的to_string方法,返回对象的属性值格式 def __str__(self): # self对象本身 # \t空格 return f"{self.num}\t{self.name}\t{self.position}" class BookManage(object): book_list = [] def __init__(self): # 构造方法 # __init__方法在对象被初始化的时候,自动执行 # 避免异常的两种方法:1、加判断(事前) 2、异常处理(事后) if not os.path.isfile("book.data"): # 确保每次运行程序前,先把book.data文件中所有内存加载到book_list中 pickle.dump(self.book_list, open("book.data", "wb")) # 新增一个对象文件 """加载文件到内存,将一个对象保存到某个文件中""" self.book_list = pickle.load(open("book.data", "rb")) # 把文件的内容加载到内存 # try: # self.book_list = pickle.load(open("book.data", "rb")) # except FileNotFoundError as e: # print("文件不存在") # pickle.dump(self.book_list, open("book.data", "wb")) # print("文件创建") # 显示所有图书 def show_book_list(self): for book in self.book_list: print(book) # 添加图书,将book对象作为方法入参,book是一个变量 Book是一个类型 对某个变量限定类型 def add_book(self, book: Book): self.book_list.append(book) # 根据图书名称查询某本书籍是否存在 def show_book_by_name(self,name: str): for book in self.book_list: if book.name == name: # 显示查询的书籍信息 print(book) break else: print("查询的书籍不存在") # 根据图书名称删除图书 def del_book_by_name(self, name: str): for i, book in enumerate(self.book_list): if book.name == name: # 根据下标删除书籍 del self.book_list[i] # # remove方法 # self.book_list.remove(book) break else: print("删除的书籍不存在") # 获取列表最后一行的编号id property将方法转化为属性 @property def last_book_id(self): # 如果列表不为空 if self.book_list: # 获取列表最后一本书的num属性值 return self.book_list[-1].num # 列表为空,返回0 return 0 def __del__(self): # 析构方法 """加载内存中的数据保存到文件""" # __del__在对象被销毁的时候自动执行 pickle.dump(self.book_list, open("book.data", "wb")) # 把对象保存到磁盘 if __name__ == '__main__': book = Book(1, "笑傲江湖", "第1层第1行") print(book)