UÇUŞ REZERVASYON OTOMASYONUN
SİSTEMİNE GİRİŞ
Kullanıcı Girişi
Kullanıcı giriş formunda (Şekil
1.1.) altı adet label, iki adet textbox, bir adet buton ve bir adet
linklabel kullandım.
Birinci labele “UÇUŞ REZERVASYON OTOMASYON” kısmı için, ikinci ve üçüncü labelide
“Kullanıcı adı” ve “Şifre” kısmı için ve eğer textboxlar boş geçilirse
textboxların sağ kısmına yerleştirdim ve görünürlüğünü gizledim textboxların
boş geçilmesi koşulu ile “!” işareti olarak boş geçilen textboxsun sağ
tarafında ortaya çıkıyor ve bir diğer labelide uyarı maksatlı kullandım en alt
bölümde, eğer kullanıcı giriş bilgileri hatalı ise uyarı verme maksatlı ortaya
çıkıp belirtilen süre içinde tekrar
gizleniyor. Textboxları kullanıcı adı ve şifre bilgilerinin girişi
için kullandım ve böylelikle verileri alıp değerlendiriyorum. Buton kısmında da
textboxlardan verileri alıyorum tabi ilkin texboxları kontrol ediyorum
içeriği boşmu değilmi diye eğer boş ise texboxların yanına bıraktığım label
komponentleri çalıştırıp uyarıyı gösteriyorum. Textboxsu kontrol ettikten sonra
bu sefer aldığım verileri c#’ın Ado.Net
komut sorgularında kullanıyorum. Ado.net
komut sorgularından “Select” i çekiyorum şart olarak sql tablomda olan alan
adlarına göre kullanıcı adı olan textbox içindeki veri ve sifre olan textbox
içindeki bilgileri sql sorgumda şart kısmına yazıp ona göre veri tabanından
bilgi çekiyorum ve çekilen verileri sanal bir tabloya atıyorum. Ve burda bir
şart koşulu yapıyorum eğer diyorum, verilerin atıldığı bu sanal tabloda satır
sayısı sıfırdan büyük ise demekki bu kullanıcı ve şifre bilgilerine sahip bir
kullanıcı var ve kullanıcıyı direk “Anasayfa” adındaki forma yönlendirip sonra
kullanıcı girişi formumu kapatmıyorum sadece gizliyorum eğer kapatırsam
uygulama kapanacak çünkü ana form
kullanıcı giriş formudur.
Bu formda statik iki adet string
tipinde ve public özelliğinde değişken oluşturuyorum. Bu iki değişkeni ilerden
anlatacım konularda değinecem ve girilen kullanıcı adı “Aktar” adlı statik
string tipindeki değişkene aktarıyorum
bide Veri tabanında Kullanıcı tablomda “Gorev” adlı alandanda bilgileri
çekmiştim kullanıcı ve şifre sorgusu yaparken, ve “Gorev” adındaki
veriyide “Gorevi ” adında oluşturduğum
statik string tipindeki değişkene aktarıyorum çünkü bu bilgiler ilerki
konularda anlatacığım formlar için lazım olacak. Eğer kullanıcının textboxtan
girdiği veriler yanlış ise yani bu verileri sorgulama yaparken veri tabanında
yok ise verileri çekip sanal tabir tabloya(Data Table) aktarıyorduk, bu sefer
tablonun satır sayılarını sorguladığımızda satır sayıları sıfır olarak
görünecek be bizim yapmış olduğumuz şart kısmında demiştik eğer satır sayıları
sıfırdan büyük ise anasayfa formuna yönlendir değilse hemen ekrana yani formun alt kısmında
yerleştirdiğimiz label komponentinde uyarıyı yazdıracam ama görünmesi için
labelin visible özelliğini bir timer
kontrolünde değiştiriyorum. Yani
uyarıyı labele yazdırıp timeri çalıştırıyorum ve timeri sürelendiriyorum
nasıl mı? Global bir integer değişken üretiyorum değeririni sıfır yapıyorum, ve
timer içinnde şart koşulu yapıyorum, diyorum ki eğer değişkenimin değeri ikiden
büyük ise timeri çalışmasını durdur ve labelin visible özelliğini false yap
yani gizle. Ve bu arada timerin çalışma süresini saniye de bir yapıyorum. Ve
böylelikle saniyede bir kodları çalıştırmış oluyor. Dediğimiz gibi eğer veriler
yanlış ise hata mesajı alıyoruz.
2.2.Şifremi Unuttum
Peki şifre unutulduysa ne olacak? Hemen buton
kontrolünün yanına yerleştirdiğimiz linkbuton olan şifremi unuttum kısmına
tıklayıp şifre öğrenme paneline geçiyoruz. Panele geçerken panelin aşağıdan
yukarıya doğru kayarak gelmesini yapmak için tekrar timer kontrolunu kullandım
ve int sayaç adında bir değişken ürettim ve değerini ikiyüz on altı yaptım. Ve
şart oluşturdum, eğer sayaç altmış yediden büyük ise panelin top özelliğinin
değerine o anki sayaç değerini aktarıp hemen altında sayacı onbeş eksiltiyorum ve
böylelikle timer her çalıştığında bir döngü oluşuyor taki şartta belirttiğim
şekilde sayaç altmış yediden küçük
olunca panel istenilen yere geliyor ve diğer belirttiğim şarta geçiyor yani
eğer şart oluşmazsa yapılacak olan kodlamaya geçiyor ve orada sayacımın değerini tekrar ikiyüz on
altı yapıyorum ki bir daha şifremi unuttum kontrolüne basıldığında panelin aynı
yerden kayarak istenilen yâre gelebilmesi için. Ve timeri burda stop
ettiriyorum çalışmasın diye. Tabi bu arada Panelin başlangıç hali gizlidir yani
visible değeri false dir. Kontrole
basıldığında görünmeye başlıyor yani
visible değeri true oluyor.
Bide bu arda şifremi unuttum kısmına geçerken bir önceki sayfada ki
kontrolleri gizliyorum.
Burada(Şekil 1.2. Şifremi
Unuttum) altı label, dört texbox bir
buton ve bir tane linklabel kontrolü var.
Burada kullanıcı adı, e-pota
adresi alınıyor ado.net kodlarıyla veri tabanında sorgulama işlemi
yapıyorum. Buton ismi ilkin “Ara” dır,
butona basıldığında ilk önce texboxların boş olup olmadığını inceliyorum. Boş
bir textbox var ise uyarıyı veriyo-rum label komponenti ile textboxların
yanında “!” simgesi şeklinde. Boş değil
ise bilgileri alıp Ado.net sql sorgulama dili ile hemen veri ta-banından
sorgulamayı yapıyorum çektiğim verilerde var ise veri tabanında gizli soru
kısmına veri tabanında kullanıcıya ait gizli soruyu textboxa veriyorum ve Buton
textini “Göster” yapıyorum çünkü kod
kısmında ona göre kodlama yapmışım ve kullanıcının bu gizli soruyu cevaplaması için cevap kısmının
textbox enable özelliği false dir onu true yapıyorum ki veri girişi yapılsın. Ve kullanıcı buradan
doğru cevabı girdiğinde sayfanın aşağısında yerleştirdi-ğim labellere bilgileri
verip visible özelliklerini true yapıyorum.
Giriş sayfasına dön kısmına
basıldığında ilk sayfaya(Şekil 1.1. Kullanıcı Girişi) gidiyor ve oradan giriş
yapabilirsiniz.
2.3. Anasayfa
Anasayfa(Şekil 2.1.) formunda yedi adet buton beş adet
linklabel bir adet menuStrip, Bir adet
label var. Ana sayfa formu aslında görünen değil ansayfa formu ana formdur,
içinde açılan ise anasayfam adında bir yavru formdur. Ve menuStrip bide iki
adet buton ana formun üzerindedir. Menu strip te ilk menü anasayfa menüsü
anasayfam adındaki formu açıyor. Tabi ana formun içinde açıyor. Yeni
rezervasyon menüsü, yenirezervasyon
formunu ana formda açıyor. Pnr arama menüsü, pnr arama formunu ana formda açıyor. Raporlar
menüsü, raporlar formunu ana formda açıyor. Mesaj kutusu menüsü, mesaj kutusu formunu
ana form da açıyor. Yönetim menüsü, yönetim formunu ana formda açıyor. Kullanıcı değiştir menüsü de
kullanıcı girişi(Şekil1.1.) formunu açıyor. Ana formun üzerindeki diğer iki buton ise control box
yerine yapılan ve bir tanesi formu minimize etmek için biride formu maximize
etmek için kullandım. Anasayfam formunun üzerindeki beş buton ve beş liklabel
menü striptekilerle aynı görevi görüyorlar.
Orta kısım da flash ile yaptım görsel bir slayt var.
2.4. Yeni Rezervasyon
Yeni rezervasyon(Şekil3.1.) da
seksen adet label, kırk altı adet buton, on dokuz adet picturebox, otuz bir
adet radio buton, yirmi iki adet group box ve sekiz adet panel kullandım.
Şekil3.1. deki panelde nereden nereye kısmında texboxların “TextChanged” özelliğine veri tabanından
bilgileri çekip listbox a aktarıyorum ve listbox ı textbox un hemen altına yerleştirdim ama
visible özelliğini false yaptım başlangıçta görünmesin diye. Veritabanından
girilen kelimeye veya karaktere göre veri var ise listbox a aktarıp ve
listboxın visible özelliğini true yapıyorum. Ado.net kodlamasında like
fonksiyonunu kullanarak veriyi
çekiyorum. Textboxların yanına arama
için buton kontrolü bıraktım veri tabanındaki bütün şehir isimlerini direk
listboxa sıralaması için. Tek yön ve gidiş dönüş tercihleri için iki adet radio
buton kullandım. Radio buton seçimine göre datetimepicker kullandım. Mesela eğer gidiş dönüş seçili
değil ise dönüş için yerleştirilen datetimepickerin enable özelliği falsedir.
Datetimepickerlerde valueChacged özelliğinde veri tabanından o tarihte kaç tane koltuk var bilgisinide alıyorum. Ado.net
kodlamasında count() foksiyonunu kullanarak yapıtım. Gidiş dönüşlerde, dönüş tarihi gidiş tarihinden önce seçilmesini
engelledim. Hata mesajlarını lblSonuclar
adında bir labelde gösteriyorum. Problem yoksa uçuş ara butona tıklayarak arama
sonuçlarını tek yön (Şekil3.2.) yada gidiş dönüş (Şekil3.3. ;Şekil
3.4.)tercihlerine göre veriliyor.
Arama sonuçlarını veri tabanında
sabit verilen tabi aynı zamand da kullanıcının güncelleme özelliğine sahib
fiyatı alıp seçilen tarihi bugünün tarihinden çıkartım ve hergün başına ne
kadarlık artış olması gerektiğini de veri tabanında kullanıcının tanımladığı
yüzdeliğe göre sabit fiyatın bu yüzdeliğini alıp çıkan sonuç ile toplayıp radio
butona veriyorum aynı zamanda tarihleri ona göre artırıyorum. Uçuş seçim
kontrollerini de yaptım eğer bir fiyat ve saat seçilmezse messagebox(Şekil
3.5.) ile uyarı veriyorum. Seçim yapıldıktan sonra devam butonona tıklayıp özet
ve kimlik bilgilerinin ve koltuk seçiminin olduğu panele geçiyoruz. Burada daha
önce yani baştan(Şekil 3.1.) şu ana kadar
yapılan bütün tercihleri devam butonu altında yukardaki resimde(Şekil
3.6.) gereken yerlere bilgileri yerleştiriyorum. Koltuk atamasını yapmak için
bir kontrol mekanizması yaptım. Denetlemek istediğiniz yönü seçerek seçtiğiniz
tarihe, saate ve koltuk numarasına göre veri tabanından arama yaparak hangi
koltukların boş veya dolu olduğunu gösteriyor. Dolu koltukları “Dolu” yazarak
ve arka planlarını siyah yaptım ve ona göre koltuk atamalarını yapabilirsiniz.
Text i “Dolu” olan butona tıklasanızda istenilen yere veriyi aktaramayacak. Ve
bir sonraki denetleme için yenile butonuna tıklandıktan sonra denetleme
yapmanız lazım. Alt taraflarda iki groupbox kullandım biri kimlik bilgileri
için biride iletişim bilgileri için. Kimlik bilgilerinde ad, soyad, doğum tarihi,
cinsiyet ve yolcu tipinde veri alınıyor. Burada yolcu seçimi fiyatı etkiliyor
çocuk ve bebekte kullanıcın belirttği yüzdeliğe göre indirim yapılmakta.
İletişim bölümünde ise ad, soyad, telefon ve mail adresi verilerini alıyorum.
Telefon kısmında Masked Textbox kullandım. Devam et butonuna tıklandığında
gereken fiyat hesaplamalarını ve eklenmesi gereken fiyatları ekleyip ve kısa özet bilgilerini diğer sayfaya(Şekil
3.7.) aktarıyorum. Burada da bilgiler kısaca özetleniyor ve alt bölümde ödeme
bilgileri girildiğinde ödeme yap butona basıldığında bilgileri değerlendirim
hata yok ise message box(Şekil 3.8.) ile ödemenin gerçekleştiği bilgisi
veriliyor. Bu arada fiyata eklenen ek ücretleride üste ek ücretler bölümündeverilmektedir.
2.5. Pnr Yönetim
Pnr yönetiminde iki adet panel,
iki adet picturebox, yirmi iki adet label, üç adet group box, yirmi bir adet
texbox, dört adet buton ve üç adet combobox kullandım. Birinci panelde(Şekil
4.1.) ilk group boxta pnr no ile işlem tipi seçimlerine göre arama yapıyor. İşlem
tipi belirledim çünkü veri tabanımda iki tablom var, biri tek yönler için
diğeri ise gidiş-dönüş için. İkinci groupbox ise bilet no ve işlem tipine göre
arama yapmaktadır. Ve aşağıda olan group box ise Ad, soyad, Pnr no, bilet no ve
işlem tipine göre arama özeeliği verdim.
Tabi ara butonlarına basılmadan önce hepsinde oldu gibi boş olu
olmadığını kontrol ediyor ve ikincisi eğer kayıt yok ise message box(Şekil
4.2.) ile mesajı veriyor.
Doğru bilgiler girildiğinde arama
sonucu panele(Şekil 4.3.) geçiliyor. Ve burada bütün bilgile-ri textbox ta
gösterilmektedir ama textbox un readonly özelliği truedir.
2.6. Raporlar
Raporlar kısmında pek fazla bişey
yapmadım. Ve bu formda dört adet buton,
dört label ve iki groupbox kullandım. Bu formda sistem günlük satışlarında o
günün tarihini göre veritabanında tablolarda o günün kayıtlarının “Count()”
fonsiyonu ile alıyorum ve ücretleride “Sum()” fonksiyonu ile toplayıp textbox
ayazdırıyorum. Tabi genel satışlarıda toptan topluyorum.
2.7. Mesaj Kutusu
Mesaj kutusu formunda dört adet panel, iki adet picturebox, beş adet buton, beş adet
textbox, altı adet label ve bir adet
datagridview kullandım. Birinci panelde (Şekil 6.1.) gelen kutusunu gösteriyor. Datagiridview
durumu yani okunup okunmadığını gösterme, kime,
kimden geldiğini, konu ve mesaj gösteriyor. Datagiridview in alt
kısmında iki adet texbox var bunlar datagiridview den okunmasını istediğiniz
mesaja basıldığında o mesajı göstemek için visible özelliğini true yapıyor ve
mesajı datagridview den alıp sadece konuyu ve mesajı yayınlıyor
Datagiridview basıldığında okunan
mesajı veri tabanında hangi mesaj ise okundu diye güncelleyip datagiridview
tekradan yükleyip son halini gösteriyorum ve böylece okunan mesajlar okundu
olarak görünüyor. Mesajı silmek içinde
alt kısma yerleştirdiğm sil butona basıldığında o anki okunan mesaj siliniyor.
Başka bir kullanıcıya mesaj göndermek isterseniz yeni butonuna tıkladığınızda
karşınıza mesaj gönderme(Şekil 6.3.) paneli açılacak burada istediğiniz
kullanıcıya mesaj iletebiliyorsunuz.
2.8. Yönetim Paneli
Yönetim panelinde iki adet
picturebox, kırkın üzerinde label kullanımı, iki adet panel, altı adet buton,
onsekiz adet textbox üç adette
datagiridview kullandım. Burada form yüklenirken ilk olarak veri tabanındaki tekyön
için oluşturduğum tabloyu ve gidiş dönüş için oluştur duğum tablodaki verileri
Ado.net sorgulama dil kodlarıyla veriyi alıp datagiridview lere(Şekil 7.1.)
aktarıyorum. Bura da bütün kayıt bilgilerine bakılabilir. Daha sonra kullanıcı ve ücret ayarları butonona basıp
kullanıcı ekleme, silme ve güncelleme
bide ücret ve indirim yüzdelikleri gibi
işlemlerinin yapıldığı panele(Şekil 7.2.) geçilir. Bu kısımda yeni
kullanıcı eklenebilir ve kayıtlı kullanıcıların bilgilerini düzenlemek için
DataGridview de istenilen kullanıcının üstüne tıklayarak bilgiler
textboxlara geçer ordan düzenleme yapıp
güncelleme butonuna basıldığında güncellemek için veri hatası yoksa bilgiler
güncellenir. Tabiki burda da texboxları kontrol etmeler var. Ve kullanıcıyı
yöneticimi yada normal bir kullanıcı olarakta ekleyebiliyorsunuz. Hatırlarsanız kullanıcı ilk giriş yaptığı
panelde, kullanıcı giriş(Şekil 1.1.) panelinde statik bir strin tipinde bir
değişken üretmiştik ve o değişkene giriş yapan kullanıcı adı değerini verdik.
Şimdi burda o kullanıcının yönetici olup
olmadığını denetleyip sonra bu panele
geçiyoruz yoksa mesagebox ile hata mesajı yayınlanır.
2.9. Kullanıcı Değiştirme
Bu menüye tıklandığında ana formu
kapatıp kullanıcı girişi formunu active eder. Ve böylelikle yeni giriş yapılır.
BÖLÜM 3. MSSQL SERVER 2008 VERİ TABANI
3.1 İletişim Bilgileri İçin
Oluşturulan Tablo
Görüldüğü gibi pkid alanının veri
tipi int diğerlerin hepisinin veri tipi nvarchardır. Bu tabloda girilen
iletişim bilgileri kayıt ediliyor ve pnr numarasına göre işlem yapıyorum.
3.2 Gidiş-Dönüş İçin Oluşturulan
Tablo
PnrNo, BiletNo, Ad, Soyad,
DogumTarihi, Cinsiyet, NeredenGidis, NereyeGidis,
NeredenDonus, NereyeDonus, Islem, IslemTarihi, UcusTarihiGidis,
UcusTarihiDonus, SaatGidis, KoltukNo, SaatDonus, Koltuk-Donus alanadlarına sahip gidiş-dönüş
bilgilerini tutulduğu tablodur.
3.3 Tek Yön İçin Oluşturulan
Tablo
PnrNo, BiletNo, Ad, Soyad,
DogumTarihi, Cinsiyet, Nereden,Islem, IslemTarihi, UcusTarihi, Saat, KoltukNo,
alanadlarına sahip tek yön bilgilerini tutulduğu tablodur.
3.4 Kullanıcı Bilgileri İçin
Oluşturulan Tablo
Kullaniciadi, Sifre, GizliSoru,
GizliSoruCevabi, Posta, KayitTarihi,Gorevi alan adlarından oluşan kullanıcı
bilgilerinin tutulduğu tablodur.
3.5 Mesaj Kutusu Bilgileri İçin
Oluşturulan Tablo
Durum, Kime,Kimden,Mesaj ve Konu
gibi alanların bulunduğu kullanıcı mesaj bilgilerinin tutulduğu tablodur.
3.6 Rapor Bilgileri İçin
Oluşturulan Tablo
PnrNo, KayitTarihi ve Ucret alanlarından oluşan tablodur. Günlük ve genel
raporları analiz etmek için kullanılır.
3.7 Şehirler Bilgileri İçin Oluşturulan Tablo
Bu tabloda SehirAdi, Havalimani
ve YerSayisi alanlarından oluşan Havalimanı bilgileri, şehirlerin isimleri ve
aralarındaki mesafeleri ücretlendirmede kullanmak için oluşturduğum yer sayısı
adında alandan oluşuyor.
3.8 Yönetim Bilgisi İçin Oluşturulan Tablo
Kontenjan, Yuzdelik,
BirinciFiyat, IinciFiyat, UcuncuFiyat, Hizmetbedeli, Vergi, YakitHarci,
BirinciUcusSaati, IkinciUcusSaati, CocukIndirimi ve Bebek indirimi alanların
bulunduğu bilgilerin tutulduğu tablodur. Ve bu tablodaki bilgilere göre fiyatlar belirtilir.