Termín odevzdání | 30.4.2023 23:59 CEST |
---|---|
Možný bodový zisk | až 8b (4+4) |
Počet uploadů | 15 |
Napište program, který bude vykonávat správu jednoduché knihovny. V knihovně se nacházejí dva druhy tiskovin
Journal
name
, volume
, issue
, year
Book
name
, author
, year
Kromě výše zmíněných atributů mají všechny objekty atribut id
, což je číslo odpovídající pořadí tiskoviny při načtení do databáze.
Na standardním vstupu pak může být některý z následujících příkazů:
list
- vypíše seznam všech položek v databázi
find:retezec
- vypíše všechny položky databáze, které obsahují v některém z atributů text retezec
erase:rezezec
- smaže položky databáze, které obsahují v některém z atributů text retezec
, nic nevypisuje
remove:id
- odstraní z databáze položku s číslem id
, nic nevypisuje
Kromě prvního příkazu potřebují všechny ostatní příkazy i argument. Pokud argument chybí, vypíše se na standardní výstup informace v následující podobě (chybějící argument příkazu find
):
+----------------------------------------------------------+ | Command "find" expects some argument | +----------------------------------------------------------+
Pokud je na vstupu neznámý příkaz, vypíše se na standardní výstup upozornění v následujícím tvaru (neznámý příkaz delete
):
+----------------------------------------------------------+ | Unknown command "delete" | +----------------------------------------------------------+
Pokud chce uživatel smazat záznam s ID, které neexistuje, , vypíše se na standardní výstup upozornění v následujícím tvaru:
+----------------------------------------------------------+ | ID = 100 is not in the database | +----------------------------------------------------------+
Výstupem programu je tabulka, která obsahuje záznamy odpovídající aktuálnímu stavu databáze a příkazům na vstupu. Celková šířka tabulky je 60 znaků. Hlavička a patička tabulky využívají celou šířku. Řádky se záznamy obsahují dvě buňky, v první je číslo záznamu (id
), v druhé je ve dvou řádcích formátovaný popis tiskoviny - viz příklady. U časopisů se pro druhý řádek používá formát year
, volume
(issue
).
Položky v databázi je možné řadit podle id
, name
nebo year
a to vzestupně asc
(defaultní řazení) nebo sestupně desc
. Na standardním vstupu lze tedy očekávat některý z následujících příkazů
sort:year:desc
- seřadí sestupně podle roku
sort:name
- seřadí vzestupně podle názvu tiskoviny
Příkaz sort
očekává jako argument řadicí kritérium. Pokud je uvedeno jiné, než je implementováno, vypíše se na standardní výstup následující:
+----------------------------------------------------------+ | Unknown sorting order | +----------------------------------------------------------+
Pokud je hodnota, podle které se porovnává, stejná, rozhoduje ID
záznamu.
Hlavní funkce programu může začínat např. takto:
Database db; db.add(new Journal("IEEE Transaction on Computers", "C-35", "10", "Oct. 1986")); db.add(new Journal("IEEE Transaction on Computers", "C-35", "11", "Dec. 1986")); db.add(new Journal("IEEE Transactions on Communications", "28", "8", "Aug. 1980")); db.add(new Book("Dva roky prazdnin", "Jules Verne", "1888")); db.add(new Book("Tajuplny ostrov", "Jules Verne", "1874")); db.add(new Book("Ocelove mesto", "Jules Verne", "1879"));
Standardní vstup (cin) | Očekávaný výstup (cout) |
---|---|
list remove | +----------------------------------------------------------+ | List of all records | +----+-----------------------------------------------------+ | 1 | IEEE Transaction on Computers | | | 1986, C-35(10) | +----+-----------------------------------------------------+ | 2 | IEEE Transaction on Computers | | | 1986, C-35(11) | +----+-----------------------------------------------------+ | 3 | IEEE Transactions on Communications | | | 1980, 28(8) | +----+-----------------------------------------------------+ | 4 | Dva roky prazdnin | | | 1888, Jules Verne | +----+-----------------------------------------------------+ | 5 | Tajuplny ostrov | | | 1874, Jules Verne | +----+-----------------------------------------------------+ | 6 | Ocelove mesto | | | 1879, Jules Verne | +----+-----------------------------------------------------+ | Total: 6 | +----------------------------------------------------------+ +----------------------------------------------------------+ | Command "remove" expects some argument | +----------------------------------------------------------+ |
Standardní vstup (cin) | Očekávaný výstup (cout) |
---|---|
find:Jules Verne | +----------------------------------------------------------+ | Search for "Jules Verne" | +----+-----------------------------------------------------+ | 4 | Dva roky prazdnin | | | 1888, Jules Verne | +----+-----------------------------------------------------+ | 5 | Tajuplny ostrov | | | 1874, Jules Verne | +----+-----------------------------------------------------+ | 6 | Ocelove mesto | | | 1879, Jules Verne | +----+-----------------------------------------------------+ | Total: 3 | +----------------------------------------------------------+ |
Standardní vstup (cin) | Očekávaný výstup (cout) |
---|---|
delete remove:100 remove:2 remove:4 list | +----------------------------------------------------------+ | Unknown command "delete" | +----------------------------------------------------------+ +----------------------------------------------------------+ | ID = 100 is not in the database | +----------------------------------------------------------+ +----------------------------------------------------------+ | List of all records | +----+-----------------------------------------------------+ | 1 | IEEE Transaction on Computers | | | 1986, C-35(10) | +----+-----------------------------------------------------+ | 3 | IEEE Transactions on Communications | | | 1980, 28(8) | +----+-----------------------------------------------------+ | 5 | Tajuplny ostrov | | | 1874, Jules Verne | +----+-----------------------------------------------------+ | 6 | Ocelove mesto | | | 1879, Jules Verne | +----+-----------------------------------------------------+ | Total: 4 | +----------------------------------------------------------+ |
Standardní vstup (cin) | Očekávaný výstup (cout) |
---|---|
erase:Jules sort:year list | +----------------------------------------------------------+ | List of all records | +----+-----------------------------------------------------+ | 3 | IEEE Transactions on Communications | | | 1980, 28(8) | +----+-----------------------------------------------------+ | 1 | IEEE Transaction on Computers | | | 1986, C-35(10) | +----+-----------------------------------------------------+ | 2 | IEEE Transaction on Computers | | | 1986, C-35(11) | +----+-----------------------------------------------------+ | Total: 3 | +----------------------------------------------------------+ |
sort:name:desc list | +----------------------------------------------------------+ | List of all records | +----+-----------------------------------------------------+ | 5 | Tajuplny ostrov | | | 1874, Jules Verne | +----+-----------------------------------------------------+ | 6 | Ocelove mesto | | | 1879, Jules Verne | +----+-----------------------------------------------------+ | 3 | IEEE Transactions on Communications | | | 1980, 28(8) | +----+-----------------------------------------------------+ | 1 | IEEE Transaction on Computers | | | 1986, C-35(10) | +----+-----------------------------------------------------+ | 2 | IEEE Transaction on Computers | | | 1986, C-35(11) | +----+-----------------------------------------------------+ | 4 | Dva roky prazdnin | | | 1888, Jules Verne | +----+-----------------------------------------------------+ | Total: 6 | +----------------------------------------------------------+ |
Do systému BRUTE odevzdejte zabalený archiv s *.cpp a případně *.hpp soubory s libovolným jménem. Všechny soubory musí být v kořenovém adresáři archivu.
Veřejné příklady + Template: HW03.zip
Povinné i bonusové zadání | |
---|---|
Název v BRUTE | HW03 |
Soubor/y | jakékoliv množství *.cpp/*.hpp souborů |
Argumenty při spuštění | žádné |
Kompilace pomocí | g++ -pedantic -Wall -Werror -std=c++17 |
Procvičované oblasti | dědění a polymorfismus v C++, STL |