Otobüs Otomasyonu; uygulama, Microsoft Visual Studio 2015 ile C# dilinde yazılmıştır. Net Framework 4.5.2 gerektirir. Ayrıca, veritabanı olarak Microsoft SQL Server 2014 kullanılmıştır.

Otobüs Otomasyonu

Uygulama, AnaMenu.cs, OzelKoltuklar.cs, OtobusTanimla, SatisRezervasyon.cs, SeferTanim.cs, SvR.cs, TanımlıSeferler.cs, GirisPaneli.cs, SifreSifirlama.cs ve TumKayitlar.cs olmak üzere 10 formdan oluşur.

GirişEkranı

GirisPaneli.cs: Otomasyona giriş yapılmadan önce yansıtılan formdur. Kullanıcıdan kullanıcı adı ve şifresini girmesi istenir. Kullanıcı Adı: Baris ve Şifre: barisuslucan.com.tr olarak tanımlanmıştır.

SifreSifirlama.cs: Bu panelden otomasyona tanımlanan şifre değiştirilebilir.

AnaMenu.cs: Uygulamanın ana menüsüdür. Uygulama üzerinde, Sefer Tanımlama, bilet satışı veya rezervasyon işlemleri, sefer Sıfırlama, tanımlı seferleri gösterme vb. işlemlere erişebilmeyi üstlenir.

OzelKoltuklar.cs: Bu formda, rezervasyon yapılan kayıtları TC kimlik numarasına göre kayıt arama ve silme işlemleri yapılır. Burada arama yaparken TC kimlik numarası kontrolü yapılmasına gerek duyulmamıştır.

Satış Rezervasyon

Satış ve Rezervasyon Sonrası

SatisVeRezervasyon.cs / SatisVeRezervasyon2.cs

Satış ve rezervasyonun yapıldığı formdur. Bu formda, satın alma veya rezerve işlemleri yapılırken, TC, Ad, Soyad, Telefon, Cinsiyet verileri ve koltuk numarası seçimi istenir. Ayrıca, geçerli bir 11 haneli TC kimlik numarası girilmesi zorunludur. TC kimlik numarası kontrolü algoritmayla yapılmaktadır. Ek olarak, ProgressBar ile otobüsün doluluk oranı gösterilmektedir.

OtobusTanimla.cs

Otobüslerin tanımlandığı formdur. Burada, Araç plakası anahtar sütundur. İlgili plakaya aracın modeli, wifi, ekran ve şarj bilgileri, koltuk tipi kaydedilebilir.

SeferTanim.cs

Seferler bu formda tanımlanır. Kullanıcıdan başlanacak ve bitecek durak bilgileri istenir. Ayrıca, kullanıcıdan daha önceden tanımlanan araçlardan bir tanesini seçmesi istenir. Burada plaka anahtar sütundur. Bir otobüse sadece bir sefer tanımlanır. Burada daha önceden bir otobüse sefer tanımlandıysa (Gerçekleşen seferler vb.) kullanıcıya ilgili seferi düzenlemek ya da silmek istediği sorulur. Eğer kullanıcı bu durumu isterse, sefer düzenleme formuna yönlendirilir. Ek olarak, kullanıcı geçmiş tarihlere sefer tanımlayamaz bundan dolayı, dateTimePicker’ın minimum zamanı sistem tarihinin mevcut bugünkü tarihi olarak ayarlanmıştır. Böylece geçmiş tarihlere sefer tanımlanması önlenmiştir.

SvR.cs

Satış veya rezervasyon işlemine geçilmeden seferlerin kontrol edildiği formdur. Burada sorgulama Nereden, Nereye comboboxları ve dateTimePicker ile yapılmaktadır. Kullanıcıdan istenilen lokasyonlardan bilgiler ve istediği tarih bilgisi alınır ve o tarihte ilgili seferlerin saatleri kullanıcıya gösterilir. Burada, dateTimePicker’ın minimum zamanı mevcut sistemin saatinin bugünü olarak ayarlanmıştır. Böylece, kullanıcı geçmiş tarihlere bilet kesemez ya da kullanıcıya geçmiş tarihlerdeki seferler gösterilmez. Ancak saat olarak ilgili seferin saati geçse bile o gün içinde bilet kesilebilir. Buradaki amaç ilgili sefer eğer rötar yaparsa kullanıcıya gün bitimine kadar bilet kesme hakkı tanıyabilmek, ertesi gün sorgulandığında o sefer zaten görülmeyecek.

Örneğin, İstanbul – İzmir seferi 15/09/2020 saat 19:00 olarak tanımlanmış olsun. Eğer sistem tarihi 15.09.2020 saat 20:00 ise kullanıcı hala bu sefere bilet kesebilecek ya da sorgulayabilecek. Ancak, ertesi gün 16.09.2020 için bu seferi daha görüntülemeyecek. Kullanıcı satış ve rezervasyon işlemine geçmeden ilgili seçili seferi işleme almak zorundadır. İşleme aldığında ise ilgili sefere tanımlı aracın özellikleri ekrana yansıtılır. İlgili seferde otobüsün koltukları 2+1 tipinde ise koltuk düzeni 2+1 şeklinde; eğer 2+2 ise 2+2 şeklinde yansıtılmaktadır.

TanımlıSeferler.cs

Kullanıcının tanımlı seferleri görüntüleyebileceği, düzenleyebileceği, sıfırlayabileceği ya da tamamen kaldırabileceği paneldir. Burada seferler, seferin başlanacağı yer ve biteceği yere göre sorgulanabilir. Ayrıca, ilgili seferin sadece tarih ve saat bilgisi güncellenebilme özelliği tanınmıştır. Eğer kullanıcı, seferin aracını değiştirmek ya da seferin adresini değiştirmek istiyorsa, seferi tamamen kaldırıp yeniden oluşturması gerekmektedir. Buradaki asıl amaç geçmiş sefere ait aracı yeni bir tarih ile güncellemek.  

TumKayitlar.cs

Bu panel ile daha önceden rezervasyon veya satın alınmış kayıtlar görüntülenebilir, TC kimlik numarasına göre aranabilir, güncellenebilir veya silinebilir. TC kimlik ile işlem yaparken burada da gerçek 11 haneli TC kimlik numarası girilmesi zorunlu kılınmıştır. Kayıt alınırken TC kimlik numarası gerçek girilmesi gerektiğinden kayıt güncelleme esnasında TC kimlik numarası değiştirilememektedir. Dolayısıyla txtTC textbox kutucuğu devre dışı bırakılmaktadır. Ayrıca, kayıt seçilene kadar Ad, Soyad, Telefon ve Cinsiyet textboxları devre dışı bırakılmıştır.

Uygulama içerisinde veritabanında işlem yaparken SQL bağlantıları kontrollü bir şekilde açılarak işlem bittiğinde kapatılması sağlanmıştır. Ayrıca, kod tekrarlarını azaltmak amacıyla method kullanımına özen gösterilmiş olup, oluşabilecek herhangi bir hatalar try-catch yapıları ile kontrol altına alınması sağlanmıştır.

Uygulamadaki veriler otobus.mdf adlı SQL veritabanında tutulmaktadır. Veritabanı dosyası Arac, Otobus, SatisVeRezerve ve YonetimPanel olmak üzere 4 tablodan oluşur. Bu tablolardan SatisVeRezerve olan müşteriyle ilgili verileri tutarken, Arac tablosu seferleri tutar. Otobus tablosu ise tanımlanan otobüsle ilgili özellikleri tutmaktadır. YonetimPanel tablosu da otomasyona giriş yapılacak Kullanıcı Adı ve Şifre bilgisini tutmaktadır. Koltukların renginin kırmızı ya da yeşil olduğu SatisVeRezerve’de bulunan “ID2” sütunu ile belirlenir. ID2’de eğer kayıt rezerveli ise tüm bilgilerle birlikte “Rezerve” bilgisi eklenir. Daha sonra, veriler okunurken ID2’deki duruma göre belirlenir ve koltuk renkleri buna göre doldurulur.

Aynı şekilde Arac tablosunda “IDP” sütunu tanımlanan seferdeki tüm verileri tutar. Bu veri, ilgili seferlerde kolay işlemler yapılabilmek için tutulur. İlgili seferlerin kayıtları IDP sütununa göre alındığı için koltukların rengi cinsiyete göre belirlenmemiştir. Koltukların rengi cinsiyete göre dağıtılması mümkündür ancak çok fazla SQL sorgusu gerektirdiğinden bu işleme gerek duyulmamıştır. Koltukların renginin dolu/boş olmasına göre kırmızı/yeşil bırakılması daha makul bırakılmıştır.

C# üzerinde çalışan arkadaşların; ödevlerinde, projelerinde oluşturduğum bu otomasyonun yardımcı olabileceğini düşünüyorum. Uygulama tarafıma danışılmadan herhangi bir ticari amaçla kullanılamaz, satılamaz, çoğaltılamaz. Uygulama üzerindeki istediğiniz değişiklikleri yorum kısmında ya da benimle iletişime geçerek belirtebilirsiniz. 

İndirme Linkleri
GitHub