Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

public:pb161_fall15_hw04 [2015/11/20 16:35]
Nikola Beneš otevřeno odevzdávání
public:pb161_fall15_hw04 [2018/02/24 19:10]
Řádek 1: Řádek 1:
-====== Domácí úkol č. 4: Jednoduchý bankovní systém ====== 
  
-  * Úkol zadán: 17. 11. 2015 
-  * Odevzdávání naostro možné od: 20. 11. 2015 
-  * Absolutní konec odevzdávání:​ 1. 12. 2015 6.00 (ráno) 
-  * Odevzdáváte soubory: ''​AccountID.h'',​ ''​AccountData.h'',​ ''​AccountInterface.h'',​ ''​Account.h'',​ ''​Account.cpp'',​ ''​CustomerData.h'',​ ''​CustomerInterface.h'',​ ''​Customer.h'',​ ''​Customer.cpp'',​ ''​Bank.cpp'',​ ''​Bank.h'',​ ''​BankRegister.cpp'',​ ''​BankRegister.h'',​ ''​Database.cpp'',​ ''​Database.h'',​ ''​Interactive.cpp'',​ ''​Interactive.h''​ a ''​main.cpp''​ 
-    
-Doplnění zadání (zobrazeno __podtrženě__):​ 
- 
-==== Představení úkolu ==== 
- 
-Cílem tohoto úkolu je další procvičení dědičnosti v praxi a využití vyjímek a to na modelu zjednodušené bankovní hierarchie. Hlavními třídami našeho modelu budou //​BankRegister//,​ //Bank//, //​BasicAccount//​ a //​BasicCustomer//​. 
-==== Zadání ==== 
- 
-  * Třída //​BankRegister//​ představuje katalog bank. Umožňuje přenosy peněz mezi účty různých bank. 
-  * Třída //​CustomerData//​ je třída která slouží pouze jako úložiště dat spojených s klientem banky. Neobsahuje žádnou tzv. "​business logic"​. 
-  * Třída //​CustomerInterface//​ je abstraktní třída. Deklaruje interface pro manipulaci s klienty banky. 
-  * Třída //​BasicCustomer//​ je přímým potomkem třídy //​CustomerInterface//​. Implementuje interface deklarované ve třídě //​CustomerInterface//​. 
-  * Třída //​AccountData//​ je třída která slouží pouze jako úložiště dat spojených s bankovním účtem. Neobsahuje žádnou tzv. "​business logic"​. 
-  * Třída //​AccountInterface//​ je abstraktní třída. Deklaruje interface pro manipulaci s bankovními účty. 
-  * Třída //​BasicAccount//​ je přímým potomkem třídy //​AccountInterface//​. Implementuje interface deklarované ve třídě //​AccountInterface//​. 
-  * Třída //​Database//​ představuje rozhraní k databázi (což jsou v našem případě standardní kontejnery objektů tříd //​CustomerData//​ a //​AccountData//​). 
-  * Třída //Bank// představuje třídu banky. Obsahuje objekt třídy //​Database//​. ​ 
- 
-{{:​public:​pb161:​2015_hw04:​2015-hw04_blank.zip|Zde}} si stáhněte hlavičkové a zdrojové soubory. Hlavičkové soubory obsahují pouze veřejné členské funkce zmíněné níže s výjimkou souboru BankExceptions.h,​ který obsahuje potřebné výjimky. Zdrojové soubory až na jednoduchý ukázkový main jsou prázdné. 
- 
-//(Pozn.: Nenechte se zastrašit dlouhým zadáním, snažil jsem se předejít nejasnostem ;))// 
- 
-==== Požadavky: Třídy ==== 
-  * <code cpp>​class CustomerData</​code>​ 
-    * Soubory: //​CustomerData.h//​ 
-    * Popis: 
-      * Třída sloužící jakožto úložiště dat o klientovi. 
-    * Veřejné členské funkce: 
-      * Přidejte dle vašeho uvážení. 
-  * <code cpp>​class CustomerInterface</​code>​ 
-    * Soubory: //​CustomerInterface.h//​ 
-    * Popis: 
-      * Abstraktní třída. Deklaruje společné interface pro všechny implementace klienta. 
-    * Veřejné členské funkce: 
-      * <code cpp>​virtual AccountInterface* createAccount() = 0;</​code>​ 
-      * <code cpp>​virtual std::​vector<​AccountInterface*>​ const& accounts() = 0;</​code>​ 
-      * <code cpp>​virtual std::string name() const = 0;</​code>​ 
-      * <code cpp>​virtual uint number() const = 0;</​code>​ 
-  * <code cpp>​class BasicCustomer : public CustomerInterface</​code>​ 
-    * Soubory: //​Customer.h//,​ //​Customer.cpp//​ 
-    * Popis: 
-      * Základní implementace klienta. 
-    * Veřejné členské funkce: 
-      * <code cpp>​AccountInterface* createAccount();</​code>​ 
-        * Vytvoří účet spojený s tímto klientem a vrátí ukazatel na jeho interface. 
-        * Číslo vytvořeného účtu je 1 + celkový (míněno v celé bance) počet účtů vytvořených před tímto. 
-      * <code cpp>​std::​vector<​AccountInterface*>​ const& accounts();</​code>​ 
-        * Vrátí vektor ukazatelů na interface všech účtů spojených s tímto klientem. 
-      * <code cpp>​std::​string name() const;</​code>​ 
-        * Vrátí jméno klienta. 
-      * <code cpp>uint number() const;</​code>​ 
-        * Vrátí číslo klienta v bance. 
-  * <code cpp>​class AccountID</​code>​ 
-    * Soubory: //​AccountID.h//​ 
-    * Popis: 
-      * AccountID slouží jako jednoznačný identifikátor bankovních účtů v systému s jediným bankovním registrem. 
-    * Veřejné členské funkce: 
-      * <code cpp>​AccountID(uint accountNumber,​ uint bankNumber);</​code>​ 
-        * ''​accountNumber''​ -- číslo účtu v bance. 
-        * ''​bankNumber''​ -- číslo banky v bankovním registru. 
-      * <code cpp>uint accountNumber() const;</​code>​ 
-        * Vrátí číslo účtu v bance. 
-      * <code cpp>uint bankNumber() const;</​code>​ 
-        * Vrátí číslo banky v bankovním registru. 
-  * <code cpp>​class AccountData</​code>​ 
-    * Soubory: //​AccountData.h//​ 
-    * Popis: 
-      * Třída sloužící jakožto úložiště dat o účtu. 
-    * Veřejné členské funkce: 
-      * Přidejte dle vašeho uvážení. 
-  * <code cpp>​class AccountInterface</​code>​ 
-    * Soubory: //​AccountInterface.h//​ 
-    * Popis: 
-      * Abstraktní třída. Deklaruje společné interface pro všechny implementace účtu. 
-    * Veřejné členské funkce: 
-      * <code cpp>​virtual void deposit(uint amount) = 0;</​code>​ 
-      * <code cpp>​virtual void withdraw(uint amount) = 0;</​code>​ 
-      * <code cpp>​virtual void transfer(uint amount, AccountID target) = 0;</​code>​ 
-      * <code cpp>​virtual uint balance() const = 0;</​code>​ 
-      * <code cpp>​virtual uint number() const = 0;</​code>​ 
-  * <code cpp>​class BasicAccount : public AccountInterface</​code>​ 
-    * Soubory: //​Account.h//,​ //​Account.cpp//​ 
-    * Popis: 
-      * Základní implementace účtu. 
-    * Veřejné členské funkce: 
-      * <code cpp>void deposit(uint amount);</​code>​ 
-        * Vloží na účet //amount// peněz. 
-        * Množství peněz na účte se zvýší o //amount//. 
-      * <code cpp>void withdraw(uint amount);</​code>​ 
-        * Vybere z účtu //amount// peněz. 
-        * Množství peněz na účte se sníží o //amount//. 
-        * Výjimky: 
-          * Pokud //​balance()//​ není alespoň //amount//, pak se operace neprovede a hodnotou se vyhodí výjimka //​InsufficientFunds//​. 
-      * <code cpp>void transfer(uint amount, AccountID target);</​code>​ 
-        * Převede z účtu //amount// peněz na účet s označením //target//. 
-        * Množství peněz na účte se sníží o //amount//. 
-        * Množství peněz na účtě s označením //target// se zvýší o //amount//. 
-        * Výjimky: 
-          * Pokud neexistuje banka s číslem //​target.bankNumber()//,​ pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentBank//​. 
-          * Pokud banka s číslem //​target.bankNumber()//​ existuje, ovšem nemá účet s číslem //​target.accountNumber()//,​ pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentAccount//​. 
-          * Pokud //​balance()//​ není alespoň //amount//, pak se operace neprovede a hodnotou se vyhodí výjimka //​InsufficientFunds//​. 
-      * <code cpp>uint balance() const;</​code>​ 
-        * Vrátí zůstatek peněz na účtu. 
-      * <code cpp>uint number() const;</​code>​ 
-        * Vrátí číslo účtu (v bance). 
-  * <code cpp>​class Database</​code>​ 
-    * Soubory: //​Database.h//,​ //​Database.cpp//​ 
-    * Popis: 
-      * Slouží jako úložiště dat o účtech a klientech. 
-    * Veřejné členské funkce: 
-      * <code cpp>​CustomerData createCustomer(std::​string const& name);</​code>​ 
-        * Vytvoří nového klienta se jménem //name// a vrátí jeho data. 
-        * První vytvořený klient má číslo 1. Další nově vytvoření klienti mají číslo o jedna vyšší než klient vytvořený před nimi. 
-      * <code cpp>​AccountData createAccount(uint ownerNumber);</​code>​ 
-        * Vytvoří nový účet klientovi s číslem //​ownerNumber//​ a vrátí data nově vytvořeného účtu. 
-        * První vytvořený účet má číslo 1. Další nově vytvořené účty mají číslo o jedna vyšší než účet vytvořený před nimi. 
-      * <code cpp>​CustomerData loadCustomer(uint number) const;</​code>​ 
-        * Vrátí data klienta s číslem //number//. 
-        * Výjimky: 
-          * Pokud klient s daným číslem v bance neexistuje, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentCustomer//​. 
-      * <code cpp>​AccountData loadAccount(uint number) const;</​code>​ 
-        * Vrátí data účtu s číslem //number//. 
-        * Výjimky: 
-          * Pokud účet s daným číslem v bance neexistuje, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentAccount//​. 
-      * <code cpp>void save(CustomerData);</​code>​ 
-        * Uloží existujícího klienta. 
-      * <code cpp>void save(AccountData);</​code>​ 
-        * Uloží existující účet. 
-      * <code cpp>​std::​map<​uint,​ CustomerData>​ const& customers() const;</​code>​ 
-        * Vrátí mapu dat všech klientů v této databázi. 
-        * Klíčem mapy je číslo klienta v databázi. 
-      * <code cpp>​std::​map<​uint,​ AccountData>​ const& accounts() const;</​code>​ 
-        * Vrátí mapu dat všech účtů v této databázi. 
-        * Klíčem mapy je číslo účtu v databázi. 
-  * <code cpp>​class BankRegister</​code>​ 
-    * Soubory: //​BankRegister.h//,​ //​BankRegister.cpp//​ 
-    * Popis: 
-      * Slouží jako registr bank. Umožňuje peněžní transakce mezi vícerými bankami. 
-    * Veřejné členské funkce: 
-      * <code cpp>​BankRegister();</​code>​ 
-        * Vytvoří prázdný bankovní registr. 
-      * <code cpp>uint registerBank(Bank* bank);</​code>​ 
-        * První registrovaná banka má číslo 1. Další registrované banky mají číslo o jedna vyšší než banka registrovaná před nimi. 
-      * <code cpp>void unregisterBank(uint bankNumber);</​code>​ 
-        * Odstraní banku s daným číslem z registru. Nemá vliv na číslování bank. 
-        * Výjimky: 
-          * Pokud banka s číslem //​bankNumber//​ neexistuje, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentBank//​. 
-      * <code cpp>​Bank* bankByNumber(uint bankNumber) const;</​code>​ 
-        * Vrátí ukazatel na banku s číslem //​bankNumber//​. 
-        * Výjimky: 
-          * Pokud banka s číslem //​bankNumber//​ neexistuje, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentBank//​. 
-  * <code cpp>​class Bank</​code>​ 
-    * Soubory: //Bank.h//, //​Bank.cpp//​ 
-    * Popis: 
-      * Třída sloužící pro manipulaci s bankou. 
-      * Třída by měla obsahovat objekt třídy //​Database//​ jakožto členskou proměnnou. 
-    * Veřejné členské funkce: 
-      * <code cpp>​Bank(std::​string const& name, BankRegister* centralRegister);</​code>​ 
-        * Konstruktor. 
-        * Nastaví jméno banky na //name//. 
-        * Banka bude součástí registru na který ukazuje //​centralRegister//​. 
-      * <code cpp>​CustomerInterface* createCustomer(std::​string const& name);</​code>​ 
-        * Vytvoří v bance klienta s daným jménem a vrátí ukazatel na jeho interface. 
-        * První vytvořený klient má číslo 1. Další nově vytvoření klienti mají číslo o jedna vyšší než klient vytvořený před nimi. 
-      * <code cpp>​CustomerInterface* customerByNumber(uint customerNumber);</​code>​ 
-        * Vrátí ukazatel na interface klienta s daným číslem. 
-        * Výjimky: 
-          * Pokud klient s daným číslem v bance neexistuje, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentCustomer//​. 
-      * <code cpp>​AccountInterface* accountByNumber(uint accountNumber);</​code>​ 
-        * Vrátí ukazatel na interface účtu s daným číslem. 
-        * Výjimky: 
-          * Pokud účet s daným číslem v bance neexistuje, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentAccount//​. 
-      * <code cpp>​std::​map<​uint,​ CustomerInterface*>​ const& customers();</​code>​ 
-        * Vrátí mapu ukazatelů na interface všech klientů banky. 
-        * Klíčem mapy je číslo klienta v bance. 
-      * <code cpp>​std::​map<​uint,​ AccountInterface*>​ const& accounts();</​code>​ 
-        * Vrátí mapu ukazatelů na interface všech účtů v bance. 
-        * Klíčem mapy je číslo účtu v bance. 
-      * <code cpp>void transfer(uint amount, uint source, AccountID target);</​code>​ 
-        * Převede z účtu (z této banky) s číslem //source// //amount// peněz na účet s označením //target//. 
-        * Množství peněz na účte s číslem //source// se sníží o //amount//. 
-        * Množství peněz na účtě s označením //target// se zvýší o //amount//. 
-        * Výjimky: 
-          * Pokud v této bance neexistuje účet s číslem //source//, pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentAccount//​. 
-          * Pokud neexistuje banka s číslem //​target.bankNumber()//,​ pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentBank//​. 
-          * Pokud banka s číslem //​target.bankNumber()//​ existuje, ovšem nemá účet s číslem //​target.accountNumber()//,​ pak se operace neprovede a hodnotou se vyhodí výjimka //​NonexistentAccount//​. 
-          * Pokud //​balance()//​ účtu s číslem //source// není alespoň //amount//, pak se operace neprovede a hodnotou se vyhodí výjimka //​InsufficientFunds//​. 
-      * <code cpp>​std::​string name() const;</​code>​ 
-        * Vrátí název banky. 
-      * <code cpp>uint number() const;</​code>​ 
-        * Vrátí číslo banky v bankovním registru. 
-      * <code cpp>​createAccount</​code>​ 
-        * Podoba této funkce, případně to jestli ji vůbec implementujete,​ je na vás. 
-  * Veškeré zde zmíněné výjimky jsou již nadefinované v souboru //​BankExceptions.h//,​ který je součástí souborů ke stažení. 
-  * Pokud nastane případ, kdy lze dle specifikace vyhodit více výjimek, vyhoďte z nich tu, která se na seznamu výjimek příslušné funkce vyskytuje nejdříve. 
-  * Třídám smíte přidat konstruktory a destruktory. 
-  * Třídám smíte přidat libovolné množství privátních členských funkcí a proměnných. 
-  * Třídám nesmíte přidávat neprivátní členské funkce či proměnné, pokud není řečeno jinak. 
- 
-==== Požadavky: Interaktivní prostředí ==== 
-Další částí úkolu je vytvoření interaktivního bankovního interface pro více bank s jediným bankovním registrem. 
- 
-Interakce bude probíhat přes standardní vstup a výstup. Můžete počítat s tím, že vstupy budou ve správném formátu (tj. např. tam kde má být na vstupu číslo bude číslo), ovšem ne vždy musí být hodnoty validní (tj. např. mohu chtít vložit peníze na neexistující účet, což by správně mělo vyhodit výjimku). Pokud tedy během práce s interaktivním prostředím dojde vyhození výjimky, je třeba tuto výjimku zachytit (nejlépe referencí) a vypsat její //what()//. Po vypsání pokračuje program dál. 
- 
-V implementaci máte volnost, vyžadováno je pouze dodržení přesného formátu a funkčnosti (popsáno dále). Kód pro interaktivní prostředí vypracujte do souborů //​Interactive.h//​ a //​Interactive.cpp//​. Samotný main umístěte do souboru //​main.cpp//​. 
- 
-== Příkazy == 
- 
-  * **Vytvoření banky** 
-    * <​code>​create_bank <​bank_name></​code>​ 
-      * Příkaz vytvoří banku s názvem <​bank_name>​ (může obsahovat mezery). 
-      * Příkaz vypíše následující:​ <​code>​Created bank: <​bank_name>​ | <​bank_number></​code>​ 
-      * Příklad:<​code>​create_bank Generic Bank 
-Created bank: Generic Bank | 1</​code>​ 
-  * **Vytvoření klienta** 
-    * <​code>​create_customer <​bank_number>​ <​customer_name></​code>​ 
-      * Příkaz vytvoří zákazníka banky s číslem <​bank_number>​. Zákazníkovo jméno bude <​customer_name>​ (může obsahovat mezery). 
-      * Příkaz vypíše následující:​ <​code>​Created customer: <​customer_name>​ | <​customer_number></​code>​ 
-      * Příklad:<​code>​create_customer 1 Jon Doe 
-Created customer: Jon Doe | 1</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-  * **Vytvoření účtu** 
-    * <​code>​create_account <​bank_number>​ <​customer_number></​code>​ 
-      * Příkaz vytvoří účet v bance s číslem <​bank_number>​. Účet bude patřit zákazníkovi s číslem <​customer_number>​ 
-      * Příkaz vypíše následující:​ <​code>​Created account: <​account_number>/<​bank_number></​code>​ 
-      * Příklad:<​code>​create_account 1 1 
-Created account: 1/​1</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-        * Kdy banka s příslušným číslem existuje, ale neexistuje v ní uživatel s příslušným číslem. 
-  * **Vložení peněz na účet** 
-    * <​code>​deposit <​amount>​ <​account_number>/<​bank_number></​code>​ 
-      * Příkaz vloží na účet s AccountID(<​account_number>,​ <​bank_number>​) <​amount>​ peněz. 
-      * Příklad: <​code>​deposit 100 123456/​2</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-        * Kdy existuje banka s příslušným číslem, ale neexistuje účet s příslušným číslem. 
-  * **Vybrání peněz z účtu** 
-    * <​code>​withdraw <​amount>​ <​account_number>/<​bank_number></​code>​ 
-      * Příkaz vybere z účtu s AccountID(<​account_number>,​ <​bank_number>​) <​amount>​ peněz. 
-      * Příklad: <​code>​withdraw 100 123456/​2</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-        * Kdy existuje banka s příslušným číslem, ale neexistuje účet s příslušným číslem. 
-        * Kdy množství peněz na účtu není větší nebo rovno //amount//. 
-  * **Převedení peněz mezi účty** 
-    * <​code>​transfer <​amount>​ <​account_number1>/<​bank_number1>​ <​account_number2>/<​bank_number2></​code>​ 
-      * Příkaz převede z účtu s AccountID(<​account_number1>,​ <​bank_number1>​) <​amount>​ peněz na účet s AccountID(<​account_number2>,​ <​bank_number2>​) 
-      * Příklad: <​code>​transfer 100 123456/2 654321/​1</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje 1. banka s příslušným číslem. 
-        * Kdy 1. banka s příslušným číslem existuje, ale neexistuje v ní účet s příslušným číslem. 
-        * Kdy neexistuje 2. banka s příslušným číslem. 
-        * Kdy 2. banka s příslušným číslem existuje, ale neexistuje v ní účet s příslušným číslem. 
-        * Pokud množství peněz na prvním účtu není alespoň //amount//. 
-  * **Vypsání informací o bance** 
-    * <​code>​bank_info <​bank_number></​code>​ 
-      * Příkaz vypíše informace o bance s číslem <​bank_number>​ 
-      * Příkaz vypíše následující:​ <​code>​Name:​ <​bank_name>​ 
-Customers: <​number_of_customers>​ 
-Accounts: <​number_of_accounts>​ 
-  </​code>​ 
-      * Příklad: <​code>​bank_info 1 
-Name: Reliable Bank 
-Customers: 4 
-Accounts: 7 
-</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-  * **Vypsání informací o klientovi** 
-    * <​code>​customer_info <​bank_number>​ <​customer_number></​code>​ 
-      * Příkaz vypíše informace o zákazníkovi banky s číslem <​bank_number>​ kteréhož číslo je <​customer_number>​ 
-      * Příkaz vypíše následující:​ <​code>​Name:​ <​customer_name>​ 
-Accounts: <​account_numbers></​code>​ 
-      * Příklad: <​code>​customer_info 1 1 
-Name: Jon Doe 
-Accounts: 2, 5, 7 
-</​code>​ 
-        * //(Pozn.: <​account_numbers>​ znamená vypsání čísel účtů ve vzestupném pořadí, sousední čísla jsou oddělena řetězcem ", ")// 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-        * Kdy banka s příslušným číslem existuje, ale neexistuje v ní zákazník s příslušným číslem. 
-  * **Vypsání informací o účtu** 
-    * <​code>​account_info <​account_number>/<​bank_number></​code>​ 
-      * Příkaz vypíše informace o účtu banky s číslem <​bank_number>​ kteréhož číslo je <​account_number>​ 
-      * Příkaz vypíše následující:​ <​code>​Balance:​ <​account_balance>​ 
-</​code>​ 
-      * Příklad: <​code>​account_info 2/1 
-Balance: 123 
-</​code>​ 
-      * Možné výjimky v případech:​ 
-        * Kdy neexistuje banka s příslušným číslem. 
-        * Kdy banka s příslušným číslem existuje, ale neexistuje v ní účet s příslušným číslem. 
-  * **Ukončení sezení** 
-    * <​code>​quit</​code>​ 
-      * Příkaz ukončí probíhající interaktivní sezení a tím i celý běh programu. 
-  * **Vypisování výjimek** 
-    * Formát: 
-      * <code cpp>​std::​cout << "​Exception:​ " << vyjimka.what() << std::​endl;</​code>​ 
-    * Přednosti: 
-      * Některé případy mohou být kandidáty k vypsání více výjimek (splňují více výjimečných případů). Vypište vždy pouze tu, která přísluší prvnímu takovému případu na seznamu. (Toto pořadí by mělo přirozeně vyplynout z Vaší implementace hierarchie). 
- 
-**Soubory k odevzdání:​** 
-  * AccountID.h 
-  * AccountData.h 
-  * AccountInterface.h 
-  * Account.h 
-  * Account.cpp 
-  * CustomerData.h 
-  * CustomerInterface.h 
-  * Customer.h 
-  * Customer.cpp 
-  * Bank.cpp 
-  * Bank.h 
-  * BankRegister.cpp 
-  * BankRegister.h 
-  * Database.cpp 
-  * Database.h 
-  * Interactive.cpp 
-  * Interactive.h 
-  * main.cpp 
-==== Poznámky ==== 
- 
-  * Doporučuji vytvořit si vlastní unit testy. Samotný výstup Vašeho interaktivního prostředí si můžete porovnat s výstupem vzorového vypracování,​ které je umístěno na aise /​home/​xmiklos/​pb161/​hw04 
-  * Možná jste si všimli hojného využívání konstantních referencí jakožto argumentu funkce. Důvodem jejich použití je to, že často mohou ušetřit zbytečné kopírování u potencionálně velkých objektů. Nemá smysl to ovšem přehánět,​ například brát konstantní referenci na int, char a další vestavěné datové typy může naopak výkonnostně uškodit. Také například nedává smysl používat konstantní reference na argumenty v případech,​ kdy argument musíme v těle funkce beztak zkopírovat. Z podobných důvodů z některých funkcí vracíme konstantní reference na členské proměnné. 
-  * Vzpomeňte si na [[http://​en.wikipedia.org/​wiki/​Rule_of_three_(C%2B%2B_programming)|Rule of Three]] a zakažte kopírování a přiřazování u tříd kde tyto funkce nedávají smysl. 
- 
-**Autor:** Úlohu připravil Petr Pilař, v případě nejasností kontaktujte Michala Mikloše na <​xmiklos@fi.muni.cz>​ nebo diskuzním fóru. 
QR Code
QR Code public:pb161_fall15_hw04 (generated for current page)