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 s názvem GenderEnum. Tento typ bude moci nabývat hodnot 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 údaje implementujte pomocí properties (vlastností). Věk a pohlaví nebudou povinnými údaji.
Při nastavení věku kontrolujte, zda je jeho hodnota v rozmezí 0 až 150 let včetně. Pokud hodnota tomuto rozmezí neodpovídá, nepovolte její nastavení a věk zůstane nevyplněný.
Osoba bude mít také vlastnost, která udává, zda je dospělá, či nikoli (bool). Hodnota této vlastnosti bude automaticky určena na základě věku dané osoby.
Implementujte vlastní logiku pro převod objektu 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é podobě. Zkuste využít třídu StringBuilder.
Vytvořte třídu PopulationDatabase. Tato třída bude umožňovat přidávání nových osob do databáze pomocí metody Add. Jednotlivé osoby budou interně (v rámci této třídy) uloženy v poli.
Vytvořte vlastnost Count, která bude vracet aktuální počet osob v databázi.
Vytvořte vlastnost AdultCount, která bude vracet počet dospělých osob v databázi.
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 svou implementaci v rámci konzolové aplikace (v metodě Main).
V rámci konzolové aplikace implementujte logiku umožňující uživateli zadávat příkazy (print, add a exit). Na základě zvoleného příkazu se následně spustí příslušná 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 zadání jednotlivých vlastností. Nepovinné vlastnosti nebude nutné vyplňovat.