该示例将使用前面学习的 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": "已借出"
}
]