Bu makalemizde C# ile Veritabanı bağlantılı olarak müşterilere ait bakiye kontrolü, müşterinin bakiye durumuna göre hesaptan para çekme yani tahsilat işlemi, bakiyesi yetersiz olması durumunda ise bu durumu bildirme işlemlerini gerçekleştiren basit bir uygulama gerçekleştireceğiz.
Uygulamamıza başlıyoruz. Öncelikle bu işlemleri gerçekleştirmek üzere Formumuzu aşağıdaki şekilde tasarlıyoruz.
Form tasarımını tamaladıktan sonra veritabanımıza geçiyoruz. Örneğimizde “dbMusteri.accdb” isimli access veritabanını kullanacağız. Veritabanımızı oluşturduktan sonra içine Hesap isimli bir tablo oluşturarak aşağıdaki gibi alanlarını oluşturuyoruz. Tabi siz daha gelişmiş bir tablo tasarımı gerçekleştirebilirsiniz.
Tablomuzu oluşturduktan sonra deneme amaçlı bir kaç kayıt girdikten sonra tekrar formumuza dönelim. Formumuzda öncelikle yapılacakların bir özetini geçelim.
İlk olarak;
1 2 3 |
using System.Data.OleDb; |
ekleyerek başlıyoruz.
Daha sonra Doldur() isimli bir metot oluşturacağız.Bu metot Hesap tablosundaki tüm verilerin listbox1‘ e çekilmesini sağlayacak. Form yüklendiğinde yani ilk açıldığında ve Müşteri hesabından para çekildiğinde çalışacağı için bu işlemi metot içinde gerçekleştirip daha sonra çağıracağız.
Metodumuzu oluşturmadan önce public olarak;
1 2 3 4 5 |
OleDbConnection con= new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=dbMusteri.accdb"); OleDbCommand cmd; OleDbDataReader dr; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void Doldur() { listBox1.Items.Clear(); listBox1.Items.Add("Müşteri No\tBakiye"); listBox1.Items.Add("=========================="); cmd = new OleDbCommand(); con.Open(); cmd.Connection = con; cmd.CommandText = "Select *From Hesap"; dr = cmd.ExecuteReader(); while (dr.Read()) { listBox1.Items.Add(dr[0] + "\t\t" + dr[1]); } con.Close(); } |
Bu işlemi tamamladıktan sonra ikinci bir metot daha oluşturacağız. Bu metodumuzun adı BakiyeGetir olacak. Görevi ise gönderilen müşteri numarasına göre o müşteriye ait bakiye bilgisini geri döndürmek olacak. Bu bilgi bize Müşteriden para çekerken gerekecek. Bu metottan dönen değeri çekilmek istenen tutar ile kıyaslayarak işlemi gerçekleştireceğiz. metodumuz int türünde Müşteri Numarasını parametre olarak almakta ve geriye double türünde bakiye bilgisini döndürmekte.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public double BakiyeGetir(int mno) { con.Open(); double musteribakiye=0; cmd.CommandText = "Select * From Hesap where musterino="+mno+""; dr = cmd.ExecuteReader(); while (dr.Read()) { musteribakiye =Convert.ToDouble(dr[1]); } con.Close(); return musteribakiye; } |
Metot tanımlamalarını yaptıktan sonra işlerimizin büyük bölümünü halletmiş oluyoruz. Şimdi Form ilk açıldığında Doldur() metodunu çağırarak listbox’ ta verilerin listelenmesini sağlayalım.
1 2 3 4 5 6 |
private void Form1_Load(object sender, EventArgs e) { Doldur(); } |
Son adıma geçiyoruz. Bu adımda Hesaptan Çek butonu içine yazacağımız kodlar bulunuyor. Kodları yazmadan önce kısaca açıklayalım. Butona basıldığında ilk olarak Müşteri No ve Çekilecek Tutarı değişkenlere aktarıyoruz. Daha sonra değişkene aktardığımız int türündeki Müşteri numarasını BakiyeGetir isimli Metoda gönderek O müşteri numarasına ait bakiyenin Hesap tablosundan alınmasını sağlıyoruz. Çekilen tutar eğer veritabanında o müşteriye ait bakiyeden büyükse para çekme işlemini gerçekleştirerek çekilen tutarın bakiyeden düşürülmesini ve tablo üzerinde güncellenmesini sağlıyoruz. Aksi durumda Bakiye Yetersiz mesajı verilmesini gerçekleştiriyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
private void button1_Click(object sender, EventArgs e) { int mno=Convert.ToInt32(textBox1.Text); double cekilen=Convert.ToDouble(textBox2.Text); double mbakiye = BakiyeGetir(mno); if (mbakiye >= cekilen) { con.Open(); string sorgu = "Update Hesap Set bakiye=(bakiye-@cekilen) where musterino=@musterino"; cmd = new OleDbCommand(sorgu, con); cmd.Parameters.AddWithValue("@cekilen", cekilen); cmd.Parameters.AddWithValue("@musterino", Convert.ToInt32(textBox1.Text)); cmd.ExecuteNonQuery(); con.Close(); Doldur(); } else { MessageBox.Show("Yetersiz Bakiye. Şuanki Bakiyeniz: "+mbakiye.ToString("C2")); } } |
Kodlarımızın tamamlanmış hali aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
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 MusteriHesap { public partial class Form1 : Form { OleDbConnection con= new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=dbMusteri.accdb"); OleDbCommand cmd; OleDbDataReader dr; public Form1() { InitializeComponent(); } void Doldur() { listBox1.Items.Clear(); listBox1.Items.Add("Müşteri No\tBakiye"); listBox1.Items.Add("=========================="); cmd = new OleDbCommand(); con.Open(); cmd.Connection = con; cmd.CommandText = "Select *From Hesap"; dr = cmd.ExecuteReader(); while (dr.Read()) { listBox1.Items.Add(dr[0] + "\t\t" + dr[1]); } con.Close(); } public double BakiyeGetir(int mno) { con.Open(); double musteribakiye = 0; cmd.CommandText = "Select * From Hesap where musterino=" + mno + ""; dr = cmd.ExecuteReader(); while (dr.Read()) { musteribakiye = Convert.ToDouble(dr[1]); } con.Close(); return musteribakiye; } private void Form1_Load(object sender, EventArgs e) { Doldur(); } private void button1_Click(object sender, EventArgs e) { int mno=Convert.ToInt32(textBox1.Text); double cekilen=Convert.ToDouble(textBox2.Text); double mbakiye = BakiyeGetir(mno); if (mbakiye >= cekilen) { con.Open(); string sorgu = "Update Hesap Set bakiye=(bakiye-@cekilen) where musterino=@musterino"; cmd = new OleDbCommand(sorgu, con); cmd.Parameters.AddWithValue("@cekilen", cekilen); cmd.Parameters.AddWithValue("@musterino", Convert.ToInt32(textBox1.Text)); cmd.ExecuteNonQuery(); con.Close(); Doldur(); } else { MessageBox.Show("Yetersiz Bakiye. Şuanki Bakiyeniz: "+mbakiye.ToString("C2")); } } } } |