Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

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
  Moduler Programlama Hakkinda TheEAK 4 312 18-09-2019, Saat: 10:43
Son Yorum: TheEAK
  IDE çoklu monitör kullanımı hakkında adelphiforumz 2 320 10-07-2019, Saat: 12:45
Son Yorum: adelphiforumz
  GarantiBBVA SFTP işlemleri hakkında adelphiforumz 4 464 09-07-2019, Saat: 10:43
Son Yorum: r3n4m3
  read ve write kullanımı hakkında alisahin 3 493 21-05-2019, Saat: 14:57
Son Yorum: alisahin
  Enum da CustomAttribute erişimi hakkında kodamelesi 3 475 25-04-2019, Saat: 16:31
Son Yorum: kodamelesi



Konuyu Okuyanlar: 1 Ziyaretçi