图书管理系统
下面是一个用Python写的图书管理系统,有6种功能,包括查看图书、添加图书、删除图书、借阅图书、归还图书,退出系统。为了避免每次运行都需要重新添加图书信息,代码采用了直接将图书信息和当前可借阅状态写入文件,这样所有书籍的所有信息和借阅记录都会保存在文件里,使用查看图书功能可以直接查看。如果不想要这些信息可以直接删除,但只能一条一条的删除(以后会添加一键全部删除的功能)。
代码区:
图书管理系统.py
import pickle
import os
from book import Book
class MyPickle:
"""
用于序列化和反序列化数据的类,支持写入和读取数据。
"""
def __init__(self, filename):
"""
初始化 MyPickle 类,传入文件名。
"""
self.filename = filename
def write(self, data):
"""
将数据写入文件。
"""
with open(self.filename, "ab") as f:
pickle.dump(data, f)
def read(self):
"""
从文件读取数据。
"""
data = []
if os.path.exists(self.filename):
with open(self.filename, "rb") as f:
while True:
try:
data.append(pickle.load(f))
except EOFError:
break
else:
print('未发现书籍数据文件,请先创建书籍!')
return data
def delBook(self, name):
"""
删除书籍信息。
"""
with open(self.filename + ".bak", "wb") as f2: # 新建一个备份文件
for item in self.read(): # 从文件中load数据
if item.name != name:
pickle.dump(item, f2) # 将不等于目标书籍的信息写入备份文件
os.remove(self.filename) # 删除原文件
os.rename(self.filename + ".bak", self.filename) # 备份文件重命名为原文件名
class BookManage:
"""
图书管理系统类,负责管理书籍信息。
"""
info = [("查询全部书籍", "showBooks"), ("添加书籍", "addBook"),("删除书籍", "delBook"),
("借阅书籍", "lendBook"), ('归还书籍', 'returnBook'), ("退出系统", "exit")]
def __init__(self):
"""
初始化 BookManage 类,初始化书籍列表。
"""
self.books = []
def showBooks(self):
"""
显示所有书籍信息。
"""
if self.books:
for book in self.books:
book.showInfo()
else:
print('当前没有书籍!')
def addBook(self):
"""
添加书籍信息。
"""
name = input("请输入书籍名称: ")
author = input("请输入作者: ")
if self.checkBook(name):
print("该书籍已存在!")
else:
book = Book(name, author)
self.books.append(book)
print("添加书籍成功!")
def delBook(self):
"""
删除书籍信息。
"""
name = input("请输入要删除的书籍名称: ")
if self.checkBook(name):
# 从书籍列表中删除书籍
for i, book in enumerate(self.books):
if book.name == name:
del self.books[i]
print("删除书籍成功!")
self.file.delBook(name) # 更新书籍信息到文件
return
print("该书籍不存在!")
else:
print("该书籍不存在!")
def checkBook(self, name):
"""
检查书籍是否存在。
"""
for book in self.books:
if book.name == name:
return True
return False
def lendBook(self):
"""
借阅书籍。
"""
name = input("请输入要借阅的书籍名称: ")
if self.checkBook(name):
for book in self.books:
if book.name == name and book.state == 1:
book.state = 0
print("借阅成功!")
return
print("该书籍已被借阅!")
else:
print("该书籍不存在!")
def returnBook(self):
"""
归还书籍。
"""
name = input("请输入要归还的书籍名称: ")
if self.checkBook(name):
for book in self.books:
if book.name == name and book.state == 0:
book.state = 1
print("归还成功!")
return
print("该书籍未被借阅!")
else:
print("该书籍不存在!")
def exit(self):
"""
退出系统。
"""
print("欢迎下次使用!")
exit()
class BookManageUpdate(BookManage):
"""
图书管理系统类,负责管理书籍信息并写入文件。
"""
def __init__(self):
"""
初始化 BookManageUpdate 类,实例化 MyPickle 类,并读取文件中的书籍信息。
"""
super().__init__()
self.file = MyPickle('./bookSys')
self.books = self.file.read()
def showBooks(self):
"""
显示所有书籍信息。
"""
if self.books:
for book in self.books:
book.showInfo()
else:
print('未发现书籍数据文件,请先创建书籍!')
def addBook(self):
"""
添加书籍信息。
"""
name = input("请输入书籍名称: ")
author = input("请输入作者: ")
if self.checkBook(name):
print("该书籍已存在!")
else:
book = Book(name, author)
self.books.append(book)
self.file.write(book) # 将新添加的书籍信息写入文件
print("添加书籍成功!")
def checkBook(self, name):
"""
检查书籍是否存在。
"""
for book in self.books:
if book.name == name:
return True
return False
def lendBook(self):
"""
借阅书籍。
"""
name = input("请输入要借阅的书籍名称: ")
if self.checkBook(name):
for book in self.books:
if book.name == name and book.state == 1:
book.state = 0
self.file.write(book) # 更新书籍状态信息到文件
print("借阅成功!")
return
print("该书籍已被借阅!")
else:
print("该书籍不存在!")
def returnBook(self):
"""
归还书籍。
"""
name = input("请输入要归还的书籍名称: ")
if self.checkBook(name):
for book in self.books:
if book.name == name and book.state == 0:
book.state = 1
self.file.write(book) # 更新书籍状态信息到文件
print("归还成功!")
return
print("该书籍未被借阅!")
else:
print("该书籍不存在!")
def exit(self):
"""
退出系统。
"""
print("欢迎下次使用!")
exit()
def main():
"""
主函数,用于运行图书管理系统。
"""
bookManager = BookManageUpdate()
menu = bookManager.info
while True:
for i in range(len(menu)):
print(i + 1, menu[i][0])
choose = eval(input("输入序号进行操作:"))
getattr(bookManager, menu[choose - 1][1])() # 找到对象相应的方法并执行
if __name__ == '__main__':
main()
book.py
class Book:
"""
书籍类,包含书名、作者和状态信息。
"""
def __init__(self, name, author, state=1):
"""
初始化 Book 类,传入书名、作者和状态(默认可借阅)。
"""
self.name = name
self.author = author
self.state = state
def showInfo(self):
"""
显示书籍信息。
"""
if self.state == 1:
state_str = "可借阅"
else:
state_str = "已被借阅"
print(f"书名: {self.name}, 作者: {self.author}, 状态: {state_str}")
部分运行结果:
原文地址:https://blog.csdn.net/GZH_mxjx/article/details/142438857
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!