IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

16. diel - Diár s databázou v Jave - Metódy diára, výnimky a final

V minulej lekcii, Diár s databázou v Jave - Záznam, databáza a diár , sme rozpracovali jednoduchý diár s databázou pomocou kolekcie ArrayList.

V dnešnom tutoriáli aplikáciu dokončíme.

Trieda Diar

Do triedy Diar pridajme dve pomocné metódy naparsujDatumCas() a naparsujDatum(), ktoré vyzvú používateľa na zadanie dátumu (a prípadne času) a vráti inštanciu LocalDateTime nastavenú na túto hodnotu. Najprv si metódy ukážme, čoskoro si ich popíšeme:

Pridáme ešte potrebné importy:

Ako prvá vás bodne do oka najskôr neznáme bloky try a catch. Názov pre tieto bloky sú výnimky, v tejto lekcii ich rozoberať nebudeme, preberajú sa kompletne až v kurze o súboroch. Pre nás je momentálne iba dôležité vedieť, že zachytí kritickú chybu a celá aplikácia vďaka tomu nespadne. Pokiaľ teda triedy LocalDateTime alebo LocalDate nedokážu naparzovať vstup od užívateľa (tzn. že zadal chybný formát dátumu a času), vypíšeme hlášku, že nebol dátum správne zadaný. Keďže máme tieto bloky v nekonečnom cykle while, bude sa to opakovať do doby, kým používateľ nezadá správny formát dátumu.

Obe metódy formátujú dátum známou metódou format(), konštanty FORMAT_DATA a FORMAT_DATA_BEZ_CASU si o chvíľu deklarujeme. Metóda naparsujDatum() by bez času vracalo nechcený typ LocalDate, vďaka tomu zavoláme v return metódu atStartOfDay() aby sme vrátili inštanciu triedy LocalDateTime.

Pomocou metódy naparsujDatumCas() budeme teda zadávať dátum a čas, pomocou metódy naparsujDatum() budeme zadávať iba dátum. Druhá metóda bude slúžiť na vyhľadávanie záznamov v určitý deň, pretože určite nebudeme chcieť odstrániť záznamy v danú hodinu a minútu, ale záznamy v daný deň bez určenia času.

Konštanty

Do triedy si pridáme už spomínané verejné, statické a finálne konštanty. Budú to formattery dátumu a času. Kľúčové slovo final si vysvetlíme za chvíľu, statické a verejné atribúty to sú preto, aby boli použiteľné aj pre ďalšie triedy v našej aplikácii bez vytvorenia inštancie. Každá trieda môže používať tieto formattery, ktoré máme definované na jednom mieste:

Pridáme si ďalší potrebný import:

Kľúčové slovo final

Toto kľúčové slovo sa môže deklarovať na premenné, atribútu, metódy alebo aj triedy.

Na premennej alebo atribúte

Kľúčové slovo final na atribúte/premennej zamedzí tomu, aby sa daný atribút/premenná mohla naďalej meniť, bude teda konštantná (vždy rovnaká). Hodnota do premennej/atribútu sa nemusí ihneď po deklarácii priradiť, ale pokojne až v priebehu. Má to však aj malý háčik, pokiaľ deklarujeme napríklad:

Do atribútu clovek už nebudeme môcť priradiť nového človeka, budeme však môcť stále meniť jeho atribúty, napríklad clovek.vek = 18. Atribút teda nie je v tomto prípade kompletne nemenný. Aby nebolo možné zmeniť aj vek inštancie clovek, museli by sme pridať kľúčové slovo final i atribútu vek v triede Clovek.

Na triede

Finálna trieda sa už nemôže zmeniť a nemôže sa z nej ani dediť.

Na metódach

Finálne metódy nemôžu byť prepísané (@Override) alebo skryté potomkom.

Súbor Zaznam.java

Jeden formatter obsahuje dátum aj čas, jeden iba dátum bez času. Prejdime do triedy Zaznam.java a metódu toString() pozmeňme takto:

Keby sme si robili inštanciu formatteru znova v každom zázname, bolo by to nepraktické. Takto máme formattery na jednom mieste a keď sa rozhodneme formát zmeniť, zmeníme ho len v triede Diar. So statikou ale opatrne, nie vždy ju je vhodné použiť.

Súbor Diar.java

Presunieme sa späť do súboru Diar.java, kde si pridáme ďalšie metódy.

Metóda vypisZaznamy()

Pridajme metódu vypisZaznamy(), ktorá nájde záznamy v daný deň a vypíše ich:

Pridáme ďalší import:

Metóda pridejZaznam()

Metóda pre vyzvanie užívateľa na vloženie parametrov nového záznamu a jeho pridanie do databázy bude nasledujúca:

Metóda vyhledejZaznamy()

Zostáva záznamy vyhľadávať a mazať. Metóda na vyhľadanie vráti kolekciu ArrayList s nájdenými záznamami (len podľa dátumu, presný čas nebude hrať rolu). Vyzveme užívateľa na zadanie dátumu a to odovzdáme databáze. Výsledok zobrazíme:

Metóda vymazZaznamy()

Mazanie záznamov je triviálne:

Metóda vypisUvodniObrazovku()

Ako posledný pridajme metódu na vypísanie úvodnej obrazovky programu s aktuálnym dátumom a časom a udalosťami na dnešok a zajtrajšok.

Súbor Poznamkovac.java

Môžeme víťazoslávne prejsť do hlavného súboru Poznamkovac.java a vytvoriť inštanciu diára. Tu umiestnime aj hlavný cyklus programu s menu programu a reakciou na voľbu užívateľa. Je to tá najvyššia vrstva programu:

Kód vyššie nie je zložitý a už sme tu podobný mali veľakrát. Nezabudneme pridať ešte import pre Scanner:

Výslednú aplikáciu som na vyskúšanie požičal priateľke, nižšie vidíme výsledok 🙂:

Týmto sme si kolekciu ArrayList osvojili a bude nám pomerne dlho stačiť. Na záver by som dodal, že takto si môžete urobiť databázu čohokoľvek. Môžete použiť napr. triedu Student z lekcie Gettery a settery v Jave alebo ktorúkoľvek inú triedu. Môžete ukladať články, úlohy, slony, čokoľvek, čo chcete v databáze spravovať. A čo ďalej?

V budúcej lekcii, Rozhranie (interface) v Jave , si vysvetlíme, čo je to rozhranie.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 1254x (25.87 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Diár s databázou v Jave - Záznam, databáza a diár
Všetky články v sekcii
Objektovo orientované programovanie v Jave
Preskočiť článok
(neodporúčame)
Rozhranie (interface) v Jave
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
1 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity