Python编程逻辑思维巩固案例

book.py

import os
import pickle


class Book(object):
    def __init__(self, num, name, position):
        self.num = num
        self.name = name
        self.position = position

    def __str__(self):
        return f"{self.num}\t{self.name}\t{self.position}"


class BookManage(object):
    book_list = []

    # __init__ 方法在对象被初始化的时候,自动执行
    def __init__(self):
        "加载文件到内存"
        # 如果文件不存在,就创建一个文件
        if not os.path.isfile("book.data"):
            pickle.dump(self.book_list, open("book.data", "wb"))

        self.book_list = pickle.load(open("book.data", "rb"))

    # 实现num自增的方法
    @property
    def last_book_id(self):
        "如果book_list是空,返回0,否则返回最后一本书的num值"
        if self.book_list:
            last_book = self.book_list[-1]  # 获得最后一本书
            return last_book.num  # 返回最后一本书的num
        return 0

    def show_book(self):
        "显示所有图书"
        for book in self.book_list:
            print(book)

    def add_book(self, book: Book):
        "新增书籍"
        self.book_list.append(book)

    def del_book(self, book: Book):
        "删除书籍"
        pass

    # __del__在对象被销毁的时候自动执行
    def __del__(self):
        "把内存中的数据保存到文件"
        pickle.dump(self.book_list, open("book.data", "wb"))

mian.py

from book import Book, BookManage


def welcome():
    print("*******欢迎进入图书管理系统*******")
    print("1.显示所有图书")
    print("2.添加图书")
    print("3.删除图书")
    print("4.查找图书")
    print("5.退出")
    print("******************************")


def get_choose_number():
    "获取用户输入的菜单编号"
    choose_number = input("请输入菜单编号:")
    # 如果编号不是数字或者不是菜单上有的数字,返回-1
    if not choose_number.isdigit() or choose_number not in ["1", "2", "3", "4", "5"]:
        return -1
    return int(choose_number)


def main():
    bm = BookManage() #创建一个用来管理图书的对象
    while True:
        welcome() #显示菜单
        number = get_choose_number()# 获得使用者输入的菜单编号

        if number == -1:
            print("编号输入有误,请输入正确的数字")
            continue

        if number == 1:
            bm.show_book()
        elif number == 2:
            book_name = input("请输入书名:")
            book_position = input("请输入位置:")
            # 创建一个对象--具体的书
            book = Book(bm.last_book_id + 1,book_name,book_position)
            bm.add_book(book)

        elif number == 3:
            pass
        elif number == 4:
            pass
        else:
            break


if __name__ == '__main__':
    main()

其中在__init__和__del__方法里实现了序列化和反序列化。
python序列化

import pickle

li = [1,2,3]
pickle.dump(li,open("demo.data","wb"))

就是把python的对象(li)转换成字符串文件(demo.data)


python反序列化

import pickle

l = pickle.load(open("demo.data","rb"))
print(l)

就是把字符串文件(demo.data)转换成python的对象(l)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值