Selamlar, artık projelere doyamıyoruz. C# Gelir Gider Takip Uygulaması ile proje yazılarına devam ediyoruz. Yeni konular bulana kadar aklımdaki ufak tefek projeleri sizler için pat pat atmaya devam edeceğim. Üstelik artık youtube’a videolarda çekmeye başladım. Mesela bu projeyi hazırlarken videosunu çektim ve youtube’a yükledim. 1 saatlik bir video oldu. Rezalet internetim yüzünden 12 saatten fazla sürdü yüklenmesi. :)
C# Gelir Gider Takip Uygulaması
Bu projemiz arkadaşlar basit bir gelir gider uygulamasıdır. Ben iskelet diyebileceğimiz kadarını yapıyorum. Güzelleştirmesi size ait. Projeyi bilgisayarınıza indirip istediğiniz gibi düzenleyebilir ve kullanabilirsiniz. Bu yayınladığım tüm projeler ve kodlar için geçerlidir. Eğer ileride udemy gibi platformlarda kurs hazırlamak istersem o zaman daha profesyonel işler çıkartabilirim.
Bu projemizde Gider Tipi ve Gelir/Gider kaydetme, güncelleme ve silme işlemi yaptım. Ayrıca DataGridView’da kayıtları listeledik gelir gider tipine göre (Gelir Mi Gider Mi) filtreleme yaptık. Olabildiğince basit bir uygulama oldu. Geliştirmesi de size ait. :)
Bu projeyi hazırlarken video da aldım ve sessiz bir video değil. Ayrıca kodları ve veritabanını da Github’a yükledim. Bu cümlelerden bıkmış olabilirsiniz ama abone olup, beğenirseniz mutlu olurum. :)
Ana Form.cs Tasarımı ve Kodları
Form tasarımı ekran görüntüsü aşağıdaki gibidir.
Bu formun 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; namespace Gelir_Gider_Takip { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { dgv_Update(); combo_doldur(); } void combo_doldur() { cmb_gider_tipi.DataSource = glb.sql.Table("select gdr_Gider_Kod,gdr_Gider_Ad from GIDER_TIPLERI"); cmb_gider_tipi.DisplayMember = "gdr_Gider_Ad"; cmb_gider_tipi.ValueMember = "gdr_Gider_Kod"; } string tip() { string tip = ""; if (rad_gelir.Checked == true) { tip = "Gelir"; } if (rad_gider.Checked == true) { tip = "Gider"; } return tip; } private void btn_kaydet_Click(object sender, EventArgs e) { if (tip() != "") { if (Convert.ToInt32(cal_recno.Text) == 0) { glb.sql.Command("" + " INSERT INTO[dbo].[GELIR_GIDER_KAYITLARI] " + " ([ggr_tarih] " + " ,[ggr_tipi] " + " ,[ggr_gider_tipi] " + " ,[ggr_cari] " + " ,[ggr_tutar] " + " ,[ggr_aciklama] " + " ,[ggr_kayit_tarih]) " + " VALUES " + " ('" + Convert.ToDateTime(dat_tarih.Value).ToString("yyyyMMdd HH:mm") + "' " //< ggr_tarih, datetime,> " + " ,'" + tip() + "' " //< ggr_tipi, nvarchar(50),> " + " ,'" + cmb_gider_tipi.SelectedValue.ToString() + "' " //< ggr_gider_tipi, nvarchar(50),> " + " ,'" + txt_cari.Text + "' " //< ggr_cari, nvarchar(500),> " + " , " + Convert.ToDouble(cal_tutar.Text).ToString().Replace(",", ".") + " " //< ggr_tutar, float,> " + " ,'" + txt_Aciklama.Text + "' " //< ggr_aciklama, nvarchar(max),> " + " , getdate() " //< ggr_kayit_tarih, datetime,> " + " ) " ); dgv_Update(); } else { glb.sql.Command("" + " update [dbo].[GELIR_GIDER_KAYITLARI] set " + " [ggr_tarih] = '" + Convert.ToDateTime(dat_tarih.Value).ToString("yyyyMMdd HH:mm") + "' " //< ggr_tarih, datetime,> " " + " ,[ggr_tipi] = '" + tip() + "' " //< ggr_tipi, nvarchar(50),> " " + " ,[ggr_gider_tipi] = '" + cmb_gider_tipi.SelectedValue.ToString() + "' " //< ggr_gider_tipi, nvarchar(50),> " " + " ,[ggr_cari] = '" + txt_cari.Text + "' " //< ggr_cari, nvarchar(500),> " " + " ,[ggr_tutar] = '" + Convert.ToDouble(cal_tutar.Text).ToString().Replace(",", ".") + "' " //< ggr_tutar, float,> " " + " ,[ggr_aciklama] = '" + txt_Aciklama.Text + "' " //< ggr_aciklama, nvarchar(max),> " " + " where ggr_RECno = " + Convert.ToInt32(cal_recno.Text) + " " ); dgv_Update(); } } else { MessageBox.Show("İşlem Tipi seçmeden işlem yapamazsınız!", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } private void btn_kapat_Click(object sender, EventArgs e) { Application.Exit(); } private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; cal_recno.Text = row.Cells["KAYITNO"].Value.ToString(); cal_tutar.Text = row.Cells["Tutar"].Value.ToString(); txt_Aciklama.Text = row.Cells["Açıklama"].Value.ToString(); txt_cari.Text = row.Cells["Cari"].Value.ToString(); string gelir_gider = row.Cells["Tipi"].Value.ToString(); switch (gelir_gider) { case "Gelir": rad_gelir.Checked = true; break; case "Gider": rad_gider.Checked = true; break; default: rad_gider.Checked = false; rad_gelir.Checked = false; break; } dat_tarih.Text = row.Cells["Tarih"].Value.ToString(); cmb_gider_tipi.SelectedValue = row.Cells["Gider Tip Kod"].Value.ToString(); } } private void btn_sil_Click(object sender, EventArgs e) { if (MessageBox.Show("Bu " + tip() + " kaydını silmek istediğinzden emin misiniz?", "Onay Verin!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { glb.sql.Command("delete from [dbo].[GELIR_GIDER_KAYITLARI] where ggr_RECno = " + Convert.ToInt32(cal_recno.Text) + " "); dgv_Update(); } } void dgv_Update() { dataGridView1.DataSource = glb.sql.Table("select * from dbo.fn_GelirGiderListesi(0) " + where); } string where = " "; private void rad_f_hepsi_CheckedChanged(object sender, EventArgs e) { if (rad_f_gelir.Checked == true) { where = " where Tipi = 'Gelir' "; } if (rad_f_gider.Checked == true) { where = " where Tipi = 'Gider' "; } if (rad_f_hepsi.Checked == true) { where = " "; } dgv_Update(); } private void btn_tip_ekle_Click(object sender, EventArgs e) { new GiderTipi_Ekle() { }.ShowDialog(); combo_doldur(); } } }
Bu kodları incelediğinizde bilinen bazı işlemlerin farklı kullanım şekillerini fark edeceksiniz. Örneğin en sondaki form açma şekli gibi. Ayrıca burada dikkat etmenizi istediğim yerlerden birisi de şudur. İki defa kullanacağımız kodların hepsi metotların içerisindedir. Örneğin combobox doldurma kodları ve datagiridview doldurma kodları gibi…
GiderTipi_Ekle.cs Tasarımı ve Kodları
Bu ekrandaki silme işlemi yapmadım. Bunu siz diğer projelerden bakarak yapabilirsiniz. Kodlarımız da 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; namespace Gelir_Gider_Takip { public partial class GiderTipi_Ekle : Form { public GiderTipi_Ekle() { InitializeComponent(); } private void GiderTipi_Ekle_Load(object sender, EventArgs e) { } private void btn_kapat_Click(object sender, EventArgs e) { Close(); } private void btn_kaydet_Click(object sender, EventArgs e) { int kontrol = Convert.ToInt16(glb.sql.Command("select count(*) from GIDER_TIPLERI where gdr_Gider_Kod = '" + txt_gider_kod + "'")); if (kontrol == 0) { glb.sql.Command("" + " INSERT INTO[dbo].[GIDER_TIPLERI] " + " ([gdr_Gider_Kod] " + " ,[gdr_Gider_Ad]) " + " VALUES " + " ( '" + txt_gider_kod.Text + "' "//< gdr_Gider_Kod, nvarchar(50),> " + " , '" + txt_gider_kod.Text + "' "//< gdr_Gider_Kod, nvarchar(50),> " + ") "); if (glb.sql.exception == null) { MessageBox.Show("Kayıt Başarılı"); } } else { glb.sql.Command("" + " update [dbo].[GIDER_TIPLERI] set " + " " + " [gdr_Gider_Ad] = '" + txt_gider_kod.Text + "' "//< gdr_Gider_Kod, nvarchar(50),> " + " where gdr_Gider_Kod = '" + txt_gider_kod.Text + "'" + " "); if (glb.sql.exception == null) { MessageBox.Show("Güncelleme Başarılı"); } } } } }
Projenin tamamı bu kadardı arkadaşlar. Diğer projelerimizde görüşmek üzere…
C# Gelir Gider Takip Uygulaması yazımda bu kadar arkadaşlar. Diğer yazılarımda görüşmek üzere. Umarım faydalı olmuştur. Aşağıdaki linklerden eğitim seti sayfasına ve github projesine ulaşabilirsiniz.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu projenin Github sayfasına buradan ulaşabilirsiniz.
Sağlıcakla ve kodla kalın….
emeğinize teşekkür Mustafa Bey programı vidolarnızdan takip edip oluşturmaya çalışacağım takıldığım yer olursa sizinle paylaşırım şimödiden teşekkürler …
saygılarımla
iyi çaşlışmalar
Merhaba,
Güzel yorumunuz için teşekkür ederim.
Elbette, takıldığınız noktalarda mail üzerinden iletişime geçebilirsiniz.