Project

General

Profile

question_answer #16004

Updated by UserName LastName 11 months ago

"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" 

Back