自学内容网 自学内容网

图书管理系统

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