C# Benzin İstasyonu Otomasyonu Kaynak Kodları ve Access Veritabanı projesi, Windows Forms (WinForms) mimarisini öğrenmek ve dönem ödevlerini tamamlamak isteyen yazılım öğrencileri için pratik bir masaüstü referansıdır. Bu çalışmada, akaryakıt otomasyonu süreçlerinde yer alan CRUD (Ekle, Sil, Güncelle, Listele) operasyonlarının C# ve yerel Access veritabanı entegrasyonu ile nasıl yapıldığını teknik boyutuyla ele alıyoruz. Harici bir DLL bağımlılığı barındırmayan ve tamamen açık kaynak kodlu olarak paylaşılan bu benzin istasyonu otomasyonu kaynak kodları, dinamik fiyat hesaplama ve depo stok takibi gibi temel yazılım mantıklarını kavramak için ideal bir eğitim materyalidir.
C# Benzin İstasyonu Otomasyonu Kaynak Kodları ve Access Veritabanı Projesi
Özellikle dönem ödevi hazırlayan öğrenciler ve masaüstü yazılım mimarisini öğrenmek isteyen geliştiriciler için hazırlanan C# Benzin İstasyonu Otomasyonu kaynak kod projesi, Windows Forms tabanlı pratik çözümler sunmaktadır. Bu çalışmada, bir akaryakıt otomasyonu mimarisinde bulunması gereken CRUD (Ekle, Sil, Güncelle, Listele) süreçlerinin Access veritabanı ile entegre bir şekilde C# dili üzerinden nasıl kurgulandığını teknik hatlarıyla ele alıyoruz. Tamamen açık kaynaklı paylaşılan bu benzin istasyonu otomasyonu kaynak kodları, sade tasarımı ve harici kütüphane (DLL) bağımlılığı bulundurmayan yapısıyla temel programlama mantığı için kusursuz bir eğitim materyalidir.
Açık Kaynak Proje Paylaşımının Amaçları
Bu tarz otomasyon ve kaynak kod yapılarının açık kaynak olarak topluluğa sunulmasının temel nedenleri şunlardır:
- Yazılım öğrencilerine güvenilir ve çalışan alternatif referans mimariler sunarak hatalı kodlama alışkanlıklarının önüne geçmek.
- Masaüstü otomasyon projelerinin mantıksal süreçlerinin sanıldığı kadar karmaşık olmadığını pratik örneklerle göstermek.
- Geliştirici topluluklarına ücretsiz ve doğrudan entegre edilebilir eğitim dökümanları kazandırmak.
Öne Çıkan Modüller
Proje bünyesinde temel veri yönetim işlemlerine ek olarak şu fonksiyonlar yer almaktadır:
- Alınan litreye göre dinamik fiyat hesaplama
- Toplam ücrete göre yakıt miktarı analizi
- Anlık depo kalan yakıt miktarı takibi
Kaynak Kod İndir
Windows Forms dosyası, tasarım arayüzü ve MS Access (.accdb) veritabanı paket halindedir.
Otomasyonu İndir (Yandex.Disk)Teknik Altyapı ve Veri Erişim Katmanı
System.Data.OleDb Sınıfı
Akaryakıt İşlemleri Çirdek Kod Yapısı (C#)
Depo kontrolü, akaryakıt ekleme, silme ve güncelleme operasyonlarını yöneten akaryakit_islemleri.cs dosyasına ait arka plan kaynak kodları:
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 Benzin_istanyonu_otomasyonu
{
public partial class akaryakit_islemleri : Form
{
public akaryakit_islemleri()
{
InitializeComponent();
}
// StartupPath kullanılarak veritabanı dosyasının taşınabilirliği optimize edilmiştir
OleDbConnection baglan = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + Application.StartupPath + "\\benzin_istasyonu.accdb");
DataTable tablo = new DataTable();
public void listele()
{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
tablo.Clear();
baglan.Open();
OleDbDataAdapter adtr = new OleDbDataAdapter("select * from depo", baglan);
adtr.Fill(tablo);
dataGridView1.DataSource = tablo;
dataGridView1.Columns[0].Visible = false; // ID sütununu gizleme
baglan.Close();
}
private void akaryakit_islemleri_Load(object sender, EventArgs e)
{
listele();
}
private void button1_Click(object sender, EventArgs e)
{
// Yeni Akaryakıt Kayıt İşlemi
if (baglan.State == ConnectionState.Open)
{
baglan.Close();
}
baglan.Open();
OleDbCommand kmt;
kmt = new OleDbCommand("INSERT INTO depo(akaryakit_adi,litre_fiyati,depo_kalan) values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')", baglan);
kmt.ExecuteNonQuery();
baglan.Close();
MessageBox.Show("Kayıt Başarılı", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
listele();
}
private void button2_Click(object sender, EventArgs e)
{
// Seçili Akaryakıt Kayıt Silme İşlemi
OleDbCommand kmt;
baglan.Open();
kmt = new OleDbCommand("Delete from depo where akaryakit_adi = '" + dataGridView1.CurrentRow.Cells[1].Value.ToString() + "'", baglan);
kmt.ExecuteNonQuery();
kmt.Dispose();
baglan.Close();
MessageBox.Show("İşleminiz başarılı", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
listele();
}
private void button3_Click(object sender, EventArgs e)
{
// Akaryakıt Fiyat ve Stok Güncelleme İşlemi
OleDbCommand kmt;
baglan.Open();
kmt = new OleDbCommand("UPDATE depo SET akaryakit_adi='" + textBox1.Text + "',litre_fiyati='" + textBox2.Text + "',depo_kalan='" + textBox3.Text + "' where akaryakit_adi='" + dataGridView1.CurrentRow.Cells[1].Value.ToString() + "'", baglan);
kmt.ExecuteNonQuery();
baglan.Close();
MessageBox.Show("İşleminiz başarılı", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
listele();
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
// Tablodan tıklanan satır verilerini form alanlarına otomatik doldurma
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
}
private void button4_Click(object sender, EventArgs e)
{
this.Hide(); // Pencereyi gizleme
}
private void button5_Click(object sender, EventArgs e)
{
// Akaryakıt Adına Göre Filtreleme ve Arama İşlemi
tablo.Clear();
baglan.Open();
OleDbDataAdapter adtr = new OleDbDataAdapter("select * from depo where akaryakit_adi='" + textBox4.Text + "'", baglan);
adtr.Fill(tablo);
dataGridView1.DataSource = tablo;
dataGridView1.Columns[0].Visible = false;
baglan.Close();
textBox4.Text = "";
}
}
}
Teknik Kod Analizi ve Refaktör Önerileri
1. SQL Injection Güvenlik Açığı
Projedeki arama ve kayıt sorgularında uygulanan inline metot birleştirmeleri ('" + textBox1.Text + "'), SQL Injection zafiyetine zemin hazırlar. Kurumsal ve güvenli yapılarda bunun yerine kesinlikle Parameters.AddWithValue() yapısı kullanılmalıdır.
2. Kaynak Yönetimi ve Blok Yapısı
Oluşturulan OleDbCommand ve bağlantı nesneleri istisnai bir hata durumunda bellek üzerinde açık kalabilir. Garbage Collector’ın (Bellek Boşaltıcı) bu nesneleri runtime esnasında otomatik imha edebilmesi adına veri tabanı bağlantı süreçleri using() blokları içine taşınmalıdır.

