Projekty ku kurzom
Informace k projektům
Projekty
- Sú súčasťou iba niektorých kurzov.
- Nie sú povinné pre dokončenie kurzu.
- Rozširujú balík edukačných materiálov.
- Môžete ich využiť na vlastnú prezentáciu pri hľadaní
zamestnania.
Programátorské kurzy
Tvorba webových aplikácií v jazyku Java a Python
📋 Zadanie Python a Java
Evidencia poistenia - Základná verzia - Konzolová aplikácia
Naprogramuj konzolovú aplikáciu pre evidenciu poistných udalostí.
Základný projekt odporúčame začať spracovávať po dokončení prvej časti rekvalifikačného kurzu. Pred prezentáciou projektu zamestnávateľovi projektu si skontrolujte, či spĺňa kritériá uvedené na záložke nižšie. .[check]
Minimálne požiadavky na splnenie
- Aplikácia obsahuje správu poistených (to sú poistené
osoby, napr. "Ján Novák"):
- Vytvorenie poisteného
- Evidujte meno, priezvisko, vek a telefónne číslo
- Zobrazenie zoznamu všetkých poistených
- Vyhľadanie poisteného podľa mena a priezviska
- Vytvorenie poisteného
- Dané entity sú uložené v kolekcii v pamäti
- Aplikácia je naprogramovaná podľa dobrých praktík
- Využívajte konštruktory na inicializáciu objektov
toString()pre ich výpis- SRP - Oddeľujte kód do samostatných tried a súborov (lekcie Java, Python)
- SoC - Nekomunikujte s používateľom v tej istej triede, ktorá ukladá dáta (lekcie Java, Python)
- Dodajte validácie aspoň prázdneho mena
- DRY - Neopakujte ten istý kód viackrát, ale taký kód vložte do metódy (napr. zadanie mena a priezviska sa v aplikácii môže opakovať viackrát, lekcie Java, Python)
Editáciu a odstránenie poistených ani ukladanie dát po skončení aplikácie nie je treba riešiť.
Ukážkové obrazovky aplikácie
Pre predstavu si ukážme, ako môžu byť realizované niektoré z funkcií uvedené vyššie:
Pridanie poisteného:

Výpis všetkých poistených:

Vyhľadanie poisteného:

Evidencia poistenia - Plná verzia - webová aplikácia
Keď zvládneš vytvoriť aplikáciu podľa tohto zadania, výrazne si zvýšiš svoju úspešnosť na pohovoroch a hľadanie zamestnania ti potom zaberie len zlomok času.
K vytvoreniu plnej verzie je potrebné naštudovať si
bonusový e-learning, prípadne využiť umelú
inteligenciu.
Python
Tvorba
webov v Django frameworku pre Python
Java
Základy
Spring Boot frameworku pre Javu
Databáza
a Hibernate v Spring Boot
Naprogramuj webovú aplikáciu pre evidenciu poistných udalostí.
Minimálne požiadavky na splnenie
- Aplikácia obsahuje kompletnú správu (CRUD) poistených
(napr. "Ján Novák") a ich poistenia (napr. "poistenie bytu"):
- Vytvorenie poisteného
- Vytvorenie poistenia
- Zobrazenie detailu poisteného vrátane jeho poistenia
- Zobrazenie detailu poistenia
- Zobrazenie zoznamu poistených
- Odstránenie poisteného vrátane všetkých jeho poistení
- Odstránenie poistenia
- Editácia poisteného
- Editácia poistenia poisteného
- Dané entity sú uložené v SQL databáze
- Aplikácia je naprogramovaná podľa dobrých praktík a je plne responzívna
Odporúčané rozšírenie
- Aplikácia podporuje používateľské role (poistený, administrátor), navrhni a implementuj, kto vidí a môže editovať aké dáta
- Aplikácia eviduje poistné udalosti poistených tiež pomocou kompletnej správy (CRUD)
Expertné rozšírenie
- Aplikácia podporuje rozlíšenie poistníkov (tých, ktorí platia poistenie) a poistených (tých, na koho sa poistenie vzťahuje). Namiesto zavedenia 2 databázových tabuliek sa zamysli nad riešením cez vymenovaný typ (enum).
- Aplikácia generuje štatistiky vo forme reportov
Ukážkové obrazovky aplikácie
Pre predstavu si ukážme, ako môžu byť realizované niektoré z funkcií uvedené vyššie:
Výpis poistených:

Detail poisteného:

Pridanie nového poisteného:

Pridanie už vytvoreného poistenia poistenému:

❌ Najčastejšie chyby študentov
Nasledujúce chyby sú vykopírované z reálnych projektov našich študentov a sú vybrané tak, aby zastupovali najčastejšie problémy v ich projektoch. Kód je v rôznych programovacích jazykoch, avšak jazyky sú si tak podobné, že by malo byť jasné, v čom chyba spočíva, aj keď v tomto jazyku neprogramujete.
Nekonečné cykly
Nekonečné cykly sú všeobecne známa zlá praktika, kvôli ktorej je potrebné kód dodatočne skúmať, aby bolo poznať, kedy cyklus skončí, čo je neprehľadné:
✗ Nesprávne
while True: print("\nVyberte si akciu:") print("1 - Pridať nového poisteného") print("2 - Vypísať všetkých poistených") print("3 - Vyhľadať poisteného podľa mena a priezviska") print("4 - Koniec") ...
✔ Správne
while volba != "4": print("\nVyberte si akciu:") print("1 - Pridať nového poisteného") print("2 - Vypísať všetkých poistených") print("3 - Vyhľadať poisteného podľa mena a priezviska") print("4 - Koniec") ...
Alternatívne je možné použiť aj boolean premennú:
while not koniec: print("\nVyberte si akciu:") print("1 - Pridať nového poisteného") print("2 - Vypísať všetkých poistených") print("3 - Vyhľadať poisteného podľa mena a priezviska") print("4 - Koniec") ...
Nedodržanie SoC
Častou chybou študentov je, že komunikujú s používateľom v tej istej triede, ktorá slúži na prácu s dátami:
✗ Nesprávne
class EvidenciaPoistenych: def __init__(self): self.poistenie = [] def vytvor_poisteneho(self): meno = input("Zadajte meno: ") priezvisko = input("Zadajte priezvisko: ") vek = input("Zadajte vek: ") telefon = input("Zadajte telefónne číslo: ") poisteny = Poisteny(meno, priezvisko, vek, telefon) self.poistenie.append(poisteny) print("Dáta boli uložené. Pokračujte vo výbere akcie...")
✔ Správne
class EvidenciaPoistenych: def __init__(self): self.poistenie = [] def pridaj_poisteneho(self, poisteny): self.poistenie.append(poisteny) class UzivatelskeRozhranie: def __init__(self): self.evidencia = EvidenciaPoistenych() def vytvor_poisteneho(self): meno = input("Zadajte meno: ") priezvisko = input("Zadajte priezvisko: ") vek = input("Zadajte vek: ") telefon = input("Zadajte telefónne číslo: ") poisteny = Poisteny(meno, priezvisko, vek, telefon) self.evidencia.pridaj_poisteneho(poisteny) print("Dáta boli uložené. Pokračujte vo výbere akcie...")
Kód vyššie neobsahuje validácie a nespĺňa teda plne zadanie.
Nedodržanie SRP
Študentom sa občas podarí vytvoriť program iba s jednou triedou, ktorá reprezentuje poisteného. Ten zároveň vie vyhľadávať ostatných poistených a vypisovať všetkých, čo nedáva z hľadiska rozdelenia zodpovednosti (SRP) zmysel:
✗ Nesprávne
class Poistenec: meno = None priezvisko = None vek = None cislo = None def __init__(self, meno, priezvisko, vek, cislo): self.meno = meno self.priezvisko = priezvisko self.vek = vek self.cislo = cislo @staticmethod def pridaj_poisteneho(meno, priezvisko, vek, cislo): cursor.execute('INSERT INTO poistení(meno, priezvisko, vek, cislo) VALUES(?, ?, ?, ?)', (meno, priezvisko, vek, cislo)) return f"Pridané {meno} {priezvisko} {vek} {cislo} do databázy."
✔ Správne
class Poistenec: meno = None priezvisko = None vek = None cislo = None def __init__(self, meno, priezvisko, vek, cislo): self.meno = meno self.priezvisko = priezvisko self.vek = vek self.cislo = číslo class EvidenciaPoistenych: def pridaj_poisteneho(meno, priezvisko, vek, cislo): cursor.execute('INSERT INTO poistení(meno, priezvisko, vek, cislo) VALUES(?, ?, ?, ?)', (meno, priezvisko, vek, cislo)) return f"Pridané {meno} {priezvisko} {vek} {cislo} do databázy."
Zlé formátovanie
Začiatočníci mávajú problémy hlavne so správnym odsadzovaním kódu, ktorý je potom neprehľadný, pretože nie je dobre vidieť, ktorá vetva programu sa kedy spúšťa:
✗ Nesprávne
} printPersons() { const table = document.getElementById("data-table"); for (let i = 0; i < this.persons.length; i++) { const person = this.persons[i]; const row = table.insertRow(); const nameCell = row.insertCell(0); const surnameCell = row.insertCell(1); const telCell = row.insertCell(2); const ageCell = row.insertCell(3); const dateCell = row.insertCell(4); nameCell.innerHTML = person.name; surnameCell.innerHTML = person.surname; telCell.innerHTML = person.telephone; ageCell.innerHTML = person.age; dateCell.innerHTML = person.birthdate; } }
✔ Správne
} printPersons() { const table = document.getElementById("data-table"); for (let i = 0; i < this.persons.length; i++) { const person = this.persons[i]; const row = table.insertRow(); const nameCell = row.insertCell(0); const surnameCell = row.insertCell(1); const telCell = row.insertCell(2); const ageCell = row.insertCell(3); const dateCell = row.insertCell(4); nameCell.innerHTML = person.name; surnameCell.innerHTML = person.surname; telCell.innerHTML = person.telephone; ageCell.innerHTML = person.age; dateCell.innerHTML = person.birthdate; } }
Miešanie slovenských a anglických názvov
Existencia anglických kľúčových slov jazyka zvádza k pomenovávaniu vlastných identifikátorov tiež anglicky. Keď to tak chceme robiť, robíme to tak všade, a nie len niekde:
✗ Nesprávne
def save_to_database(self): cursor.execute(''' INSERT INTO zoznam_poistenych (meno, priezvisko, vek, telefon) VALUES (?, ?, ?, ?) ''', (self.meno, self.priezvisko, self.vek, self.telefon)) conn.commit() def odobrat_z_databazy(cls, id): cursor.execute("DELETE FROM zoznam_poistenych WHERE id = ?", (id,)) conn.commit()
✔ Správne
def save_to_database(self): cursor.execute(''' INSERT INTO zoznam_poistenych (meno, priezvisko, vek, telefon) VALUES (?, ?, ?, ?) ''', (self.meno, self.priezvisko, self.vek, self.telefon)) conn.commit() def remove_from_database(cls, id): cursor.execute("DELETE FROM zoznam_poistenych WHERE id = ?", (id,)) conn.commit()
Absencia použitia
metódy toString()/ToString() alebo
__str__()
Podľa zadania by triedy mali byť vypisované pomocou metódy
toString():
✗ Nesprávne
class Poistenec: def __init__(self, meno, priezvisko, datum_narodenia, telefonne_cislo): self.meno = meno self.priezvisko = priezvisko self.datum_narodenia = datum_narodenia self.telefonne_cislo = telefonne_cislo
✔ Správne
class Poistenec: def __init__(self, meno, priezvisko, datum_narodenia, telefonne_cislo): self.meno = meno self.priezvisko = priezvisko self.datum_narodenia = datum_narodenia self.telefonne_cislo = telefonne_cislo def __str__(self): return f"{self.meno} {self.priezvisko}"
💯 Hodnotiace kritériá
Predpokladáme, že si svoju aplikáciu pri tvorbe aspoň raz spustil a vyskúšal a teda, že funguje podľa funkčných požiadaviek vyššie. Preto sa pri hodnotení budeme zameriavať najmä na kód, ktorý si napísal, a to podľa nasledujúcich 8 kritérií. Zoznam obsahuje aj odkazy na dané lekcie, v ktorých je problematika vysvetlená.
- Pomenovanie identifikátorov - Skontroluj, či názvy premenných (lekcie Java, Python) a názvy tried (lekcie Java, Python) neobsahujú skratky a sú výstižne zvolené.
- Dodržanie princípov SRP, SoC - Každá trieda by mala mať len jednu zodpovednosť. Skontroluj, či nie je používateľské rozhranie v tej istej triede, ktorá pracuje s dátami (lekcie Java, Python).
- Vhodné výbery dátových typov - Napr. telefónne číslo
nie je v skutočnosti číslo, pretože môže obsahovať predvoľbu a ďalšie
špeciálne znaky ako
+. Ukladáš ho ako text? - Správne formátovanie kódu - Kód máš správne odsadený a má jednotný štýl zodpovedajúci konvenciám daného programovacieho jazyka (lekcie Java, Python).
- Minimalizácia duplicitného kódu - Uisti sa, že
neopakuješ v aplikácii viackrát rovnaké alebo podobné úseky kódu, ktoré
by sa dali vyčleniť do jednej metódy, napr. že stále nekopíruješ tú
istú validáciu vstupu alebo opakujúce sa výpisy. Skontroluj absenciu
nekonečných cyklov
while (true)a pod. (lekcie Java, Python). - Logika a primeraná zložitosť algoritmov - Skontroluj, či postupy nie sú zbytočne zložité a metódy nie sú príliš dlhé.
- Prítomnosť a kvalita komentárov. - Sú tvoje triedy a ich metódy zdokumentované (lekcie Java, Python)? Sú na kritických miestach v aplikácii komentáre?
Neprogramátorské kurzy
Kybernetická bezpečnosť
Kurz obsahuje dva projekty. Zadanie sa nachádza v e-learningových moduloch:
- Projekt Návrh siete - lekcie 15-17
- Projekt Praktické nastavenie siete - lekcie 19-22
Tvorba WWW stránok (Webmaster)
- Projekt E-shop s využitím AI
Datová analýza
- Projekt Prípadová štúdia - lekcie 28-31
Konzultácie a GitHub
🤝 Konzultácie s lektorom
Postup pripojenia na konzultáciu týkajúci sa projektu je rovnaký ako v
prípade štandardnej konzultácie. Po tom, čo si rezervuješ čas, sa už len
stačí v danú hodinu pripojiť na Discord server miestnosti
označené ako Čakáreň v sekcii Konzultácie.
Bližšie info o tom, ako Discord nastaviť nájdeš
tu.
Pri tvorbe projektu sa snaž nenechať si všetko až na poslednú chvíľu! Naši koučovia tí s čímkoľvek v priebehu štúdia radi pomôžu, nespoliehaj sa ale na to, že za teba projekt v mesiaci skúšky sami spracujú.
Rezervácia termínov je záväzná a preto ju neruš, pokiaľ pre to nebudeš mať naozaj závažný dôvod. Pokiaľ sa tak stane, snaž sa z termínu odhlásiť vždy aspoň 24 hodín vopred. Pre každého študenta je potom vyhradená 1x polhodinová konzultácia s koučom a 1x polhodinová konzultácia projektu týždenne.
📖 Nahranie projektu na súkromný Git
Projekt môžeš novému zamestnávateľovi prezentovať tak, že ho nahráš do súkromného (privátneho) repozitára na GitHube a následne pozveš zamestnávateľa do tohto repozitára, aby si projekt mohol prezrieť.
Repozitár nesmie byť verejný.
Nahrávanie projektov do privátneho repozitára na GitHub teraz pridávame do Základných kurzov jednotlivých programovacích jazykov. K dispozícii je teraz:
- Java - Verzovací nástroj Git a IntelliJ IDEA
- PHP - Verzovací nástroj Git a NetBeans
- Python - Verzovací nástroj Git a PyCharm
- C# .NET - Verzovací nástroj Git a Visual Studio
- JavaScript - Verzovací nástroj Git a Visual Studio Code
Ak pre tvoj jazyk nie je lekcia k dispozícii, využi postup uvedený v lekcii GitHub Desktop kurzu Git.