Cvičení 4
- Vytvořte konzolovou aplikaci a knihovnu tříd s názvem "Database". Veškerý kód aplikace, pokud nebude uvedeno jinak, bude součástí této knihovny.
- Vytvořte vlastní výčtový typ názvem GenderEnum. Tento typ bude moci nabývat hodnota MALE a FEMALE.
- Vytvořte třídu Person, která bude reprezentovat jednu osobu. Osoba bude mít jméno (string), věk (int) a pohlaví (GenderEnum). Tyto vlastnosti implementujte pomocí properties (vlastností). Věk a pohlavní nebudou povinné údaje.
- Při nastavení věku kontrolujte, zdali je v rozmezí 0 až 150. Pokud není, nepovolte jeho nastavení (věk zůstane nevyplněn).
- Osoba bude mít navíc vlastnost, která udává, zdali je dospělá, nebo ne (bool). Hodnota této vlastnosti bude automaticky vyhodnocena na základě věku dané osoby.
- Implementujte vlastní logiku pro převod třídy na text (metoda ToString). V rámci převodu na text vraťte informace o dané osobě v uživatelsky přívětivé formě. Zkuste využít třídy StringBuilder.
- Vytvořte třídu PopulationDatabase. Tato třída bude umožňovat přidávání nových osob do databáze (metoda Add). Jednotlivé osoby budou interně (v rámci této třídy) uloženy v rámci pole.
- Vytvořte vlastnost Count, která bude vracet aktuální počet osob v databázi.
- Vytvořte vlastnost AdultCount, která bude vracet počet osob, které jsou dospělé.
- Vytvořte metodu GetAverageAge, která bude vracet průměrný věk osob. Ošetřete situaci, kdy je databáze prázdná, nebo v ní není žádná osoba s vyplněným věkem.
- Implementujte vlastní logiku pro převod třídy na text (metoda ToString). V rámci převodu na text vraťte informace o počtu osob, počtu dospělých osob, průměrném věku a seznam těchto osob.
- Otestujte vaši implementaci v rámci konzolové aplikace (v metodě Main).
- V rámci konzolové aplikace implementujte logiku umožňující zadání příkazu uživatelem (print, add a exit). Na základě zvolené akce se následně spustí potřebná logika (vypsání obsahu databáze, přidání nové osoby, nebo ukončení aplikace). V případě přidání nové osoby bude uživatel vyzván k vyplnění jednotlivých vlastností (nepovinné vlastnosti nebude nutné vyplnit).