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.
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Memo bileşeni Duplicate veya Put hakkında yardım kofmaster 6 470 11-04-2020, Saat: 22:39
Son Yorum: kofmaster
  IDE hakkında sorular(F8 Debug,Otomatik tamamlama) 41linea41 6 586 10-03-2020, Saat: 20:07
Son Yorum: kodamelesi
  İki Tablo Birleştirme ve Vade Hesaplama OZCANK 4 504 04-03-2020, Saat: 11:07
Son Yorum: OZCANK
  IHTMLSelectElement onChange olayı hakkında [ÇÖZÜLDÜ] kodamelesi 6 834 03-03-2020, Saat: 16:45
Son Yorum: kodamelesi
  Streaming hakkında Kerembacioglu 0 211 29-02-2020, Saat: 19:50
Son Yorum: Kerembacioglu



Konuyu Okuyanlar: 1 Ziyaretçi