diff --git a/__pycache__/Emre_team4_member.cpython-313.pyc b/__pycache__/Emre_team4_member.cpython-313.pyc new file mode 100644 index 0000000..1de7d11 Binary files /dev/null and b/__pycache__/Emre_team4_member.cpython-313.pyc differ diff --git a/__pycache__/Mahmut_Engin_TL_week4.cpython-313.pyc b/__pycache__/Mahmut_Engin_TL_week4.cpython-313.pyc new file mode 100644 index 0000000..6ceed84 Binary files /dev/null and b/__pycache__/Mahmut_Engin_TL_week4.cpython-313.pyc differ diff --git a/__pycache__/adnan_team4_member_week4_zaman.cpython-313.pyc b/__pycache__/adnan_team4_member_week4_zaman.cpython-313.pyc new file mode 100644 index 0000000..486ad19 Binary files /dev/null and b/__pycache__/adnan_team4_member_week4_zaman.cpython-313.pyc differ diff --git a/__pycache__/kitap_islemleri.cpython-313.pyc b/__pycache__/kitap_islemleri.cpython-313.pyc new file mode 100644 index 0000000..6b15a04 Binary files /dev/null and b/__pycache__/kitap_islemleri.cpython-313.pyc differ diff --git a/__pycache__/zaman.cpython-313.pyc b/__pycache__/zaman.cpython-313.pyc new file mode 100644 index 0000000..b08d641 Binary files /dev/null and b/__pycache__/zaman.cpython-313.pyc differ diff --git a/kitap_islemleri.py b/kitap_islemleri.py new file mode 100644 index 0000000..745e0b3 --- /dev/null +++ b/kitap_islemleri.py @@ -0,0 +1,117 @@ +import json +import os +from tabulate import tabulate + +dosya_adi = "kitap.json" + +def otomatik_barkod(kayitlar): + if not kayitlar: + return "1000000000001" + son_barkod = max(int(k["Barkod"]) for k in kayitlar) + return str(son_barkod + 1) + +def oku(): + if os.path.exists(dosya_adi): + with open(dosya_adi, "r", encoding="utf-8") as dosya: + return json.load(dosya) + else: + return [] + +def kayit(veri): + kayitlar = oku() + veri["Barkod"] = otomatik_barkod(kayitlar) + kayitlar.append(veri) + with open(dosya_adi, "w", encoding="utf-8") as dosya: + json.dump(kayitlar, dosya, indent=4, ensure_ascii=False) + print("\nKitap başarıyla eklendi:") + print(json.dumps(veri, indent=4, ensure_ascii=False)) + +def kitap_ekle(): + veri = { + "Dil": input("Dil: "), + "Fiyat": float(input("Fiyat: ")), + "Kitap Adı": input("Kitap Adı: "), + "Yayınevi": input("Yayınevi: "), + "Yazar": input("Yazar: ") + } + kayit(veri) + +def kitap_sil(): + barkod = input("Silinecek kitabın barkodunu girin: ") + kayitlar = oku() + yeni_liste = [k for k in kayitlar if k["Barkod"] != barkod] + if len(kayitlar) == len(yeni_liste): + print("Barkod bulunamadı.") + else: + with open(dosya_adi, "w", encoding="utf-8") as dosya: + json.dump(yeni_liste, dosya, indent=4, ensure_ascii=False) + print("Kitap silindi.") + +def kitap_arama(): + kayitlar = oku() + kelime = input("Aranacak kitap adı veya yazar adı girin: ").lower() + + bulunanlar = [] + for kitap in kayitlar: + kitap_adi = kitap.get("Kitap Adı", "").lower() + yazar = kitap.get("Yazar", "").lower() + + if kelime in kitap_adi or kelime in yazar: + bulunanlar.append([ + kitap.get("Barkod", ""), + kitap.get("Kitap Adı", ""), + kitap.get("Yazar", ""), + kitap.get("Yayınevi", ""), + kitap.get("Fiyat", ""), + kitap.get("Dil", "") + ]) + + if bulunanlar: + headers = ["Barkod", "Kitap Adı", "Yazar", "Yayınevi", "Fiyat", "Dil"] + print("\nArama Sonuçları:\n") + print(tabulate(bulunanlar, headers=headers, tablefmt="fancy_grid")) + else: + print("Hiçbir kitap bulunamadı.") + +def menu(): + while True: + print("\n--- Kitap Kütüphanesi Menüsü ---") + print("1. Kitapları Listele") + print("2. Kitap Ekle") + print("3. Kitap Sil") + print("4. Kitap Ara") + print("0. Çıkış") + + secim = input("Seçiminizi yapın (1-4), Cikmak icin 0 a basin: ") + if secim == "1": + kitaplar = oku() + if kitaplar: + tablo = [ + [ + kitap.get("Barkod", ""), + kitap.get("Kitap Adı", ""), + kitap.get("Yazar", ""), + kitap.get("Yayınevi", ""), + kitap.get("Fiyat", ""), + kitap.get("Dil", "") + ] + for kitap in kitaplar + ] + headers = ["Barkod", "Kitap Adı", "Yazar", "Yayınevi", "Fiyat", "Dil"] + print("\n📚 Kayıtlı Kitaplar:\n") + print(tabulate(tablo, headers=headers, tablefmt="fancy_grid", numalign="right")) + else: + print("📭 Kayıtlı kitap bulunamadı.") + elif secim == "2": + kitap_ekle() + elif secim == "3": + kitap_sil() + elif secim == "4": + kitap_arama() + elif secim == "0": + print("Programdan çıkılıyor.") + break + else: + print("Geçersiz seçim. Lütfen tekrar deneyin.") +if __name__ == "__main__": + menu() \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..4278e5e --- /dev/null +++ b/main.py @@ -0,0 +1,31 @@ +import os +import uye_islemleri +import zaman +import kitap_islemleri + +def temizle(): + os.system("cls" if os.name == "nt" else "clear") + +def halk_kutuphanesi_menu(): + while True: + print("Halk Kütüphanemize Hoşgeldiniz!") + print("1- UYELIK ISLEMLERI") + print("2- KITAP ISLEMLERI") + print("0- CIKIS") + + secim = input("Lutfen yapmak istediginiz secimin kodunu giriniz (0, 1, 2): ") + + + if secim == '1': + uye_islemleri.menu() + + elif secim == '2': + kitap_islemleri.menu() + elif secim == '0': + print("Çıkış yapılıyor... Görüşmek üzere!") + break + else: + print("Geçersiz seçenek, lütfen tekrar deneyin.") + +if __name__ == "__main__": + halk_kutuphanesi_menu() \ No newline at end of file diff --git a/uye.json b/uye.json new file mode 100644 index 0000000..1029f23 --- /dev/null +++ b/uye.json @@ -0,0 +1,20 @@ +[ + { + "Id": 1, + "Uye adi": "mahmut", + "Telefon": "11111111", + "Adres": "Rotterdam" + }, + { + "Id": 2, + "Uye adi": "kamil", + "Telefon": "456546", + "Adres": "roterdam" + }, + { + "Id": 3, + "Uye adi": "emre", + "Telefon": "465464", + "Adres": "utrecht" + } +] \ No newline at end of file diff --git a/uye_islemleri.py b/uye_islemleri.py new file mode 100644 index 0000000..2f01445 --- /dev/null +++ b/uye_islemleri.py @@ -0,0 +1,187 @@ +import json +import os +import kitap_islemleri +import zaman + +UYE_DOSYA = "uye.json" +TAKIP_DOSYA = "takip.json" + +def dosya_okuma(dosya_adi): + if os.path.exists(dosya_adi): + with open(dosya_adi, "r", encoding="utf-8") as f: + try: + return json.load(f) + except json.JSONDecodeError: + return [] + return [] + +def dosya_yazma(dosya_adi, veri): + with open(dosya_adi, "w", encoding="utf-8") as f: + json.dump(veri, f, ensure_ascii=False, indent=4) + +def uye_ekle(Uye_Adi, Tel, Adres): + uyeler = dosya_okuma(UYE_DOSYA) + yeni_id = max([u["Id"] for u in uyeler], default=0) + 1 + yeni_uye = { + "Id": yeni_id, + "Uye adi": Uye_Adi, + "Telefon": Tel, + "Adres": Adres + } + uyeler.append(yeni_uye) + dosya_yazma(UYE_DOSYA, uyeler) + return yeni_uye + +def uye_kontrol(aranan): + uyeler = dosya_okuma(UYE_DOSYA) + return [u for u in uyeler if aranan.lower() in u.get("Uye adi", "").lower()] + +def uye_guncelle(guncellenecek_id, yeni_ad=None, yeni_tel=None, yeni_adres=None): + uyeler = dosya_okuma(UYE_DOSYA) + for uye in uyeler: + if uye["Id"] == guncellenecek_id: + if yeni_ad: uye["Uye adi"] = yeni_ad + if yeni_tel: uye["Telefon"] = yeni_tel + if yeni_adres: uye["Adres"] = yeni_adres + dosya_yazma(UYE_DOSYA, uyeler) + return uye + return None + +def uye_sil(silinecek_id): + uyeler = dosya_okuma(UYE_DOSYA) + uyeler = [u for u in uyeler if u["Id"] != silinecek_id] + dosya_yazma(UYE_DOSYA, uyeler) + return True + +def kitap_odunc_verme(uye_id, kitap_objesi): + uyeler = dosya_okuma(UYE_DOSYA) + uye = next((u for u in uyeler if u["Id"] == uye_id), None) + if not uye: + return None + kayit = { + "Uye": uye, + "Kitap": kitap_objesi, + "Tarih": zaman.kitap_verilis_tarihi() + + } + takipler = dosya_okuma(TAKIP_DOSYA) + takipler.append(kayit) + dosya_yazma(TAKIP_DOSYA, takipler) + return kayit + +def takip_yaz(veri): + takipler = dosya_okuma(TAKIP_DOSYA) + takipler.append(veri) + dosya_yazma(TAKIP_DOSYA, takipler) + +def takip_oku(): + return dosya_okuma(TAKIP_DOSYA) + +def kitap_iade(index): + takipler = dosya_okuma(TAKIP_DOSYA) + if 0 <= index < len(takipler): + takipler.pop(index) + dosya_yazma(TAKIP_DOSYA, takipler) + return True + return False + +def menu(): + while True: + print("\n--- KÜTÜPHANE ÜYE İŞLEMLERİ MENÜSÜ ---") + print("1 - Üye Ekle") + print("2 - Üye Ara") + print("3 - Üye Güncelle") + print("4 - Üye Sil") + print("5 - Kitap Ödünç Ver") + print("6 - Kitap Takiplerini Görüntüle") + print("7 - Kitap İade Et") + print("0 - Çıkış") + secim = input("Seçiminizi yapın: ") + + if secim == "1": + ad = input("Üye Adı: ") + tel = input("Telefon: ") + adres = input("Adres: ") + yeni_uye = uye_ekle(ad, tel, adres) + print("\nÜye başarıyla eklendi:") + print(json.dumps(yeni_uye, indent=4, ensure_ascii=False)) + elif secim == "2": + aranan = input("Aranacak üye adını girin: ") + bulunanlar = uye_kontrol(aranan) + if bulunanlar: + for uye in bulunanlar: + print(json.dumps(uye, indent=4, ensure_ascii=False)) + else: + print("Üye bulunamadı.") + + elif secim == "3": + try: + guncelle_id = int(input("Güncellenecek Üye ID: ")) + except ValueError: + print("Lütfen geçerli bir sayı girin.") + continue + yeni_ad = input("Yeni ad (boş bırakılırsa değişmez): ") + yeni_tel = input("Yeni telefon (boş bırakılırsa değişmez): ") + yeni_adres = input("Yeni adres (boş bırakılırsa değişmez): ") + sonuc = uye_guncelle(guncelle_id, yeni_ad or None, yeni_tel or None, yeni_adres or None) + if sonuc: + print("✅ Üye bilgileri güncellendi.") + else: + print("Üye bulunamadı.") + + elif secim == "4": + try: + sil_id = int(input("Silinecek Üye ID: ")) + except ValueError: + print("Lütfen geçerli bir sayı girin.") + continue + if uye_sil(sil_id): + print("✅ Üye silindi.") + else: + print("Üye bulunamadı.") + + elif secim == "5": + uyeler = dosya_okuma(UYE_DOSYA) + for u in uyeler: + print(f"{u['Id']} - {u['Uye adi']}") + uye_id = int(input("Kitap verilecek üyenin ID'sini girin: ")) + + kitaplar = kitap_islemleri.oku() + for i, k in enumerate(kitaplar): + print(f"{i} - {k['Kitap Adı']} / {k['Yazar']}") + kitap_index = int(input("Verilecek kitabın numarasını girin: ")) + secilen_kitap = kitaplar[kitap_index] + + sonuc = kitap_odunc_verme(uye_id, secilen_kitap) + if sonuc: + print("Kitap ödünç verildi.") + else: + print("Hata: Üye bulunamadı.") + + elif secim == "6": + takipler = takip_oku() + if takipler: + for i, t in enumerate(takipler): + print(f"{i} - Üye: {t['Uye']['Uye adi']} - Kitap: {t['Kitap']['Kitap Adı']} - Veriliş Tarihi: {t['Verilis Tarihi']}") + else: + print("Hiç kitap takibi yok.") + + elif secim == "7": + try: + index = int(input("İade edilecek kitap takip indeksi: ")) + except ValueError: + print("Lütfen geçerli bir sayı girin.") + continue + if kitap_iade(index): + print("✅ Kitap iade edildi.") + else: + print("Geçersiz indeks.") + + elif secim == "0": + print("Çıkış yapılıyor.") + break + else: + print("Geçersiz seçim. Lütfen tekrar deneyin.") + +if __name__ == "__main__": + menu() diff --git a/zaman.py b/zaman.py new file mode 100644 index 0000000..7615f46 --- /dev/null +++ b/zaman.py @@ -0,0 +1,23 @@ +from datetime import datetime, timedelta + +def suanki_tarih(): + """Şu anki tarihi ve saati döndürür.""" + return datetime.now() + +def kitap_verilis_tarihi(): + """Kitabın verildiği tarihi döndürür.""" + return datetime.now().strftime("%Y-%m-%d %H:%M:%S") + +def kitap_iade_tarihi(verilis_tarihi, gun_sayisi=14): + """Kitabın iade edilmesi gereken tarihi hesaplar.""" + return verilis_tarihi + timedelta(days=gun_sayisi) + +def gecikme_suresi(iade_tarihi): + """Kitabın iade tarihine göre gecikme süresini hesaplar.""" + bugun = datetime.now() + gecikme = (bugun - iade_tarihi).days + return gecikme if gecikme > 0 else 0 + +def tarih_formatla(tarih): + """Tarihi 'GG-AA-YYYY SS:DD:SS' formatında stringe çevirir.""" + return tarih.strftime("%d-%m-%Y %H:%M:%S") \ No newline at end of file