项目场景:
图书管理系统的编写:
图书类Book:
属性:书名name 作者author 是否借出isborrow 书籍ID bookID 书籍类型category
注意:书籍ID不能重复
图书管理系统BookManager类
存放图书的工具使用列表
方法:
1.添加图书
2.借书 (根据图书名字借书)要检验图书是否存在、图书是否已经借出
3.还书
4.查询书籍 (根据名字查询, 根据类别查询)
5.修改书籍信息(根据书籍ID修改)
6.本地化保存数据信息(json格式)
代码设计核心思想
设计两个类,图书类Book,图书管理系统BookManager类(需要存储book对象)/以及每一次json文件的数据列表。
代码需要自己创建一个json文件
保存代码,创建一个book.json文件
代码设计
"""
图书管理系统的编写:
图书类Book:
属性:书名name 作者author 是否借出isborrow 书籍ID bookID 书籍类型category
注意:书籍ID不能重复
图书管理系统BookManager类
存放图书的工具使用列表
方法:
1.添加图书
2.借书 (根据图书名字借书)要检验图书是否存在、图书是否已经借出
3.还书
4.查询书籍 (根据名字查询, 根据类别查询)
5.修改书籍信息(根据书籍ID修改)
6.本地化保存数据信息(json格式)
"""
import json
class Book(object):
"""该类为图书的类"""
def __init__(self, name, author, isborrow, bookID, category):
self.name = name
self.author = author
self.isborrow = isborrow
self.bookID = bookID
self.category = category
class BookManager(object):
book_list = [] # 存储book的对象列表
json_list = [] # 读取json文件,并且战时存储json数据的列表
category_list = [] #存储category类别的数据信息
def __init__(self):
"""初始化读取json,放入json_list中"""
try:
self.json_read()
except Exception as e:
return
def json_read(self):
"""封装读取json文件的函数"""
with open('book.json', mode='r', encoding='utf-8') as file_object:
self.json_list = json.load(file_object)
def json_write(self):
"""封装写入json文件数据"""
with open('book.json', mode='w', encoding='utf-8') as file_object:
json.dump(self.json_list, file_object)
@staticmethod
def is_empty_file():
"""json文件中是否存在图书,返回布尔类型"""
with open("book.json", "r", encoding="utf-8") as f:
is_exist_book = bool(f.readline())
return is_exist_book
def add_book(self, book_object):
"""增加图书,写入json中,初始化读取json,放入json_list中"""
self.book_list.append(book_object)
dic = {'id': book_object.bookID,
'name': book_object.name,
'author': book_object.author,
'isborrow': False,
'category': book_object.category}
self.json_list.append(dic)
self.json_write()
def borrow_book(self, book_name):
"""借书的函数"""
flag = 0
while flag < len(self.json_list):
"""判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
if book_name in self.json_list[flag].values():
if self.json_list[flag]["isborrow"] == False:
print("可以借书")
data = {"id": self.json_list[flag]["id"],
"name": self.json_list[flag]["name"],
"author": self.json_list[flag]["author"],
"isborrow": True,
"category": self.json_list[flag]["category"]}
self.json_list[flag] = data # 修改对应列表的索引值
self.json_write() # 每一次修改,要提交重新写入
print("借书成功!")
else:
print("该图书已经被借出")
break
elif book_name not in self.json_list[flag].values() and flag == len(self.json_list) - 1:
# 不存在,并且到最后一个了,返回没有该图书
print("没有该图书")
flag += 1
def review_book(self, book_name):
"""该函数为还书的操作,执行借书的逆向操作,原理相同"""
flag = 0
while flag < len(self.json_list):
"""判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
if book_name in self.json_list[flag].values():
if self.json_list[flag]["isborrow"] == True:
data = {"id": self.json_list[flag]["id"],
"name": self.json_list[flag]["name"],
"author": self.json_list[flag]["author"],
"isborrow": False,
"category": self.json_list[flag]["category"]}
self.json_list[flag] = data # 修改对应列表的索引值
self.json_write() # 每一次修改,要提交重新写入
print("还书成功!")
else:
print("该图书已经被还")
break
elif book_name not in self.json_list[flag].values() and flag == len(self.json_list) - 1:
# 不存在,并且到最后一个了,返回没有该图书
print("没有该图书")
flag += 1
def search_book(self):
"""查询书籍,先判断是否存在图书"""
is_exist_book = self.is_empty_file()
if is_exist_book:
select = input("请选择查询方式:(1.图书名查询)(2.图书类别查询[文学,科学])")
if select == "1":
book_name = input("输入查询的图书名")
v = self.search_name_book(book_name) #获取图书名的索引
if v == None:
#none则代表没有返回索引,即无图书信息
print("无图书信息")
else:
print("图书id\t图书名\t图书作者\t是否可借\t图书类别")
book = self.json_list[v]
id = book["id"]
name = book["name"]
author = book["name"]
isborrow = None
if book["isborrow"]:
isborrow = "否"
else:
isborrow = "是"
category = book["category"]
print("{}\t\t{}\t\t{}\t\t{}\t\t{}".format(id, name, author, isborrow, category))
elif select == "2":
book_category = input("输入查询的图书类别")
self.search_category_book(book_category)
#将类别的列表打印出来
for book in self.category_list:
id = book["id"]
name = book["name"]
author = book["name"]
isborrow = None
if book["isborrow"]:
isborrow = "否"
else:
isborrow = "是"
category = book["category"]
print("{}\t\t{}\t\t{}\t\t{}\t\t{}".format(id, name, author, isborrow, category))
self.category_list = [] #每一次查询完,将暂存数据的列表至为空
else:
print("输入错误")
else:
print("没有图书信息,请添加图书")
def search_name_book(self, book_name):
"""依据图书姓名查询"""
flag = 0
while flag < len(self.json_list):
"""判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
if book_name == self.json_list[flag]["name"]:
return flag
flag += 1
def search_category_book(self,category):
flag = 0
while flag < len(self.json_list):
"""判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
if category == self.json_list[flag]["category"]:
self.category_list.append(self.json_list[flag])
flag += 1
def update_book(self, ID):
"""该函数为修改图书"""
flag = 0
while flag < len(self.json_list):
"""判断图书是否存在,字典的values中,存在则进入借书,借完直接退出;"""
if ID in self.json_list[flag].values():
if self.json_list[flag]["id"] == ID:
# 输入修改的图书,依据图书id修改
name = input("添加的书名")
author = input("添加的作者")
isborrow = bool(int(input("图书是否被借出,输入:(0代表未借出,1代表借出)")))
category = input("请输入图书种类:文学,科学")
# 将修改后的值赋值给json_list,并提交
self.json_list[flag]["name"] = name
self.json_list[flag]["author"] = author
self.json_list[flag]["isborrow"] = isborrow
self.json_list[flag]["category"] = category
self.json_write() # 每一次修改,要提交重新写入
print("修改成功!")
break
elif ID not in self.json_list[flag].values() and flag == len(self.json_list) - 1:
# 不存在,并且到最后一个了,返回没有该图书ID
print("没有该图书ID")
flag += 1
if __name__ == '__main__':
print("欢迎来到图书管理系统")
bm = BookManager()
while True:
id = int(input("请输入你的选择,1.添加图书;2.借书;3.还书;4.查询书籍;5.修改书籍;"))
if id == 1:
bookID = input("请输入ID")
name = input("添加的书名")
author = input("添加的作者")
isborrow = False
category = input("请输入图书种类:文学,科学")
book = Book(name, author, isborrow, bookID, category)
bm.add_book(book)
elif id == 2:
"""借书 (根据图书名字借书)要检验图书是否存在、图书是否已经借出 """
book_name = input("请输入借书的书名")
bm.borrow_book(book_name)
elif id == 3:
review_name = input("请输入还书的书名")
bm.review_book(review_name)
pass
elif id == 4:
bm.search_book()
elif id == 5:
update_ID = input("请修改的书名ID")
bm.update_book(update_ID)
else:
print("输入格式错误重新输入")