ÖĞRENCİ KAYIT OTOMASYONU

ÖĞRENECEKLERİMİZ;


  • Access Tablo İşlemleri
  • GroupBox Kontrolü
  • Maskelenmiş Metin Kutusu Kontrolü
  • DateTimePicker Kontrolü
  • DataGridView Kontrolü
  • TextChanged ve Leave Olayı
  • Temel SQL Sorgularının Olulşturulması
  • Crystal Report ile Rapor Oluşturma

Giriş

Bu bölümde veritabanına giriş yapmak için öğrenci otomasyonu geliştireceğiz. Veritabanı dediğimiz zımbırtıyı tanımlamak gerekirse; birbiriyle ilişkili verilerin tekrara imkan vermeyecek şekilde depolanması olayıdır diyebiliriz.  Bu dersimizde veritabanı oluştururken daha önceden öğrenmiş olduğunuzu varsaydığım Microsoft Access veritabanını kullanacağım. Aynı zamanda SQL soegularını C# programı ile yazmayı öğreneceğiz.

Öğrenci takibini yapacağınız veritabanı ile öğrencilerin, T.C. Kimlik numaralarını, Adlarını, Soyadlarını, doğum tarihlerini, teelfon numaralarını ve hangi sınıfta ya da bölümde okuduklarını takip edebilecek, herhangi bir dersten aldıkları vize-final/yazılı notlarını takip edebileceksiniz. 

Elbette birçok veritabanında olduğu gibi burada da veri silme, ekleme ve güncelleme işlemlerini yaptıracağız. Ancak bu işlemler için ihtiyacımız olan Access veritabanı dosyasını oluşturmamız gerekmektedir.



Access veritabanı için yukarıdaki şekilde de görüldüğü gibi boş masaüstü veritabanını seçiyoruz.
Dosyamıza bir isim veriyoruz ve oluştur butonuna tıklıyoruz.
Dosyamız oluşturulduğuna göre işleme geçebiliriz. Access projemizde sol tarafta bulunan tablo1 yazısına sağ tıklayarak tasarım görünümüne geçiyoruz.

Değerleri de şekilde gösterildiği gibi girin.

Tablomuzun adını Kisisel_Bilgiler olarak değiştirdik. Oraya vereceğimiz ismi ilerleyen adımlarda sorgularda kullanacağımızdan dolayı önemlidir. Aynı şekilde oluştur menüsü altında bulunan tablo yazısına tıklayarak yeni bir tablo ekleyelim ve buna da Notlar ismini verelim. Notlar adlı tablomuzdaki sütun isimleri TCKimlik, Vize, Final ve Ortalama olsun.
Şimdi de her iki alanda bulunan ve TCKimlik olarak adlandırdığımız alanları birbirine bağlayalım. Bunun için öncelikle açık olan tablolarımızı kapatıyoruz. Ardından Veritabanı Araçlarını seçiyoruz. Açılan menüden İlişkiler seçeneğini seçtikten sonra her iki tablomuzu seçerek Ekle butonuna tıklıyoruz. Her iki tablonun sayfaya eklendiğinden emin olduktan sonra Kisisel_Bilgiler isimli tablomuzda bulunan TCKimlik alanını, Notlar tablomuzda bulunan TCKimlik alanı üzerine sürükleyerek bırakıyoruz. Daha sonra ilişkiyi ve Ogrenci_Kayit adındaki veritabanı dosyamızı kaydederek programımızı kapatıyoruz.

Buraya kadar anlaşılmayan bir şey varsa lütfen alta yorum olarak yazınız.


VERİTABANINI PROJEYE BAĞLAMA İŞLEMİ

Bu aşamada öncelikle oluşturmuş olduğunuz ogrenci.mdl veritabanı dosyasını C# projenize eklemeniz gerekmektedir. Veritabanını ekleyerek üzerinde işlem yapmamız için tasarlanmış olan Server Explorer paneli tam da bunun için yaratılmış. 

Studio projemizde iken tools menüsünden önce Connect to DataBase seçeneği seçilir. Karşınıza bu aşamada bir pencere çıkacak. Burada Data Source yazan yerden Access seçmemiz gerekiyor. Hemen altındaki alana da nokta koyarak geçebiliriz.  Ardından Database dosyamızı (Ogrenci_Kayit.mdl) seçiyoruz. 


Seçimimizi yaptığımızda sol taraftaki menüde aşağıda görüldüğü gibi eklendiğini görmemiz gerekir.

GİRİŞ EKRANI TASARIMI

Girişte de söylediğim gibi bir programı yapacaksak tam yapmamız lazım yani ihtiyaçların tamamını karşılayabilmeli. Bunun için bizim yapacağımız program da kayıt ekleme, silme, güncelleme işlemlerini yapabilmeli. Ve dahası kullanıcının kolaylığı için bunların tamamını tek bir ekrandan yapabilmesini sağlamalıyız. Bunun için öncelikle bir windows form açıp text değerini "Öğrenci Otomasyon" olarak değiştirelim.



 Dilerseniz Photoshop benzeri bir program yardımıyla icon düzenleyebilir, isterseniz de iconfinder ya da iconarchive benzeri siteler vasıtası ile hazır iconlar kullanarak giriş ekranınızı tasarlayabilirsiniz. 


Yukarıda yaptığım işlemleri kısaca anlatmam gerekir sanırım. Öncelikle label (Fonksiyon atanmayan normal metin kontrolü) atadım ve Kayıt Ekle, Kayıt Düzenle vs. yazdım ve bunları formuma güzelce yerleştirdim. Daha sonra da iconlarımı yerleştirdim. Ama bu iconları yerleştirirken  iconların aynı zamanda buton görevini göreceğini bildiğimden dolayı PictureBox kontrolü ile değil de Button kontrolü ile yaptım. Button kontrolünün özelliklerinden Text özelliğini boş bıraktım ve BackGroundImage özelliğine de .ico uzantılı dosyalarımı import ettim. Resimlerin tekrarlamaması içinse BackGroundImageLayout özelliğini Center olarak atadım. Ve son olarak da en üstte bulunan Öğrenci Kayıt Otomasyonu yazısını yine label kontrolü yazdım ve font özelliklerinden Boyutunu ve Kalınlığını ayarladım. Sonuçta da böyle güzel (Bence) bir görüntü ortaya çıkmış oldu.

Şimdi gelelim diğer aşamalara;

Butonlara tıklandığında diğer formların açılması için yeni formlar oluşturacağız. Başlayalım.

KAYIT EKLEME İŞLEMİ

Gerekli Kontrolleri Belirleyelim

Bu ekranımız kayıt ekranı olacağına göre yeni açtığımız boş formda mutlaka olması gereken alanlarımız nelerdir?
  • TC Kimlik No
  • Adı Soyadı
  • Telefon Numarası
  • Doğum Tarihi
  • Bölümü 
  • Sınıfı
Bunlar için gerekli olan kontrollerimiz ise şunlardır. 
Kimlik numarası, Adı soyadı için birer textbox kontrolü.
Telefon numarası için MaskedTextBox kontrolü kullanılabilir. 
Doğum Tarihi için DateTimePicker kontrolü kullanacağız.
Bölümü ve Sınıfı için de ComboBox kullanabiliriz.

Ve elbette kayıt işlemi için komutumuzu gireceğimiz bir butona ihtiyacımız var. Yani Ekle butonu.
Burada kontrolleri ekledikten sonra formunuz başlatıldığında TAB tuşu ile ilerlerken hangi sırayla ilerlemek istediğinizi de VIEW menüsü altında bulunan tab order menüsünden düzenleyebilirsiniz. Tab Order a tıkladıkten sonra hangi sırayla ilerlemesini istiyorsanız aynı sıra ile teker teker kontrollerin üzerine tıklayınız.

İsteğinize göre tüm kontrolleri ekleyin ve dizaynınızı oluşturun. Ben aşağıdaki resimde de görüldüğü gibi GroupBox kullandım. Aynı amaca yönelik olan kontrolleri bir arada tutmak ve takibini kolaylaştırmak maksadıyla GroupBox kullanabilirsiniz. Burada dikkat edilecek en önemli noktalardan biri de atadığınız kontrollere kod tarafında hatırlayabileceğiniz isimler (Properties ekranındaki Name özelliği) vermektir. Örn: TCKimlik no için txtTCKNo, Adı textboxı için txtAdiSoyadi gibi. 

Benim formum şu şekilde oldu.

Kullanıcı taraflı kontroller

Programı kullanacak olan kişiler hata yapmaya meyilli insanlardır. Örneğin dalgınlıkla TCK Noyu girerken 11 karakter olması gereken rakam sayısını yanlışlıkla 10 tane girebilir. Eğer biz bunun kontrolünü sağlamazsak, yani kullanıcıyı bu noktada uyarmazsak o kişinin yaptığı hatadan çok bizim programımızın eksik olduğu söylenir. Böyle bir noktada kullanıcıyı yapacağı hatalar karşısında uyarmak ve bazı kontrollerde kısıtlamalara gitmek daha doğru olacaktır. Örneğin Türkiye Cumhuriyeti vatandaşlarının TCK Nolarını 11 karakterle sınırlamak, bu sayının altını ve üstünü kabul etmemek bu çözümlerden biridir.

TCKimlik No alanını 11 karakterle sınırlayalım. Bunun için textbox kontrolü üzerinde sağ tıklayarak properties ekranını açalım. Burada bulunan MaxLenght özelliğini 11 yapalım. 

Aynı zamanda eğer kayıt işlemi başarılı ise kullanıcıyı bu konuda uyarmak da gerekmektedir ki adam noluyok olmasın. 

Kullanıcı eğer yanlışlıkla boş bırakmaması gereken bir alanı boş bırakırsa da uyarmak gerekir.

Diğer kontrol işlemlerimizi ilerleyen adımlarda göreceğiz.

Şimdi de T.C. Kimlik numarası alanına sadece 11 hane girilmesine izin verelim. Bunun altı ya da üstü olması durumunda kullanıcıyı uyaralım.

Bunun için EKLE butonunun kod bölümüne gidiyoruz. Kod bölümüne gitmeniz için butonun üzerinde çift tıklıyoruz. Ve şunları yazıyoruz.


        private void btnEkle_Click(object sender, EventArgs e)
        {      
         
         
            if (txtKimlik.TextLength<11)
            {
                MessageBox.Show("Dikkat! TC Kimlik numarası 11 karakterden oluşmalıdır.");
            }

            else if (int.Parse(txtKimlik.Text.Substring(10)) % 2 == 1)
            {
                MessageBox.Show("Dikkat! TCKimlik numarasının son rakamı tek sayı olamaz!");
            }
            else
            {
                MessageBox.Show("Kayıt işlemi başarılı!");
            }
         
        }


Burada ne yaptığımı görüyorsunuz zaten açıklama yapmama gerek yok sanırım.


KOD AŞAMASI

C# programı veritabanı üzerinde değişiklikler yapmak için ADO.Net teknolojisini kullanır. Bu teknoloji sayesinde sadece access değil, diğer databaseler ve tablolar üzerinde de değişiklikler yapılabilmektedir.
ADO.Net verisağlayıcılarının sınıf isimleri için "Sql", OLEDB.NET veri sağlayıcılarının sınıf isimleri içinse "OleDb" öneki ile kullanılır. Microsoft Access veritabanına bağlantı kurmak için OleDb.Net sınıfına ihtiyaç vardır. Bu veritabanında kullanacağımız nesnelere ait tablo aşağıdaki gibidir.


OleDb.Net Nesneleleri
Açıklama

OleDbConnection
Veritabanı ile bağlantı kurmak için kullanılır.
OleDbCommand
Oluşturulan sorguların çalıştırılması için kullanılır.
OleDbDataReader
Bağlantı oluşturulmuş veritabanında, Dosyadan veri okuyabilmek için kullanılır
OleDbDataSet
Bağlantı oluşturulmuş veritabanında, dosyadan veri okumak ve dosyaya veri yazmak için kullanılır.


Yukarıdaki tabloda bulunan nesneleri kullanabilmek için projemize System.Data.OleDb sınıfını eklememiz gerekmektedir. Bağlantı cümlesi ise şu şekilde olmalıdır

OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=kayit.accdb");

Ama burada unutulmaması gereken önemli bir nokta da kullanılan veritabanının sürümüne göre bağlantı cümlesinin değişkenlik gösterebilmesidir.

 Kayıt Ekle Formu üzerinde yer alan Ekle butonuna aşağıda yazan kodları yapıştırınız.


                OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=kayit.accdb");
                baglanti.Open();

                //TC.Kimlik no alanına yapılan veri girişinin daha önceden yapılıp yapılmadığını kontrol et.
                OleDbCommand sorgu = new OleDbCommand("select * from Bilgiler where Kimlik = " + "'" + txtKimlik.Text + "'", baglanti);
                OleDbDataReader oku = sorgu.ExecuteReader();
                //Sorgumuz doğruysa yani daha önce kayıt yapılmışsa kullanıcı uyarılır.
                if (oku.Read()) // Daha önce kayıt varsa.
                {
                    MessageBox.Show("Bu kayıt daha önce yapılmıştır.", "Öğrenci Ekleme", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtKimlik.Text = "";      //Alanı temizledik.
                    txtAdiSoyadi.Text = "";   //Alanı temizledik.
                }
                else // Daha önce kayıt yapılmamışsa
                {
                    // Kisisel_Bilgiler tablosuna gelen verileri ekle

                    OleDbCommand ogrenciekle = new OleDbCommand("insert into Bilgiler (Kimlik, AdiSoyadi, Sinifi, Bolumu, DogumTarihi, TelefonNo) values (" + txtKimlik.Text + ",'" + txtAdiSoyadi.Text + "','" + cmbSinifi.Text + "','" + cmbBolum.Text + "','" + dateTimePicker1.Text + "','" + maskedTextBox1.Text + "')", baglanti);
                    ogrenciekle.ExecuteNonQuery();

                    //Kayıt işlemi tamamlandığında kullanıcıyı uyar.
                    MessageBox.Show("Öğrenci Kaydı Başarılı Bir Şekilde Yapılmıştır.", "Öğrenci Kaydı", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    ogrenciekle.Dispose();    //Oluşturulan sorguyu serbest bırak
                    baglanti.Close();         //Bağlantıyı sonlandır.
                }
            }
            else    // TCKimlik no alanı boş ise kullanıcıyı uyar.
            {
                MessageBox.Show("Lütfen öğrencinin TCKimlik numarasını giriniz.", "TC Kimlik numarası alanı boş.", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }

Evet sonunda kayıt işlemini tamamladık. İşte bu da kaydımızın başarılı olduğunu gösteren MessageBox görüntüsü.


Şimdi de databasemizi kontrol edelim. Projemizin kayıtlı olduğu klasör içerisindeki debug klasörü altından erişebiliriz.

Kayıt ekleme işlemini başarılı bir biçimde gerçekleştirdik. Şimdi de ikinci butonumuza yani kayıt düzenleme formumuza geçelim.

NOT GİRİŞİ

Çok şükür kayıt aşamasını bitirdiğimize göre başka bir aşamaya geçebiliriz: "not girişi". 

Gerekli olan kontroller şunlar: (yemek tarifi gibi oldu :)

Bölüm, T.C. Kimlik no, isim soyisim, vize notu, final notu, ortalama alanları ile bir de kaydet butonuna ihtiyacımız var. 

 
Ben böyle bir form düzenledim. Nasıl düzenlediğim konusuna girmeme gerek yok. Zira daha önce yapmıştık. Fakat resimde pek belli olmayan bir kısım var. İsim soyisim ve ortalama labellerinin karşılarında da birer label var ama text değerleri boş.

Not kaydetme aşamalarımız:
1- Bölüm seç
2- Seçilen bölümde kayıtlı olan ve not girişleri yapılmamış öğrencilerin Kimlik numaraları TC Kimlik no comboboxumuzda listelenecek. Listeden Kimlik numarası seçtiğimizde öğrencinin ismi isim soyisim labelinde yazacak.
3- Vize ve final notları girilip Kaydet butonuna basıldığında notların ortalaması ortalama labelinde yazılacak ve aynı zamanda veritabanımıza kaydedilecek.

Vize ve final alanlarından birinin boş bırakılması durumunda kullanıcıyı uyarırsak programımız biraz daha kullanışlı olur.


Formu oluşturup gerekli kontrolleri yerleştirdik. Kontrollere aklınızda kalacak isimleri de verdiyseniz (lblBolum, cmbBolum, lblTCKimlik, lblTCKimlikyazi gibi) şimdi bölüm comboboxunu seçince üzerinde çıkan küçük ok işaretini kullanarak itemler ekleyelim. Fakat bunların kayıt formundaki bölüm comboboxundaki itemlerle aynı olması gerekir. Yukarıda resimde görüldüğü gibi .


KOD KISMI

Giriş formumuzda bulunan not girişi butonunun Click eventine şunları yazalım:

      private void button5_Click(object sender, EventArgs e)
        {
            not_giris form2 = new not_giris();
            form2.ShowDialog();
        }

Ben butonun ismini değiştirmemişim. Bu yüzden button5 yazıyor. Sizde farklı olabilir. Zaten designer ekranında çift tıklayarak click eventine direk gidebilirsiniz.

Öncelikle formumuzun database ile bağlantısını oluşturmalıyız ki bilgileri çekip gerekli alanlara yazdırsın. 

Bu noktada veritabanı ile gerçekleştirilmesi gereken bağlantıyı dosya faaliyet alanımızda bir kez oluşturarak ihtiyaç olduğunda çağırmak suretiyle gereksiz tekrarlardan kurtulmuş olacağız.

OleDbCommand nesnesi yardımıyla oluşturulan sorgu, ihtiyacımız olan verileri seçmemize, OleDbDataReader ise bu seçilen verileri okumamıza yarayacak. Sorgu yazarken çekeceğimiz verilerin hangi koşulu sağlayacağını (bir nevi filtrelemek gibi) WHERE deyimiyle ifade edeceğiz.

SQL ifadesinde iki koşulumuz var ve bu iki koşulun aynı anda gerçekleşmesini istiyoruz. Bu durumda AND ifadesini kullanacağız. Sorgu ile Notlar tablosundan çekilen TC Kimlik numaralarını formumuz üzerinde yer alan tckimlik combobox una ekleyebilmek için cmbTCKimlik.Items.Add(oku["TCKimlik"]); ifadesi kullanılabilir. Veritabanı içerisinde bulunan kayıtların okunmasında OleDbCommand nesnesinin ExecuteReader() metodundan yararlanılır. Dispose(ortadan kaldır) daha önce de belirttiğim gibi sorgunun serbest kalmasını, Close (kapat) metosuysa bağlantının kapanmasını sağlamaktadır.

Kisisel_Bilgiler tablomuzdan TC Kimlik ve bölüm verilerini çekmek istiyoruz.
Koşul 1 : cmbBolum kontrolünde seçili olan bölüme ait olmak.
Koşul 2: Notlar tablosunda kayıtlı olmamak.

Şimdi bu iki sorguyu birbirine AND ifadesiyle bağlayalım.

(Select TCKimlik, Bolum from Kisisel_Bilgiler where TCKimlik not in (select TCKimlik from Notlar) AND Bolum =  "+" ' " + cmbBolum.Text + " ' ")
























Yorumlar

Yorum Gönder

Bu blogdaki popüler yayınlar

3- C# İLE NOTEPAD (NOTDEFTERİ) YAPIMI

HESAP MAKİNESİ