package cz.muni.fi.ib053.bad; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; public class main { public static class Struktura implements Comparable { public String author; public String nazev; public String nakladatelstvi; public int yearVydani; public int pocetListu; public int thisIsNumberOfTheBook; @Override public int compareTo(Struktura o) { return yearVydani - o.yearVydani; } } static Scanner keyb = new Scanner(System.in); // tato funkce načte z klavesnice, čímž se teda jako myslí ze standardního vstupu, což je ale teda většinou klávesnice // protože co jiného by to teda jako bylo a tady ta funkce načte teda jako nějakej řetětec a vrátí ho. Ona to vlastně // není funkce, ale je to metoda ve třídě. Ale je statická, no tak to je slovíčkaření. Zítra bude výplata, doufám // že budou prémie, protože se prý něco fakturovalo zákazníkům, tak by šéf mohl něco pustit, když už tady sedím // a nemám home office zatímco on si v pracovní době vyřizuje soukromé věci public static void pis(String what) { System.out.print(what); } // tiskne nový řádek public static void nl() { System.out.println(); } public static void pisBook(Struktura book) { pis("Číslo knihy: " + book.thisIsNumberOfTheBook); nl(); pis("Autor: " + book.author); nl(); pis("Název: " + book.nazev); nl(); pis("Vydavatelství: " + book.nakladatelstvi); nl(); pis("Rok vydání: " + book.yearVydani); nl(); pis("Počet stran: " + book.pocetListu); nl(); nl(); } // vypíšeme nějaký prompt a počkáme na vstup public static String Cti(String prompt) { pis(prompt); return keyb.nextLine(); } public static int ctiInt(String prompt) { while (true) { String promenna = Cti(prompt); try { return Integer.parseInt(promenna); } catch(NumberFormatException ex) { pis("Musíš zadat číslo"); nl(); } finally { } } } public static void main(String[] args) { Map books = new HashMap<>(); while (true) { pis("1. přidání nové knihy"); nl(); pis("2. vyhledání a vypsání knih podle názvu"); nl(); pis("3. vyhledání a vypsání knih podle autora"); nl(); pis("4. smazání knihy"); nl(); pis("5. ukončení programu");nl(); nl(); int volba = ctiInt("Vase volba: "); switch(volba) { case 1: Struktura NovyBook = new Struktura(); boolean existuje; do { NovyBook.thisIsNumberOfTheBook = ctiInt("Číslo knihy: "); existuje = books.containsKey(NovyBook.thisIsNumberOfTheBook); if (existuje) { // pokud existuje je true pis("Kniha s tímto číslem již existuje."); nl(); } } while (existuje); NovyBook.author = Cti("Autor: "); NovyBook.nazev = Cti("Název: "); NovyBook.nakladatelstvi = Cti("Vydavatelství: "); NovyBook.yearVydani = ctiInt("Rok vydání: "); NovyBook.pocetListu = ctiInt("Počet stran: "); books.put(NovyBook.thisIsNumberOfTheBook, NovyBook); break; case 2: String nazev = Cti("Zadej název: "); List v = new ArrayList<>(); for (Entry bookEntry : books.entrySet()) { if (bookEntry.getValue().nazev.startsWith(nazev)) { v.add(bookEntry.getValue()); } } Collections.sort(v); for (Struktura book : v) { pisBook(book); } break; case 3: int a; String autor = Cti("Zadej autora: "); v = new ArrayList<>(); for (Entry bookEntry : books.entrySet()) { if (bookEntry.getValue().author.startsWith(autor) == true) { a= 0; v.add(bookEntry.getValue()); } } Collections.sort(v); for (Struktura book : v) { a++; pisBook(book); } break; case 5: pis("Díky za užití tohoto programu"); nl(); return; case 4: int cisloKnihy = ctiInt("Zadej číslo knihy ke smazání: "); if (books.containsKey(cisloKnihy)) { pis("Kniha nenalezena!"); nl(); break; } Struktura book = books.get(cisloKnihy); books.remove(cisloKnihy); pis("Kniha " + book.nazev + " od " + book.author + " smazána"); } nl(); } } }