Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümü

Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümüyazımıza devam etmeden önce bir önceki yazıyı gözden geçiriniz. Bunun için aşağıdaki linki kullanabilirsiniz. Eğer bitirdi iseniz devam edebilirsiniz.

Bu yazımızı da iki alt başlığa bölelim.

  • İstatistik butonuna basınca yapılacaklar
  • Grafikler butonuna basınca yapılacaklar

Öncelikle projeme iki tane windows form ekliyorum. Ben birinin adını FrmGrafikler diğerinin adını FrmVeriler yaptım. Önce 1.madde ile başlayalım.

İstatistik butonuna basınca yapılacaklar

Bu butona basınca veritabanımdaki Personel tablosundaki bazı verilere ilişkin istatistiki bilgileri görelim. Böylelikle asıl amacım, SQL sorgum içinde SUM, AVG, COUNT gibi fonksiyonları kullanmak.

Benim burada görüntülemek istediğim veriler şunlar olsun:

  • Toplam personel sayısı
  • Kadın personel sayısı
  • Erkek personel sayısı
  • Kaç farklı sehirde personel var?
  • Maaş toplamı?
  • Maaş ortalaması?
  • Kaç farklı unvanda personel var?

AnaSayfa.cs üzerindeki İstatistik butonuna çift tıklayınca yazacağım kodlar;

private void btnIstatistik_Click(object sender, EventArgs e)
        {
            //frmVeriler formumdan nesne türetiyor ve açılmasını sağlıyorum.
            FrmVeriler frm = new FrmVeriler();
            frm.Show();            
        }

FrmVeriler formuma geçiyorum ve tasarımını aşağıdaki gibi yaptım.

Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümü

Solda yer alanları etiket niyetine kullandığım için text özelliklerini görüldüğü şekilde düzenledim, Name özelliklerine ise karışmadım. Forn ve rengi istediğiniz gibi ayarlayabilirsiniz, çok mühim değil.

Sağda yer alan ….. şeklindeki labellerin text özelliklerini …… yaptım. Name özellikleri ise soldaki etiketleri lbl ön adının akabine yazdım. İstediğiniz gibi isim verebilirsiniz. Benim zaten kodlardan rahatlıkla anlışılabilecek. Hadi geçelim kodlara;

Formun Load olayında kodlarım aşağıdaki gibi:

using System.Data.SqlClient kütüphanesini ekliyorum.

Global alanda sql bağlantı nesnemi oluşturuyorum.

SqlConnection conn = new SqlConnection("Data Source=DESKTOP-FIUL2TU\\SQLEXPRESS;Initial Catalog=PersonelBilgi;Integrated Security=True");

Sonra Load olayındaki kodlarım;

private void FrmVeriler_Load(object sender, EventArgs e)
        {
            //Toplam Personel Sayısını buluyorum.
            conn.Open();
            SqlCommand tps_komut = new SqlCommand("SELECT COUNT (*) FROM Personel",conn);
            SqlDataReader tps_dr = tps_komut.ExecuteReader();
            while(tps_dr.Read())
            {
                lblToplamPersonelSayisi.Text = tps_dr[0].ToString();
            }
            conn.Close();

            //Erkek Personel Sayısını buluyorum.
            conn.Open();
            SqlCommand eps_komut = new SqlCommand("SELECT COUNT (*) FROM Personel WHERE Cinsiyet=1", conn);
            SqlDataReader eps_dr = eps_komut.ExecuteReader();
            while (eps_dr.Read())
            {
                lblErkekPErsonelSayisi.Text = eps_dr[0].ToString();
            }
            conn.Close();

            //Kadin Personel Sayısını buluyorum.
            conn.Open();
            SqlCommand kps_komut = new SqlCommand("SELECT COUNT (*) FROM Personel WHERE Cinsiyet=0", conn);
            SqlDataReader kps_dr = kps_komut.ExecuteReader();
            while (kps_dr.Read())
            {
                lblKadinPersonelSayisi.Text = kps_dr[0].ToString();
            }
            conn.Close();

            //Kaç farklı şehirde personel var, bulalım.
            conn.Open();
            SqlCommand kfspv_komut = new SqlCommand("SELECT COUNT(DISTINCT(Sehir)) FROM Personel", conn);
            SqlDataReader kfspv_dr = kfspv_komut.ExecuteReader();
            while (kfspv_dr.Read())
            {
                lblKacFarkliSehirdePersonelVar.Text = kfspv_dr[0].ToString();
            }
            conn.Close();

            //Maaş toplamını buluyorum.
            conn.Open();
            SqlCommand mt_komut = new SqlCommand("SELECT SUM(Maas) FROM Personel", conn);
            SqlDataReader mt_dr = mt_komut.ExecuteReader();
            while (mt_dr.Read())
            {
                lblMaasToplam.Text = mt_dr[0].ToString();
            }
            conn.Close();

            //Maaş ortalamasını buluyorum.
            conn.Open();
            SqlCommand mo_komut = new SqlCommand("SELECT AVG(Maas) FROM Personel", conn);
            SqlDataReader mo_dr = mo_komut.ExecuteReader();
            while (mo_dr.Read())
            {
                lblMaasOrtalama.Text = mo_dr[0].ToString();
            }
            conn.Close();

            //Kaç farklı ünvanda personel var, bulalım.
            conn.Open();
            SqlCommand kfupv_komut = new SqlCommand("SELECT COUNT(DISTINCT(Unvan)) FROM Personel", conn);
            SqlDataReader kfupv_dr = kfupv_komut.ExecuteReader();
            while (kfupv_dr.Read())
            {
                lblKacFarkliUnvandaPErsonelVar.Text = kfupv_dr[0].ToString();
            }
            conn.Close();


        }


Personel sayısını bulmak için COUNT kullanıyorum. COUNT ile bir tablodaki veri sayısını buluyorum.

Erkek personel sayısını bulmak için yine count fonksiyonunu kullanıyorum ancak bu sefer Cinsiyet kolonundaki şartımı 1 yani True yapıyorum.

Kadın personel sayısını bulmak için yine count fonksiyonunu kullanıyorum ancak bu sefer Cinsiyet kolonundaki şartımı 0 yani false yapıyorum.

Kaç farklı şehirde personel var bulmak için yine count kullanıyorum. Ama farklıları sayması için Distinct kullanıyorum. (Sehir kolonu üzerinde)

Maaş toplamını bulmak için Maas kolonu üzerinde yer alan tüm verileri SUM ile topluyorum.

Maaş ortalamasını bulmak için Maas kolonu üzerinde yer alan tüm verileri AVG fonksiyonuna tabi tutuyorum.

Kaç farklı ünvanda personel var bulmak için yine count kullanıyorum. Ama farklıları sayması için Distinct kullanıyorum. (Unvan kolonu üzerinde)

Verileri okumak için SqlDataReader kullanıyoruz. Tablolardaki satırların uzunluğu boyunca While ile okuma sağlıyoruz.

Sonuç olarak örnek olarak aşağıdaki gibi bir sonuç alıyorum.

Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümü

2. adımımıza geçelim

Grafikler butonuna basınca yapılacaklar

AnaSayfa.cs dokümanında Grafikler butonuna çift tıklıyorum ve aşağıdaki kodu yazıyorum.

private void btnGrafikler_Click(object sender, EventArgs e)
        {
            FrmGrafikler frm = new FrmGrafikler();
            frm.Show();
        }

Böylelikle FrmGrfikler formumdan yeni bir nesne türetip, formun açılması için Show metodunu kullanıyorum.

FrmGrafikler formumu açıyorum. Buraya aşağıdaki gibi 4 tane grafik ekledim.

Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümü

Birinci grafik seçili iken; aşağıdaki görselde görüleceği üzere sağda yer alan özellikler alanından Series kısmında 3 noktalı butona tıklıyorum. Daha sonra çıkan Series Collection Editor alanında Name özelliğine Sehirler yazdım.

Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümü

İkinci grafiği seçiyorum; sağda yer alan özellikler alanından Series kısmında 3 noktalı butona tıklıyorum. Daha sonra çıkan Series Collection Editor alanında Name özelliğine Unvanlar yazdım. Charttype olarak da Pie seçtim.

Üçüncü grafiği seçiyorum; sağda yer alan özellikler alanından Series kısmında 3 noktalı butona tıklıyorum. Daha sonra çıkan Series Collection Editor alanında Name özelliğine UnvanMaasOrtalamasi yazdım.

Dördüncü grafiği seçiyorum; sağda yer alan özellikler alanından Series kısmında 3 noktalı butona tıklıyorum. Daha sonra çıkan Series Collection Editor alanında Name özelliğine Cinsiyet yazdım. Charttype olarak da Pie seçtim.

Daha sonra bu formun load olayına geçiyorum. Kütüphane olarak Using.Data.SqlClient kütüphanesini ekledim.

Global alanda SQL Bağlantı nesnemi oluşturdum;

SqlConnection conn = new SqlConnection("Data Source=DESKTOP-FIUL2TU\\SQLEXPRESS;Initial Catalog=PersonelBilgi;Integrated Security=True");

Sonra formun load olayında aşağıdaki kodu yazıyorum:

private void FrmGrafikler_Load(object sender, EventArgs e)
        {

            //bağlantı nesnemi açtım.

            conn.Open();

            //SQLCommand sınıfından her grafik için ayrı ayrı nesne oluşturuyorum.

            //Birinci grafik Sehirler grafiği
            SqlCommand grfk1_komut = new SqlCommand("SELECT Sehir, Count(*) FROM Personel GROUP BY Sehir", conn);
            SqlDataReader grfk1_dr = grfk1_komut.ExecuteReader();
            while (grfk1_dr.Read())
            {
                chart1.Series["Sehirler"].Points.AddXY(grfk1_dr[0], grfk1_dr[1]);
            }
            conn.Close();


            //İkinci grafik ünvanlar grafiği
            conn.Open();
            SqlCommand grfk2_komut = new SqlCommand("SELECT Unvan, Count(*) FROM Personel GROUP BY Unvan", conn);
            SqlDataReader grfk2_dr = grfk2_komut.ExecuteReader();
            while (grfk2_dr.Read())
            {
                chart2.Series["Unvanlar"].Points.AddXY(grfk2_dr[0], grfk2_dr[1]);
            }
            conn.Close();


            //üçüncü grafik Ünvanlara göre maaş ortalamasını sunan grafik
            conn.Open();
            SqlCommand grfk3_komut = new SqlCommand("SELECT Unvan, AVG(Maas) FROM Personel GROUP BY Unvan", conn);
            SqlDataReader grfk3_dr = grfk3_komut.ExecuteReader();
            while (grfk3_dr.Read())
            {
                chart3.Series["UnvanMaasOrtalamasi"].Points.AddXY(grfk3_dr[0], grfk3_dr[1]);
            }
            conn.Close();


            //Dördüncü grafik cinsiyetler grafiği.
            conn.Open();
            SqlCommand grfk4_komut = new SqlCommand("SELECT Cinsiyet, Count(*) FROM Personel GROUP BY Cinsiyet", conn);
            SqlDataReader grfk4_dr = grfk4_komut.ExecuteReader();
            while (grfk4_dr.Read())
            {
                chart4.Series["Cinsiyet"].Points.AddXY(grfk4_dr[0], grfk4_dr[1]);
            }
            conn.Close();

        }


Formumda 4 grafik olduğu için, her birine ayrı ayrı bağlantımı açtım. Daha sonra SqlCommand sınıfından her bir grafik için ayrı ayrı nesne türettim. Yine ayrıca her bir grafik için ayrı ayrı SqlDataReader sınıfımdan nesne türettim. Her bir grafik için tabloların uzunluğu boyunca while ile okuma işlemi yaptım. Ve yine her bir grafik için yazdığım kodların akabinde bağlantımı kapattım.

İlk grafiği bulmak için SQL sorgum içinde COUNT fonksiyonu ile Sehirleri saydım, GROUP BY metodu ile de Sehirleri listeledim. Point.AddXY metodunda X burada Şehirleri, Y ise sayıları temsil ediyor.

İkinci grafiği bulmak için SQL sorgum içinde COUNT fonksiyonu ile ünvanları saydım, GROUP BY metodu ile de ünvanları listeledim.

Üçüncü grafiği bulmak için SQL sorgum içinde AVG fonksiyonu ile Sehirlere göre maaş ortalamasını buldum. Ünvana göre gruplamak için GROUP BY metodunu kullandım. Point.AddXY metodunda X burada ünvanları, Y ise maaşları temsil ediyor.

Dördüncü grafiği bulmak için SQL sorgum içinde COUNT fonksiyonu ile cinsiyetleri saydım, GROUP BY metodu ile de cinsiyetleri grupladım.

Sonucuma dair ekran görüntüm aşağıdaki şekilde:

Personel Kayıt Uygulaması Bölüm 6 İstatistik ve Grafik Bölümü

Ve bitirdik 😊

Son yazıda da toparlama yaparız 😊

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir