Merhaba daha önceleri paylaştığım ve kurallara aykırı olduğunu bilmediğimden önceki üyeliğim süresiz iptal olmuştu. bugün formu incelerken bir çok arkadaşın istediğini gördüm eğer kurallara aykırı değilse(başlıkta da belirttim.) paylaşıyorum.
Bu kod, bir otobüs koltuk rezervasyon sistemi oluşturur. Kullanıcılar otobüs seyahati için koltuk rezervasyonu yapabilirler. İşte kodun detaylı açıklaması:
Kütüphane ve Modül İçe Aktarma:
Kod, Tkinter (Python için bir GUI kütüphanesi), SQLite3 (Python ile SQLite veritabanı yönetimi), ve python-docx (Word belgeleri oluşturmak için bir kütüphane) modüllerini içe aktarır.
Bu modüller, GUI oluşturma, veritabanı işlemleri ve Word belgeleri oluşturma işlemleri için kullanılır.
KoltukRezervasyonu Sınıfı Oluşturma:
KoltukRezervasyonu adında bir sınıf oluşturulur.
Sınıf, otobüs koltuk rezervasyon sisteminin ana işlevlerini içerir.
init() Metodu:
Sınıfın başlatıcı metodu, Tkinter'da ana pencereyi oluşturur ve başlık belirtir.
40 adet koltuk butonu oluşturulur ve bunlar sınıfın bir listesine eklenir.
Rezervasyon formu penceresi oluşturulur ve gizlenir.
Veritabanı bağlantısı oluşturulur veya varsa bağlanılır. Veritabanı, rezervasyon bilgilerini saklamak için kullanılır.
koltuk_secildi() Metodu:
Kullanıcı bir koltuk butonuna tıkladığında çağrılan bir metottur.
Seçilen koltuğun indeksi alınır ve rezervasyon formu penceresi görünür hale getirilir.
iller() Metodu:
Türkiye'nin illerini içeren bir liste döndürür. Bu liste, rezervasyon formunda kullanıcıya il seçme imkanı sağlar.
odeme_tamamlandi() Metodu:
Kullanıcı ödeme tamamlandığında çağrılan bir metottur.
Rezervasyon formundan kullanıcının girdiği bilgiler alınır.
Ödeme işlemleri simüle edilir, ardından bilet fiyatı hesaplanır.
Veritabanına rezervasyon bilgileri eklenir.
Seçilen koltuk butonu devre dışı bırakılır ve rengi cinsiyete göre değiştirilir.
Word belgesi oluşturulur ve rezervasyon bilgileri belgeye eklenir.
hesapla_fiyat() Metodu:
Bilet fiyatını hesaplar. Bu örnekte, sabit bir fiyat kullanılır, ancak daha karmaşık bir fiyatlandırma stratejisi de uygulanabilir.
Ana Kod:
Tkinter'da ana pencere oluşturulur ve KoltukRezervasyonu sınıfı çağrılır.
mainloop() yöntemi, uygulamanın kullanıcı etkileşimine girmesini sağlar.
Eklenti gereksinimleri:
Bu kodun çalışması için Python'un yanı sıra tkinter, sqlite3, ve python-docx modüllerinin kurulu olması gerekir.
Bu makale, Python kullanarak basit bir otobüs koltuk rezervasyon sistemi oluşturmanın temel adımlarını ve gereksinimlerini açıklamıştır.
python-docx Modülünün Kurulumu:
python-docx, Word belgeleri oluşturmak için kullanılır ve harici bir modüldür.
Kurulum için, terminal veya komut istemcisini açın ve aşağıdaki komutu çalıştırın:
pip install python-docx
..... ::::: Otobüs Bilet Otomasyon Sistemi Python Kodu ::::: .....
`from tkinter import *
from tkinter import ttk
import sqlite3
from docx import Document
class KoltukRezervasyonu:
def init(self, master):
self.master = master
self.master.title("Otobüs Koltuk Rezervasyonu")
# Koltuklar
self.koltuklar = []
self.secili_koltuk = None
for i in range(40):
btn = Button(master, text=str(i + 1), width=4)
btn.grid(row=i // 4, column=i % 4, padx=5, pady=5)
btn.config(command=lambda idx=i: self.koltuk_secildi(idx))
self.koltuklar.append(btn)
# Rezervasyon formu
self.form = Toplevel(master)
self.form.title("Rezervasyon Formu")
self.form.withdraw()
Label(self.form, text="Adı:").grid(row=0, sticky=W)
self.ad_entry = Entry(self.form)
self.ad_entry.grid(row=0, column=1)
Label(self.form, text="Soyadı:").grid(row=1, sticky=W)
self.soyad_entry = Entry(self.form)
self.soyad_entry.grid(row=1, column=1)
Label(self.form, text="Telefon Numarası:").grid(row=2, sticky=W)
self.telefon_entry = Entry(self.form)
self.telefon_entry.grid(row=2, column=1)
Label(self.form, text="TC Kimlik No:").grid(row=3, sticky=W)
self.tc_entry = Entry(self.form)
self.tc_entry.grid(row=3, column=1)
Label(self.form, text="Cinsiyet:").grid(row=4, sticky=W)
self.cinsiyet_var = StringVar(self.form)
self.cinsiyet_var.set("Erkek")
self.cinsiyet_menu = OptionMenu(self.form, self.cinsiyet_var, "Erkek", "Kadın")
self.cinsiyet_menu.grid(row=4, column=1)
Label(self.form, text="Bulunduğu İl:").grid(row=5, sticky=W)
self.bulundugu_il_var = StringVar(self.form)
self.bulundugu_il_var.set("Adana")
self.bulundugu_il_menu = ttk.Combobox(self.form, textvariable=self.bulundugu_il_var, values=self.iller())
self.bulundugu_il_menu.grid(row=5, column=1)
Label(self.form, text="Gideceği İl:").grid(row=6, sticky=W)
self.gidecegi_il_var = StringVar(self.form)
self.gidecegi_il_var.set("Adana")
self.gidecegi_il_menu = ttk.Combobox(self.form, textvariable=self.gidecegi_il_var, values=self.iller())
self.gidecegi_il_menu.grid(row=6, column=1)
Label(self.form, text="Gideceği Saat:").grid(row=7, sticky=W)
self.saat_var = StringVar(self.form)
self.saat_var.set("08:00")
self.saat_r1 = Radiobutton(self.form, text="08:00", variable=self.saat_var, value="08:00")
self.saat_r1.grid(row=7, column=1, sticky=W)
self.saat_r2 = Radiobutton(self.form, text="12:00", variable=self.saat_var, value="12:00")
self.saat_r2.grid(row=8, column=1, sticky=W)
self.saat_r3 = Radiobutton(self.form, text="16:00", variable=self.saat_var, value="16:00")
self.saat_r3.grid(row=9, column=1, sticky=W)
self.saat_r4 = Radiobutton(self.form, text="20:00", variable=self.saat_var, value="20:00")
self.saat_r4.grid(row=10, column=1, sticky=W)
self.saat_r5 = Radiobutton(self.form, text="23:59", variable=self.saat_var, value="23:59")
self.saat_r5.grid(row=11, column=1, sticky=W)
Label(self.form, text="Kart No:").grid(row=12, sticky=W)
self.kart_no_entry = Entry(self.form, show="*")
self.kart_no_entry.grid(row=12, column=1)
Label(self.form, text="Son Kullanma Tarihi:").grid(row=13, sticky=W)
self.sk_tarihi_entry = Entry(self.form)
self.sk_tarihi_entry.grid(row=13, column=1)
Label(self.form, text="CVV:").grid(row=14, sticky=W)
self.cvv_entry = Entry(self.form, show="*")
self.cvv_entry.grid(row=14, column=1)
self.odeme_btn = Button(self.form, text="Öde", command=self.odeme_tamamlandi)
self.odeme_btn.grid(row=15, columnspan=2)
# Veritabanı bağlantısı
self.db_connection = sqlite3.connect("rezervasyon.db")
self.db_cursor = self.db_connection.cursor()
self.db_cursor.execute("""
CREATE TABLE IF NOT EXISTS rezervasyonlar (
koltuk INTEGER PRIMARY KEY,
ad TEXT,
soyad TEXT,
telefon TEXT,
tc TEXT,
cinsiyet TEXT,
bulundugu_il TEXT,
gidecegi_il TEXT,
saat TEXT,
fiyat REAL DEFAULT 0.0
)
""")
def koltuk_secildi(self, idx):
self.secili_koltuk = idx
self.form.deiconify()
def iller(self):
# Türkiye'nin 81 ili
iller = [
"Adana", "Adıyaman", "Afyonkarahisar", "Ağrı", "Amasya", "Ankara", "Antalya", "Artvin", "Aydın", "Balıkesir",
"Bilecik", "Bingöl", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale", "Çankırı", "Çorum", "Denizli", "Diyarbakır",
"Edirne", "Elazığ", "Erzincan", "Erzurum", "Eskişehir", "Gaziantep", "Giresun", "Gümüşhane", "Hakkâri", "Hatay",
"Isparta", "Mersin", "İstanbul", "İzmir", "Kars", "Kastamonu", "Kayseri", "Kırklareli", "Kırşehir", "Kocaeli",
"Konya", "Kütahya", "Malatya", "Manisa", "Kahramanmaraş", "Mardin", "Muğla", "Muş", "Nevşehir", "Niğde", "Ordu",
"Rize", "Sakarya", "Samsun", "Siirt", "Sinop", "Sivas", "Tekirdağ", "Tokat", "Trabzon", "Tunceli", "Şanlıurfa",
"Uşak", "Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kırıkkale", "Batman", "Şırnak", "Bartın",
"Ardahan", "Iğdır", "Yalova", "Karabük", "Kilis", "Osmaniye", "Düzce"
]
return iller
def odeme_tamamlandi(self):
ad = self.ad_entry.get()
soyad = self.soyad_entry.get()
telefon = self.telefon_entry.get()
tc = self.tc_entry.get()
cinsiyet = self.cinsiyet_var.get()
bulundugu_il = self.bulundugu_il_var.get()
gidecegi_il = self.gidecegi_il_var.get()
saat = self.saat_var.get()
kart_no = self.kart_no_entry.get()
sk_tarihi = self.sk_tarihi_entry.get()
cvv = self.cvv_entry.get()
# Ödeme işlemleri
# Burada ödeme işlemleri yapılabilir, kart doğrulama, tutar kontrolü vb.
# Bilet fiyatı
fiyat = self.hesapla_fiyat()
# Veritabanına kaydetme
self.db_cursor.execute("""
INSERT INTO rezervasyonlar (koltuk, ad, soyad, telefon, tc, cinsiyet, bulundugu_il, gidecegi_il, saat, fiyat)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (self.secili_koltuk + 1, ad, soyad, telefon, tc, cinsiyet, bulundugu_il, gidecegi_il, saat, fiyat))
self.db_connection.commit()
self.koltuklar[self.secili_koltuk].config(state=DISABLED)
if cinsiyet == "Erkek":
self.koltuklar[self.secili_koltuk].config(bg="blue")
else:
self.koltuklar[self.secili_koltuk].config(bg="pink")
self.form.withdraw()
# Bilet oluşturma
doc = Document()
doc.add_heading("Bilet Bilgileri", level=1)
doc.add_paragraph(f"Koltuk: {self.secili_koltuk + 1}")
doc.add_paragraph(f"Adı: {ad}")
doc.add_paragraph(f"Soyadı: {soyad}")
doc.add_paragraph(f"Telefon Numarası: {telefon}")
doc.add_paragraph(f"TC Kimlik No: {tc}")
doc.add_paragraph(f"Cinsiyet: {cinsiyet}")
doc.add_paragraph(f"Bulunduğu İl: {bulundugu_il}")
doc.add_paragraph(f"Gideceği İl: {gidecegi_il}")
doc.add_paragraph(f"Gideceği Saat: {saat}")
doc.add_paragraph(f"Bilet Fiyatı: {fiyat:.2f} TL")
doc.save(f"bilet_{self.secili_koltuk + 1}.docx")
def hesapla_fiyat(self):
# Bilet fiyatını hesaplayan bir işlev
# Burada isteğe bağlı olarak karmaşık bir fiyatlandırma stratejisi uygulanabilir
# Örnek olarak, her biletin sabit bir fiyatı olduğunu varsayalım
fiyat = 50.0
return fiyat
root = Tk()
app = KoltukRezervasyonu(root)
root.mainloop()
`
Herkese iyi günlerde kullanmak dileğiyle. Şuan verileri iller kısmını manuel çekmektedir. zaman bulursam bunu veritabanından çekimini sağlayacağım.
@Halil Han BADEM hocam bu şekilde paylaşımlar yapacağım. Kurallara aykırı değildir umarım.