31 Aralık 2013 Salı

Veritabanı Ders Uygulamaları - 10... Struct Kullanımı...

1 - isyeri adında aşağıdaki veritabanını oluşturun... 
Bu veritabanı için sadece yas alanını sayı olarak tanımlayınız... 

2 - Aşağıdaki gibi form sayfası oluşturunuz... 

3 - Program çalıştığı zaman aşağıdaki gibi bir sonuç verecektir... Bu sonucu struct kullanmadan da yapabiliriz ama struct bize performans açısından artı sağlamaktadır... Struct ile ilgili genel bilgi almak için tıklayınız...













4 - Kod kısmına geçelim... Veritabanı komutlarını kullanabilmek için Data.OleDb sınıfını çağıralım...

5 - isyeri adındaki veritabanımızı çağıralım... oledbconnection sınıfını kullanarak baglanti adında bir değişken tanımlayalım...

6 - Sql sorgulaması yaptırabilmek için komut adında oledbcommand sınıfına ait bir değişken tanımlayalım...

7 - Bir tane struct tanımlayalım... ad,soyad,sehir,yas,ulke adında değişkenler tanımlayalım...
Struct tanımlanırken aşağıdakine benzer bir örnek kullanılabilir... Bu yapı her yerde kullanılabilecek şekilde tanımlanmalıdır...
Struct agac
{
          public string yaprak;
          public string govde;
          public int meyvesayisi;
}

8 - Program açıldığın da listboxın içeriğini doldurabilmek için Form Load da komutları yazıyoruz...

9 - Veritabanı bağlantısını açıyoruz...

10 - Veritabanından bütün bilgileri, oku adında  oledbdatareader sınıfından tanımladığımız değişkene getiriyoruz...

11 - Bir while döngüsü ile oku değişkenimiz içindeki verileri okutuyoruz...
While (oku.Read) 
{
            // işlemler
}

12 - Bu while döngüsünün içerisinde işlemler kısmında öncelikle bir değişken tanımlayacağız... Bu değişken struct yapısını çağıracak ve onun özelliklerini kullanacaktır... 
Örneğin yukarıdaki struct için Agac govde = new Agac(); şeklinde tanımlanabilir...

13 - Oku değişkenimize almış olduğumuz bilgileri sırası ile structta tanımlamış olduğumuz değişkenlere atayacağız... 
Örneğin govde.yaprak = oku[0].ToString();  gibi...

14 - Yine bu while döngüsü içerisinde atamış olduğumuz değişkenleri listboxa ekliyoruz...
Örneğin listBox1.Items.Add(govde); gibi...

15 - Veritabanı bağlantısını kapatıyoruz... 

16 - Aşağıdaki metodu struct içerisine yazarak ToString metodunu eziyoruz... Çünkü struct a bilgiler alınırken nesne olarak alınıyor ve veritabanındaki bütün veriler ekleniyor... Bu durumda yazdırabilmek için metodu bir daha tanımlıyoruz... Çünkü sadece listbox içerisinde adları görmek istiyoruz...
public override string ToString()
            {
                return Ad; // listboxda etiketlenirken sadece Ad alanı ile etiketleniyorlar... 
            }

17 - Listboxda seçilenleri görmek için listboxın selectedindexchanged olayını kodlayacağız... 

18 - Seçili olan elemana ait verileri getirebilmek için aşağıdaki kodu listboxın içerisine yazıyoruz...
Agac secilinesne = (Agac)listBox1.SelectedItem;

19 - Labellarımıza sırası ile seçili olan nesnemizin değerlerini aktarıyoruz... 
label1.Text = secilinesne.yaprak;

Programımızı çalıştırıyoruz... Bu örnek ile struct yapısının neden kullanılması gerektiğini de öğrenmiş oluyoruz...
* Performans açısından avantajlı...
* Veritabanını sürekli olarak aç kapa yapmak zorunda değiliz...
* Struct ile tanımladığımız nesneleri istediğimiz gibi kullanabiliyoruz...  

Veritabanı Ders Uygulamaları - 3


30 Aralık 2013 Pazartesi

1 - Struct - Giriş...


Modülde ki teorik anlatımı ile struct yapısı aşağıdaki gibidir...
Nesne tabanlı programlama beş veri tipini destekler. Bunlar Class, Struct, Enum, Interface ve Delegate tipleridir. Bu öğrenme faaliyetinde Yapı (struct) veri tipini ele alacağız.

Aralarında mantıksal bir ilişki bulunan ama farklı türdeki verilerin bir arada bulunması gereken durumlarla karşılaşılabilir. İşte bu durumlarda belli bir grup verinin bir arada tutulması için oluşturulan yeni birime yapı (struct) denir.

Yapılar değer türündedir. Dolayısıyla belleğin yığın (stack) bölümünde tutulurlar.

Bellek kullanım bakımından yığın (stack) ve öbek (heap) olmak üzere ikiye ayrılır.

Yığın bölümünde veriler üst üste gelecek şekilde depolanırlar. Yeni bir veri eklendiğinde bu belleğin en üst bölgesine yerleştirilir. LIFO (Last In First Out) mantığına göre çalışır. Yani son giren ilk çıkar. Verilere erişim basit olduğu için hızlıdır.

Öbek kısmında ise boş bir alan oluşturulur ve veriler rastgele yerleştirilir. Verilere erişim karmaşık olduğundan daha yavaştır.

Değer türleri belleğin yığın (stack) bölümünde tutulurken; referans türler belleğin öbek (heap) bölümünde tutulur. Örneğin sınıflar(class) referans türünde olduklarından dolayı belleğin öbek (heap) bölümünde tutulur.

Yapıları tanımlamak için ‘struct’ anahtar sözcüğünü kullanırız. Bir yapının genel tanımlanma şekli aşağıdaki gibidir.
struct yapi-ismi
{
    yapi-elemanlari-listesi;
}

Genel tanımdan sonra söylenebilecek olan durum şudur... Structlar çok yoğun bir şekilde işlemciyi veya belleği yoracak olan durumlarda kullanılır... Çünkü kullanıldıktan sonra bellekten silinir... Böyle olunca sistemi yormaz... Onun dışında aslında classlardan her hangi bir farklılıkları yoktur... Hatta class kullananlar için struct kullanımı performans istemiyorsa gerekmektedir... 

Aşağıda basit bir örnek yapılmıştır... Bu örnek normalde struct kullanılmadan da rahatlıkla yapılabilir... Veri girişi için giris adında bir adet struct tanımlanmıştır... Structların içerisinde değişkenler tanımlanabildiği gibi metodlarda tanımlanabilir... 

Giris structın da tanımlanan goster adındaki metoda gelen bilgiler ekranda sonuc olarak gösterilmektedir... Structı çağırmak için yeni nesne tanımlaması kullanılmalıdır... 

giris gondermesaj = new giris();

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        struct giris
        {
            // Tanımlama sırasında public erişim seçeneği kullanılarak her yerden ulaşılması sağlanmaktadır... 
            public string goster(int no, string ad, string soyad, int yas)
            {
                string mesaj = "Numarası = " + no + "... Adı = " + ad + "... Soyadı = " + soyad + "... Yaşı =  " + yas + "..."; 
                return mesaj; // Structan geri dönecek olan bilgidir... 
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            giris gondermesaj = new giris(); // Bir nesneyi çağırır gibi gondermesaj adında bir tanımlama yapıyoruz... 
            MessageBox.Show(gondermesaj.goster(int.Parse(textBox1.Text), textBox2.Text, textBox3.Text,    int.Parse(textBox4.Text))); // Bilgiler içerisinde sayı olanlar structa, int.parse ile gönderilmektedir...
        }
    }
}

Yine aynı şekilde yapılmış olan aşağıdaki örnekte ise struc içerisinde değişkenler tanımlanmıştır... Bu yapı içerisindeki değişkenlerde sırası ile çağrılmıştır... Bu kullanıma bakılırsa daha çok değişkenlerin karmaşasını ortadan kaldıran bir yapıdadır...

struct ogrenci
        {
            public string ad; // Her yerde kullanılması için Public tanımlama yapılmıştır... 
            public string soyad;
            public string sınıf;
            public int no;
          }
        ogrenci ogren = new ogrenci(); // ogren adında structı kullanacak yapı tanımlanıyor...
        private void Form1_Load(object sender, EventArgs e)
        {
            ogren.ad = "ibrahim"; // Structa bilgiler gönderiliyor...
            ogren.soyad = "delibalta";
            ogren.sınıf = "2-c";
            ogren.no = Convert.ToInt16("1453");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(ogren.ad);// Structa gönderilen bilgiler listboxda gösteriliyor...
            listBox1.Items.Add(ogren.soyad);
            listBox1.Items.Add(ogren.sınıf);
            listBox1.Items.Add(ogren.no);
        }

15 Aralık 2013 Pazar

Veritabanı - 12... Comboboxdan DataGridViewe Bilgi Getirmek...

Comboboxda yaptığımız tercihler önemlidir... Yaptığımız tercih işlemine göre programda bir şeylerin değişmesini isteriz... Hatta veritabanından bazı bilgilerin gelmesi veya veritabanına bilgi kaydetmeyi bile isteyebiliriz... Bu program parçasında veritabanın da olan tarih verilerine göre garanti süresi devam eden bilgisayar parçalarını göstereceğiz... Bunun için aşağıdaki veritabanını kullanacağız... 



Veritabanımızın adı bilsay, tablomuzun adı ise Stok olacaktır... 

Burada Alınan Tarih ve Garanti alanları bizim için önemli olacaktır... Alınan Tarih üzerine garanti süresini yıl olarak ekleyeceğiz... Çıkan tarih eğer şu anki tarihden daha büyük ise garanti süresi devam ettiği için datagridview de göstereceğiz... Ama bunu sadece stokta kalan ürünler için göstereceğiz... Bu durumda Kalan alanı = 0 olanlar için garanti süresine bakmayacağız... 

Programımızın Form sayfası aşağıdaki gibi olacaktır... Comboboxın listelerine program açılmadan Hepsi ve Garanti seçeneklerini ekleyelim... 

Program çalıştığı zaman aşağıdaki gibi bir görüntü olacaktır... 

Garanti seçimi yapıldıktan sonra aşağıdaki gibi gözükecektir... 

Programımızın kodları aşağıdaki gibidir;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bilsay.accdb");
        OleDbCommand komut = new OleDbCommand();
        OleDbDataAdapter da;
        DataSet ds = new DataSet();

        void doldurdatagridview1(string sorgu)
        {
            ds.Clear(); // Datagridview her doldurulduğunda bir önceki veriler gözükmemesi için temizleniyor...

            baglanti.Open();
            komut.CommandText = sorgu;
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);
            da.Fill(ds,"StokTablo"); // Burada kullanılan "StokTablo" ismi datagridview olaylarının hepsinde kullanılır...
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "StokTablo";
            dataGridView1.Columns["Kimlik"].Visible = false; // Kimlik alanı datagridviewde gözükmesin...
            dataGridView1.Columns["Kalan"].Visible = false; // Kalan miktarı datagridviewde gözükmesin...
            baglanti.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            doldurdatagridview1("Select * From Stok"); // Veritabanındaki bütün veriler gösteriliyor...
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Garanti") // Garanti süresi devam edenler
                doldurdatagridview1("Select *  From Stok Where DateAdd('yyyy',[Garanti],[Alınan Tarih])>Now()  And [Kalan]<>0");
            else if (comboBox1.Text == "Hepsi") // Stokta olan ve olmayan hepsi gözüküyor...
                doldurdatagridview1("Select * From Stok"); 
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit(); // Programı tamamen sonlandırmak için kullanılır... 
        }
    }
}

Program kod satırında bazı önemli noktalar vardır. 
*  ds.Clear();
DataGridView içerisini temizleyen komuttur... Çünkü combobox her seçim yapıldığında DataGridView temizlenmelidir... Aksi takdirde veriler üst üste binecek ve hepsi gözükecektir...

*  dataGridView1.Columns["Kimlik"].Visible = false; 
DataGridView içerisinde verintabanın da olan alanlardan göstermek istemediğimiz olursa bu komut satırı ile göstermeyebiliriz... Kimlik alanı ve Kalan alanı veritabanın da olmasına rağmen DataGridView de gösterilmemektedir... 

* doldurdatagridview1("Select *  From Stok Where DateAdd('yyyy',[Garanti],[Alınan Tarih])>Now()  And [Kalan]<>0");
DateAdd komutu verilen tarihin üstüne istenilen kadar tarih eklemektedir... Buradan yyyy ifadesi yerine m veya d ifadesi kullanılırsa yıl yerine, ay veya gün eklenerek yeni tarih bulunabilmektedir... Now() ise bilgisayarın tarihini göstermektedir... Çıkan tarih ile bilgisayarın tarihi kıyaslanmaktadır... 

And ifadesi birden fazla şart olması durumunda kullanılmaktadır... Biz burada Stokta olmayan ürünleri göstermek istemediğimiz için [Kalan]<>0 ifadesini kullanmaktayız... <> ifadesi eşit değil anlamındadır... 

14 Aralık 2013 Cumartesi

Veritabanı - 11... Veritabanından Combobox a Bilgi Almak...

Access veri tabanında kayıtlı olan verilerimizden bazılarını Combobox a ekleyebiliriz... Yapmak istediğimiz uygulamada Access de bulunan sütunlardan bir tanesini tamamen Comboboxa ekleyeceğiz... Aynı zamanda Comboboxdan seçim yapıldığında da Richtextboxa seçime göre diğer sütundaki bilgilerin gelmesini sağlayacağız...  

Access veritabanını aşağıdaki gibi oluşturun... Tablomuzun ismi Yeniurun olacaktır... Veritabanı adımız ise Bilsay olacaktır... 


Aşağıdaki formu oluşturunuz... Formda bir tane Combobox, bir tane Richtextbox olacaktır... 

Kodlarımıza Form_Load olayından başlayacağız... Bu sayede form açıldığında Comboboxa veriler eklenmiş olacaktır... Bu işlemleri yaparken hem comboboxa verilerin çağrılması kısmında hemde richtextboxa verilerin çağrılması kısmında benzer işlemleri kullanacağımız için metod yöntemi ile bilgileri alacağız... 

Program çalıştığı zaman aşağıdaki gibi olacaktır... Comboboxa veritabanındaki bilgiler gelecektir... Comboboxdan seçim yapıldığında ise Richtextboxa bilgiler gelecektir...

Programımızın kodları aşağıdaki gibidir;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bilsay.accdb");
        OleDbCommand komut = new OleDbCommand();

        void veritabanisorgu(int gelenindex, string sorgu) // Metodumuz...
        {
            baglanti.Open();
            komut.CommandText = sorgu;
            komut.Connection = baglanti;

            OleDbDataReader oku = komut.ExecuteReader(); //Aldığımız bilgilerimizi depomuza atıyoruz...

            if (gelenindex==0) // Combobox için 0, Richtextbox için 1 değerini gönderiyoruz... 
            {
                while (oku.Read()) //Comboboxa verileri ekliyor...
                    comboBox1.Items.Add(oku[0].ToString());
            }
            else if (gelenindex==1) // Richtextbox için çalışacak kısım... 
            {
                while (oku.Read()) // Richtextbox a verileri ekliyor... 
                   richTextBox1.Text= oku[1].ToString();
            }
            oku.Close();
            baglanti.Close(); 
        }
        private void Form1_Load(object sender, EventArgs e) // Formun hemen girişinde comboboxa verileri ekliyoruz...
        {  // Metoda gönderirken sorgu ile birlikte bir de sütun numarasını gönderiyoruz... 
            veritabanisorgu(0,"SELECT * FROM Yeniurun");
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        { // comboboxdan seçim yapıldıktan sonra sorguyu gönderiyoruz... 
            veritabanisorgu(1,"SELECT * FROM Yeniurun Where [Adı]='" + comboBox1.Text + "'"); 
        }
    }
}

13 Kasım 2013 Çarşamba

Akış Diyagramları - 9... Girilecek İki Sayıya Dört İşlemi Uygulayacak Program...

Soru: Girilecek olan iki sayıya dört işlemi yaptıracak olan program?



Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... İki Sayı Giriniz:40, 2060, 20, 800, 2

Akış Diyagramları - 10... Üç Yazılı Notunun Ortalamasına Göre Geçti - Kaldı

Soru: Girilen 3 yazılı notun sonucunu alıp ”Geçti” veya “Kaldı” şeklinde mesaj veren program?





Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... 40, 60, 80Geçti

29 Ekim 2013 Salı

Akış Diyagramları - 8... Dairenin Alanını Hesaplama...

Soru: Girilecek olan yarıçap değerine göre dairenin alanını hesaplayacak program?



Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... Yarıçapı değerini girin10314

Akış Diyagramları - 7... Üçgen Alan Hesaplaması...

Soru: İki kenarı girilecek olan üçgenin alanını hesaplayacak program?


1. Kenarları kullanıcı gireceği için GİRİŞ şekli kullanılacaktır...

2. İki kenar değeri için iki değişken tanımladık... A ve B değişkenleri...

3. Alan adında değişkenimize üçgenin alan hesaplamasını yaptırıyoruz... 

4. Burada Alan değişkeni yerine farklı bir isimde değişken de kullanılabilir... Ama anlamlı olması programın okunabilirliği açısından kolaylık sağladığı için değişken isimlerinde dikkatli olmamızda fayda vardır...

5. ÇIKIŞ şeklimizde alan değerini göstererek programı bitiriyoruz...















Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... 
Kenarları girin: 15, 1075

Akış Diyagramları - 6... 3 Yazılı Notunun Ortalamasının Hesaplanması...

Soru: Bir öğrencinin girilecek 3 yazılı notuna göre ortalamasını hesaplayacak program?



Üç yazılı notu için değişkenler N1, N2, N3 tanımlanıyor... ORT adlı değişkene de hesaplanan değer atanıyor... ÇIKIŞ şeklinde de ORT gösteriliyor...

Akış Diyagramları - 5... İsim ile birlikte merhaba mesajı veren program...

Soru: Ekranda ”merhaba” yazısı ile birlikte kullanıcının ismini gösteren program?

1. Kullanıcının isim girişinden önce bir mesaj verdiriyoruz... Kullanıcı bu sayede ne gireceğini bilmiş oluyor... ÇIKIŞ şekli ile isim giriniz diyoruz...

2. Girilecek olan ismi program içerisinde daha sonra kullanabilmek için bir değişkene atıyoruz... İsim adlı değişkenimizi değer girilmesi için GİRİŞ şeklinin içine yazıyoruz... 

3. Alfa sayısal ifadeler olan "merhaba" yazısı ile girilen ismi yan yana yazabilmek için + operatörünü kullanıyoruz... Buradaki + operatörünün kullanım amacı sayısal bir işlemdeki toplamayı yapmak değil, iki yazıyı birleştirmektir... 

4. Sonuc adındaki değişkenimizi İŞLEM şeklinden elde ettikten sonra ÇIKIŞ şekli ile kullanıcıya gösteriyoruz...
Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... isim giriniz: Mehmetmerhaba Mehmet

Akış Diyagramları - 4... Merhaba Mesajını Verecek Olan Program...

Soru: Ekranda "merhaba" yazısı ile mesaj veren programın akış diyagramını yapınız?


Ekranda sadece kullanıcıya mesaj vereceğimiz için ÇIKIŞ şeklini kullanmamız yeterli olacaktır... 

Mesajlar iki tırnak arasında verilir... Eğer bir değişkende olan mesajı ekranda gösterecek isek bu sefer çift tırnak işaretleri kullanılmaz... 

Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... merhaba

Akış Diyagramları - 3... 50 ile 100 Sayılarını Toplayan Program...

Soru: 50 ile 100 sayılarını toplayacak olan programın akış diyagramını yapınız?

Bu sayılar kullanıcı tarafından girilmeyeceği için İŞLEM şekli bizim için yeterli olacaktır... 50 ile 100 sayılarını toplamak için bir değişken kullanmalıyız... S adında değişken toplama işleminin sonucunu tutmak için kullanılacaktır...

İşlemin sonucunu da ÇIKIŞ şekli ile göstereceğiz... ÇIKIŞ şeklinde kullandığımız + operatörünün buradaki amacı iki alfa sayısal karakteri birleştirmek içindir...

Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... Sonuç = 150