20240523-测开29/全栈8-Python编程语言作业

项目要求

功能拆解

  1. 图书信息包含:

    • 编号(sid), 书名(name), 价格(price), 简介(summary) 四个信息
    • 每个图书信息使用字典形式保存
    • 使用列表保存所有图书的信息
  2. 实现菜单函数(menu),输出下列信息,返回用户输入的编号

    print("*****************************")
    print("*      图书管理系统           *")
    print("* 1. 添加新图书信息           *")
    print("* 2. 通过图书ID修改图书信息      *")
    print("* 3. 通过图书ID删除图书信息      *")
    print("* 4. 通过书名删除图书信息      *")
    print("* 5. 通过图书ID查询图书信息      *")
    print("* 6. 通过书名查询图书信息      *")
    print("* 7. 显示所有图书信息         *")
    print("* 8. 退出系统                *")
    print("*****************************")
    
  3. 定义管理函数 (bookManager),用来实现整体业务逻辑。

    • 对用户输入内容进行输入校验
    • 根据用户输入内容选择不同功能执行
  4. 因程序中需要多次对编号及书名进行输入,故抽取函数获取对应的数据。

    • 获取编号函数(getID), 输入编号并返回(字符串类型)eg. s01
    • 获取书名函数(getName), 输入书名并返回(字符串类型)
    • 获取书名函数(getPrice), 输入价格并返回(整型)
    • 获取书名函数(getSummary), 输入简介并返回(字符串类型)
  5. 实现添加图书函数(addBook)

    • 函数参数为编号,书名,价格,简介四个参数
    • 返回是否添加成功的结果
    • 要求编号不可重复。
  6. 实现通过编号修改图书信息函数(modifyBookByID)

    • 参数为图书ID
    • 如果图书存在,则进行修改,不存在输出提示
    • 返回是否修改成功
  7. 实现通过图书ID删除图书函数(deleteBookByID)

    • 参数为图书ID
    • 如果图书存在,则进行删除,不存在输出提示,并返回是否删除成功
  8. 实现通过书名删除图书函数(deleteBookByName)

    • 参数为书名
    • 如果图书存在,则进行删除(同名图书全部删除),不存在输出提示
    • 返回是否删除成功
  9. 实现通过图书ID查询图书函数(queryBookByID)

    • 参数为图书ID
    • 如果图书存在,则输出图书信息,不存在输出提示
    • 返回是否查询成功
  10. 实现通过书名查询图书函数(queryBookByName)

  • 参数为书名
  • 如果图书存在,则输出图书信息(同名图书全部输出),不存在输出提示
  • 返回是否删除成功
  1. 实现显示所有图书信息函数(showAllInfo)

    • 输出所有图书信息
  2. 实现数据存储函数(save_data)

    • 在退出系统时,将数据保存到 db.txt 文件中
    • 数据保存格式自定义
  3. 实现数据加载函数(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()