Mit dem Ansatz wirst du dir aber entweder die Ohren brechen oder das Handtuch hinwerfen.
Für eine Schichtplanung die u.a. berücksichtigen soll, dass die MA so oft wie möglich am WE frei haben sollen, ist es unerlässlich auch die Daten vor dem Planungszeitraum zu kennen. Abgesehen davon soll ja auch die Arbeit möglichst gleich verteilt werden, auch da helfen die bisherigen Daten ungemein.
Insgesamt würde ich auch zu einem
OOP-Ansatz raten (Beispiel Daten-Model)
Delphi-Quellcode:
type
TMitarbeiter = class
end;
TAbwesenheit = class
FDatum : TDate;
FMitarbeiter : TMitarbeiter;
FGrund : string;
end;
TSchichtTyp = ( stFrüh, stSpät, stNacht );
TSchicht = class
private
FDatum : TDate;
FSchichtTyp : TSchichtTyp;
FMitarbeiter : TList<TMitarbeiter>; // Mitarbeiter in dieser Schicht
FMAMin : Integer; // Minimum an Mitarbeitern
FMAMax : Integer; // Maximum an Mitarbeitern
public
function Wochenende : Boolean; // True, wenn es sich um ein Wochenende handelt
end;
TSchichtplan = class
private
FMitarbeiter : TList<TMitarbeiter>; // Alle Mitarbeiter
FAbwesenheiten : TList<TAbwesenheit>; // Abwesenheit-Kalendar der Mitarbeiter
FSchichten : TList<TSchicht>; // Alle Schichten sortiert nach Datum, SchichtTyp
end;
Für die Berechnung der Daten entwirft man sich ein weiteres Model
Delphi-Quellcode:
type
TSchichtPlanung = class
private
FSchichtplan : TSchichtplan;
...
public
constructor Create( ASchichtplan : TSchichtplan; APlanDatumAb : TDate; APlanTage : Integer );
end;
Ich habe bewusst einige Sachen herausgelassen (z.B. Name des Mitarbeiters), die für die Planung völlig überflüssig sind.
Komplett ist es aber auch nicht
Das kann man jetzt und vor allem später immer wieder erweitern.
Eine Record-basierte Lösung mit einzelnen Arrays pro Schicht/Mitarbeiter und die Referenz auf den Mitarbeiter als string - ich würde mir das nicht antun