4it115»4IT115 - Pavlíček

4IT115 - Pavlíček

Na této stránce budou popsány odlišnosti a upřesnění pro cvičení, které vede Luboš Pavlíček.

Harmonogram cvičení v roce 2014

1Seznámení s vývojovým prostředím. Subversion, struktura úložiště, správa verzí v IDE. Úpravy adventury, balíčky.
2GUI - frame, základní ovládací prvky, obrázky, dialog. Rozdělení do týmů.
3GUI - reakce na událost, vnitřní třídy, události myši, rozbalovací seznam.
4GUI - návrhový vzor Observer. Doplnění zobrazování východů z místnosti.
5GUI - seznam (JList), vlastní komponenta, menu.
6UML - Use Case diagram, případy užití.
7UML - návrhový diagram tříd, sekvenční diagram.
8UML - designový model.
9Test UML.
10státní svátek
11státní svátek
12Obhajoba návrhu druhé semestrální úlohy.
13Tabulky (JTable)

Termíny úkolů a body za samostatnou práci v průběhu semestru

adventura - vytvoření záložky textovaVerzedo 2. cvičení (6. března)viz 1. úloha
1. domácí úkolna 3. cvičení 13. března2 body
2. domácí úkoldo 5. cvičení (27. března)2 body
test GUI5. cvičení (27. března)3 body
3. domácí úkoldo 6. dubna3 body
adventura - GUI verzedo 13. dubna včetněviz 1. úloha
Test UML 29. cvičení (24. dubna)10 bodů
2. úloha - projektdo 12. cvičení (15. května)viz 2. úloha
2. úloha - funkční verzedo konce zkouškového období*viz 2. úloha
  • ) V případě druhé úlohy neodečítám body za zpoždění celé úlohy, ale za pasivitu jednotlivých členů při týmovém programování na základě údajů z úložiště. Konkrétně, kdo nebude mít uloženo v úložišti aspoň 30 řádků kódu na 13. cvičení (22. května), tomu odečtu 2 body. Kdo nebude mít žádné úpravy od 22. května do 8. června, tomu odečtu 2 body (pokud nebude celý projekt již obhájen).

1. domácí úkol - návrh GUI vzhledu adventury

Cílem je vytvořit návrh GUI rozhraní adventury. V rámci týmu si každý člen vybere jiný program pro návrh GUI (viz dále) a pomocí něho vytvoří návrh GUI rozhraní své adventury. Tým následně vytvoří prezentaci, ve které popíše vždy použitý nástroj (jeden snímek) a návrh GUI adventury (druhý snímek). Výslednou prezentaci bude jeden člen týmu prezentovat na 4. cvičení 3. cvičení - maximální délka prezentace za celý tým je 5 minut. Student, který bude prezentovat získá 2 body navíc.

Pro programy na návrh GUI se používají anglické pojmy prototype (prototyp), mockups (makety) či wireframes (drátěné modely). Existuje jich velké množství, část z nich je i volně k dispozici. Seznam 10 bezplatných je v článku http://speckyboy.com/2010/01/11/10-completely-free-wireframe-and-mockup-applications/. Další jsou v článku na wikipedii http://en.wikipedia.org/wiki/Website_wireframe. Dlouhý seznam je na http://konigi.com/node/1819.

Lze použít i návrháře určené pro vytváření GUI aplikací (tj. ne jen pro návrhy GUI), např. návrhář integrovaný v NetBeans (jmenuje se Mattise), Microsoft Visio (můžete stáhnout z MSDN AA), Window Builder (nyní zdarma ke stažení od Google), Gui Builder z IntelliJ IDEA, Guide (nutno požádat o osobní licenci) a další.

Doporučuji si přečíst článek Nápad za milion, ze kterého mám odkaz na seznam bezplatných nástrojů.

2. domácí úkol

Zadání pro rok 2014

skupina od 11:00aplikace na převody mezi římskými a arabskými čísly (oba směry)pro převody použijte předpřipravanou třídu Roman.java
skupina od 12:45aplikace na šifrování/dešifrování za pomocí Vigenèrovy šifrypro šifrování/dešifrování použijte předpřipravené třídy VigenerovaSifra.java

Minimální požadavky:

  • aplikace musí podporovat oba směry,
  • při zadání arabských čísel (první skupina) nutno ošetřit vstup pouze číslic - pokud vložím písmena, tak aplikace nesmí skončit výjimkou, ale musí se zobrazit vhodné upozornění,
  • pokud ve třídě pro převody či ve třídě pro šifrování vznikne výjimka, tak je potřeba ji odchytit a text výjimky zobrazit uživateli (vhodné je samostatné pole pro zobrazování chyb),
  • aplikace musí obsahovat aspoň jeden obrázek,
  • aplikace musí obsahovat buď JCheckBox nebo JRadioButton,
  • aplikace musí obsahovat JButton,
  • aplikace musí použít aspoň dva různé fonty,
  • v aplikaci musí být někde nastavena barva,

Zadání z roku 2013

Vytvořte GUI aplikaci pro převod jednotek (viz http://www.jednotky.cz/). Např. převod mezi jednotkami délky metr, yard a stopa. Minimální požadavky:

  • aplikace musí podporovat převod mezi minimálně třemi různými jednotky ze skupiny Vám přiřazené (viz tabulka níže),
  • aplikace musí obsahovat aspoň jedno vstupní pole pro vstup desetinných čísel - pokud vložím písmena, tak nesmí vzniknout výjimka,
  • aplikace musí obsahovat aspoň jeden obrázek,
  • aplikace musí obsahovat buď JCheckBox nebo JRadioButton,
  • aplikace musí obsahovat buď JButton nebo JMenu a s aspoň jedním JMenuItem,
  • aplikace musí použít aspoň dva různé fonty,
  • v aplikaci musí být někde nastavena barva,
první písmeno příjmenítyp jednotek
A-Čjednotky času
D-Gjednotky délky
H, CH, Jjednotky hmotnosti
Kjednotky objemu
L, M, N, Ojednotky obsahu (plochy)
P, Rjednotky rychlosti
S, Šjednotky teploty
T-Zjednotky výkonu

Odevzdává se prostřednictvím odevzdávárny v ISISu. Odevzdejte zip archiv, postačuje adresář src projektu.

Následuje zadání z roku 2012:

GUI aplikace, která bude vypočítávat obvod a obsah pro dva zadané geometrické tvary. Uživatel zadá jako vstupní údaje (desetinná čísla), program zobrazí hodnoty v ostatních jednotkách. Uživatel může vstup opakovat pro další tvar. Program musí ošetřit i chybný vstup čísla. Aplikace by měla zobrazit i nějaký obrázek jako grafický prvek. Měly by být použity barvy.

V následující tabulce jsou přiřazeny geometrické tvary a vstupní údaje, které musí studenti z příslušného cvičení minimálně implementovat.

tvarzadávané údajecvičení
trojúhelníktři stranyút 9:15
kruhpoloměrút 9:15
kosodélníkstrany a, b a úhel mezi nimiút 11:00
čtverecdélka stranyút 11:00
trojúhelníkse strany a, b a úhel mezi nimiút 14:30
obdélníkstrany a, bút 14:30
kosodélníkstrany a, b a výška kosodélníkuút 18:00
elipsadélka os x a yút 18:00

3. domácí úkol

Zadání pro rok 2014

Zadání na rok 2014 - pohyb figurky po šachovnici

Vašim úkolem je naprogramovat pohyb jednoho typu šachové figurky po šachovnici o velikosti 8x8. Vyberte si nějakou šachovou figurku s výjimkou pěšce, na šachovnici umístěte minimálně dvě tyto figurky (závisí na Vás, zda stejné či různé barvy). Když uživatel stiskne tlačítko myši nad figurkou (mousePressed), tak se zvýrazní políčka, na které figurka může dle pravidel skočit. Se stále stisknutým tlačítkem myši uživatel vybere nějaké políčko a tlačítko myši uvolní. Pokud vybere přípustné políčko, tak se figurka přemístí. Pokud uvolní tlačítko myši nad nepřípustným políčkem, tak figurka zůstane na původní pozici.

Vylepšení za další dva body - uživatel stiskne tlačítko nad figurkou a když se nyní pohybuje myší, tak se figurka vizuálně pohybuje s kurzorem (události typu MouseMotionEvent).

Zadání na rok 2013 - miny:

Vašim úkolem je naprogramovat hledání min. Minimální velikost pole je 5x5. Miny mohou být rozmístěny staticky (tj. nemusíte generovat jejich náhodné rozmístění). Musí se zobrazovat celkový počet min a počet chybějících min.

Můžete naprogramovat i nějakou variantu hledání min.

Zadání z roku 2012 - obrázkové puzle:

Úkolem je naprogramovat puzzle - rozdělte nějaký obrázek minimálně na 16 kousků a nechte uživatele, aby je poskládal na správná místa. Nejjednodušší je rozstříhat obrázek na obdélníky (čtverce), nemusíte vytvářet složité tvary. Části se budou přetahovat pomocí myši (drag and drop). Pomocí druhého tlačítka myši se budou části otáčet o 90 stupňů - za tuto funkčnost navíc nabízím o bod více.

Obrázek si na části můžete rozdělit v nějakém externím programu či si přímo napsat v Javě kód na rozdělení obrázku na části. Ve druhém případě se obvykle používá pro načtení obrázku třída BufferedImage (či jiný potomek třídy Image) a třída ImageIO pro načtení (i uložení) obrázku. Ve třídě BufferedImage je metoda getSubimage, která vrací část obrázku. Následuje ukázka metody pro rozdělení načteného obrázku na více částí a jejich uložení do samostatných souborů:

     private static void saveImageParts(BufferedImage image, int columns, int rows) {
        try {

            Dimension size = new Dimension(image.getWidth(), image.getHeight());
            int columnStep = size.width / columns;
            int marginLeft = (size.width - (columnStep * columns)) / 2;
            int rowStep = size.height / rows;
            int marginTop = (size.height - (rowStep * rows)) / 2;

            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < columns; j++) {
                    BufferedImage subImage = image.getSubimage(
                            j * columnStep + marginLeft,
                            i * rowStep + marginTop,
                            columnStep,
                            rowStep
                            );
                    File file = new File(String.format("newimage_%02d%02d.jpg", i, j));
                    ImageIO.write(subImage, "jpg", file);
                }
            }
        }
        catch (IOException e) {
            System.out.println(e.getMessage());

        }
    }

Zdrojový kód ukázkového projektu na rozdělení obrázku na části je v souboru RozdeleniObrazku.zip

Odevzdává se prostřednictvím odevzdávárny v ISISu. Odevzdejte zip archiv obsahující pouze adresář src projektu.

Test GUI

Je to test na základy programování grafického uživatelského rozhraní. Příklady zadání:

Z disku I: (popř. z isis.vse.cz) si zkopírujte základ grafické aplikace (projekt GUI). Doplňte do ni dvě tlačítka – tlačítko se zeleným popisem JDI a tlačítko s červeným popisem STŮJ. Dále do aplikace doplňte textové pole (JTextField), na začátku bez textu. Po stisknutí tlačítka „JDI“ se v textovém poli zobrazí text „jdi“, po stisknutí tlačítka „STŮJ“ se zobrazí v textovém poli text „stůj“. Upravte rozvržení okna tak, aby tlačítka byla nahoře vedle sebe a textové pole dole.
Z disku I: (popř. z isis.vse.cz) si zkopírujte základ grafické aplikace (projekt GUI). Doplňte do ni dva přepínače (JRadioButton) - první s popisem jdi, druhý s popisem stůj. Dále do aplikace doplňte popisek (JLabel) bez textu, který bude buď červený nebo zelený v závislosti na tom, zda bude uživatelem zvolen přepínač stůj či přepínač jdi. Upravte rozvržení okna tak, aby tlačítka byla vlevo pod sebou a popisek vpravo.

V testu se mohou objevit následující prvky:

  • komponenty:
    • JTextField, JPasswordField, JTextArea, JButton, JCheckBox, JRadioButton,
    • JPanel, JFrame
  • vlastnosti:
    • vložení/získání textu do/z komponenty,
    • barva, font (tučné, kurzíva), enable/editable,
  • správci rozložení
    • BorderLayout, FlowLayout, GridLayout
  • události:
    • ActionEvent

Některé prvky (JCheckBox, JRadioButton, fonty) jsem neprobíral na cvičeních -> nastudovat a vyzkoušet sami.

Výslednou aplikaci na cvičení ihned oboduji.

Základ grafické aplikace pro test.

Test UML (10 bodů)

Na cvičení dostanete popis zadání včetně případů užití. Úkolem je nakreslit detailní diagram tříd, tj. věcné třídy včetně datových atributů a vazeb mezi třídami (multiplicita, jméno odpovídajícího datového atributu). Nakreslit v nějakém programu pro kreslení UML a z něho vygenerovat obrázek z diagramem (PNG, GIF, JPEG) - budu hodnotit tento výsledný obrázek !!!

Příklady zadání:


Téma druhé semestrální práce

Náměty na rok 2014:

TODO

Náměty na rok 2013:

1. Osobní finance

Základní požadavky na aplikaci:

  • eviduje se stav a změny na jednom čí více bankovních účtech,
  • eviduje se stav a změny hotovosti,
  • evidují se jednotlivé výdaje, uživatel může zařadit výdaje do jednotlivých kategorii,
  • uživatel si může evidovat plánované či opakující výdaje, u jednotlivých výdajů je i datum,
  • aplikace zobrazí historii výdajů, aplikace zobrazuje plánované výdaje (přípomíná zaplacení),
  • údaje jsou chráněny heslem,

2. Evidence kalorii

Základní požadavky na aplikaci:

  • aplikace spočítá optimální množství kalorií pro uživatele na základě věku, pohlaví, typu aktivit atd.
  • aplikace umožní evidovat pro konkrétní dny zvýšený/snížený výdej kalorii proti vypočtenému průměru (např. ležel celý den v posteli a tudíž výdej byl o 300 kcal menší).
  • aplikace umožní evidovat pro jednotlivé dny, kolik kalorii uživatel získal z potravin,
  • uživatel může zadávat získané kalorie následujícími způsoby:
    • zadá stručný popis jídla/pití a odhadnutý počet kalorií,
    • vybere ze seznamu jídlo (např. pizza) či pití a zadá množství - aplikace spočítá množství kalorii. Seznam si uživatel může průběžně doplňovat a upravovat.
  • aplikace zobrazuje dlouhodobé grafy získaných kalorii,

3. Kniha jízd

Aplikace eviduje jízdy v autě. Jako bonus eviduje i spotřebu paliva.

doplnit

Náměty z roku 2012:

1. Generátor hesel

Základní požadavky na aplikaci:

  • aplikace by pro vygenerované či zadané heslo mělo zobrazovat jeho sílu, existují různé algoritmy, viz http://en.wikipedia.org/wiki/Password_strength,
  • aplikace by měla podporovat aspoň tři algoritmy pro generování hesla:
    • generování náhodných znaků hesla z předem vybrané množiny (pouze malá písmena, písmena a číslice, ....),
    • generování náhodných znaků hesla s tím, že se zvolí pravidla (např. že musí být aspoň jedno malé písmeno, aspoň jedno velké písmeno, aspoň jedna číslice),
    • generování snáz zapamatovatelných hesel - při generování se vychází z předem připraveného souboru slabik (musíte si vytvořit sami),
    • generování hesel sestavených ze slov (http://en.wikipedia.org/wiki/Diceware) - je nutné připravit si slovník, základem pro přípravu slovníku může být http://slovnik.zcu.cz/download.php
    • generování hesel dle nějakého vzoru - pro vytvoření vzoru se nadefinují zástupné znaky (např. a pro malá písmena, x pro malá písmena a číslice, h pro hexadecimální znaky, 9 pro číslice) a poté uživatel vytvoří vzor: Aaa99aaah
    • existují i další algoritmy

2. Opakování slovíček

Cílem je vytvořit aplikaci na opakování slovíček. Aplikace by měla umožňovat:

  • vkládat slovíčka, tj. že si uživatel vezme jazykovou učebnici a vloží si slovíčka či fráze z jednotlivých lekcí (včetně vložení identifikace lekce),
  • načítat předpřipravené skupiny slovíček z webového serveru. Na nějakém webovém serveru budou umístěny soubory odpovídající seznamu slovíček z jednotlivých lekcí (pro každou lekce samostatný soubor) a soubor s metadaty o těchto souborech. V aplikaci se načte soubor s metadaty a uživatel si zvolí, která slovíčka z kterých lekcí se mají načíst,
  • aplikace umožní uživateli opakovat si slovíčka. Uživatel si může vybrat lekci, ze které se mají slovíčka opakovat. Aplikace nabízí slovíčka s přihlédnutím k úspěšnosti v minulosti (viz https://en.wikipedia.org/wiki/Leitner_system),
  • aplikace by měla zobrazovat vhodné statistiky,
  • aplikace bude zahrnovat podporu synchronizace mezi počítači typu DropBox (tj. po načtení do paměti nezůstanou otevřené soubory, před uložením se zkontroluje, že nedošlo ke změně souboru. Pokud ke změně dojde, je potřeba soubory sloučit).

Volitelně lze do aplikace doplnit podporu zobrazení výslovnosti, popř. přehrání zvukové podoby (nevím, jak získat správnou zvukovou podobu).

3. Evidence citací

Cílem aplikace je evidovat citace (odkazy na literaturu) dle normy ČSN ISO 690. V podstatě by to měla být off-line verze webu www.citace.com, která bude umět:

  • zadávat a evidovat si odkazy na různé typy publikací,
  • k citacím bude možné doplňovat štítky pro jejich snadnější kategorizaci, doplňovat komentářem,
  • citace bude možné vyhledávat,
  • vygenerovat z vybraných evidovaných citací seznam bibliografických citací (zjednodušeně seznam literatury na konci knihy/článku) odpovídající zvolenému způsobu zápisu (harvardský systém, číselné odkazy či průběžné poznámky),
  • aplikace bude zahrnovat podporu synchronizace mezi počítači typu DropBox (tj. po načtení do paměti nezůstanou otevřené soubory, před uložením se zkontroluje, že nedošlo ke změně souboru. Pokud ke změně dojde, je potřeba soubory sloučit).

Před řešením doporučuji projít server www.citace.com a případně i prostudovat Bibliografické odkazy a citace dokumentů dle ČSN ISO 690 (01 0197) platné od 1. dubna 2011.

4. Evidence úkolů jednotlivce

Základní požadavky na aplikaci:

  • musí existovat zásobník úkolů na delší dobu,
  • uživatel si na každý den ráno vybere úkoly, které bude ten den dělat,
  • u každého naplánovaného úkolu na aktuální den musí být i odhad času na realizaci,
  • uživatel si v průběhu dne vybere úkol, na kterým zrovna pracuje,
  • zobrazuje se čas do plánovaného konce úkolu,
  • uživatel může práci přerušit (tj. evidují se přerušení),
  • lze zobrazit souhrnné statistiky za dny a za delší dobu,
  • aplikace bude zahrnovat podporu synchronizace mezi počítači typu DropBox (tj. po načtení do paměti nezůstanou otevřené soubory, před uložením se zkontroluje, že nedošlo ke změně souboru. Pokud ke změně dojde, je potřeba soubory sloučit).

Doporučuji se seznámi s technikami pro správu času/úkolů. Příkladem může být Pomodoro Technique či Getting Thing Done (Mít vše hotovo). Popisy Pomodoro Technique můžete najít na:

Popisy GTD lze nalézt na:

5. Volné téma

V týmu si můžete vymyslet i vlastní zadání. Můžete to být aplikace evidenčního charakteru jako např. evidence knih v domácí knihovničce, evidence osobních výdajů (včetně kategorizace a grafů) či evidence a hodnocení kuchařských receptů. Můžete zkusit zajímavě zpracovat nějaké údaje z iniciativy OpenData (http://www.opendata.cz/cs/node/25). Můžete zkusit vytvořit aplikaci na výuku a procvičování nějakého zajímavého tématu (např. pravděpodobnost či algoritmy pro třídění a jejich složitost či teorii grafů ...).