NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 18 - Diář s databází v Javě - Metody diáře, výjimky a final

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Will Cooper
Člen
Avatar
Will Cooper:26.7.2018 15:55

Čau, přepsal jsem to tak, aby se místo třídy Calendar používala třída LocalDateTime. Tady je zdroják:

Třída Databaze

import java.time.LocalDateTime;
import java.util.ArrayList;

public class Databaze {

    private ArrayList<Zaznam> zaznamy;

    public Databaze() {
        zaznamy = new ArrayList<>();
    }

    public void pridejZaznam(LocalDateTime datumCas, String text) {
        zaznamy.add(new Zaznam(datumCas, text));
    }

    public ArrayList<Zaznam> najdiZaznamy(LocalDateTime datum, boolean dleCasu) {
        ArrayList<Zaznam> nalezene = new ArrayList<>();
        for(Zaznam z : zaznamy) {
            if((dleCasu && (z.getDatumCas().equals(datum))) // podle data a času
                ||
              ((!dleCasu) && (z.getDatumCas().toLocalDate().equals(datum.toLocalDate())))) { // podle data
                nalezene.add(z);
            }
        }
        return nalezene;
    }

    public void vymazZaznamy(LocalDateTime datum) {
        ArrayList<Zaznam> nalezeno = najdiZaznamy(datum, true);
        for(Zaznam z : nalezeno){
            zaznamy.remove(z);
        }
    }

}

Třída Zaznam

import java.time.LocalDateTime;

public class Zaznam {
    private LocalDateTime datumCas;
    private String text;

    public Zaznam (LocalDateTime datumCas, String text) {
        this.datumCas = datumCas;
        this.text = text;
    }

    public LocalDateTime getDatumCas() {
        return datumCas;
    }

    public void setDatumCas(LocalDateTime datumCas) {
        this.datumCas = datumCas;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    @Override
    public String toString() {
        return datumCas.format(Diar.formatData) + " " + text;
    }

}

Třída Diar

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Scanner;

public class Diar {
    private Databaze databaze;
    private Scanner sc = new Scanner(System.in, "Windows-1250");
    public static DateTimeFormatter formatData = DateTimeFormatter.ofPattern("d.M.y HH:mm");
    public static DateTimeFormatter formatDataBezCasu = DateTimeFormatter.ofPattern("d.M.y");

    public Diar(){
        databaze = new Databaze();
    }

    private LocalDateTime zjistiDatumCas() {
        System.out.println("Zadejte datum a čas ve tvaru [1.1.2013 14:00]:");
        LocalDateTime datumCas;
        try {
            datumCas = LocalDateTime.parse(sc.nextLine(), formatData);
        }
        catch (DateTimeParseException e) {
            System.out.println("Nesprávně zadáno, zadejte prosím znovu");
            return zjistiDatumCas();
        }
        return datumCas;
    }

    private LocalDate zjistiDatum() {
        System.out.println("Zadejte datum ve tvaru [1.1.2013]:");
        LocalDate datum;
        try {
            datum = LocalDate.parse(sc.nextLine(), formatDataBezCasu);
        }
        catch (DateTimeParseException e) {
            System.out.println("Nesprávně zadáno, zadejte prosím znovu");
            return zjistiDatum();
        }
        return datum;
    }

    public void vypisZaznamy(LocalDate den) {
        ArrayList<Zaznam> zaznamy = databaze.najdiZaznamy(den.atStartOfDay(), false);
        for(Zaznam z : zaznamy) {
            System.out.println(z);
        }
    }

    public void pridejZaznam() {
        LocalDateTime datumCas = zjistiDatumCas();
        System.out.println("Zadejte text záznamu:");
        String text = sc.nextLine();
        databaze.pridejZaznam(datumCas, text);
    }

    public void vyhledejZaznamy() {
        // Zadání data uživatelem
        LocalDateTime datumCas = zjistiDatum().atStartOfDay();
        // Vyhledání záznamů
        ArrayList<Zaznam> zaznamy = databaze.najdiZaznamy(datumCas, false);
        // Výpis záznamů
        if (zaznamy.size() > 0) {
            System.out.println("Nalezeny tyto záznamy: ");
            for (Zaznam z : zaznamy) {
                System.out.println(z);
            }
        } else { // Nenalezeno
            System.out.println("Nebyly nalezeny žádné záznamy.");
        }
        sc.nextLine(); // počká na enter
    }

    public void vymazZaznamy() {
        System.out.println("Budou vymazány záznamy v daný den a hodinu");
        LocalDateTime datumCas = zjistiDatumCas();
        databaze.vymazZaznamy(datumCas);
    }

    public void vypisUvodniObrazovku() {
        System.out.println();
        System.out.println();
        System.out.println("Vítejte v diáři!");
        System.out.println("Dnes je: " + LocalDateTime.now().format(formatData));
        System.out.println();
        // výpis domácí obrazovky
        System.out.println("Dnes:\n------");
        vypisZaznamy(LocalDate.now());
        System.out.println();
        System.out.println("Zítra:\n---------");
        vypisZaznamy(LocalDate.now().plusDays(1));
        System.out.println();
    }

}
 
Odpovědět
26.7.2018 15:55
Avatar
Jáchym Zosinčuk:31.10.2018 16:32

Ahoj, mám jeden malý problém se svým diářem. Dělal jsem ho s LocalDateTime, ale neinspiroval jsem se nikde, ani viz výše. Vše funguje jak má, ale nedaří se mi z něj vipsat údaje v pro člověka pochopotelném formátu. Když použiji System.out.prin­tln(z), jako v zdrojáku výše vyskočí mi na řádku toto: diar.vz.pkg2.Zaz­namnik@5e9f23b4 Nějaký tip jak to správně zformátovat?

 
Odpovědět
31.10.2018 16:32
Avatar
Odpovídá na Jáchym Zosinčuk
Petr Štechmüller:31.10.2018 17:01

Ahoj, musíš přepsat metodu toString ve třídě Zaznamnik. Pak už se to bude podle tvých pravidel.

Editováno 31.10.2018 17:01
Odpovědět
31.10.2018 17:01
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jáchym Zosinčuk:2.11.2018 15:53

Děkuju! Na to jsem úplně zapoměl. Program funguje jak má na 100%, díky. Už můžu v noci teď spát. :)

 
Odpovědět
2.11.2018 15:53
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:12.6.2019 15:31

Aktualizováno na nové datetime API.

Odpovědět
12.6.2019 15:31
New kid back on the block with a R.I.P
Avatar
ishei
Člen
Avatar
ishei:25.6.2019 10:34

V clanku je omylem 2x kod metody vypisZaznamy(), podruhe namisto metody s vyzvou pro uzivatele k zadani zaznamu a jeho pridani do DB.

 
Odpovědět
25.6.2019 10:34
Avatar
Odpovídá na ishei
Petr Štechmüller:25.6.2019 10:57

Pravda :-P Opravím to...

Odpovědět
25.6.2019 10:57
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
ishei
Člen
Avatar
Odpovídá na Petr Štechmüller
ishei:25.6.2019 11:51

To je rychlost. Jeste v mainu cast:

case "4":
                System.out.println("Libovolnou klávesou ukončíte program...");
                break;
            default:
                System.out.println("Neplatná volba, stiskněte libovolnou klávesu a opakujte volbu.");
                break;

lehce zavani C#..

 
Odpovědět
25.6.2019 11:51
Avatar
Jindřich Pšeničný:26.4.2020 7:47

kurz je super a baví mě to i bez předchozích zkušeností. Učím se od začátku jednu lekci po druhé. Někdy mám trochu problém to pobrat (hlavně v úlohách, když použijete nějakou konstrukci, která v tutoriálu nebyla), ale jinak logiku metod chápu. V čem mám opravdu problém je dělení projektu do vrstev, resp. kolik tříd vytvořit, jakou hierarchii použít, jaké jim dát metody atd. Je to na úvaze programátora, nebo existují nějaká pravidla ?
Docela mi chybí nějaké vysvětlení jak vůbec k novému projektu přistupovat, jak probíhá příprava a jak se rozhodnout jakou architekturu zvolit. Vím že tu je i seriál o návrhových vzorech, ale v něm se zatím ještě docela ztrácím.

Odpovědět
26.4.2020 7:47
tak trochu jiný svět...
Avatar
ing. SARNOVSKÝ Petr:6.1.2022 17:40

Ahoj,
jen takový postřeh začátečníka:

*V tutoriálech, které považuji za skvělé, přeskakuješ při vytváření metod z jedné třídy na druhou aniž je na to v textu upozorněno. Někdy je to matoucí.

*Stisk libovolné klávesy je navíc :-)

*Místo

Můžeme vítězoslavně přejít do Poznamkovac.java a vytvořit instanci diáře.

Bych viděl: "Můžeme vítězoslavně vytvořit třídu Poznamkovac.ja­va...."

Jinak super, dík
Petr

 
Odpovědět
6.1.2022 17:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 38.