记录此次练习。
题目描述
场景描述:
设计一个图书管理系统的简化版本,该系统需要管理图书的库存、借阅和归还。图书信息包括书名和作者,库存量记录在字典中,借阅和归还操作则使用队列和栈来实现(为了演示不同集合的用法,尽管在实际应用中可能不是最佳选择)。
要求:
- 使用
Dictionary<string, (string Author, int Quantity)>
来存储图书信息,其中键是书名,值是一个包含作者和库存量的元组。 - 允许用户通过控制台输入添加新书到系统(包括书名、作者和初始库存量)。
- 借阅图书时,如果库存量大于0,则减少库存量,并将书名添加到
Queue<string>
中,表示借阅记录(这里用队列模拟借阅顺序)。 - 归还图书时,从
Queue<string>
中移除对应的书名,并增加相应图书的库存量。 - 提供一个功能来显示当前所有图书的库存情况。
示例输出:
添加新书:《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}");
}
}
}