简单的图书管理系统(C#练习集合相关API结合元组)

记录此次练习。

题目描述

场景描述
设计一个图书管理系统的简化版本,该系统需要管理图书的库存、借阅和归还。图书信息包括书名和作者,库存量记录在字典中,借阅和归还操作则使用队列和栈来实现(为了演示不同集合的用法,尽管在实际应用中可能不是最佳选择)。

要求

  1. 使用Dictionary<string, (string Author, int Quantity)>来存储图书信息,其中键是书名,值是一个包含作者和库存量的元组。
  2. 允许用户通过控制台输入添加新书到系统(包括书名、作者和初始库存量)。
  3. 借阅图书时,如果库存量大于0,则减少库存量,并将书名添加到Queue<string>中,表示借阅记录(这里用队列模拟借阅顺序)。
  4. 归还图书时,从Queue<string>中移除对应的书名,并增加相应图书的库存量。
  5. 提供一个功能来显示当前所有图书的库存情况。

示例输出

添加新书:《C#编程指南》,作者:张三,库存量:10
借阅图书:《C#编程指南》
归还图书:《C#编程指南》
当前库存情况:
《C#编程指南》:作者=张三,库存量=9

代码

   class Program
  {
      static Dictionary<string, (string Author, int Quantity)> bookInfo = new Dictionary<string, (string Author, int Quantity)>();
      static Queue<string> bookRecord = new Queue<string>();
      static void Main(string[] args)
      {
          while (true)
          {
              Console.WriteLine("图书管理");
              Console.WriteLine("1.添加书籍");
              Console.WriteLine("2.借阅书籍");
              Console.WriteLine("3.归还书籍");
              Console.WriteLine("4.退出");
              int choice = int.Parse(Console.ReadLine());
              if (choice == 1) { Add(); }
              else if (choice == 2) { Brower(); }
              else if (choice == 3) { Return(); }
              else if (choice == 4) { break; }
          }
      }
      static void Add()
      {
          Console.WriteLine("请输入书名");
          string? bookName = Console.ReadLine().Trim() ?? "未知";
          Console.WriteLine("请输入作者");
          string? author = Console.ReadLine().Trim() ?? "未知";
          Console.WriteLine("请输入库存");
          int num = int.Parse(Console.ReadLine());
          bookInfo.Add(bookName, (author, num));
          foreach (KeyValuePair<string, (string Author, int Quantity)> kvp in bookInfo)
          {
              Console.WriteLine($"添加图书:《{kvp.Key}》, 作者:{kvp.Value.Author}, 库存量:{kvp.Value.Quantity}");
          }
          return;
      }

      static void Brower()
      {
          Console.WriteLine("请选择你要借阅的书籍名:");
          string name = Console.ReadLine().Trim();
          if (bookInfo.TryGetValue(name, out (string Author, int Quantity) book))
          {
              if (book.Quantity > 0) { bookInfo[name] = (book.Author, book.Quantity - 1); Console.WriteLine($"成功借阅《{name}》"); Show(); return; }
              else { Console.WriteLine("没有此书库存"); return; }
          }
          else
          {
              Console.WriteLine("没有这本书");
          }
          /*
             bool found = false; // 用来标记是否找到了书籍
           foreach (var book in bookInfo)
          {
              if (book.Key.Equals(name))
              {
                  found = true;
                  if (book.Value.Quantity > 0)
                  {
                      bookRecord.Enqueue(book.Key);
                      bookInfo[name] = (book.Value.Author, book.Value.Quantity - 1);
                      Console.WriteLine($"成功借阅《{name}》");
                      break;
                  }
                  else { Console.WriteLine("没有此书库存"); break; }
              }
              if (!found)
              {
                  Console.WriteLine("没有这本书");
              }
          }*/
      }

      static void Return()
      {
          Console.WriteLine("请你要归回的书籍");
          if (bookRecord.Count == 0)
          {
              Console.WriteLine("你没有要归还的书籍");
              return;
          }
          string name = Console.ReadLine();
          if (bookInfo.TryGetValue(name, out (string Author, int Quantity) book))
          { 
              bookInfo[name] = (book.Author, book.Quantity - 1); Console.WriteLine("归还成功!"); Show();
              return;
          }
          else
          {
              Console.WriteLine("书籍名错误,请重新输入:");
              Return();
          }
      }

      static void Show()
      {
          foreach (var book in bookInfo)
          {
              Console.WriteLine("当前库存情况:");
              Console.WriteLine($"《{book.Key}》, 作者={book.Value.Author}, 库存={book.Value.Quantity}");
          }
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值