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

Last edited by Ing. Lukáš Hruška Nov 09, 2019
Page history

Assignment part 1

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