Inżynieria Oprogramowania: Generator Grafików
Zadanie 1: Projekt Systemu Grafikowego
Wstęp
Tworzenie harmonogramów pracy to koszmar każdego managera. Musi on pogodzić potrzeby biznesowe (sklep musi być otwarty), prawne (kodeks pracy) i ludzkie (urlopy, preferencje). Twoim zadaniem jest zaprojektowanie systemu, który zautomatyzuje ten proces.
Cel zadania
Opracowanie analityczne (Baza Danych + Logika) dla systemu generującego grafiki pracy dla sieci sklepów w galeriach handlowych.
Wymagania biznesowe
- Struktura pracy: Sklep czynny Pn-Sob 9:00-21:00 (12h), czasem Niedziele.
- Zasoby: Pracownicy na różnych etatach (1/1, 1/2).
- Ograniczenia prawne: Max 40h/tydzień, max 8h/dzień liczba godzin na dzień definiowana przy każdym pracowniu oddzielnie, 11h odpoczynku między zmianami.
- Funkcje: Automatyczna aktualizacja grafiku po zmianie danych (np. chorobowe).
- Dostęp: Panel WWW dla managera i pracowników (podgląd online).
Kroki do wykonania
1. Projekt Bazy Danych (Entity Relationship Diagram)
Zaprojektuj strukturę bazy danych (np. SQL). Wypisz tabele i kluczowe pola. Pamiętaj o relacjach wiele-do-wielu (np. Pracownik <-> Sklep).
Sugerowane encje:
Users(Pracownicy: imię, etat, max_godzin)Shops(Miejsca pracy: nazwa, godziny_otwarcia)Availability(Dostępność: user_id, data, od, do)Schedule(Wynikowy grafik: user_id, shop_id, data, start, end)
-- Przykład (pseudokod SQL):
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
contract_type DECIMAL(3,2) -- np. 1.0, 0.5
);
-- Dokończ projektując tabelę 'shifts' lub 'schedule'
2. Logika Algorytmu (Pseudokod)
Jak automat ma obsadzić zmiany? To problem optymalizacyjny (Constraint Satisfaction Problem). Zapisz w punktach lub pseudokodzie algorytm przydzielania.
Przykładowe podejście (Greedy / Zachłanne):
- Dla każdego dnia w tygodniu:
- Podziel dzień na zmiany (np. Ranna 9-15, Popołudniowa 15-21).
- Pobierz listę dostępnych pracowników.
- Filtruj tych, którzy:
- Mają "wolne" w tym czasie (Availability).
- Nie przekroczyli etatu w tym tygodniu.
- Mieli 11h przerwy od wczorajszej zmiany.
- Z dostępnych wybierz tego, któremu brakuje najwięcej do wyrobienia etatu (priorytet dla niedociążonych).
- Zapisz w tabeli
Schedule.
3. Interfejs Użytkownika (Makieta/Opis)
Opisz widoki aplikacji.
- Widok Managera: Kalendarz z "dziurami" (nieobsadzone zmiany) na czerwono. Formularz edycji dostępności, edycja pracowników i ich etatów, dostępności, miejsc pracy, edycja miejsc pracy, edycja godzin otwarcia i zamykania.
- Widok Pracownika: Prosty kalendarz "Moje zmiany" + link do eksportu (np. Google Calendar).
- Link publiczny: Token w URL (np.
twojafirma.pl/grafik/uuid-sklepu), aby nie wymagać logowania do szybkiego podglądu.
Zadanie dla chętnych
Zaimplementuj prototyp algorytmu w dowolnym języku (Python/PHP/JS), który przyjmuje JSON z pracownikami i zwraca JSON z grafikiem na 1 dzień.