İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# Otobüs Bilet Satış Uygulaması – Basit Düzey

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.

C# Otobüs Bilet Satış Uygulaması – Basit Düzey
+ - 2

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…

C# Otobüs Bilet Satış Uygulaması - Basit Düzey

Islem_Yap.cs

C# Otobüs Bilet Satış Uygulaması 2

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….

C# Otobüs Bilet Satış Uygulaması 3

Ş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

C# Otobüs Bilet Satış Uygulaması 2

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.

C# dinamik sinema düzeni
C# dinamik sinema düzeni
C# dinamik apartman düzeni
C# dinamik apartman düzeni

 

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 yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (2)

  1. 10 ay önce

    Bu konu hakkında proje ödevim var bana bu konuda yardımcı olurmusunuz

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.