Merhaba, C# Otobüs Bilet Satış Uygulaması – Basit Düzey örnek projesi ile C# eğitim setime devam ediyorum. Başlıktan da anlaşılacağı gibi bu dersimizde en basit şekilde bir otobüs firmasının bilet satış uygulamasını yapacağız. Proje Github’a yüklenmiş olacaktır.
Bu proje hazırlanırken, C# Örnek DataTable ve C# Dinamik Button ve Dinamik Düzen dersleri kullanılmıştır.
C# Otobüs Bilet Satış Uygulaması – Basit Düzey
Bu derse konu olan proje, çok temel düzeydedir. Dinamik olarak forma eklenen 47 adet button ve bir adet işlem formu yer almaktadır. Gerçek anlamda bir otobüs firmasının kullanımına sunmak için çok yolu vardır. Anlatacağım proje en basit hali ile bu projenin nasıl yapılabileceğini anlatmak için olacaktır. Bu projede kullanılan yöntemi temelde koltuk satış/rezerve yöntemini kullanan her yer için kullanabilirsiniz.
Bu Proje Mantığı ile Yapabileceğiniz Örnek Projeler
- Bowling salonları, bowling hattı takibi
- Sinema salonları, koltuk takibi
- Güzellik salonları, makine/oda rezerve takibi
- İnternet kafeler, bilgisayar takibi
- Araç kiralama, araçların kira/rezerve/bakım durum takibi
- Apartman yönetimi, apartman bazlı daire kiralama/satış takibi
- GoKart araç kiralam takini
- Paintball alan/ekipman kiralama takibi
- Halı saha / tenis kortu kiralama takibi..
- Uçak… yok yok buna gerek yok :D :D
Bu örnekler size saçma mı geldi? O zaman bu yazının devamını okumanızı şiddetle tavsiye ediyorum. Çünkü bu derste vereceğim yöntemi anladıktan sonra yukarıda saydığım örnekleri yapabileceğinizi anlayacaksınız… :)
Projeye Başlayalım…
Öncelikle bir ekran görüntüsü ile başlayalım.
AnaForm.cs…
Islem_Yap.cs
Projemizde toplamda, iki form, bir panel, bir datagridview, iki textbox, iki combobox iki button ve dokuz label kullandık…. Ve evet, formda 47 button olsa bile biz sadece Islem_Yap formunda 2 button kullandık… Olayın güzelliği de zaten burada ;)
Kodlarımıza Geçelim…
MyData.cs
Öncelikle verilerimizi tutacağımız bir DataTable ve DataTable’a veri ekleme metodu hazırlayacağız. MyData.cs dosyamız aşağıdaki gibidir.
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace OtobusBiletSatisi { public static class MyData { public static DataTable table; public static DataTable DataTable_Yolcular() { table = new DataTable("Yolcular"); table.Columns.Add(new DataColumn("yol_RECno", typeof(int))); table.Columns.Add(new DataColumn("yol_Koltuk_No", typeof(int))); table.Columns.Add(new DataColumn("yol_Koltuk_Durum", typeof(int))); // 0 boş, 1 satış, 2 rezerve table.Columns.Add(new DataColumn("yol_Koltuk_Ad_Soyad", typeof(string))); table.Columns.Add(new DataColumn("yol_Koltuk_Cinsiyet", typeof(string))); table.Columns.Add(new DataColumn("yol_Koltuk_Islem_Tarih", typeof(DateTime))); table.Columns.Add(new DataColumn("yol_Koltuk_Islem_Yapan", typeof(string))); return table; } public static void DataTable_Yolcular_Insert(int koltuk_no, int durum, string ad_soyad, string cinsiyet, DateTime tarih, string gorevli) { int recno = 0; try { recno = table.Rows.Count + 1; } catch (NullReferenceException) { recno = 1; } table.Rows.Add(recno, koltuk_no, durum, ad_soyad, cinsiyet, tarih, gorevli); } } }
AnaForm.cs
AnaForm’a bir panel, bir DataGridView ve bir TextBox ekliyoruz. TextBox multiline ve gizli olacak. TextBox’un Text özelliğine * (yıldız) karakteri otobüs koltuk düzeni hazırlıyoruz. Aşağıdaki görselde olduğu gibi….
Şimdi kodlarımızı yazalım.
Form_Load eventimizde MyData class dosyamızdaki DataTable’ı hazırlayacak ve Button ‘ları üretip yukarıda hazırladığımız düzende panele ekleyecek olan Duzen_Kur metodlarımızı çalıştırıyoruz.
private void Form1_Load(object sender, EventArgs e) { MyData.DataTable_Yolcular(); DuzenKur(); }
Şimdide Duzen_Kur metodumuz… C# dinamik button oluşturma ve forma ekleme kodları
void DuzenKur() { int say = 0; panel1.Controls.Clear(); int olcu = 38; for (int i = 0; i < txt_duzen.Lines.Count(); i++)// textbox satırları arasında { for (int j = 0; j < txt_duzen.Lines[i].Count(); j++) // bir satırdaki karakterler arasında { string satir = txt_duzen.Lines[i]; // bir satırı aldık if (satir[j] == '*') // satırdaki j index'ine denk gelen ifade * ise { Button nesne = new Button(); nesne.Text = (++say).ToString(); nesne.Name = "buton_" + nesne.Text; nesne.BackColor = Color.Red; nesne.Width = nesne.Height = 40; nesne.Left = olcu * j;// butonun nerede duracağı nesne.Top = olcu * i; // butonun nerede duracağı panel1.Controls.Add(nesne); nesne.Click += ButtonClick; } } } }
Bu metot, yukarıda textbox’a * ‘lar ile hazırladığımzı düzende, button’ları panel nesnesine ekleyecek…
Sıra geldi ButtonClick eventine….
private void ButtonClick(object sender, EventArgs e) { Button btn = (Button)sender; Islem_Yap fr = new Islem_Yap(); fr.lbl_koltuk_no.Text = btn.Name.Split('_')[1]; fr.ShowDialog(); int durum = fr.cmb_islem.SelectedIndex + 1; string cinsiyet = fr.cmb_musteri_cinsiyet.Text; if (fr.tamam == 1) { MyData.DataTable_Yolcular_Insert(Convert.ToInt32(fr.lbl_koltuk_no.Text), durum, fr.txt_mustari.Text, cinsiyet, Convert.ToDateTime(fr.lbl_tarih.Text), fr.lbl_gorevli.Text); switch (durum) { case 1: btn.BackColor = Color.YellowGreen; break; case 2: btn.BackColor = Color.Yellow; break; } if (cinsiyet == "Erkek") btn.Text += " E"; else btn.Text += " K"; dgv_update(); } }
Burada, Islem_Yap formumuzu açıyoruz. Formumuzdan alacağımız bilgileri tutan nesnelerin hepsinin Modifiers özellikleri Public’tir. Bu sayede değişkenler ilke uğraşmak zorunda kalmıyoruz. Kodların devamında kullanacağım iki veriyi önce değişkene atayıp kullanmayı tercih ettim.
Eğer, işlem yap formunda Tamam butonuna tıklanıp tıklanmadığını anlamak için bir public int değişken kullandım.
İşlem yap formunda Tamam butonuna tıklanmış ise işlemlerimizi yapıyoruz. Eklediğimiz verileri datagirdview’de gösterelim.
private void dgv_update() { dataGridView1.DataSource = MyData.table; }
İslem_Yap.cs
Sağ tarafta kalan tüm nesnelerin Modifiers özellikleri Public’tir. (Properties kısmında görebilirsiniz.)
Bu formumuzun tüm kodları…
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 OtobusBiletSatisi { public partial class Islem_Yap : Form { public Islem_Yap() { InitializeComponent(); } private void Islem_Yap_Load(object sender, EventArgs e) { lbl_tarih.Text = DateTime.Now.ToString(); } private void btn_iptal_Click(object sender, EventArgs e) { Close(); } public int tamam = 0; private void btn_kadyet_Click(object sender, EventArgs e) { if (txt_mustari.Text.Length > 0 && cmb_musteri_cinsiyet.SelectedIndex >= 0 && cmb_islem.SelectedIndex >= 0) { tamam = 1; Close(); } else { MessageBox.Show("*'lı alanları boş bırakamazsınız.", "Zorunlu Alan", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } } }
İşlemlerimiz hepsi bu kadardı arkadaşlar.
Nasıl? Bir textbox’a girdiğiniz düzene göre dinamik button eklenmesi yöntemi ile yukarıdaki verdiğim örneklerin hepsini yapabilirsiniz değil mi? Hala ikna olmadıysanız aşağıdaki örnek görsellere bakabilirsiniz.
Gördüğünüz gibi istediğimiz düzeni verebiliyoruz. Sizler duruma göre, button nesnelerinin height ve width özellikleri ile oynayarak farklı şekiller verebilir ve daha spesifik düzenler elde edebilirsiniz.
C# Otobüs Bilet Satış Uygulaması – Basit Düzey yazımda bu kadardı arkadaşlar diğer yazılarda görüşmek üzere…
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 dersin projesini bu linkten indirebilirsiniz.
NOT: İndirdiğiniz hali bu derste olan hali olmayabilir. Belki biraz daha iyileştirmek için işlemler yapabilirim. Sadece bu halini isteyenler olursa Drive’a yüklediğim bu halini indirebilirler.
468. yazı bitti.
Bu konu hakkında proje ödevim var bana bu konuda yardımcı olurmusunuz
Merhaba, bana mail adresimde ulaşabilirseniz elimden geldiğince yardımcı olmaya çalışırım.