图书管理系统
下面是一个用Python写的图书管理系统,有6种功能,包括查看图书、添加图书、删除图书、借阅图书、归还图书,退出系统。为了避免每次运行都需要重新添加图书信息,代码采用了直接将图书信息和当前可借阅状态写入文件,这样所有书籍的所有信息和借阅记录都会保存在文件里,使用查看图书功能可以直接查看。如果不想要这些信息可以直接删除,但只能一条一条的删除(以后会添加一键全部删除的功能)。
代码区:
图书管理系统.py
import pickle
import os
from book import Bookclass MyPickle:"""用于序列化和反序列化数据的类,支持写入和读取数据。"""def __init__(self, filename):"""初始化 MyPickle 类,传入文件名。"""self.filename = filenamedef 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:breakelse:print('未发现书籍数据文件,请先创建书籍!')return datadef 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) # 更新书籍信息到文件returnprint("该书籍不存在!")else:print("该书籍不存在!")def checkBook(self, name):"""检查书籍是否存在。"""for book in self.books:if book.name == name:return Truereturn Falsedef lendBook(self):"""借阅书籍。"""name = input("请输入要借阅的书籍名称: ")if self.checkBook(name):for book in self.books:if book.name == name and book.state == 1:book.state = 0print("借阅成功!")returnprint("该书籍已被借阅!")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 = 1print("归还成功!")returnprint("该书籍未被借阅!")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 Truereturn Falsedef lendBook(self):"""借阅书籍。"""name = input("请输入要借阅的书籍名称: ")if self.checkBook(name):for book in self.books:if book.name == name and book.state == 1:book.state = 0self.file.write(book) # 更新书籍状态信息到文件print("借阅成功!")returnprint("该书籍已被借阅!")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 = 1self.file.write(book) # 更新书籍状态信息到文件print("归还成功!")returnprint("该书籍未被借阅!")else:print("该书籍不存在!")def exit(self):"""退出系统。"""print("欢迎下次使用!")exit()def main():"""主函数,用于运行图书管理系统。"""bookManager = BookManageUpdate()menu = bookManager.infowhile 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 = nameself.author = authorself.state = statedef showInfo(self):"""显示书籍信息。"""if self.state == 1:state_str = "可借阅"else:state_str = "已被借阅"print(f"书名: {self.name}, 作者: {self.author}, 状态: {state_str}")
部分运行结果: