Günümüzde enerji tüketimi, hem bireysel hem de kurumsal düzeyde önemli bir konu haline gelmiştir. Enerji tasarrufu yapmak ve tüketimi kontrol altında tutmak için cihazların ne kadar enerji harcadığını bilmek büyük önem taşır. Bu makalede, C# programlama dili kullanılarak geliştirilen basit bir “Cihaz Tüketim Hesaplama Uygulaması”nı inceleyeceğiz. Bu uygulama, kullanıcıların evlerinde veya iş yerlerinde kullandıkları cihazların enerji tüketimini hesaplamalarına ve bu tüketimle ilgili özet bilgileri görmelerine olanak tanır.
Form Tasarımı
Formumuzda 4 adet Label, 3 adet TextBox,2 adet Button ve 1 adet DataGridView denetimi yer almaktadır.

Projenin Amacı
Bu proje, kullanıcıların elektrikli cihazlarının aylık tüketimini hesaplamasına yardımcı olur. Kullanıcı, cihazın güç tüketimini ve günlük kullanım süresini girdikten sonra, program cihazın aylık tüketimini hesaplayarak listeye ekler. Bu işlemleri yaparken C# Class yapısı ve List yapısını kullanacağız.
Uygulamanın Genel Yapısı
Uygulama, Windows Forms kullanılarak geliştirilmiştir ve temel olarak aşağıdaki bileşenlerden oluşur:
- Cihaz Sınıfı (Cihaz.cs): Bu sınıf, cihazların özelliklerini (cihaz adı, gücü, kullanım süresi) ve tüketim miktarını hesaplama işlevini içerir.
- Ana Form (Form1.cs): Bu form, kullanıcı arayüzünü ve cihazların listelenmesi, eklenmesi, silinmesi gibi işlemleri yönetir.
Cihaz Sınıfı (Cihaz.cs)
Cihaz sınıfı, cihazların temel özelliklerini ve tüketim hesaplama mantığını içerir. Sınıfın özellikleri şunlardır:
- CihazAdi: Cihazın adını temsil eder.
- CihazGucu: Cihazın gücünü (Watt cinsinden) temsil eder.
- KullanilanSure: Cihazın günlük kullanım süresini (saat cinsinden) temsil eder.
- TuketimMiktari: Cihazın aylık tüketim miktarını hesaplar.
Tüketim miktarı, TuketimHesapla()
metodu ile hesaplanır. Bu metod, cihazın gücünü, kullanım süresini ve birim elektrik fiyatını (örneğin, 2.07 TL/kWh) kullanarak aylık tüketim miktarını hesaplar.
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 | using System; namespace CihazTuketim { internal class Cihaz { public string CihazAdi { get; set; } public double CihazGucu { get; set; } public double KullanilanSure { get; set; } public double TuketimMiktari => TuketimHesapla(); public Cihaz(string cihazAdi, double cihazGucu, double kullanilanSure) { CihazAdi = cihazAdi; CihazGucu = cihazGucu; KullanilanSure = kullanilanSure; } public double TuketimHesapla() { return Math.Round(CihazGucu / 1000 * KullanilanSure * 2.07 * 30, 2); } } } |
Ana Form (Form1.cs)
Ana form, kullanıcıların cihazları ekleyebileceği, silebileceği ve tüketim özetini görebileceği bir arayüz sunar. Formun temel işlevleri şunlardır:
- Cihaz Ekleme: Kullanıcı, cihaz adı, gücü ve kullanım süresini girerek yeni bir cihaz ekleyebilir. Bu cihaz, bir liste içinde saklanır ve DataGridView’de listelenir.
- Cihaz Silme: Kullanıcı, listeden bir cihaz seçerek silebilir.
- Tüketim Özeti: Kullanıcı, tüm cihazların toplam tüketim miktarını, KDV’yi ve toplam ödenecek tutarı görebilir.
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 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows.Forms; namespace CihazTuketim { public partial class Form1 : Form { private BindingList<Cihaz> cihazListesi = new BindingList<Cihaz>(); public Form1() { InitializeComponent(); dataGridView1.DataSource = cihazListesi; } private void btnEkle_Click(object sender, EventArgs e) { if (!double.TryParse(txtSure.Text, out double kullanilanSure) || !double.TryParse(txtGuc.Text, out double guc) || string.IsNullOrWhiteSpace(txtAd.Text)) { MessageBox.Show("Lütfen geçerli cihaz adı ve sayısal değerler girin!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } cihazListesi.Add(new Cihaz(txtAd.Text, guc, kullanilanSure)); Temizle(); lblOzet.Text = OzetYazdir(); } private void btnSil_Click(object sender, EventArgs e) { if (dataGridView1.CurrentRow == null) { MessageBox.Show("Lütfen silmek için bir cihaz seçin!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } cihazListesi.RemoveAt(dataGridView1.CurrentRow.Index); lblOzet.Text = OzetYazdir(); } private void Form1_Load(object sender, EventArgs e) { cihazListesi.Add(new Cihaz("Buzdolabı", 300, 10)); cihazListesi.Add(new Cihaz("Çamaşır Makinesi", 1000, 2)); cihazListesi.Add(new Cihaz("Kombi", 150, 10)); cihazListesi.Add(new Cihaz("Bulaşık Makinesi", 1200, 2)); lblOzet.Text = OzetYazdir(); } private void Temizle() { foreach (Control ctrl in this.Controls) { if (ctrl is TextBox textBox) { textBox.Clear(); } } } private string OzetYazdir() { double toplam = cihazListesi.Sum(c => c.TuketimMiktari); return $"Toplam: {toplam}\nKDV: {toplam * 0.1}\nToplam Ödenecek Tutar: {toplam * 1.1}"; } } } |
BindingList Kullanımı
1 2 3 | private BindingList<Cihaz> cihazListesi = new BindingList<Cihaz>(); |
BindingList<T>
, bir koleksiyon türüdür ve veri bağlama (data binding) işlemlerini kolaylaştırır.cihazListesi
,Cihaz
nesnelerini tutar veDataGridView
ile otomatik olarak senkronize olur. Yani, listede yapılan herhangi bir değişiklik (ekleme, silme) anındaDataGridView
‘e yansır.
Form1 Constructor (Yapıcı Metod)
1 2 3 4 5 6 7 | public Form1() { InitializeComponent(); dataGridView1.DataSource = cihazListesi; } |
- Form yüklendiğinde,
dataGridView1
‘in veri kaynağı (DataSource
)cihazListesi
olarak ayarlanır. Bu sayede,cihazListesi
‘ndeki veriler otomatik olarakDataGridView
‘de gösterilir.
Cihaz Ekleme İşlemi (BtnEkle_Click)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private void btnEkle_Click(object sender, EventArgs e) { if (!double.TryParse(txtSure.Text, out double kullanilanSure) || !double.TryParse(txtGuc.Text, out double guc) || string.IsNullOrWhiteSpace(txtAd.Text)) { MessageBox.Show("Lütfen geçerli cihaz adı ve sayısal değerler girin!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } cihazListesi.Add(new Cihaz(txtAd.Text, guc, kullanilanSure)); Temizle(); lblOzet.Text = OzetYazdir(); } |
- Girdi Kontrolü:
txtSure
vetxtGuc
alanlarına girilen değerlerin sayısal olup olmadığı kontrol edilir. Ayrıca,txtAd
alanının boş olup olmadığı kontrol edilir. Geçersiz bir girdi varsa, kullanıcıya hata mesajı gösterilir. - Cihaz Ekleme: Geçerli girdiler varsa, yeni bir
Cihaz
nesnesi oluşturulur vecihazListesi
‘ne eklenir. - Temizleme ve Özet Güncelleme:
Temizle()
metodu ile formdaki metin kutuları temizlenir veOzetYazdir()
metodu ile özet bilgisi güncellenir.
Cihaz Silme İşlemi(BtnSil_Click)
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void btnSil_Click(object sender, EventArgs e) { if (dataGridView1.CurrentRow == null) { MessageBox.Show("Lütfen silmek için bir cihaz seçin!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } cihazListesi.RemoveAt(dataGridView1.CurrentRow.Index); lblOzet.Text = OzetYazdir(); } |
- Seçim Kontrolü: Kullanıcının
DataGridView
‘den bir satır seçip seçmediği kontrol edilir. Seçim yoksa, hata mesajı gösterilir. - Cihaz Silme: Seçili satırın indeksi kullanılarak, ilgili cihaz
cihazListesi
‘nden silinir. - Özet Güncelleme:
OzetYazdir()
metodu ile özet bilgisi güncellenir.
Form Yüklendiğinde Örnek Veriler Ekleme (Form1_Load)
1 2 3 4 5 6 7 8 9 10 | private void Form1_Load(object sender, EventArgs e) { cihazListesi.Add(new Cihaz("Buzdolabı", 300, 10)); cihazListesi.Add(new Cihaz("Çamaşır Makinesi", 1000, 2)); cihazListesi.Add(new Cihaz("Kombi", 150, 10)); cihazListesi.Add(new Cihaz("Bulaşık Makinesi", 1200, 2)); lblOzet.Text = OzetYazdir(); } |
- Form yüklendiğinde, örnek cihazlar (
Buzdolabı
,Çamaşır Makinesi
,Kombi
,Bulaşık Makinesi
)cihazListesi
‘ne eklenir. OzetYazdir()
metodu ile özet bilgisi hesaplanır velblOzet
etiketine yazdırılır.
Formdaki Metin Kutularını Temizleme (Temizle)
1 2 3 4 5 6 7 8 9 10 11 12 | private void Temizle() { foreach (Control ctrl in this.Controls) { if (ctrl is TextBox textBox) { textBox.Clear(); } } } |
- Formdaki tüm kontroller (
Controls
) döngü ile taranır. - Eğer kontrol bir
TextBox
ise, içeriği temizlenir (Clear()
metodu ile).
Tüketim Özeti Hesaplama (OzetYazdir)
1 2 3 4 5 6 7 | private string OzetYazdir() { double toplam = cihazListesi.Sum(c => c.TuketimMiktari); return $"Toplam: {toplam}\nKDV: {toplam * 0.1}\nToplam Ödenecek Tutar: {toplam * 1.1}"; } |
- Toplam Tüketim:
cihazListesi
‘ndeki tüm cihazlarınTuketimMiktari
özellikleri toplanır. - KDV ve Toplam Tutar: Toplam tüketim üzerinden %10 KDV hesaplanır ve toplam ödenecek tutar bulunur.
- Özet Metni: Hesaplanan değerler, bir metin olarak formatlanır ve döndürülür.
Sonuç
Bu uygulama, C# ve Windows Forms kullanılarak geliştirilmiş basit bir enerji tüketim hesaplama aracıdır. Kullanıcılar, cihazların enerji tüketimini hesaplayabilir, cihaz ekleyip silebilir ve toplam tüketim özetini görebilir. Kod, BindingList
kullanımı, veri bağlama, hata yönetimi ve LINQ gibi modern C# özelliklerini içerir. Bu tür uygulamalar, enerji tasarrufu yapmak isteyen kullanıcılar için faydalı bir araç olabilir.
