项目要求
功能拆解
-
图书信息包含:
- 编号(sid), 书名(name), 价格(price), 简介(summary) 四个信息
- 每个图书信息使用字典形式保存
- 使用列表保存所有图书的信息
-
实现菜单函数(menu),输出下列信息,返回用户输入的编号
print("*****************************") print("* 图书管理系统 *") print("* 1. 添加新图书信息 *") print("* 2. 通过图书ID修改图书信息 *") print("* 3. 通过图书ID删除图书信息 *") print("* 4. 通过书名删除图书信息 *") print("* 5. 通过图书ID查询图书信息 *") print("* 6. 通过书名查询图书信息 *") print("* 7. 显示所有图书信息 *") print("* 8. 退出系统 *") print("*****************************")
-
定义管理函数 (bookManager),用来实现整体业务逻辑。
- 对用户输入内容进行输入校验
- 根据用户输入内容选择不同功能执行
-
因程序中需要多次对编号及书名进行输入,故抽取函数获取对应的数据。
- 获取编号函数(getID), 输入编号并返回(字符串类型)
eg. s01
- 获取书名函数(getName), 输入书名并返回(字符串类型)
- 获取书名函数(getPrice), 输入价格并返回(整型)
- 获取书名函数(getSummary), 输入简介并返回(字符串类型)
- 获取编号函数(getID), 输入编号并返回(字符串类型)
-
实现添加图书函数(addBook)
- 函数参数为编号,书名,价格,简介四个参数
- 返回是否添加成功的结果
- 要求编号不可重复。
-
实现通过编号修改图书信息函数(modifyBookByID)
- 参数为图书ID
- 如果图书存在,则进行修改,不存在输出提示
- 返回是否修改成功
-
实现通过图书ID删除图书函数(deleteBookByID)
- 参数为图书ID
- 如果图书存在,则进行删除,不存在输出提示,并返回是否删除成功
-
实现通过书名删除图书函数(deleteBookByName)
- 参数为书名
- 如果图书存在,则进行删除(同名图书全部删除),不存在输出提示
- 返回是否删除成功
-
实现通过图书ID查询图书函数(queryBookByID)
- 参数为图书ID
- 如果图书存在,则输出图书信息,不存在输出提示
- 返回是否查询成功
-
实现通过书名查询图书函数(queryBookByName)
- 参数为书名
- 如果图书存在,则输出图书信息(同名图书全部输出),不存在输出提示
- 返回是否删除成功
-
实现显示所有图书信息函数(showAllInfo)
- 输出所有图书信息
-
实现数据存储函数(save_data)
- 在退出系统时,将数据保存到
db.txt
文件中 - 数据保存格式自定义
- 在退出系统时,将数据保存到
-
实现数据加载函数(load_data)
- 如果数据文件
db.txt
存在,则从文件中加载数据 - 如果文件不存在则初始为空
- 如果数据文件
功能实现
import os
# 定义一个全局变量,用来保存图书的信息,方法各个函数之间进行访问
books = []
# 菜单函数
def menu():
print("****************************************")
print("* 图书管理系统 *")
print("* 1. 添加新图书信息 *")
print("* 2. 通过图书ID修改图书信息 *")
print("* 3. 通过图书ID删除图书信息 *")
print("* 4. 通过书名删除图书信息 *")
print("* 5. 通过图书ID查询图书信息 *")
print("* 6. 通过书名查询图书信息 *")
print("* 7. 显示所有图书信息 *")
print("* 8. 退出系统 *")
print("****************************************")
select_op = input("输入编号选择操作:")
return select_op
# 加载文件
def load_data():
if os.path.exists("db.txt"):
with open("db.txt", "r") as f:
content = f.read()
content = content.split("\n")
content.remove("")
for item in content:
book = {}
print(item)
item = item.split("-")
book["sid"] = item[0]
book["name"] = item[1]
book["price"] = item[2]
book["summary"] = item[3]
books.append(book)
# 保存文件
def save_data():
with open("db.txt", 'w') as f:
for item in books:
bookStr = ""
print(item)
for v in item.values():
bookStr += str(v) + "-"
f.write(bookStr[:-1] + '\n')
# 获取图书ID
def getSid():
sid = input("请输入图书ID:")
return sid
# 获取书名
def getName():
name = input("请输入图书书名:")
return name
# 获取价格
def getPrice():
while True:
price = input("请输入图书价格:")
if price.isdigit():
return int(price)
else:
print("输入价格不合法,请输入数字")
# 获取简介
def getSummary():
summary = input("请输入图书简介:")
return summary
# 添加图书
def addBook(sid, name, price, summary):
for s in books:
if s["sid"] == sid:
print("图书ID已存在,添加失败")
return "添加失败"
else:
book = {"sid": sid, "name": name, "price": price, "summary": summary}
books.append(book)
print("添加图书信息成功")
return '添加成功'
# 通过图书ID修改图书信息
def modifyBookByID(sid):
for s in books:
if s["sid"] == sid:
name = getName()
price = getPrice()
summary = getSummary()
s["name"] = name
s["price"] = price
s["summary"] = summary
print("修改成功")
return "修改成功"
else:
print(f'没有 {sid} 对应的图书信息')
return "修改失败"
# 通过ID删除图书信息
def deleteBookByID(sid):
for s in books:
if s["sid"] == sid:
books.remove(s)
print("删除成功")
return "删除成功"
else:
print(f'没有 {sid} 对应的图书信息')
return "删除失败"
# 通过图书书名 删除所有符合的图书
def deleteBookByName(name):
exist_s = []
# 找出所有要删除的图书
for s in books:
if s['name'] == name:
exist_s.append(s)
# 开始删除
if len(exist_s) > 0:
for s in exist_s:
books.remove(s)
print(f"图书ID { s['sid'] } 的图书删除成功")
else:
print(f"成功删除 {len(exist_s)} 个图书")
return "删除成功"
else:
print("图书ID不存在,无法删除")
return "删除失败"
# 通过图书ID查询图书信息
def queryBookByID(sid):
for s in books:
if s["sid"] == sid:
print(f"图书ID {sid} 的图书信息如下:")
print(s)
return "查询成功"
else:
print(f"图书ID {sid} 的图书不存在")
return "查询失败"
# 通过书名查询图书信息
def queryBookByName(name):
result = []
for s in books:
if s["name"] == name:
result.append(s)
if len(result) > 0:
print(f"书名为 {name} 的图书共 {len(result)} 名,信息如下:")
for s in result:
print(s)
return "查询成功"
else:
print(f"书名为 {name} 的图书不存在")
return "查询失败"
# 显示所有图书信息
def show():
print("所有图书信息如下:")
for s in books:
print(s)
# 管理函数
def bookManager():
load_data()
while True:
select_op = menu()
if len(select_op) == 1 and select_op in "12345678":
if select_op == "1":
sid = getSid()
name = getName()
price = getPrice()
summary = getSummary()
addBook(sid, name, price, summary)
elif select_op =="2":
sid = getSid()
modifyBookByID(sid)
elif select_op =="3":
sid = getSid()
deleteBookByID(sid)
elif select_op =="4":
name = getName()
deleteBookByName(name)
elif select_op =="5":
sid = getSid()
queryBookByID(sid)
elif select_op =="6":
name = getName()
queryBookByName(name)
elif select_op =="7":
show()
else:
save_data()
break
else:
print("输入的数据不合法,请输入在合法范围内的操作编号!!!")
# 程序入口
if __name__ == '__main__':
bookManager()