4it101»4IT101 - Král

4IT101 - Král

4IT101 cvičení - cvičící Ing. David Král

letní semestr 2020/2021

Přidělení bodů

druh úkolupočet bodůpoznámka
domácí úkoly305 domácích úkolů po 6 bodech
průběžné testy10jeden programovací test za 10 bodů
semestrální práce - adventura30Pro získání bodů je nutná osobní prezentace v k tomu určených termínech nebo v konzultačních hodinách. Termíny obhajob prací budou vypsány přes InSIS. Termín odevzdání adventury je do termínu Vaší obhajoby.
závěrečný test30bližší informace

Harmonogram průběžných testů:

termínobsahpočet bodůpoznámka
sedmý týden výukytest bude praktické programování, ukázky několika testů jsou uvedeny pod tabulkou10 

Programovací test

- ukázky zadání a další informace zde

Domácí úkoly:

Pravidla pro domácí úkoly

Domácí úkol by měl být samostatnou prací, případně prací dvojice maximálně trojice studentů kurzu. Jméno autora či autorů by vždy mělo být uvedeno v hlavičkách všech tříd, kterou jsou v úkolu upravovány nebo přidávány. V případě spolupráce studentů, je toto vyžadováno, jelikož pokud bude odevzdáno několik shodných úkolů bez uvedení více autorů, budou ohodnoceny jako plagiáty!

Pokud je domácí úkol pokračováním práce za cvičení, musí odevzdaný úkol obsahovat nejen to co je zadáno jako domácí úkol ale i vše, co bylo naprogramováno během cvičení.

Odevzdání
  • soubory projektu včetně adresáře zabalte do archivu .zip,
  • vytvořený archiv zip uložte na insis.vse.cz do příslušné odevzdávárny a to nejpozději před začátkem příštího cvičení (přesná hodina a minuta je vždy uvedena u odevzdávárny, pak se odevzdávarna uzavře a nepřijímám úkoly jinou cestou např. mailem.)
  • zdrojové kódy, které jste v rámci úkolu upravovali či přidali budou "podepsané", tj. v dokumentačním komentáři bude uvedeno jméno studenta (případně studentů, pokud se jedná o úkol vytvořený ve dvojici případně trojici)

První domácí úkol (do pátého cvičení)

Vytvořte 2 nové třídy Ucet a Majitel.

Třída Majitel bude obsahoval fieldy jmeno, prijmeni a rodneCislo. Určení správných typů fieldů je na vás. Ke všem fieldům vytvořte pouze gettery. Všechny zmíněné fieldy budou zadané při vytváření přes konstruktor. Zaroveň definujte metodu toString tak, aby vracela následující formát: "Jan Novák".

Třída Ucet bude obsahovat fieldy cisloUctu, mena (měna je například CZK, EUR atp.), stavUctu a majitel. Určení správných typů fieldů je opět na vás. Ke všem fieldům doplňte gettery, ale settery pouze pro cisloUctu, mena a stavUctu. Pomocí konstruktoru zadejte pouze cisloUctu, menu a majitele. Field stavUctu musi byt 0 po vytvoreni nove instance. Dále upravte metodu toString tak, aby pokud je stavUctu 0, tak aby byl výpis "Na účtu majitele Jan Novák nejsou žádné finanční prostředky.", pokud je stav účtu menší než 0, tak výpis bude "Účet majitele Jan Novák je v záporných číslech." A pokud je zde vloženo více než 0, tak výpis bude "Z účtu majitele Jan Novák je možno čerpat: 123,45 CZK".

Měna a množství peněz ve výpisu metody toString má být určeno nastavenými hodnotami v odpovídajících fieldech. Jan Novák v poskytnutých příkladech je pouze ukázkové jmeno a má být odvozeno podle nastaveného majitele. (s tím, jestli oddělovač čísel bude desetinná čárka či tečka si nedělejte starosti)

Druhý domácí úkol (do sedmého cvičení)

Tento úkol ja založený na předchozím domácím úkolu.

Vytvořte interface Banka či IBanka(záleží na vaší jmenné preferenci). Tento interface bude mít celkem 4 metody:

  • Ucet vytvorUcet(Majitel majitel) - vytvoří nový účet pro zadaného majitele. Číslo účtu vždy o 1 větší po každém dalším vytvoření. To znamená, že první vytvořený účet bude mít číslo účtu 1, druhý 2 atp. (nehledě na tom pro jakého majitele je vytvářen) Volbu měny nechám na vás. Klidně zadávejte jednu stejnou pro všechn účty co tvoříte. Nově vytvořený účet bude vrácen pomocí return
  • boolean zrusUcet(Ucet ucet) - odebere účet z účtů registrovaných v bance, pokud tento účet byl registrovaný v této bance (a tím pádem došlo k jeho odstranení), tak tato metoda vrátí hodnotu true a pokud nebyl, tak vrátí hodnotu false.
  • int pocetUctu() - vrátí číslo reprezentující počet registrovaných účtů v bance.
  • Collection<Ucet> uctyMajitele(Majitel majitel) - Vrátí všechny všechny účty, které jsou vedené na majitele získaného v parametru. Pokud hledaný majitel žádný účet nevlastní, tak bude vrácena prázdná kolekce, NIKDY null!

Zároveň vytvořete do tříd Ucet a Majitel metody hashCode a equals. Hashcode a equals bude validovaný ve třídě Ucet POUZE na základě čísla účtu a v případě Majitele na všech jeho fieldech.

Pro tento interface vytvořte implementaci (zvolení jména implementační třídy je na vás. Například: MojeBanka atp.), která všechny metody naimplementuje a vytvoří jejich funkcionalitu. Tato funkcionalita je popsána za pomlčkami u popisu metod pro interface.

Dále pro vytvořenou implementaci udělejte testy, které otestují její správnou funkcionalitu. Otestovat je potřeba každou z metod implementace.

Třetí domácí úkol (do devátého cvičení)

Tento úkol nelze dělat ve dvojici, každý má své zadání.

Zadání pro adventuru musí obsahovat:

    Příběh jak hra začíná, tj. uvedení do příběhu, co se stalo a co je hráčovým úkolem. Tento text pak budete hráči zobrazovat při spuštění hry.
    Plánek hry (obrázek), jaké prostory bude hra obsahovat a jak jsou propojeny.
    Popis toho, co bude muset hráč udělat, aby hru vyhrál. Případně také, co se stane, když některé úkoly nesplní (špatné konce hry).
    Seznam příkazů, které bude moci hráč při hře používat. 

Odevzdejte jako soubor ve formátu doc, docx nebo pdf.

Připomínám, že hra musí splňovat alespoň základní požadavky uvedené zde

Čtvrtý domácí úkol (do jedenáctého cvičení)

Vytvořte nový projekt Soubory. Budou v něm dvě třídy:

  • třída Start s metodou main
  • třída ZpracovaniSouboru

Metoda main ve třídě Start bude jako vstupní parametr očekávat název zpracovávaného souboru.

Třída Zpracování souboru bude mít statickou metodu zpracovani (public static void zpracovani(File soubor)), tato metoda zpracuje soubor zadaný jako parametr. Aplikace předpokládá, že se jedná o soubor s logy v následující struktuře:

den měsíc rok hodina minuta IP-adresa operace

Jeden řádek souboru tedy vypadá takto:

01 03 2007 07 22 146.102.174.106 REPORT

Metoda zpracování vypíše na konzoli všechny řádky, ve kterých je zaznamenáno, že operace byla REPORT a proběhla v době od 09:00 do 13:00 (do 13:00 se myslí včetně tohoto času, ale nikoliv 13:01 atp.). Pokud dojde k výjimce (nenalezený soubor atd.), informace o výjimce bude vypsána také do konzole. Pokud nedojde k výjimce a soubor bude úspěšně zpracován, jako poslední se vypíše informace kolik bylo zpracováno řádků a kolik z nich vypsáno.

Pro úkol použijte tento soubor:soubor s logy

Pátý domácí úkol (do třináctého cvičení)

Zadání je shodné se zadáním předchozí verze domácího úkolu Banka s tím rozdílem, že metoda public Collection<Ucet> uctyMajitele(Majitel majitel) musí být implementovány s lambda výrazy a streamy (datovody).

Navíc je třeba přidat metodu, která vrátí seřazený seznam účtů podle jejich čísla. Řazení prosím sestupně. (tj. 4, 3, 2, 1) V implementaci použijte lamda výraz (je jedno zda budete implementovat Comparable nebo Comparator). Metoda může vypadat například takto: public List<Ucet> seradUcty().