当前位置: 首页 > news >正文

图书管理系统

下面是一个用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}")

 部分运行结果:


http://www.mrgr.cn/news/33558.html

相关文章:

  • 什么是数据库视图(View)?视图和表有何区别?
  • 程序员软硬通吃的核心竞争力修炼指南
  • 如何在堆和栈上分别创建一个`QObject`子类对象
  • 用OPenCV分割视频
  • 【米哈游AI大模型“Glossa”正式完成备案,AI加持游戏行业开拓新赛道】
  • typedef的用法
  • 对网页聊天项目进行性能测试, 使用JMeter对于基于WebSocket开发的webChat项目的聊天功能进行测试
  • 机器学习算法那些事 | TPAMI 2024.9 | FeatAug-DETR:通过特征增强丰富DETRs的一对多匹配
  • 【人工智能】在大型活动中的应用案例
  • 带你0到1之QT编程:十七、Http协议实战,实现一个简单服务器和一个客户端进行http协议通信
  • Python 虚拟环境安装使用(Anaconda 完整实操版)
  • stable diffusion 神经网络插件 controlnet 的安装,很详细
  • 自学笔记之TVM编译器框架 ,核心特性,模型优化概述,AI应用落地
  • 【C++初阶】模版进阶
  • 6、论文阅读:水下图像增强基准数据集及其他数据集
  • go语言 swagger 查询 json 字段注释
  • REST-系统架构师(六十九)
  • mysql配置相关命令
  • 设计模式之策略模式例题
  • 【HTTPS】对称加密和非对称加密