|
|
|
# Zadanie - Pizzeria
|
|
|
|
|
|
|
|
Cieľom zadanie z OOP bude vytvoriť jednoduchý informačný systém pre prevádzku pizzerie. Samozrejme, jedná sa o zjednodušenú verziu, ktorej cieľom nie je 100% reprezentácia reálneho systému a niektoré časti budú mierne pritiahnuté za vlasy s cieľom využiť princípy OOP v rámci C#.
|
|
|
|
|
|
|
|
Zadanie môžete robiť ako Windows Forms application alebo WPF.
|
|
|
|
|
|
|
|
Hlavné okno si rozdeľte na dve časti:
|
|
|
|
|
|
|
|
- Jedna časť bude obsahovať dva tlačidlá ktoré otvoria sklad a pečenie
|
|
|
|
- Druhá časť bude obsahovať reprezentáciu stolov, kde sa pri kliknutí na stôl zobrazí objednávka
|
|
|
|
|
|
|
|
## 1. Sklad
|
|
|
|
|
|
|
|
Vytvorte si osobitnú knižnicu PizzaLib ktorá bude definovať triedy potrebné na prácu s dátami (v reálnej aplikácií by tu bol definovaný databázový model a kontext, my si však vystačíme s prácou so súbormi).
|
|
|
|
|
|
|
|
Nech sú tu definované nasledujúce triedy a rozhrania:
|
|
|
|
|
|
|
|
_Item, Ingredient, MiscellaneousItem, Pizza sú triedy, ktoré definujú všeobecné správanie daného typu artiklov, nie jedného konkrétneho artiklu - artikle budú definované parametrami v rámci objektu danej triedy_.
|
|
|
|
|
|
|
|
1. interface Sellable - definuje veci, ktoré sa dajú predať
|
|
|
|
- double GetPrice()
|
|
|
|
- void Order() - vykoná objednávku - odpočíta zo skladu tovar
|
|
|
|
|
|
|
|
2. interface CsvSerializable - definuje spôsob, ako serializovať objekt na uloženie do CSV súboru
|
|
|
|
- string ToCsvLine() - nech prvá hodnota je typ objektu, následne hodnoty, ktoré chcete uložiť
|
|
|
|
|
|
|
|
3. abstract class Item: CsvSerializable - definuje všeobecné správanie artiklov v sklade, musí obsahovať aspoň meno a hmotnosť / objem materiálu
|
|
|
|
- definujte si parametrický konštruktor: name, initialAmount, warningTreshold (hranica na upozornenie, že dochádza)
|
|
|
|
- definujte si gettery a nech táto trieda __neobsahuje__ priamo settery ale priamo metódy na pridanie a ubranie množstva (teda nech nie je možné z vonku priamo nastaviť hodnotu)
|
|
|
|
- v prípade, že nie je dosť materiálu na sklade, nech sa pri pokuse zobrať vyvolá InsufficientIngredientsException
|
|
|
|
- boolean isLow() vráti true ak je na sklade málo danej veci
|
|
|
|
|
|
|
|
4. class InsufficientIngredientsException : Exception - chyba ktorá sa vyvolá v prípade, že nie je na sklade dostatok danej suroviny
|
|
|
|
|
|
|
|
5. class Ingredient : Item - definuje prísadu potrebnú na prípravu pizze napr. múku, pretlak, syr...
|
|
|
|
|
|
|
|
6. class MiscellaneousItem : Item, Sellable - prakticky to isté ako Ingredient, akurát tu budú rôzne iné veci, ktoré si môže človek objednať, napr. pitie, chrumky...
|
|
|
|
- nech konštruktor akceptuje ešte aj predajnú cenu ako parameter
|
|
|
|
|
|
|
|
7. class Inventory - trieda obsahujúca kolekciu vecí na sklade
|
|
|
|
- môžete ich mať uložené vo viacerých kolekciách a následne ich spojiť podľa potreby alebo ich mať všetky spolu a ak je to potrebné, vykonať typovú kontrolu a podľa toho ich rozdeliť
|
|
|
|
- `IEnumerable<Item> GetItems()` vráti zoznam všetkých vecí na sklade
|
|
|
|
- `AddItem(item)` pridá danú vec do zoznamu, ak už v zozname je, vyvolajte ArgumentException (ak ju už vami použitá kolekcia nevyvolá sama) - ak máte osobitné kolekcie pre Ingredient a MiscellaneousItem, typovú kontrolu vykonajte tu.
|
|
|
|
- Item GetItem(string name)
|
|
|
|
|
|
|
|
8. class Pizza : Sellable, CsvSerializable
|
|
|
|
- nech sú v konštruktore definované nasledujúce parametre: názov, cena, kolekcia potrebných ingrediencií a aké množstvo ich treba (tu sa oplatí použiť Dictionaty<TKey, TValue> ak neviete ako na to, google & stackoverflow, prípadne to môžete obísť vytvorením vlastnej triedy kde bude Item & price a použijete List)
|
|
|
|
- ingrediencie majte uložené ako názov (string), nie referenciu na objekt v sklade (Inventory) - danú vec si môže vyžadovať recept ale nie je evidovaná na sklade + zjednoduší vám to robotu.
|
|
|
|
- serializáciu zoznamu ingrediencií môžete vykonať aj ako JSON
|
|
|
|
|
|
|
|
9. class RestaurantMenu - trieda predstavujúca zoznam vecí dostupných na objednávku (tzn. Sellable)
|
|
|
|
|
|
|
|
10. class CsvFileHelper - trieda zodpovedná za čítanie a zápis CSV súborov, pri práci so súbormi používajte IDisposable pattern.
|
|
|
|
https://en.wikipedia.org/wiki/Comma-separated_values
|
|
|
|
- konštruktor, kde bude definovaná cesta k súboru a spôsob otvorenia.
|
|
|
|
- `void SaveToFile(IEnumerable<CsvSerializable>)` - uloží kolekciu do súboru
|
|
|
|
- `IEnumerable LoadFromFile()` - prečíta súbor, na samotné vytváranie použite Deserialize
|
|
|
|
- `CsvSerializable Deserialize(string)` - vráti jeden deserializovaný objekt, bude sa jednať o návrhový vzor Factory Method https://en.wikipedia.org/wiki/Factory_method_pattern |