Książka Kontaktowa - update

Książka Kontaktowa - update
Photo by Pawel Czerwinski / Unsplash

Kod programu

import json
import os
from datetime import datetime

PLIK_DANE = "ksiazka_adresowa.json"

class KsiazkaKontaktowa:
    def __init__(self):
        self.ksiazka = self._wczytaj_dane()

    def _wczytaj_dane(self):
        if os.path.exists(PLIK_DANE):
            with open(PLIK_DANE, "r", encoding="utf-8") as f:
                return json.load(f)
        return {}

    def _zapisz_dane(self):
        with open(PLIK_DANE, "w", encoding="utf-8") as f:
            json.dump(self.ksiazka, f, ensure_ascii=False, indent=4, sort_keys=True)

    def dodaj_kontakt(self):
        imie = input("Podaj nazwę kontaktu: ").strip()
        if not imie:
            print("Nazwa kontaktu nie może być pusta!")
            return

        if imie in self.ksiazka:
            print(f"Kontakt {imie} już istnie. Aktualne dane:")
            self._wyswietl_kontakt(imie)
            return

        numer = input("Podaj numer telefonu: ").strip()
        email = input("Podaj adres email (opcjonalnie): ").strip()
        adres = input("Podaj adres (opcjonalnie): ").strip()

        self.ksiazka[imie] = {
            'telefon': numer,
            'email': email if email else None,
            'adres': adres if adres else None,
            'data_dodania': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
        print(f"Kontakt {imie} został dodany.")

    def aktualizuj_kontakt(self):
        imie = input("Podaj nazwę kontaktu do aktualizacji: ").strip()
        if imie not in self.ksiazka:
            print("Nie ma takiego kontaktu.")
            return

        print("Aktualne dane:")
        self._wyswietl_kontakt(imie)

        print("\nWprowadź nowe dane (pozostaw puste aby nie zmieniać):")
        nowy_numer = input("Nowy numer telefonu: ").strip()
        nowy_email = input("Nowy email: ").strip()
        nowy_adres = input("Nowy adres: ").strip()

        if nowy_numer:
            self.ksiazka[imie]['telefon'] = nowy_numer
        if nowy_email:
            self.ksiazka[imie]['email'] = nowy_email
        if nowy_adres:
            self.ksiazka[imie]['adres'] = nowy_adres

        print("Kontakt został zaktualizowany.")

    def usun_kontakt(self):
        imie = input("Podaj nazwę kontaktu do usunięcia: ").strip()
        if imie in self.ksiazka:
            del self.ksiazka[imie]
            print("Kontakt został usunięty.")
        else:
            print("Nie ma takiego kontaktu.")

    def wyswietl_wszystkie_kontakty(self):
        if not self.ksiazka:
            print("Brak kontaktów.")
            return

        print("\nTwoja książka kontaktowa:")
        for imie, dane in sorted(self.ksiazka.items()):
            self._wyswietl_kontakt(imie)
            print("-" * 40)

    def wyszukaj_kontakt(self):
        fraza = input("Wpisz fragment nazwy lub numeru telefonu: ").strip().lower()
        znalezione = False

        for imie, dane in self.ksiazka.items():
            if (fraza in imie.lower() or 
                fraza in dane['telefon'].lower() or
                (dane['email'] and fraza in dane['email'].lower())):

                self._wyswietl_kontakt(imie)
                print("-" * 40)
                znalezione = True

        if not znalezione:
            print("Nie znaleziono pasujących kontaktów.")

    def _wyswietl_kontakt(self, imie):
        dane = self.ksiazka[imie]
        print(f"\nNazwa: {imie}")
        print(f"Telefon: {dane['telefon']}")
        if dane['email']:
            print(f"Email: {dane['email']}")
        if dane['adres']:
            print(f"Adres: {dane['adres']}")
        print(f"Dodano: {dane['data_dodania']}")

def main():
    print("Witaj w książce kontaktowej!")
    ksiazka = KsiazkaKontaktowa()

    while True:
        print("\nMenu:")
        print("1. Dodaj nowy kontakt")
        print("2. Edytuj istniejący kontakt")
        print("3. Usuń kontakt")
        print("4. Wyświetl wszystkie kontakty")
        print("5. Wyszukaj kontakt")
        print("0. Zapisz i wyjdź")

        wybor = input("Wybierz opcję: ").strip()

        if wybor == "1":
            ksiazka.dodaj_kontakt()
        elif wybor == "2":
            ksiazka.aktualizuj_kontakt()
        elif wybor == "3":
            ksiazka.usun_kontakt()
        elif wybor == "4":
            ksiazka.wyswietl_wszystkie_kontakty()
        elif wybor == "5":
            ksiazka.wyszukaj_kontakt()
        elif wybor == "0":
            ksiazka._zapisz_dane()
            print("Dane zostały zapisane. Do widzenia!")
            break
        else:
            print("Nieprawidłowy wybór. Spróbuj ponownie.")

if __name__ == "__main__":
    main()