本课题要求编写Python程序实现对图书信息录入、图书信息查询、图书借阅等方面的管理。一个综合的图书借阅管理系统,要求能够管理图书的基本信息(包含新图书入库、读者图书查询借阅等),需要实现以下功能:读取以数据文件形式存储的图书信息;管理员可以增加、修改、删除图书的信息;读者可以按照图书名、作者名、索书号等查询图书,并可通过该系统实现对图书的借阅、续借和归还;读者还可查询自己所借图书的信息(是否归还、归还日期等)。
要能提供以下几个基本功能:
(1)系统内的相关信息文件由程序设计人员预先从键盘上录入,文件中的数据记录不得少于20条;
(2)设计并实现系统的相关界面,提供良好的交互界面;
(3)登录时输入帐号以区分读者和管理员;
(4)读者信息查询:
- 图书查询借阅功能:输入一个书名(或索书号、作者等其他信息),查出相关图书的基本信息并显示输出,同时提示是否需要借阅该图书;
- “我的”功能:显示个人图书借阅历史,显示所借图书的状态(是否归还、归还日期)、并选择是否归还或续借。
(5)管理端信息查询:
管理员可以增加、修改、删除图书的信息。
经过前两篇文章可知,我们已经完成了基本的用户和管理员模块,剩下的我们就要把两者结合,通过输入不同的密码进入不同的模块
import time
import datetime
import random
def login():
s = 0
while True:
username = input("请输入用户名:").strip()
password = input("请输入密码:").strip()
# 管理员登录
if username == "admin" and password == "123":
print("管理员登录成功!")
admin_module() # 调用管理员模块函数
break
# 用户登录
elif username != "admin" and password == "123456":
print("用户登录成功!")
user_module() # 调用用户模块函数
break
else:
print("用户名或密码错误!")
s += 1
if s < 3:
print(f"您还有{3 - s}次机会尝试")
else:
print("已达到最大尝试次数,退出登录程序。")
break
def admin_module():
print("欢迎进入管理员模块!这里是管理员可以执行的操作...")
# 该模块用于管理图书信息,包括添加、删除、修改、查询等功能。
# 功能包括:
# 1. 添加图书:输入图书信息,将图书信息写入文件中。
# 2. 删除图书:输入图书ID,从文件中删除该图书信息。
# 3. 修改图书:输入图书ID,修改图书信息,并将修改后的信息写入文件中。
book_id = []
book_type = []
book_name = []
book_author = []
book_publisher = []
book_remind = []
book_lend = []
with open('book_data.txt', 'r', encoding='utf-8') as f:
for lines in f:
parts = lines.strip().split(',')
book_id.append(parts[0])
book_type.append(parts[4])
book_name.append(parts[1])
book_author.append(parts[2])
book_publisher.append(parts[3])
book_remind.append(parts[5])
book_lend.append(parts[6])
# 1. 添加新的图书
def add_book():
book_id.append(input("请输入图书ID:"))
book_name.append(input("请输入图书名称:"))
book_author.append(input("请输入图书作者:"))
book_publisher.append(input("请输入图书出版社:"))
book_type.append(input("请输入图书类型:"))
book_remind.append(input("请输入共几本书:"))
book_lend.append(input("请输入可借本数:"))
with open('book_data.txt', 'a', encoding='utf-8') as f:
f.write(
book_id[-1] + ',' + book_name[-1] + ',' + book_author[-1] + ',' + book_publisher[-1] + ',' + book_type[
-1] + ',' + book_remind[-1] + ',' + book_lend[-1] + '\n')
print("于" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "图书添加成功!")
# 添加已经存在的图书
def add_book_exist():
print("添加已经存在的图书")
id = input("请输入图书编号:")
book_found = False
# 1. 读取原始文件数据
with open('book_data.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 2. 更新指定图书的数据
for i, line in enumerate(lines):
parts = line.strip().split(',')
if id == parts[0]:
lend_int = int(parts[6]) if parts[6].isdigit() else 0
if lend_int > 0:
book_remind = str(int(parts[5]) + 1)
book_lend = str(int(parts[6]) + 1)
lines[i] = ','.join(parts[:4] + [parts[4]] + [book_remind, book_lend]) + '\n'
book_found = True
else:
print("无法添加图书!")
break
if not book_found:
print("图书编号不存在!")
else:
# 3. 写回更新后的数据
with open('book_data.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
print("于" + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "图书数量增加成功!")
# 2. 删除图书
def del_book():
book_id_del = input("请输入要删除的图书ID:")
if book_id_del in book_id:
index = book_id.index(book_id_del)
book_id.pop(index)
book_name.pop(index)
book_author.pop(index)
book_publisher.pop(index)
book_type.pop(index)
book_remind.pop(index)
book_lend.pop(index)
with open('book_data.txt', 'w', encoding='utf-8') as f:
for i in range(len(book_id)):
f.write(book_id[i] + ',' + book_name[i] + ',' + book_author[i] + ',' + book_publisher[i] + ',' +
book_type[i] + ',' + book_remind[i] + ',' + book_lend[i] + '\n')
print("图书删除成功!")
return True
else:
print("图书ID不存在!")
return False
# 3. 修改图书
def modify_book():
book_id_modify = input("请输入要修改的图书ID:")
if book_id_modify in book_id:
index = book_id.index(book_id_modify)
book_name[index] = input("请输入新的图书名称:")
book_author[index] = input("请输入新的图书作者:")
book_publisher[index] = input("请输入新的图书出版社:")
book_type[index] = input("请输入新的图书类型:")
book_remind[index] = input("请输入总共几本书:")
book_lend[index] = input("请输入可借本数:")
with open('book_data.txt', 'w', encoding='utf-8') as f:
for i in range(len(book_id)):
f.write(book_id[i] + ',' + book_name[i] + ',' + book_author[i] + ',' + book_publisher[i] + ',' +
book_type[i] + ',' + book_remind[i] + ',' + book_lend[i] + '\n')
print("图书修改成功!")
return True
else:
print("图书ID不存在!")
return False
# 4. 查询图书
def query_book():
book_id_query = input("请输入要查询的图书ID:")
if book_id_query in book_id:
index = book_id.index(book_id_query)
print("图书ID:", book_id[index])
print("图书名称:", book_name[index])
print("图书作者:", book_author[index])
print("图书出版社:", book_publisher[index])
print("图书类型:", book_type[index])
print("共几本书:", book_remind[index])
print("可借本数:", book_lend[index])
return True
else:
print("图书ID不存在!")
return False
def main():
while True:
print("欢迎使用图书管理系统!")
print("1. 添加图书")
print("2. 删除图书")
print("3. 修改图书")
print("4. 查询图书")
print("5. 退出系统")
choice = input("请输入您的选择:")
if choice == '1':
add_book()
elif choice == '2':
del_book()
elif choice == '3':
modify_book()
elif choice == '4':
query_book()
elif choice == '5':
print("欢迎下次使用!")
break
else:
print("输入错误,请重新输入!")
if __name__ == '__main__':
main()
def user_module():
print("欢迎进入用户模块!这里是用户可以执行的操作...")
book_id = []
book_type = []
book_name = []
book_author = []
book_publisher = []
book_remind = []
book_lend = []
with open('book_data.txt', 'r', encoding='utf-8') as f:
for lines in f:
parts = lines.strip().split(',')
book_id.append(parts[0])
book_type.append(parts[4])
book_name.append(parts[1])
book_author.append(parts[2])
book_publisher.append(parts[3])
book_remind.append(parts[5])
book_lend.append(parts[6])
# 图书类型查询
def user_search_by_type():
while True:
print("*l图书类型查询")
print("1. 文学 2. 数学 3. 计算机4. 医学")
type_name = input("请输入图书类型:")
for i in range(len(book_type)):
if type_name == book_type[i]:
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书已借数量:", book_lend[i])
print("-" * 150)
print("是否继续查询图书类型?y/n")
choice = input()
if choice == 'n':
break
def user_search_by_name():
while True:
print("图书名称查询")
name = input("请输入图书名称:")
for i in range(len(book_name)):
if name in book_name[i]:
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书已借数量:", book_lend[i])
print("-" * 150)
print("是否继续查询图书名称?y/n")
choice = input()
if choice == 'n':
break
def user_search_by_author():
while True:
print("图书作者查询")
author = input("请输入图书作者:")
for i in range(len(book_author)):
if author in book_author[i]:
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书已借数量:", book_lend[i])
print("-" * 150)
print("是否继续查询图书作者?y/n")
choice = input()
if choice == 'n':
break
def user_search_by_id():
while True:
print("图书编号查询")
id = input("请输入图书编号:")
for i in range(len(book_id)):
if id == book_id[i]:
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书已借数量:", book_lend[i])
print("-" * 150)
# 用户是否借阅图书
def user_borrow_book():
while True:
print("借阅图书")
id = input("请输入图书编号:")
for i in range(len(book_id)):
if id == book_id[i]:
# 将库存从字符串转换为整数
remind_int = int(book_remind[i]) if book_remind[i].isdigit() else 0
if remind_int > 0: # 检查转换后的库存是否足够
book_remind[i] = str(remind_int - 1) # 更新库存为新的字符串值
book_lend[i] = str(int(book_lend[i]) - 1) # 增加借出数量,确保借出数量也是字符串类型
print("图书借阅成功!")
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书可借数量:", book_lend[i])
print("-" * 150)
break
else:
print("图书借阅失败!图书库存不足!")
break
print("是否继续借阅图书?y/n")
choice = input()
if choice == 'n':
break
else:
remind_int = int(book_remind[i]) if book_remind[i].isdigit() else 0
if remind_int > 0: # 检查转换后的库存是否足够
book_remind[i] = str(remind_int) # 更新库存为新的字符串值
book_lend[i] = str(int(book_lend[i])) # 增加借出数量,确保借出数量也是字符串类型
print("图书续借阅成功!")
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书可借数量:", book_lend[i])
print("-" * 150)
break
# 用户是否归还图书
def user_return_book():
while True:
print("归还图书")
id = input("请输入图书编号:")
for i in range(len(book_id)):
if id == book_id[i]:
# 将库存从字符串转换为整数
lend_int = int(book_lend[i]) if book_lend[i].isdigit() else 0
if lend_int > 0: # 检查转换后的借出数量是否足够
book_remind[i] = str(int(book_remind[i]) + 1)
book_lend[i] = str(int(book_lend[i]) + 1)
print("图书归还 成功!")
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书可借数量:", book_lend[i])
# 归还后,生成一个归还时间
return_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("归还时间:", return_time)
print("-" * 150)
break
else:
print("图书归还失败!图书未被借阅!")
break
print("是否继续归还图书?y/n")
choice = input()
if choice == 'n':
break
# 查看用户借阅状态
def user_borrow_status():
while True:
print("查看借阅状态")
id = input("请输入图书编号:")
for i in range(len(book_id)):
if id == book_id[i]:
lend_int = int(book_lend[i]) if book_lend[i].isdigit() else 0
if lend_int > 0: # 检查图书是否已被借出
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书已借数量:", book_lend[i])
# 借出状态,生成一个借出时间
borrow_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("借出时间:", borrow_time)
print("-" * 150)
break
else:
print("图书未被借阅!")
break
print("是否继续查看借阅状态?y/n")
choice = input()
if choice == 'n':
break
def user_renew_book():
while True:
print("续借图书")
id = input("请输入图书编号:")
for i in range(len(book_id)):
if id == book_id[i]:
# 将库存从字符串转换为整数
lend_int = int(book_lend[i]) if book_lend[i].isdigit() else 0
if lend_int > 0: # 检查转换后的借出数量是否足够
book_remind[i] = str(int(book_remind[i]))
book_lend[i] = str(int(book_lend[i]))
print("图书续借 成功!")
print("图书编号:", book_id[i], "图书名称:", book_name[i], "图书作者:", book_author[i],
"图书出版社:",
book_publisher[i], "图书剩余数量:", book_remind[i], "图书可借数量:", book_lend[i])
# 续借后,生成一个续借时间
renew_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("续借时间:", renew_time)
print("-" * 150)
break
else:
print("图书续借失败!图书已经被借阅!")
break
print("是否继续续借图书?y/n")
choice = input()
if choice == 'n':
break
def main():
search_options = {
"1": user_search_by_type,
"2": user_search_by_name,
"3": user_search_by_author,
"4": user_search_by_id,
}
while True:
print("请选择查询方式:")
print("1. 图书类型")
print("2. 图书名称")
print("3. 图书作者")
print("4. 图书编号")
print("5. 退出")
option = input("请输入选项:")
if option in search_options:
search_options[option]()
elif option == "5":
print("已退出查找程序")
break
else:
print("无效的选项,请重新输入")
def main_b():
user_borrow_lend_options = {
"1": user_borrow_book,
"2": user_return_book,
"3": user_renew_book,
"4": user_borrow_status
}
while True:
print("请选择借阅/归还图书/续借图书方式:")
print("1. 借阅图书")
print("2. 归还图书")
print("3. 续借图书")
print("4. 查看借阅状态")
print("5. 退出")
option = input("请输入选项:")
if option in user_borrow_lend_options:
user_borrow_lend_options[option]()
elif option == "5":
print("已退出借阅/归还程序")
break
else:
print("无效的选项,请重新输入")
# 将主程序放在最后
if __name__ == "__main__":
main()
if __name__ == "__main__":
main_b()
# 调用登录函数开始程序
login()
以上就是全部的完整版,可以实现基本的图书管理操作