|
|
# Zadanie Časť 2
|
|
|
|
|
|
## 0. PizzaLib
|
|
|
|
|
|
`abstract class Item` premenujte na `AbstractItem` (nezabudnite na refaktorizáciu kódu!)
|
|
|
|
|
|
pridajte rozhranie `Item`
|
|
|
|
|
|
nech toto rozhranie definuje verejné metódy, ktoré máte implementované v `AbstractItem` teda aspoň
|
|
|
|
|
|
```csharp
|
|
|
double GetAmount();
|
|
|
bool IsLow();
|
|
|
void Add(double amount);
|
|
|
void Remove(double amount);
|
|
|
```
|
|
|
|
|
|
(nech `AbstractItem` implementuje `Item`)
|
|
|
|
|
|
Pridajte si interface `IInventory, nech toto rozhranie obsahuje aspoň
|
|
|
|
|
|
```csharp
|
|
|
List<Item> GetItems();
|
|
|
Item GetItem(Predicate<Item> predicate);
|
|
|
void AddItem(Item item)
|
|
|
```
|
|
|
|
|
|
nech `Inventory` implementuje `IInventory`
|
|
|
|
|
|
(v prípade, že máte implementované aj iné verejné metódy, pridajte si ich do týchto rozhraní, zvážte, či sú potrebné - ak áno, určite to zníži zhodu pri kontrole orginality)
|
|
|
|
|
|
Nech `ISellable` obsahuje `void SetInventory(IInventory inventory)` ktorá slúži na nastavenie referencie na sklad, ktorý je následne využitý v `Order()`.
|
|
|
|
|
|
V rámci tried, ktoré zobrazujete na DataGridView budete potrebovať použiť properties, inak sa nič nezobrazí. Na tomto mieste je vhodné použiť vlastnosti (properties) bez členskej premennej a bez mutátora (set), príklad:
|
|
|
|
|
|
```csharp
|
|
|
private double outsideTemperature;
|
|
|
|
|
|
public bool IsColdOutside { get { return IsFreezing; } }
|
|
|
|
|
|
private bool IsFreezing()
|
|
|
{
|
|
|
return outsideTemperature < 273.16; //trojný bod vody
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 1. Sklad
|
|
|
|
|
|
Vytvorte si nový formulár, ktorého cieľom bude zobrazenie stavu a evidencia obsahu skladu. Na zobrazenie použite DataGridView.
|
|
|
|
|
|
1. Pri dvojkliku na DataGridView sa otvorí nový formulár, ktorý umožňuje modifikáciu existujúceho riadku, v prípade dvojkliku na prázdny riadok tento formulár umožní pridanie nového artiklu do skladu.
|
|
|
2. Pridajte možnosť filtrovania artiklu podľa názvu.
|
|
|
3. Pridajte RadioButton alebo CheckBox (podľa vlastnej voľby) pre voľbu filtru Všetky (ak používate checkbox, označí všetky ostatné automaticky) / Prísady / Ostatné. Ak pužívate aj iné kategórie pre tovar, tiež ich zobrazte)
|
|
|
4. aaa
|
|
|
|
|
|
Okno pre sklad zobrazte ako klasické okno (`Form.Show()`), okno pre artikel v sklade zobrazte ako modálne / diálogové okno (`Form.ShowDialog()`).
|
|
|
|
|
|
## 2. Objednávky
|
|
|
|
|
|
Vytvorte si triedu, ktorá bude reprezentovať objednávku pre určitý stôl.
|
|
|
|
|
|
Vytvorte si triedu, ktorá bude reprezentovať stoly v reštaurácií, nech táto trieda umožňuje prístup k jednotlivým stolom.
|
|
|
|
|
|
__poznámka: vhodné je tu použiť `Dictionary<Button, Table>`__
|
|
|
|
|
|
Nezabudnite dodržať oddelenie UI a programovej logiky - táto trieda poskytuje dáta, nepracuje s UI
|
|
|
|
|
|
Vytvorte si triedu zodpovednú za tlačenie bločkov, nech táto trieda implmenetuje návrhový vzor Singleton.
|
|
|
|
|
|
Na hlavný formulár pridajte tlačidlá reprezentujúce stoly. Po kliknutí na tlačidlo sa otvorí novy formulár, kde bude zobrazená objednávka, jej úprava, pridanie nových vecí a tlač bločku. V tomto formulári ošetrite aj výnimku, ktorá sa vyvolá pri nedostatku materiálu na sklade.
|
|
|
|
|
|
__Pozor! v prípade nedostatku surovín pri objednaní pizze sa žiadna surovina nesmie zo skladu stratiť - kontrolu vykonajte v rámci Pizza.Order()!__ |