Delphi XE5- DataClientSet' te Toplam, Ortalama Bulma Fonksiyonlarınını Oluşturulması
Bu yazıda toplama ve ortalama alma fonksiyonlarının nasıl yapılacağını anlatacağım. Fonksiyonları oluşturduktan sonra çalıştığını göstermek için küçük bir de bakkal uygulaması yaptım. Bakkal uygulamasına:
1 adet Button
1 adet Label
1 adet DBEdit
1 adet DBGrid
1 adet DBNavigatör
1 adet ClientDataSet
1 adet DataSource
koydum.
Değişken tipleri
ürün : string
fiyat : curency
adet : integer;
Yapmak istediğim bakkalın ürünü fiyati ve adetini girdiktikten sonra, ne kadar ürün girdiyse toplam fiyatini hesaplatmak. Şimdi fonksiyonumuzu hazırlamaya başlayalım. İlk önce fonksiyon kalıbımızı hatırlayalım
Function ...(..;..;..):....;
begin
.
.
.
Result:= '....';
end;
Şimdi de yapmamız gereken fonksiyonumuza bir isim vererek değişmeyecek parametreleri girmek. Fonskiyonumuzun ismi topla olsun. ClientDataSette arama yapacak ve ClientDataSetteki satırları toplayacağımız için sadece bir parametremiz olacak.
Parametre
tClientDataSet
Parametreyi kullanmak için ona isim verelim
ClientDataSet
olsun ismi. Fonksiyonumuz hazır. Toplu şekilde yazacak olursak buraya kadar
Function topla ( cliendataset: tclientdataset ) : real;
Bundan sonraki işlem fonksiyonumuzun ne yapmasını istediğiyle alakalı
1. Satır satır gezsin
2. Fiyat olan satırları bulsun
3. Fiyat olan satırları birbiriyle toplasın
Satırlar arasında gezebilmesi için for döngüsünden yadım alacağız ve toplamı hesaplatabilmek içinde bir toplam tanımlamamız gerekli
var
i:integer;
toplam:real;
Gerekli bütün tanımlamaları yaptık. fonksiyonu tamamlamak için yukarda yazdığımız ne yapmamız gerektiği algoritmasını şimdi de kodlamaya dökelim.
ClientDataSet' te satırlar arasında dolaşmak için RecNo komutunu kullanacağız. RecNo bize ClientDataSetin hangi kaydında olduğunu verir. İnteger türünde bir değişkendir. Bu komutu for döngüsüyle birleştirerek bütün satırlar da gezebileceğiz. RecordCount komutuda bize verisetinde kaç tane veri varsa sayısını verecektir.
for i := 1 to clientdataset.RecordCount do
begin
clientdataset.RecNo := i;
end;
For dögüsüyle 1. kayıttan son kayıta gezdik fakat bir işlem yaptırmadık. Şimdide asıl yaptırmak istediğimiz işlemi yani toplama işlemini yaptıralım. İlk önce toplamı 0 değerine eşitlememiz gerekli. Çünkü en başta hiç toplamımız yok ve bu değeri vermezsek bir hiç birşeyle toplamamış oluruz. Yapmak istediğimiz her satırdaki fiyat'ı bir sonraki kayıt ile toplamak. Bunun içinde toplam:= toplam + bir sonraki fiyat kayıt yapmamız gerekli;
toplam := 0;
for i := 1 to clientdataset.RecordCount do
begin
clientdataset.RecNo := i;
toplam := toplam + clientdataset.FieldByName('fiyat').Value;
end;
Artık fonksiyonumuz hazır. Fonksiyonun bütün şekli:
function topla(clientdataset:tclientdataset):real;
var toplam:real;
i:integer;
begin
toplam := 0;
for i := 1 to clientdataset.RecordCount do
begin
clientdataset.RecNo := i;
toplam := toplam + clientdataset.FieldByName('fiyat').Value;
end;
Result := toplam;
end;
Şeklinde olacaktır. Bunu gelin Bakkal programında kullanalım.
Örneğin:
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=floattostr(topla(ClientDataSet1));
end;
Burada topla fonksiyonumuz real olduğu için label da gösterebilmek için string 'e dönüştürdük.
Şimdide ortalamayı alma fonksiyonunu yapmaya başlayalım. Bir önceki fonksiyonu biraz değiştirerek ortalamayı da çok rahat bir şekilde alabilirim. Tek yapmamız gereken toplamı ürün sayısına bölmek olacaktır. Şöyle ki:
function ortalama(clientdataset:tclientdataset):real;
var toplam,ort:real;
i:integer;
begin
toplam := 0;
for i := 1 to clientdataset.RecordCount do
begin
clientdataset.RecNo := i;
toplam := toplam + clientdataset.FieldByName('fiyat').Value;
end;
ort := toplam / clientdataset.RecordCount;
Result := ort;
end;
Bu fonksiyonlar sadece tek bir kolonun toplamı ve ortalamasını almanıza yarayacaktır. Eğer fiyat ve adetin çarpımının toplamını ve ortalamasını almak istersek bunu da fonksiyona bir kaç değişiklik yaparak yapabiliriz. Bu da diğer yazımın konusu olsun. Toplam ve ortalama algoritma mantığını anladıktan sonra bu fonksiyonu başka bileşenlere de uygulayabilirsiniz. Örneğin StringGirid ya da ListBox taki değerler içinde yapabilirsiniz.
Okuduğunuz İçin Teşekkür Ederim
Hakan UÇAR
İstatistikçi ve Amatör Programcı
İçerikler Tamamen Ücretsiz Olup Özgün Anlatımdır Paylaşırken Kaynak Belirtiniz Lütfen.
Uygulamayı Yandex Diskimden indirebilirsiniz.
0 yorum:
Yorum Gönder