Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
S Sample_Solutions
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OOP
  • Sample_Solutions
  • Wiki
  • Assignment part 1

Assignment part 1 · Changes

Page history
Create Assignment part 1 authored Nov 09, 2019 by Ing. Lukáš Hruška's avatar Ing. Lukáš Hruška
Hide whitespace changes
Inline Side-by-side
Showing with 58 additions and 0 deletions
+58 -0
  • Assignment---part-1.md Assignment---part-1.md +58 -0
  • No files found.
Assignment---part-1.md 0 → 100644
View page @ a39cd6ae
# 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
Clone repository
  • Assignment part 1
  • Assignment part 2
  • Assignment part 3
  • Cv10
  • Cv11
  • Cv4
  • Cv5
  • Cv7
  • Cv8
  • Cv9
  • Requirements
  • Home