Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Personel Yıllık İzin Hakediş Hesaplama Hakkında
#1
Hayırlı akşamlar aşağıdaki kodlar ile personel yıllık izin hakedişini hesaplatabiliyorum. Bunun daha kolay ve kısa bir yolu varmı acaba ?

edit1.text = işe giriş tarihi

procedure TForm1.Button1Click(Sender: TObject);
var
 tarih, tarih1,tarih2  : TDate;
 GYil, GAy, GGun       : Word;
 GYil1, GAy1, GGun1    : Word;
 GYil2, GAy2, GGun2    : Word;
begin
 tarih1  :=  Now;
 tarih2  :=  StrToDate(edit1.text);
 DecodeDate(tarih1, GYil1, GAy1, GGun1);
 DecodeDate(tarih2, GYil2, GAy2, GGun2);
 kidem       :=  GYil1 - GYil2;
 sedit4.text :=  inttostr(kidem);
 case kidem of
   1..5    : ilkkademe;
   6..15   : ikincikademe;
   16..90  : ücüncükademe;
 end;
end;

procedure TForm1.ilkkademe;
var
 tarih                       : TDate;
 GYilb,GYila, GAya, GGuna    : Word;
begin
 if (kidem >= 1) and (kidem <= 5) then
   begin
     for i := 1 to kidem do
     begin
       Memo1.Lines.Add('14');
       tarih  :=  StrToDate(edit1.text);
       DecodeDate(tarih, GYila, GAya, GGuna);
       GYilb  :=  GYila + i;
       Memo1.Lines.Add(DateToStr(EncodeDate (GYilb, GAya, GGuna)));
     end;
   end;
end;

procedure TForm1.ikincikademe;
var
 kad1 ,kad2,sayi             : Integer;
 tarih                       : TDate;
 GYilb,GYila, GAya, GGuna    : Word;
begin
 if (kidem >= 6) and (kidem <= 15) then
   begin
     for i := 6 to kidem do
     begin
       Memo1.Lines.Add('20');
       tarih  :=  StrToDate(edit1.text);
       DecodeDate(tarih, GYila, GAya, GGuna);
       GYilb  :=  GYila + i;
       Memo1.Lines.Add(DateToStr(EncodeDate (GYilb, GAya, GGuna)));
     end;
     sayi  :=  memo1.Lines.Count;
     kad1  :=  Trunc(sayi/2);
     kad2 :=  kidem - kad1;
     for k := 1 to kad2 do
     begin
       Memo1.Lines.Add('14');
       tarih  :=  StrToDate(edit1.text);
       DecodeDate(tarih, GYila, GAya, GGuna);
       GYilb  :=  GYila + k;
       Memo1.Lines.Add(DateToStr(EncodeDate (GYilb, GAya, GGuna)));
     end;
   end;
end;

procedure TForm1.ücüncükademe;
var
 kad1 ,kad2,kad3,kad4,sayi,sayi1 : Integer;
 tarih                           : TDate;
 GYilb,GYila, GAya, GGuna        : Word;
begin
 if (kidem >= 16) and (kidem <= 90) then
   begin
     for i := 16 to kidem do
     begin
       Memo1.Lines.Add('26');
       tarih  :=  StrToDate(edit1.text);
       DecodeDate(tarih, GYila, GAya, GGuna);
       GYilb  :=  GYila + i;
       Memo1.Lines.Add(DateToStr(EncodeDate (GYilb, GAya, GGuna)));
     end;
     sayi  :=  memo1.Lines.Count;
     kad1  :=  Trunc(sayi/2);
     kad2 :=  kidem - kad1;

     for k := 6 to kad2 do
     begin
       Memo1.Lines.Add('20');
       tarih  :=  StrToDate(edit1.text);
       DecodeDate(tarih, GYila, GAya, GGuna);
       GYilb  :=  GYila + k;
       Memo1.Lines.Add(DateToStr(EncodeDate (GYilb, GAya, GGuna)));
     end;
     sayi1  :=  memo1.Lines.Count;
     kad4  :=  Trunc(sayi1/2);
     kad3  :=  kidem - kad4;
     for j := 1 to kad3 do
     begin
       Memo1.Lines.Add('14');
       tarih  :=  StrToDate(edit1.text);
       DecodeDate(tarih, GYila, GAya, GGuna);
       GYilb  :=  GYila + j;
       Memo1.Lines.Add(DateToStr(EncodeDate (GYilb, GAya, GGuna)));
     end;
   end;
end;
Cevapla
#2
@bkantur 
Eğer bu yaptığın bir ödev ise çok sorun değil fakat bir şirkette çalışacak ise bir personel uzmanından destek almanı öneririm
çünkü parametre aralıkların ve kurallar yanlış en basitinden 16 yaş altı ve 50 yaş üstü kişiler izin hakkı farklıdır

Gelelim kodu daha kısa yazma konusuna
1. Her procedure içinde kidemi tekrar kontrol etmene gerek yok zaten şart oluştu ise bu procedure geliyorsun
2. her procedure edit alanlarından gelen değerleri her seferinde parçalamak yerine procedure gitmeden parçala ya parametre kullan yada ortak değişken kullan
3. her procedure içinde kullandığın ortak yapıyı farklı bir yerde ortak procedure olarak yap

daha başka şeylerde yapılabilir fakat önemli olan senin hangi kurallarla hangi sonuca ulaşmak istediğin önemli
Kolay gelsin
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
Bir sınıf veya bir record tanımla. Parametreleri nesneye işlerken (Setterler aracılığıyla) kurallara uygunluğunu kontrol et. Bu tarz bir nesne yapısı kurduktan sonra sonuçları okurken çoğu değer zaten sana hesaplanmış olarak geri dönecektir.
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DataSnap Rest Server Mimari Seçimi Hakkında LastCoder 3 131 31-08-2021, Saat: 00:11
Son Yorum: barutali
  random kod üretme hakkında mr.irregularr 9 700 07-06-2021, Saat: 19:38
Son Yorum: mustafaozpinar
  Delphi İle Mobil Geliştirme Hakkında furkan.Dev 14 1.726 29-05-2021, Saat: 20:18
Son Yorum: furkan.Dev
  Datasnap rest service türkçe karakter sorunu hakkında yanniosman 2 597 01-04-2021, Saat: 01:11
Son Yorum: yanniosman
  Çok biçimlilik hakkında (Çözüldü) vkamadan 2 734 09-02-2021, Saat: 15:47
Son Yorum: vkamadan



Konuyu Okuyanlar: 1 Ziyaretçi