实现一个简易版的图书管理系统

🎉摘要:Python 是一门解释型、面向对象、动态类型的高级编程语言,由荷兰程序员 Guido van Rossum 于 1991 年发布,核心设计理念是优雅、明确、简单。

该示例将使用前面学习的 Python3 基础知识,实现一个非常简单的图书管理系统,核心功能如下:

(1)添加图书

(2)查询图书

(3)借阅图书

(4)数据自动保存到文件、启动自动加载

注意,该示例程序使用了 Python 的 json 和 os 内置模块,其中:

  • json:是 Python 内置标准模块,专门用来处理 JSON 格式数据

  • os:是 Python 内置标准模块,让代码直接和操作系统交互,如文件、路径、文件夹、环境变量等等

示例代码:

import json
import os

# 图书类:封装单本图书的属性和方法
class Book:
    def __init__(self, book_id, title, author, status="可借阅"):
        self.book_id = book_id    # 图书编号
        self.title = title        # 书名
        self.author = author      # 作者
        self.status = status      # 状态:可借阅/已借出

    # 转为字典(用于保存到文件)
    def to_dict(self):
        return {
            "book_id": self.book_id,
            "title": self.title,
            "author": self.author,
            "status": self.status
        }

    # 静态方法:从字典创建图书对象(用于加载文件数据)
    @staticmethod
    def from_dict(data):
        return Book(
            book_id=data["book_id"],
            title=data["title"],
            author=data["author"],
            status=data["status"]
        )

    def __str__(self):
        return f"编号:{self.book_id} | 书名:{self.title} | 作者:{self.author} | 状态:{self.status}"

# 图书馆类:管理图书集合、文件读写、业务逻辑
class Library:
    def __init__(self, data_file="books.json"):
        self.data_file = data_file  # 数据存储文件
        self.books = []             # 图书列表
        self.load_books()           # 启动时自动加载文件数据

    # 从文件加载图书
    def load_books(self):
        if os.path.exists(self.data_file):
            with open(self.data_file, "r", encoding="utf-8") as f:
                books_data = json.load(f)
                self.books = [Book.from_dict(book) for book in books_data]
            print(f"已从 {self.data_file} 加载图书数据")
        else:
            print(f"未找到数据文件,将创建新库")

    # 保存图书到文件
    def save_books(self):
        with open(self.data_file, "w", encoding="utf-8") as f:
            json.dump([book.to_dict() for book in self.books], f, ensure_ascii=False, indent=4)
        print("数据已保存到文件")

    # 添加图书
    def add_book(self, book):
        # 检查编号是否重复
        for b in self.books:
            if b.book_id == book.book_id:
                print("图书编号已存在,添加失败")
                return False
        self.books.append(book)
        self.save_books()
        print("图书添加成功")
        return True

    # 查询图书(支持模糊查询书名/精准查询编号)
    def search_book(self, keyword):
        result = []
        for book in self.books:
            if keyword in book.title or keyword == book.book_id:
                result.append(book)
        return result

    # 借阅图书
    def borrow_book(self, book_id):
        for book in self.books:
            if book.book_id == book_id:
                if book.status == "可借阅":
                    book.status = "已借出"
                    self.save_books()
                    print("借阅成功")
                    return True
                else:
                    print("该图书已借出")
                    return False
        print("未找到该编号的图书")
        return False

# 控制台交互菜单
def show_menu():
    print("\n===== 简易图书管理系统 =====")
    print("1. 添加图书")
    print("2. 查询图书")
    print("3. 借阅图书")
    print("4. 查看所有图书")
    print("0. 退出系统")
    print("============================")

if __name__ == "__main__":
    library = Library()
    while True:
        show_menu()
        choice = input("请输入操作序号:")

        if choice == "1":
            # 添加图书
            book_id = input("请输入图书编号:")
            title = input("请输入书名:")
            author = input("请输入作者:")
            book = Book(book_id, title, author)
            library.add_book(book)

        elif choice == "2":
            # 查询图书
            keyword = input("请输入书名或图书编号:")
            results = library.search_book(keyword)
            if results:
                print("\n查询结果:")
                for book in results:
                    print(book)
            else:
                print("未找到匹配的图书")

        elif choice == "3":
            # 借阅图书
            book_id = input("请输入要借阅的图书编号:")
            library.borrow_book(book_id)

        elif choice == "4":
            # 查看所有图书
            if library.books:
                print("\n所有图书列表:")
                for book in library.books:
                    print(book)
            else:
                print("图书馆暂无图书")

        elif choice == "0":
            # 退出
            print("感谢使用图书管理系统,再见!")
            break

        else:
            print("输入无效,请重新选择")

运行结果:

未找到数据文件,将创建新库

===== 简易图书管理系统 =====
1. 添加图书
2. 查询图书
3. 借阅图书
4. 查看所有图书
0. 退出系统
============================
请输入操作序号:1
请输入图书编号:101
请输入书名:《Java编程思想》
请输入作者:未知
数据已保存到文件
图书添加成功

===== 简易图书管理系统 =====
1. 添加图书
2. 查询图书
3. 借阅图书
4. 查看所有图书
0. 退出系统
============================
请输入操作序号:2
请输入书名或图书编号:101

查询结果:
编号:101 | 书名:《Java编程思想》 | 作者:未知 | 状态:可借阅

===== 简易图书管理系统 =====
1. 添加图书
2. 查询图书
2. 查询图书
3. 借阅图书
4. 查看所有图书
0. 退出系统
============================
请输入操作序号:4

所有图书列表:
编号:101 | 书名:《Java编程思想》 | 作者:未知 | 状态:可借阅

===== 简易图书管理系统 =====
1. 添加图书
2. 查询图书
3. 借阅图书
4. 查看所有图书
0. 退出系统
============================
请输入操作序号:0
感谢使用图书管理系统,再见!

核心代码说明:

(1)Book 类,表示图书信息,包含编号、书名、作者、借阅状态等属性,支持的功能如下:

    • to_dict():将对象转为字典,用于写入 JSON 文件

    • from_dict():从字典还原图书对象,用于读取文件

(2)Library 类,实现图书馆功能,支持功能如下:

    • load_books():启动时自动加载 JSON 文件中的图书数据

    • save_books():每次修改数据后自动保存到文件

    • add_book():添加图书并校验编号唯一性

    • search_book():支持按书名模糊查询、按编号精准查询

    • borrow_book():修改图书状态,实现借阅逻辑

下面是数据文件(books.json)示例,用来保存书籍数据:

[
    {
        "book_id": "1001",
        "title": "Python编程从入门到实践",
        "author": "埃里克·马瑟斯",
        "status": "可借阅"
    },
    {
        "book_id": "1002",
        "title": "深度学习",
        "author": "伊恩·古德费洛",
        "status": "已借出"
    }
]

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号