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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)