4it101»Oliva

Oliva

4IT101 cvičení - cvičící Radek Oliva

letní semestr 2018/2019

Přidělení bodů

Druh úkoluPočet bodůPoznámka
Domácí úkoly204 domácí úkoly po pěti bodech
Průběžné testy203 elektronické testy po čtyřech bodech v InSISu a 1 programovací test za osm 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 bez ztráty bodů za zpoždění je 15.5.2018 23:59. Poslední možnost odevzdat adventuru je 18.6.2018 23:59
Závěrečný test30 

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

TermínObsahPočet bodůPoznámka
na začátku 3. cvičeníúvod do objektů, primitivní datové typy a operátory4 
sedmý týden výukytest bude praktické programování, ukázky několika testů jsou uvedeny pod tabulkou8 
na začátku 9.cvičenídatové struktury (pole, seznamy, množiny a mapy), výčtový typ, statické prvky tříd4 
na začátku 13.cvičenítřída Object, dědičnost, polymorfismus, rozhraní4 

První, třetí a čtvrtý průběžný test

- budou mít formu el. testu v InSISu s otázkami různých typů. U každé otázky je vždy uvedeno jakého typu je otázka. Test je po odeslání automaticky vyhodnocen a student se hned dozví, kolik získal bodů.

Druhý průběžný test

- programovací, 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. 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í

  • v adresáři projektu vymažte soubory .ctxt, .class a případnou dokumentaci (podadresář doc),
  • 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).

Domácí úkol Knihovna

První část

Vytvořte prázdný projekt Knihovna a v něm vytvořte dvě třídy: Kniha a Čtenář.

U třídy Čtenář budete evidovat jeho základní atributy, tedy jméno, příjmení a bydliště. Atributy budou ve formě textového řetězce. K založení nového čtenáře bude potřeba zvláštní konstruktor, kterým novému čtenáři rovnou zadáte výše zmíněné atributy. Také bude potřeba mít gettery na tyto tři údaje a setter na adresu. Pro vypsání informací o čtenáři si naimplementujte metodu toString(). Přepiště tak, aby jste s její pomocí zjistili jméno a příjmení čtenáře.

Pro třídu Kniha budou potřeba atributy název, číslo knihy (nemusí být nutně ISBN, stačí jakékoliv celé číslo typu int), žánr jako textový řetězec, počet stran a čtenář knihy (typu Ctenar). Pro Knihu vytvořte konstruktor, kterým zároveň se založením instance knihy přiřadíte i číslo knihy, žánr a počet stran. Hodnota datového atributu čtenář zůstane po vytvoření instance nové knihy null. Dále bude potřeba mít napsané gettery na atributy knihy a setter pro nastavení čtenáře. Metoda toString() pro knihu bude vracet řetězec "Kniha " + název + " (" + žánr + ") s číslem " + číslo knihy +

  • a) Když je kniha vypůjčena, tak " má vypůjčenou " + jméno a příjmení čtenáře + " bydlištěm na adrese " + bydliště.
  • b) Když knihu nemá nikdo vypůjčenou, tak " nemá vypůjčenou nikdo."

Výstupem na konci bude: "Knihu Harry Potter (Fantasy) s číslem 123456 má vypůjčenou John Smith bydlištěm na adrese Kafkova 16, Praha" nebo "Knihu Saturnin (Beletrie) nemá vypůjčenou nikdo"

Úkol bude později rozšířen o druhou část, která bude zaměřena na seznamy.

Deadline 11.3.2019 23:59 (viz ISIS).

Druhá část

V druhé části budete rozšiřovat výsledek prvního domácího úkolu.

Do třídy Kniha přidejte metody equals() a hashCode(). Dvě knihy jsou považovány za stejné, pokud mají stejné číslo knihy (případně ISBN).

V projektu budete potřebovat třídu "Databáze knih" s následujícími metodami:

public boolean zadejKnihu(Kniha kniha) - metoda přidává knihu do databáze. Kniha se přidá pouze pokud v databázi není kniha se stejným číslem, jako má zadávaná kniha. Vrací true, nebo false v závislosti na výsledku přidávání do seznamu (přidáno = true, nepřidáno = false).

public Kniha vratKnihu(int cisloKnihy) - v databázi knih najde knihu s předaným číslem a vrátí odkaz na knihu. Pokud se kniha nenachází v databázi, metoda vrátí hodnotu null.

public boolean knihaJeVDatabazi(int cisloKnihy) - v databázi knih najde knihu s předaným číslem. Pokud je kniha v databázi, vrátí hodnotu true. Pokud kniha v databázi není, vrátí false.

public Collection<Kniha> vratSeznamKnih() - vrátí seznam všech knih v databázi. Pokud nejsou evidovány žádné knihy, musí metoda vrátit prázdný seznam, ne null!

public Collection<Kniha> vratSeznamKnihNaPujceni() - vrátí celý seznam knih, které jsou volné k půjčení (tedy němají přiřazeného čtenáře). Metoda vrací prázdný seznam, pokud žádné knihy k půjčení nejsou (všechny knihy mají přiřazeného čtenáře).

Součástí úkolu jsou i testy pro třídu "Databáze knih" (je bodováno).

Deadline 25.3.2019 23:59 (viz ISIS).

Práce se soubory

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

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

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

Třída Zpracování 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 DELETE

Metoda zpracování vypíše na konzoli všechny řádky, ve kterých je zaznamenáno, že operace CHECKOUT proběhla mezi 12:00 a 17:00. 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

Deadline 7.6.2019 23:59 (viz ISIS).