question_answer #16004
open64031c58-7
0%
"import os\nimport yaml\n\n\n# 定义一个图书类\nclass Book:\n\n def __init__(self, bid,\
\ name, price, summary):\n # 图书 id\n self.bid = bid\n # 书名\n\
\ self.name = name\n # 图书价格\n self.price = price\n #\
\ 图书简介\n self.summary = summary\n\n # 重写对象的显示格式方法\n def __str__(self):\n\
\ return f\"BID: {self.bid} --- Name: {self.name} --- Price: {self.price}\
\ --- Summary: {self.summary}\"\n\n\n# 封装管理类\nclass BookManagement:\n\n def __init__(self):\n\
\ # 定义一个全局变量,用来保存图书的信息,方法各个方法之间进行访问\n self.books = []\n # 从文件中加载图书数据\n\
\ self.load_data()\n\n # 菜单方法\n def __menu(self):\n '''\n \
\ 菜单函数:展示图书管理系统菜单信息,并获取用户输入\n :return: 用户输入的编号字符串\n '''\n \
\ print(\"****************************************\")\n print(\"* \
\ 图书管理系统 *\")\n print(\"* 1. 添加新图书信息 \
\ *\")\n print(\"* 2. 通过图书编号修改图书信息 *\")\n \
\ print(\"* 3. 通过图书编号删除图书信息 *\")\n print(\"* 4. 通过图书名称删除图书信息\
\ *\")\n print(\"* 5. 通过图书编号查询图书信息 *\")\n print(\"\
* 6. 通过图书名称查询图书信息 *\")\n print(\"* 7. 显示所有图书信息 \
\ *\")\n print(\"* 8. 退出系统 *\")\n \
\ print(\"****************************************\")\n select_op = input(\"\
输入编号选择操作:\")\n return select_op\n\n def __get_bid(self):\n '''\n\
\ 获取用户输入的图书编号\n :return: 返回图书编号字符串\n '''\n bid = input(\"\
请输入图书ID:\")\n return bid\n\n def __get_name(self):\n '''\n \
\ 获取用户输入的图书名称\n :return: 返回图书名称字符串\n '''\n name = input(\"\
请输入图书名称:\")\n return name\n\n def __get_price(self):\n '''\n \
\ 获取用户输入的图书价格\n :return: 返回图书价格字符串\n '''\n while True:\n\
\ price = input(\"请输入图书价格:\")\n if price.isdigit():\n \
\ return int(price)\n else:\n print(\"输入价格不合法,请输入数字\"\
)\n\n def __get_summary(self):\n '''\n 获取用户输入的图书简介\n :return:\
\ 返回图书简介字符串\n '''\n summary = input(\"请输入图书简介:\")\n return\
\ summary\n\n def add_book(self, bid, name, price, summary):\n '''\n \
\ 添加图书\n :param bid: 图书 id\n :param name: 图书名称\n :param\
\ price: 图书价格\n :param summary: 图书简介\n :return: 操作提示信息\n '''\n\
\ for s in self.books:\n if s.bid == bid:\n print(\"\
图书编号已存在,添加失败\")\n return \"添加失败\"\n else:\n book\
\ = Book(bid, name, price, summary)\n self.books.append(book)\n \
\ print(\"添加图书信息成功\")\n return '添加成功'\n\n def modify_book_by_id(self,\
\ bid, name, price, summary):\n '''\n 通过图书编号修改图书信息\n :param\
\ bid: 图书 id\n :param name: 图书名称\n :param price: 图书价格\n :param\
\ summary: 图书简介\n :return: 操作提示信息\n '''\n for s in self.books:\n\
\ if s.bid == bid:\n s.name = name\n s.price\
\ = price\n s.summary = summary\n print(\"修改成功\")\n\
\ return \"修改成功\"\n else:\n print(f'没有 {bid} 对应的图书信息')\n\
\ return \"修改失败\"\n\n def delete_book_by_id(self, bid):\n '''\n\
\ 通过ID删除图书信息\n :param bid: 图书 id\n :return: 操作提示信息\n \
\ '''\n for s in self.books:\n if s.bid == bid:\n \
\ self.books.remove(s)\n print(\"删除成功\")\n return\
\ \"删除成功\"\n else:\n print(f'没有 {bid} 对应的图书信息')\n return\
\ \"删除失败\"\n\n def delete_book_by_name(self, name):\n '''\n 通过图书名称\
\ 删除所有符合的图书\n :param name: 图书名称\n :return: 操作提示信息\n '''\n \
\ exist_b = []\n # 找出所有要删除的图书\n for b in self.books:\n \
\ if b.name == name:\n exist_b.append(b)\n\n # 开始删除\n\
\ if len(exist_b) > 0:\n for b in exist_b:\n self.books.remove(b)\n\
\ print(f\"名称为 { name } 的图书删除成功\")\n else:\n \
\ print(f\"成功删除 {len(exist_b)} 个图书\")\n return \"删除成功\"\n \
\ else:\n print(f\"图书【{name}】不存在,无法删除\")\n return \"\
删除失败\"\n\n def query_book_by_id(self, bid):\n '''\n 通过图书编号查询图书信息\n\
\ :param bid: 图书 id\n :return: 操作提示信息\n '''\n for b\
\ in self.books:\n if b.bid == bid:\n print(f\"图书编号 {bid}\
\ 的图书信息如下:\")\n print(f\"图书编号:{b.bid},书名:{b.name},价格:{b.price},简介:{b.summary}\"\
)\n return \"查询成功\"\n else:\n print(f\"图书编号 {bid}\
\ 的图书不存在\")\n return \"查询失败\"\n\n def query_book_by_name(self, name):\n\
\ '''\n 通过名称查询图书信息\n :param name: 图书名称\n :return: 操作提示信息\n\
\ '''\n exist_b = []\n for b in self.books:\n if\
\ b.name == name:\n exist_b.append(b)\n\n if len(exist_b)\
\ > 0:\n print(f\"名称为 {name} 的图书共 {len(exist_b)} 名,信息如下:\")\n \
\ for b in exist_b:\n print(f\"图书编号:{b.bid},书名:{b.name},价格:{b.price},简介:{b.summary}\"\
)\n return \"查询成功\"\n else:\n print(f\"名称为 {name} 的图书不存在\"\
)\n return \"查询失败\"\n\n def show(self):\n '''\n 显示所有图书信息\n\
\ '''\n print(\"所有图书信息如下:\")\n for b in self.books:\n \
\ print(f\"图书编号:{b.bid},书名:{b.name},价格:{b.price},简介:{b.summary}\")\n\n \
\ # 加载文件\n def load_data(self):\n '''\n 从 yaml 文件中加载图书数据\n \
\ :return:\n '''\n # 判断文件是否存在\n if os.path.exists(\"book_data.yaml\"\
):\n with open(\"book_data.yaml\", \"r\", encoding=\"utf-8\") as f:\n\
\ books = yaml.safe_load(f)\n # 图书对象列表\n books_list\
\ = []\n if books:\n for book in books:\n \
\ bid = book.get(\"bid\")\n name = book.get(\"name\")\n\
\ price = book.get(\"price\")\n summary =\
\ book.get(\"summary\")\n b = Book(bid, name, price, summary)\n\
\ books_list.append(b)\n self.books = books_list\n\
\ print(\"数据从文件中加载完毕!!\")\n else:\n print(\"\
文件为空!!请先向系统中添加图书信息!\")\n else:\n print(\"未找到数据文件!请先向系统添加图书信息!\"\
)\n\n # 保存文件\n def save_data(self):\n '''\n 把图书数据存入 yaml 文件中\n\
\ :return:\n '''\n books_list = []\n for book in self.books:\n\
\ b = {\n \"bid\": book.bid,\n \"name\"\
: book.name,\n \"price\": book.price,\n \"summary\"\
: book.summary\n }\n books_list.append(b)\n with open(\"\
book_data.yaml\", \"w\", encoding=\"utf-8\") as f:\n yaml.safe_dump(books_list,\
\ f)\n print(\"将数据写入文件,保存完毕!!\")\n\n # 管理方法\n def manager(self):\n\
\ while True:\n select_op = self.__menu()\n if len(select_op)\
\ == 1 and select_op in \"12345678\":\n if select_op == \"1\":\n\
\ bid = self.__get_bid()\n name = self.__get_name()\n\
\ price = self.__get_price()\n summary = self.__get_summary()\n\
\ self.add_book(bid, name, price, summary)\n elif\
\ select_op == \"2\":\n bid = self.__get_bid()\n \
\ name = self.__get_name()\n price = self.__get_price()\n\
\ summary = self.__get_summary()\n self.modify_book_by_id(bid,\
\ name, price, summary)\n elif select_op == \"3\":\n \
\ bid = self.__get_bid()\n self.delete_book_by_id(bid)\n\
\ elif select_op == \"4\":\n name = self.__get_name()\n\
\ self.delete_book_by_name(name)\n elif select_op\
\ == \"5\":\n bid = self.__get_bid()\n self.query_book_by_id(bid)\n\
\ elif select_op == \"6\":\n name = self.__get_name()\n\
\ self.query_book_by_name(name)\n elif select_op\
\ == \"7\":\n self.show()\n else:\n \
\ self.save_data()\n break\n else:\n \
\ print(\"输入的数据不合法,请输入在合法范围内的操作编号!!!\")\n\n\n# 程序入口\nif __name__ == '__main__':\n\
\ bm = BookManagement()\n bm.manager()\n"