U392741 图书馆管理系统
题目描述
小张是图书馆的管理员,负责管理图书馆的图书。每本书有一个唯一的编号和相关的信息。小张需要一个程序来帮助他管理这些图书。
小张的编程能力很差,所以他拜托你来设计一个程序来管理图书馆的图书。他给定的每本书包含以下信息:书名、作者、编号(唯一)和借阅状态。程序需要实现以下功能:
1. 添加新书。
2. 根据编号查询书籍。
3. 借出和归还书籍。
输入格式
第一行输入一个整数 $N$,表示接下来的操作数。
接下来的 $N$ 行,每行一个操作,操作类型有:
`ADD `:添加一本新书。
`QUERY `:查询一本书的信息。
`BORROW `:借出一本书。
`RETURN `:归还一本书。
输出格式
对于每次 `QUERY` 操作,输出书籍的完整信息,信息按照书名、作者、编号、状态的顺序输出。
若书籍不存在,“状态”应为 `NotFound`;
若操作无效,“状态”应为 `Invalid`;
若书籍不可用(即被借出未归还),“状态”应为 `Borrowed`;
若书籍可用,“状态”应为 `Available`。
其中对于“操作无效”的解释为:小张输入图书数据的时候粗心大意,使用命令 `ADD` 时漏填了某项或多项元素,并且由于程序设计的局限性,当小张填入的数据中有某项输入不合法,**在这项操作后的所有操作都将被弃置**,只输出一行 `Invalid`。(在本题中,我们目前**考虑且只考虑这种情况**。)
说明/提示
### 样例解释 #1
第一个操作 `ADD HarryPotter JKRowling 1001`:添加一本书名为 "HarryPotter"、作者为 "JKRowling"、编号为 $1001$ 的书。这个操作成功执行。
第二个操作 `QUERY 1001`:查询编号为 $1001$ 的书籍。系统找到这本书,并输出其信息(书名、作者、编号)以及当前状态 Available,因为这本书刚被添加进系统,还未被借出。
第三个操作 `BORROW 1001`:借出编号为 $1001$ 的书籍。系统更改了这本书的状态为 Borrowed,因此当这本书被借出时,它不再可用。
第四个操作 `QUERY 1001`:再次查询编号为 $1001$ 的书籍。这时,系统显示这本书的状态为 Borrowed,因为它目前已被借出。
第五个操作 `RETURN 1001`:归还编号为 $1001$ 的书籍。尽管程序执行了这一操作,并且书籍的状态应当变更为 Available,但是 `QUERY` 操作并未在此操作后进行,所以这一操作的结果并未显示在输出中。
### 样例解释 #2
第一个操作 `ADD HarryPotter JKRowling 1001`:这是一个有效的添加操作。一本书名为 "HarryPotter"、作者为 "JKRowling"、编号为 $1001$ 的书被成功添加到系统中。
第二个操作 `QUERY 1001`:查询编号为 $1001$ 的书籍。因为这本书存在于系统中,所以本操作有效。。
第三个操作 `BORROW 1001`:借出编号为 $1001$ 的书籍。因为这本书存在且可用,所以本操作有效。。
第四个操作 `QUERY 1001`:再次查询编号为 $1001$ 的书籍。本操作有效,并返回书已被借出 Borrowed。
第五个操作 `ADD TheHobbit 1002`:这是一个添加操作,但因为在书名 "TheHobbit" 之后漏掉了作者的名字,所以这是一个无效的操作。根据题目要求,遇到无效的操作时程序应输出 `Invalid` 并终止运行。因此,程序在这里输出 `Invalid` 并停止执行,后续操作不再进行。
第六个操作 `RETURN 1001`:归还编号为 $1001$ 的书籍。然而,由于程序在第五个操作时已经终止,所以这个操作没有被执行。
### 样例解释 #3
第一个操作 `ADD Test Zemu 1003`:这是一个有效的添加操作。一本书名为 "Test"、作者为 "Zemu"、编号为 $1003$ 的书被成功添加到系统中。
第二个操作 `QUERY 1145`:查询编号为 $1145$ 的书籍。因为这本书不存在于系统中,所以本操作无效,程序在这一步返回 `NotFound`。
### 数据范围
对于 $100\%$ 的数据,$1 \le N \le 20$,总字符串长度 $\le 50$。书名和作者名中字符 ASCII 码不会大于 $126$。保证每次输入都会有 `QUERY` 命令执行。