Delphi - Egy hónap munkanapjait és szabadnapjait összeszámoló komponens készítése

forráskód letöltése
Ebben a cikkben egy olyan komponenst készítünk, amely egy év és azon belül egy hónap megadása után megmondja, hogy az adott hónapban hány munkanap, illetve szabadnap van. A komponens használatával sokkal egyszerűbb dolgunk van, mintha a naptárban meg kellene számolnunk a napokat.
A mellékelt példaprogram megnyitása előtt a WorkDays.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens Year tulajdonságában kell megadnunk az évet, a Month-ban pedig a hónapot.
A munkanapok számát a WorkDayCount, az egyéb napok számát (szabad és munkaszüneti napok) a HolidayCount függvényekkel kérdezhetjük le.
function WorkDayCount: Byte;
function HolidayCount: Byte;
Komponensünket a TComponent osztályból származtatjuk.
A munkaszüneti napokat a Holidays konstansban tároljuk el. A konstans egy tömb, amely MAXITEM elemet tartalmaz. Egy elem struktúrája a következő:
type TDay = record
       Month: Byte;
       Day: Byte;
     end;
Ahhoz, hogy el tudjuk dönteni egy napról, hogy munkaszüneti nap-e, létre kell hoznunk egy függvényt.
function TWorkDays.IsHoliday(Month, Day: Byte): Boolean;
var
  i: Byte;
begin
  Result:=False;
  for i:=1 to MAXITEM do
    if (Holidays[i].Month=Month) and (Holidays[i].Day=Day) then Result:=True;
end;
Az ISHoliday függvény visszatérési értéke igaz, ha a paraméterekben megadott nap ünnepnap, munkanap esetén hamis.
A WorkDayCount és HolidayCount függvények hasonló módon működnek, csak a lekérdezési feltételük más.
A februári hónap esetén meg kell vizsgálnunk, hogy a megadott év szökőév-e. Ennek megfelelően változik a hónap napjainak száma (Days).
if IsLeapYear(Year) then Days:=29 else Days:=28;
Az IsLeapYear függvény visszatérési értéke akkor igaz, ha a paraméterben megadott év szökőév.
A DayOfWeek függvénnyel tudjuk lekérdezni, hogy egy adott dátum milyen napra esik. A függvény visszatérési értéke 1..7. Az 1-es értékhez vasárnap, a 7-eshez szombat tartozik.
Munkanapok esetén az olyan napokat kell megszámolnunk, amelyek nem esnek hétvégére és nem is ünnepnapok.
Amikor a szabadnapokat vizsgáljuk, akkor az előbbi feltételnek éppen az ellenkezőjére van szükség. A hétvégéket és az ünnepnapokat kell összeszámolnunk.