Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Radogost/SO-ciastkarnia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

🍰 Temat 15 – Ciastkarnia

🎯 Cel Projektu

Implementacja symulacji procesów w ciastkarni z samobsługowym sklepem, koncentrująca się na zarządzaniu współbieżnym dostępem do podajników z wypiekami, obsługą klientów oraz koordynacją pracy piekarza i kasjerów.


⚙️ Opis Procesu

Ciastkarnia produkuje P różnych wyrobów cukierniczych (P > 10), każdy w innej cenie:

  • Produkty trafiają do sprzedaży w samodzielnych podajnikach w sklepie.
  • Każdy podajnik ma ograniczoną pojemność Ki.
  • Produkty są pobierane przez klientów w kolejności FIFO (pierwsze wsadzone → pierwsze pobrane).

Proces sprzedaży

  1. Piekarz: produkuje losową liczbę sztuk różnych wyrobów i dokładnie wkłada je na podajniki.
  2. Klienci: przychodzą losowo, mają listę zakupów (co najmniej 2 różne produkty).
  3. Pobieranie produktów: jeśli podajnik jest pusty, klient nie kupuje danego produktu.
  4. Kasy: klienci udają się do jednej z kas, która wystawia paragon i zapisuje liczbę sprzedanych produktów.

📦 Podajniki i sklep

  • Pojemność podajników: każdy podajnik może przechowywać maksymalnie Ki sztuk.

  • Limit klientów w sklepie: maksymalnie N osób. Reszta czeka na zewnątrz.

  • Stanowiska kasowe: 2 kasy, zawsze działa co najmniej 1.

    • Na każde K = N/2 klientów powinna przypadać co najmniej 1 czynna kasa.
    • Jeśli liczba klientów < N/2 → jedna kasa zostaje zamknięta (klienci w kolejce muszą zostać obsłużeni).

🕒 Sterowanie i sygnały

Procesy w ciastkarni są sterowane przez Kierownika, który wysyła sygnały:

Polecenie Odbiorca Efekt
sygnał1 Klienci i kasy Inwentaryzacja: klienci kontynuują zakupy, po zamknięciu sklepu raporty sprzedaży są zapisane do pliku
sygnał2 Klienci Ewakuacja: klienci natychmiast opuszczają sklep, porzucone produkty trafiają do kosza przy kasach
zamknięcie sklepu Piekarz, kasy Zatrzymanie produkcji i sprzedaży, generowanie raportów końcowych
raport Kierownik Zapis do pliku stanu sprzedaży, stanu podajników i produkcji piekarza

💻 Wymagane Procesy / Wątki

  • Kierownik (Manager): wysyła sygnały sterujące, zbiera raporty od kas i piekarza, generuje raport końcowy.
  • Piekarz (Baker): produkuje losową liczbę sztuk produktów co określony czas i wkłada je na podajniki (FIFO).
  • Kasjer (Cashier): obsługuje klientów z kolejki, wystawia paragony, zapisuje sprzedane ilości produktów.
  • Klienci (Clients): losowo przychodzą, pobierają produkty z podajników, udają się do kasy, reagują na sygnały Kierownika.

📝 Raportowanie

Raport z symulacji należy zapisać w plikach tekstowych:

  • report_kasy_X.txt: sprzedane sztuki produktów i kwoty.
  • report_piekarz.txt: wyprodukowane sztuki każdego produktu.
  • report_podajniki.txt: końcowy stan podajników.
  • report_glowny.txt: zestawienie końcowe przygotowane przez Kierownika, sumy sprzedaży, produkcji i stan magazynowy.
  • log_symulacji.txt: log zdarzeń w kolejności czasowej (produkowanie, wejścia/wyjścia klientów, otwarcie/zamknięcie kas, sygnały kierownika).

⚙️ Mechanizmy synchronizacji

  • Mutex/Lock: ochrona stanu podajników i liczby klientów.
  • Semafory / Condition variables: ograniczenie liczby klientów w sklepie, kontrola dostępności miejsca na podajnikach.
  • Kolejki thread-safe: dla obsługi kolejki klientów do kas.
  • Flag/Event: implementacja sygnałów kierownika (sygnał1 i sygnał2).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published