Logo Czechitas
Vloženo: 23. 11. 2018

Úkol 07 - Bankovní účty

Stáhněte si přepřipravený projekt s domácím úkolem zde: Ukol07.zip

Část 1

Vytvořte třídu BeznyUcet podle následujícího schématu:

public class BeznyUcet
  |
  +-- private double zustatek
  |
  +-- public BeznyUcet(double pocatecniCastka)
  |
  +-- public double getZustatek()
  |
  +-- public boolean vyberPenize(double castka)
  |
  +-- public boolean vlozPenize(double castka)

Poznámky ke třídě:

Abyste ověřili, že máte program správně, odkomentujte ve třídě SpousteciTrida volání první metody tester1.testNormalAccount() a celou třídu NormalAccountTest. V případě, že bude vše fungovat správně, vypíše se:

BeznyUcet: Vsechny testy jsou OK

Část 2

Rozšiřte třídu BeznyUcet o funkcionalitu povoleného přečerpání účtu (tzv. debet nebo kontokorent).

Se zůstatkem tedy bude možné jít do záporu, ale jen do určité výše. Ta se dá nastavit v konstruktoru
public BeznyUcet(double pocatecniCastka, double limitCerpani), konkrétně parametr limitCerpani. To znamená, že metoda getZustatek() může vracet záporné hodnoty. Např. kdybychom vytvořili objekt new BeznyUcet(1000.0, 5000.0), pak by z něj šlo vybrat až 6000 korun a po výběru by byl zůstatek -5000.

U účtů s povoleným přečerpáním je vhodné vědět i použitelný zůstatek, což je součet zůstatku a limitu precerpani. Pokud bychom např. vytvořili objekt new BeznyUcet(800.0, 6000.0), pak metoda getZustatek() by vracela 800 korun, zatímco metoda getPouzitelnyZustatek() by vracela 6800 korun. Opravte samozřejmě metodu vyberPenize(...) tak, aby umožňovala jít "do záporu" až do výše povoleného limitu přečerpání.

public class BeznyUcet
  |
  +-- private double zustatek
  |
  +-- private double limitPrecerpani
  |
  +-- public BeznyUcet(double pocatecniCastka)
  |
  +-- public BeznyUcet(double pocatecniCastka, double pocatecniLimitPrecerpani)
  |
  +-- public double getZustatek()
  |
  +-- public double getLimitPrecerpani()
  |
  +-- public double getPouzitelnyZustatek()
  |
  +-- public boolean vyberPenize(double castka)
  |
  +-- public boolean vlozPenize(double castka)

Abyste ověřili, že máte program správně, odkomentujte ve třídě SpousteciTrida volání druhé metody tester2.testOverdraftAccount() a celou třídu OverdraftAccountTest. V případě, že bude vše fungovat správně, vypíše se:

BeznyUcet + Precerpani: Vsechny testy jsou OK

Část 3 - Dobrovolná část

Tato část je dobrovolná. Pokud by pro vás byl úkol už příliš rozsáhlý, smíte ji vynechat. Nicmnéně je velmi doporučeno zpracovat i tuto část.

Vytvořte třídu SporiciUcet, která bude představovat sestarskou třídu k BeznyUcet. Nebude umožňovat jít do záporu (povolené přečerpání účtu), ale naopak bude evidovat úrokovou míru (procenta) a umožní jednou ročně bance vložit vypočtený úrok (peníze) na účet pomocí metody vypocitejRocniUrokAVlozHoNaUcet(). Metoda si sama vypočítá úrok (peníze) z úrokové míry (procent). Pro zjednodušení tak, že se vezme aktuální zůstatek a z něj se vypočítá úrok podle aktuální úrokové míry. Např. pokud vytvoříme objekt new SporiciUcet(1000.0, 0.05), tedy s počátečním zůstatkem 1000 korun a úrokem 5%, po zavolání metody vypocitejRocniUrokAVlozHoNaUcet() bude zůstatek roven 1050 korun. Metoda vypocitejRocniUrokAVlozHoNaUcet() musí pro účely připsání úroku použít metodu vlozPenize(...).

public class SporiciUcet
  |
  +-- private double zustatek
  |
  +-- private double urokovaMira
  |
  +-- public SporiciUcet(double pocatecniCastka)
  |
  +-- public SporiciUcet(double pocatecniCastka, double pocatecniUrokovaMira)
  |
  +-- public double getZustatek()
  |
  +-- public double getUrokovaMira()
  |
  +-- public boolean vlozPenize(double castka)
  |
  +-- public boolean vyberPenize(double castka)
  |
  +-- public void vlozNaUcetRocniUrok()

Abyste ověřili, že máte program správně, odkomentujte ve třídě SpousteciTrida volání třetí metody tester3.testSavingsAccount() a celou třídu SavingsAccountTest. V případě, že bude vše fungovat správně, vypíše se:

SporiciUcet: Vsechny testy jsou OK

Testovací třídy

Metoda main(...) hotového programu by tedy měla vypadat takto:

public static void main(String[] args) {
    NormalAccountTest tester1 = new NormalAccountTest();
    OverdraftAccountTest tester2 = new OverdraftAccountTest();
    SavingsAccountTest tester3 = new SavingsAccountTest();

    tester1.testNormalAccount();
    tester2.testOverdraftAccount();
    tester3.testSavingsAccount();
}

Pokud vám všechny testovací metody projdou, a nakonec se alespoň 2x (lépe 3x) vypíše All tests are OK, máte vše správně a můžete úkol odevzdat.

Odevzdání domácího úkolu

Nejprve appku (60-Banka) zbavte přeložených spustitelných souborů. Zařídíte to tak, že v IntelliJ IDEA vpravo zvolíte Maven Projects -> Lifecycle -> Clean. Úspěch se projeví tak, že v projektové složce zmizí podsložka target. Následně obě složky s projekty zabalte pomocí 7-Zipu pod jménem Ukol07-Vase_Jmeno.7z. (Případně lze použít prostý zip, například na Macu). Takto vytvořený archív nahrajte na Google Drive do složky Ukol07.

Pokud byste chtěli odevzdat revizi úkolu (např. po opravě), zabalte ji a nahrajte ji na stejný Google Drive znovu, jen tentokrát se jménem Ukol07-Vase_Jmeno-verze2.7z.

Termín odevzdání je do úterý 27. 11. 2018 23:59. Pokud úkol nebo revizi odevzdáte později, prosím pošlete svému opravujícímu kouči/lektorovi email nebo zprávu přes FB.