嘿,各位技术小伙伴们,在学习Python的过程中,图书管理系统是一个非常经典的Python练手项目,在这个系统中,我们将利用Python的内置库
json
来存储和读取图书数据。json
库就像是数据的“翻译官”,它能把Python中的数据结构(比如字典)转换成一种易于存储和传输的格式,然后再把它们“翻译”回来。这样一来,我们就能轻松地把图书信息保存到文件里,随时读取、修改和查询了。不仅如此,我们还会用到字典这种强大的数据结构来存储图书信息。字典就像是现实生活中的书架,每个格子(键值对)都能放一本“书”(图书信息)。通过给每本书分配一个唯一的“书号”(图书ID),我们就能快速找到并管理它们了。
好了,废话不多说,接下来就让我们一起动手,用代码来实现这个图书管理系统吧!
系统功能
- 添加图书
- 借阅图书
- 归还图书
- 查询图书信息
- 显示所有图书
准备工作
在开始编码之前,请确保你的Python环境已经安装并配置好。如果还没有安装Python,可以从Python官方网站下载并安装最新版本的Python。
实现步骤
第一步:导入必要的库
import json
我们使用json
库来存储和读取图书数据。
第二步:初始化图书数据
library = {}
使用一个字典来存储图书信息,其中键是图书ID,值是包含图书标题、作者和借阅状态的字典。
第三步:定义存储图书数据的文件路径
data_file = 'library_data.json'
第四步:加载图书数据
# 加载图书数据
def load_library_data():
"""从JSON文件中加载图书数据"""
try:
with open(data_file, 'r') as file:
global library # 使用全局变量library
library = json.load(file) # 读取JSON数据到library字典
except FileNotFoundError:
# 如果文件不存在,则初始化一个空字典
library = {}
从JSON文件中加载图书数据,如果文件不存在则初始化一个空字典。
第五步:保存图书数据
# 保存图书数据
def save_library_data():
"""将图书数据保存到JSON文件中"""
with open(data_file, 'w') as file:
json.dump(library, file, indent=4) # 以缩进格式保存JSON数据
将图书数据保存到JSON文件中。
第六步:添加图书
# 添加图书
def add_book(book_id, title, author):
"""添加一本新书到图书馆"""
if book_id in library:
print(f"图书ID {book_id} 已存在。")
else:
library[book_id] = {"title": title, "author": author, "borrowed": False}
print(f"图书 {title} 已添加。")
save_library_data() # 保存数据
添加一本新书到图书馆,如果图书ID已存在则提示用户。
第七步:借阅图书
# 借阅图书
def borrow_book(book_id):
"""借阅一本图书"""
if book_id in library and not library[book_id]["borrowed"]:
library[book_id]["borrowed"] = True
print(f"图书 {library[book_id]['title']} 已借出。")
save_library_data() # 保存数据
else:
print(f"图书ID {book_id} 不存在或已被借出。")
借阅一本图书,如果图书不存在或已被借出则提示用户。
第八步:归还图书
# 归还图书
def return_book(book_id):
"""归还一本图书"""
if book_id in library and library[book_id]["borrowed"]:
library[book_id]["borrowed"] = False
print(f"图书 {library[book_id]['title']} 已归还。")
save_library_data() # 保存数据
else:
print(f"图书ID {book_id} 不存在或未被借出。")
归还一本图书,如果图书不存在或未被借出则提示用户。
第九步:查询图书信息
# 查询图书信息
def query_book(book_id):
"""查询图书信息"""
if book_id in library:
book = library[book_id]
borrowed_status = "已借出" if book["borrowed"] else "在馆"
print(f"图书ID: {book_id}, 标题: {book['title']}, 作者: {book['author']}, 状态: {borrowed_status}")
else:
print(f"图书ID {book_id} 不存在。")
查询图书信息,包括图书ID、标题、作者和借阅状态。
第十步:显示所有图书
# 显示所有图书
def display_all_books():
"""显示所有图书信息"""
if not library:
print("图书馆中没有图书。")
else:
for book_id, book in library.items():
borrowed_status = "已借出" if book["borrowed"] else "在馆"
print(f"图书ID: {book_id}, 标题: {book['title']}, 作者: {book['author']}, 状态: {borrowed_status}")
显示所有图书的信息,包括图书ID、标题、作者和借阅状态。
第十一步:主函数
# 主函数
def main():
load_library_data() # 加载图书数据
while True:
print("\n图书管理系统")
print("1. 添加图书")
print("2. 借阅图书")
print("3. 归还图书")
print("4. 查询图书信息")
print("5. 显示所有图书")
print("6. 退出")
choice = input("请选择操作: ")
if choice == '1':
book_id = input("请输入图书ID: ")
title = input("请输入图书标题: ")
author = input("请输入图书作者: ")
add_book(book_id, title, author)
elif choice == '2':
book_id = input("请输入图书ID: ")
borrow_book(book_id)
elif choice == '3':
book_id = input("请输入图书ID: ")
return_book(book_id)
elif choice == '4':
book_id = input("请输入图书ID: ")
query_book(book_id)
elif choice == '5':
display_all_books()
elif choice == '6':
print("退出系统。")
break
else:
print("无效选择,请重新输入。")
if __name__ == "__main__":
main()
主函数用于管理用户输入和调用相应的功能。
运行结果
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 1
请输入图书ID: 1
请输入图书标题: 西游记
请输入图书作者: 吴承恩
图书 西游记 已添加。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 1
请输入图书ID: 2
请输入图书标题: 红楼梦
请输入图书作者: 曹雪芹
图书 红楼梦 已添加。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 1
请输入图书ID: 3
请输入图书标题: 三国演义
请输入图书作者: 罗贯中
图书 三国演义 已添加。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 1
请输入图书ID: 4
请输入图书标题: 水浒传
请输入图书作者: 施耐庵
图书 水浒传 已添加。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 4
请输入图书ID: 1
图书ID: 1, 标题: 西游记, 作者: 吴承恩, 状态: 在馆
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 5
图书ID: 1, 标题: 西游记, 作者: 吴承恩, 状态: 在馆
图书ID: 2, 标题: 红楼梦, 作者: 曹雪芹, 状态: 在馆
图书ID: 3, 标题: 三国演义, 作者: 罗贯中, 状态: 在馆
图书ID: 4, 标题: 水浒传, 作者: 施耐庵, 状态: 在馆
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 2
请输入图书ID: 3
图书 三国演义 已借出。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 5
图书ID: 1, 标题: 西游记, 作者: 吴承恩, 状态: 在馆
图书ID: 2, 标题: 红楼梦, 作者: 曹雪芹, 状态: 在馆
图书ID: 3, 标题: 三国演义, 作者: 罗贯中, 状态: 已借出
图书ID: 4, 标题: 水浒传, 作者: 施耐庵, 状态: 在馆
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 2
请输入图书ID: 3
图书ID 3 不存在或已被借出。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 3
请输入图书ID: 3
图书 三国演义 已归还。
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 4
请输入图书ID: 2
图书ID: 2, 标题: 红楼梦, 作者: 曹雪芹, 状态: 在馆
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 5
图书ID: 1, 标题: 西游记, 作者: 吴承恩, 状态: 在馆
图书ID: 2, 标题: 红楼梦, 作者: 曹雪芹, 状态: 在馆
图书ID: 3, 标题: 三国演义, 作者: 罗贯中, 状态: 在馆
图书ID: 4, 标题: 水浒传, 作者: 施耐庵, 状态: 在馆
图书管理系统
1. 添加图书
2. 借阅图书
3. 归还图书
4. 查询图书信息
5. 显示所有图书
6. 退出
请选择操作: 6
退出系统。
最终代码
# 导入必要的库
import json # 用于存储和读取数据
# 初始化图书数据,这里使用字典来存储图书信息
library = {}
# 定义存储图书数据的文件路径
data_file = 'library_data.json'
# 加载图书数据
def load_library_data():
"""从JSON文件中加载图书数据"""
try:
with open(data_file, 'r') as file:
global library # 使用全局变量library
library = json.load(file) # 读取JSON数据到library字典
except FileNotFoundError:
# 如果文件不存在,则初始化一个空字典
library = {}
# 保存图书数据
def save_library_data():
"""将图书数据保存到JSON文件中"""
with open(data_file, 'w') as file:
json.dump(library, file, indent=4) # 以缩进格式保存JSON数据
# 添加图书
def add_book(book_id, title, author):
"""添加一本新书到图书馆"""
if book_id in library:
print(f"图书ID {book_id} 已存在。")
else:
library[book_id] = {"title": title, "author": author, "borrowed": False}
print(f"图书 {title} 已添加。")
save_library_data() # 保存数据
# 借阅图书
def borrow_book(book_id):
"""借阅一本图书"""
if book_id in library and not library[book_id]["borrowed"]:
library[book_id]["borrowed"] = True
print(f"图书 {library[book_id]['title']} 已借出。")
save_library_data() # 保存数据
else:
print(f"图书ID {book_id} 不存在或已被借出。")
# 归还图书
def return_book(book_id):
"""归还一本图书"""
if book_id in library and library[book_id]["borrowed"]:
library[book_id]["borrowed"] = False
print(f"图书 {library[book_id]['title']} 已归还。")
save_library_data() # 保存数据
else:
print(f"图书ID {book_id} 不存在或未被借出。")
# 查询图书信息
def query_book(book_id):
"""查询图书信息"""
if book_id in library:
book = library[book_id]
borrowed_status = "已借出" if book["borrowed"] else "在馆"
print(f"图书ID: {book_id}, 标题: {book['title']}, 作者: {book['author']}, 状态: {borrowed_status}")
else:
print(f"图书ID {book_id} 不存在。")
# 显示所有图书
def display_all_books():
"""显示所有图书信息"""
if not library:
print("图书馆中没有图书。")
else:
for book_id, book in library.items():
borrowed_status = "已借出" if book["borrowed"] else "在馆"
print(f"图书ID: {book_id}, 标题: {book['title']}, 作者: {book['author']}, 状态: {borrowed_status}")
# 主函数
def main():
load_library_data() # 加载图书数据
while True:
print("\n图书管理系统")
print("1. 添加图书")
print("2. 借阅图书")
print("3. 归还图书")
print("4. 查询图书信息")
print("5. 显示所有图书")
print("6. 退出")
choice = input("请选择操作: ")
if choice == '1':
book_id = input("请输入图书ID: ")
title = input("请输入图书标题: ")
author = input("请输入图书作者: ")
add_book(book_id, title, author)
elif choice == '2':
book_id = input("请输入图书ID: ")
borrow_book(book_id)
elif choice == '3':
book_id = input("请输入图书ID: ")
return_book(book_id)
elif choice == '4':
book_id = input("请输入图书ID: ")
query_book(book_id)
elif choice == '5':
display_all_books()
elif choice == '6':
print("退出系统。")
break
else:
print("无效选择,请重新输入。")
if __name__ == "__main__":
main()
总结
经过一番折腾,咱们的图书管理系统终于大功告成了!现在,无论是添加新书、借阅图书,还是归还图书、查询图书信息,都变得轻而易举。这一切都要归功于Python的json
库和字典数据结构,它们就像是我们管理图书的得力助手。
通过这次实践,我们不仅学会了如何利用json
库来存储和读取数据,还掌握了字典这种高效的数据管理方式。更重要的是,我们体会到了编程带来的乐趣和成就感。当看到自己亲手打造的图书管理系统能够正常运行,那种满足感真的是难以言表!
所以呀,小伙伴们,不要害怕编程,也不要觉得它很难。只要你肯动手去尝试,去实践,就一定能发现编程的魅力和乐趣所在。就像咱们今天打造的图书管理系统一样,虽然看起来很简单,但它却能在我们的日常生活中发挥巨大的作用。让我们一起继续探索编程的世界吧!