图书管理系统后台

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)

 

posted on 2024-05-28 16:21  诚实的表达自己  阅读(4)  评论(0编辑  收藏  举报