import time as t import sys
# Bu değişkenlere programın her yerinden ulaşabilmek için en başta tanımlıy-
oruz. cart = {} SHIPPING_FEE = 35 # 100 TL altı için kargo ücreti
# --- ÜRÜNLER --- # Mağazadaki tüm ürünleri, kategorileri, fiyatları ve
stokları bu sözlükte tutuyoruz. products = { ”Unlu Mamüller”: { ”Ekmek”:
{”fiyat”: 20, ”stok”: 30}, ”Poğaça”: {”fiyat”: 15, ”stok”: 20}, ”Simit”: {”fiyat”:
15, ”stok”: 25} }, ”İçecekler”: { ”Su”: {”fiyat”: 10, ”stok”: 50}, ”Kola”:
{”fiyat”: 35, ”stok”: 40}, ”Fanta”: {”fiyat”: 30, ”stok”: 40}, ”Ayran”: {”fiyat”:
18, ”stok”: 45} }, ”Meyve & Sebze”: { ”Elma”: {”fiyat”: 25, ”stok”: 50},
”Domates”: {”fiyat”: 30, ”stok”: 60}, ”Muz”: {”fiyat”: 45, ”stok”: 35} },
”Temel Gıda”: { ”Makarna”: {”fiyat”: 21, ”stok”: 80}, ”Pirinç”: {”fiyat”: 55,
”stok”: 65}, ”Zeytinyağı”: {”fiyat”: 250, ”stok”: 20} } }
# Bir ürün adıyla arama yapıp o ürünün detaylarını bulan fonksiyon
def find_product(searched_product_name): ””” Verilen ürün adını tüm
kategorilerde arıyoruz Bulursa kategori, ürün adı, detaylar döndürüyoruz
Bulamazsak None döndürücez yapcak bişi yok. ””” for category, product_list
in [Link](): for product_name, details in product_list.items(): if
product_name.lower() == searched_product_name.lower(): return (category,
product_name, details) return None
def list_products(): ”””Tüm ürünleri kategorilerine göre düzenli bir şekilde
listeliyorız””” print(”\n--- MAĞAZADAKİ ÜRÜNLER ---”) for category, prod-
uct_list in [Link](): print(f”\n----- {[Link]()} -----”) for prod-
uct_name, details in product_list.items(): print(f”-> {product_name:<12} |
Fiyat: {details['fiyat']:>5} TL | Stok: {details['stok']:>3} adet”) print(”\n------
---------------------\n”)
def add_to_cart(): ”””Kullanıcıdan ürün adı ve adet alarak sepete ekleme
ve stok kontrolü yapıyoruz””” global cart # Fonksiyonun globaldeki 'cart'
değişkenini değiştireceğini belirtiyoruz.
product_name_input = input(”Eklemek istediğiniz ürünün adını giriniz:
”).strip() found_product = find_product(product_name_input)
if not found_product: print(f”\n!!! HATA: '{product_name_input}' adında
bir ürün bulunamadı. Lütfen tekrar deneyin.\n”) return
category, actual_product_name, details = found_product
# Adet girişi ve kontrolü try: quantity = int(input(f”'{actual_product_name}'
ürününden kaç adet eklemek istiyorsunuz? (Stok: {details['stok']}): ”)) if quan-
tity <= 0: print(”\n!!! HATA: Adet 1 veya daha fazla olmalıdır.\n”) return
if quantity > details['stok']: print(f”\n!!! HATA: Stok yetersiz! Bu ürün-
den en fazla {details['stok']} adet ekleyebilirsiniz.\n”) return except ValueError:
print(”\n!!! HATA: Lütfen sayısal bir değer giriniz.\n”) return
# Sepete ekleme ve güncelleme yaptığımız yer if actual_product_name in cart:
# Ürün sepette zaten varsa, adedini arttır cart[actual_product_name]['adet']
1
+= quantity else: # Ürün sepette yoksa, yeni olarak ekliyoz cart[actual_product_name]
= { 'adet': quantity, 'fiyat': details['fiyat'] }
# Stoktan düşme products[category][actual_product_name]['stok'] -= quan-
tity print(f”\n� '{actual_product_name}' ürününden {quantity} adet başarıyla
sepete eklendi.\n”)
def view_cart(): ”””Sepetteki ürünleri, adetlerini, toplam fiyatlarını ve
genel toplamı gösteriyoruz””” print(”\n--- SEPETİNİZ ---”) if not cart:
print(”Sepetiniz şu anda boş.\n”) return
total_amount = 0 for product_name, details in [Link](): product_total
= details['adet'] * details['fiyat'] total_amount += product_total print(f”->
{product_name:<12} | {details['adet']:>2} adet x {details['fiyat']:>5} TL =
{product_total:>6} TL”)
print(”-----------------”) print(f”TOPLAM TUTAR: {total_amount} TL\n”)
def remove_from_cart(): ”””Kullanıcının sepetinden ürün çıkarmasını sağlıyor
ve stoğu geri güncelliyoruz hemen.””” global cart view_cart() # Önce sepeti
gösteriyoruz ki kullanıcı ne çıkaracağını bilebilsin hakkıdır
if not cart: return
product_name_input = input(”Sepetten çıkarmak istediğiniz ürünün adını
giriniz: ”).title()
if product_name_input not in cart: print(f”\n!!! HATA: '{product_name_input}'
adında bir ürün sepetinizde bulunmuyor.\n”) return
# Adet girişi ve kontrolü try: quantity = int(input( f”'{product_name_input}'
ürününden kaç adet çıkarmak istiyorsunuz? (Sepette {cart[product_name_input]['adet']}
adet var): ”)) if quantity <= 0: print(”\n!!! HATA: Adet 1 veya daha
fazla olmalıdır.\n”) return if quantity > cart[product_name_input]['adet']:
print(f”\n!!! HATA: Sepetinizde bu üründen sadece {cart[product_name_input]['adet']}
adet var!\n”) return except ValueError: print(”\n!!! HATA: Lütfen sayısal bir
değer giriniz.\n”) return
# Stoğu geri ekleme found_product = find_product(product_name_input)
category, actual_product_name, details = found_product products[category][actual_product_name]['stok']
+= quantity
# Sepetten çıkarma if quantity == cart[actual_product_name]['adet']: # İste-
nen adet sepettekiyle aynıysa ürünü tamamen siliyoruz del cart[actual_product_name]
print(f”\n� '{actual_product_name}' ürünü sepetten tamamen kaldırıldı.\n”)
else: # Ürün adedini azaltıyoruuz cart[actual_product_name]['adet'] -=
quantity print(f”\n� '{actual_product_name}' ürününün adedi {quantity}
azaltıldı.\n”)
def process_payment(): ”””Sepet tutarını hesaplayıp kargo ücretiyle kazık- ek-
liyoruz sonra da onay alıyoruz””” global cart view_cart()
2
if not cart: return False # Sepet boşsa ödeme yapılamaz. Doğal olarak yani...
total_amount = 0 for details in [Link](): total_amount += details['adet']
* details['fiyat']
print(f”Sepet Ara Toplamı: {total_amount} TL”)
# Kargo ücreti if total_amount >= 100: print(”� 100 TL ve üzeri alışveriş yap-
tığınız için kargonuz ücretsiz!”) amount_to_pay = total_amount else: print(f”�
Kargo Ücreti: +{SHIPPING_FEE} TL”) amount_to_pay = total_amount +
SHIPPING_FEE
print(”----------------------------”) print(f”ÖDENECEK TOPLAM TUTAR:
{amount_to_pay:.2f} TL”)
confirmation = input(”\nÖdemeyi onaylıyor musunuz? (evet/hayır): ”).lower()
if confirmation == 'evet': print(”\nÖdemeniz başarıyla alındı. Siparişiniz hazır-
lanıyor...”) [Link](2) # Program sonlanacağı için sepeti temizlemeye gerek yok
zaten her şey gidicek return True # Ödemenin başarılı olduğunu ana döngüye
bildiriyoruz else: print(”\nÖdeme işlemi iptal edildi. Alışverişe devam ede-
bilirsiniz.\n”) return False # Ödemenin iptal edildiğini döndürüyoruz
def add_new_product(): ”””Yöneticiden bilgi alarak ürün veritabanına
yeni ürün ekleyeceğiz””” print(”\n--- YENİ ÜRÜN EKLEME EKRANI ---
”) print(”Mevcut Kategoriler:”, ”, ”.join([Link]())) category_input
= input(”Ürünün kategorisini girin (yoksa yeni kategori oluşturulur):
”).strip().title() product_name_input = input(”Yeni ürünün adını girin:
”).strip().capitalize() try: price = float(input(”Ürün fiyatını girin (örn: 25.5):
”)) stock = int(input(”Ürün stok adedini girin: ”)) if price <= 0 or stock
< 0: print(”\n!!! HATA: Fiyat ve stok negatif veya sıfır olamaz.\n”) return
except ValueError: print(”\n!!! HATA: Fiyat ve stok için lütfen sayısal değer
giriniz.\n”) return if category_input not in products: products[category_input]
= {} print(f”Bilgi: '{category_input}' adında yeni bir kategori oluşturuldu.”)
if product_name_input in products[category_input]: print(f”\n!!! HATA:
'{product_name_input}' ürünü '{category_input}' kategorisinde zaten mev-
cut!\n”) else: products[category_input][product_name_input] = {'fiyat': price,
'stok': stock} print(f”\n� '{product_name_input}' ürünü '{category_input}'
kategorisine başarıyla eklendi.\n”)
# --- ANA UYGULAMA DÖNGÜSÜ --- try: name = str(input(”Lütfen
isminizi giriniz: ”)).title() print(f”\nMenüye yönlendiriliyorsunuz sayın
{name}...”) [Link](1)
while True: print(f”--- YILDIZ MARKET'E HOŞ GELDİNİZ, {name} ---”)
print(” 1) Ürünleri Listele”) print(” 2) Sepete Ekle”) print(” 3) Sepeti Gör”)
print(” 4) Sepetten Ürün Çıkar”) print(” 5) Ödeme”) print(” 6) Yeni Ürün Ekle
(admin)”) print(” 7) Çıkış”)
try: choice = int(input(”Lütfen seçiminizi giriniz (1-7): ”))
3
if choice == 1: list_products() elif choice == 2: add_to_cart() elif choice
== 3: view_cart() elif choice == 4: remove_from_cart() elif choice == 5: #
process_payment() fonksiyonu True dönerse (ödeme başarılıysa) döngüyü kır
ve programı bitir. if process_payment(): print(f”\nBizi tercih ettiğiniz için
teşekkür ederiz, iyi günler {name}!”) break elif choice == 6: password = in-
put(”Yönetim paneline erişmeye çalışıyorsun. Lütfen şifreyi gir: ”) if password
== ”12345”: add_new_product() else: print(”Şifre yanlış. Ana menüye yön-
lendiriliyorsunuz...”) [Link](1) elif choice == 7: print(f”\nBizi tercih ettiğiniz
için teşekkür ederiz, yine bekleriz {name}!”) break # Döngüyü kırarak pro-
gramı sonlandırıyruz else: print(”\n!!! Lütfen 1 ile 7 arasında geçerli bir seçim
yapınız.\n”)
except ValueError: print(”\n!!! Geçersiz giriş. Lütfen sadece menüdeki sayıları
giriniz.\n”)
except KeyboardInterrupt: print(f”\nProgram sonlandırıldı. İyi günler,
{name}!”) [Link](0)