Praca domowa - książka kontaktów - wersja pełna z json

Praca domowa - książka kontaktów - wersja pełna z json
Photo by Devin Avery / Unsplash

ZAŁOŻENIA:

Przyjmijmy, że dane będziemy przechowywać w plikach typu JSON. W tym celu skorzystajcie z podstawowej biblioteki json .

Nasze aplikacje raczej nie skorzystają z dodatkowej funkcjonalności którą mogłaby dostarczyć np. biblioteka Pandas.

Przechowywanie kontaktów
W naszej aplikacji do kontaktów dodajcie pozycje menu do wczytywania książki z pliku i zapisywanie
do niego.
Nie kombinujcie z trybem “a” - czyli append. Wczytujcie całą zawartość pliku w trybie “r” i z pomocą
biblioteki json zamieniajcie ją na obiekt z którego możecie korzystać w Pythonie (zakładam, że jest to
słownik).
Z kolei przy zapisie danych nadpisujcie cały plik zaktualizowaną zawartością (czyli skorzystajcie z trybu
“w”).

import json
import os

if os.path.exists("kontakty.json"):
    with open("kontakty.json", "r", encoding="utf8") as plik:
                kontakty = json.load(plik)
else:
    kontakty = {}

while True:
    opcje_menu = """
    Tu Twoja książka kontaktowa. Co mam zrobić? Wybierz operację:
            1. dodaj nowy kontakt do ksiazki
            2. aktualizuj kontakt
            3. usun kontakt
            4. wydrukuj imiona
            5. wydrukuj cala ksiazke
            6. koniec programu
          """
    print(opcje_menu)
    #zabezpieczenie przed niepodawaniem 
    if not opcje_menu:
        break

    operacja = int(input("Wybierz kod operacji: "))
   
    if operacja == 1:
        nowe_imie = input("podaj imie nowego kontaktu")
        kontakt=input ("wpisz dane kontaktowe")
        kontakty[nowe_imie] = kontakt
        print ("wybrano 1")    

    elif operacja == 2:
        print("Wybrano 2")
        nowy_kontakt = input("Wpisz ksywkę/im1ię, oosby której dane chcesz aktualizowac")
        if nowy_kontakt in kontakty:
            aktualizacja_danych = input("Wpisz dane kontaktowe: ")
            kontakty[nowy_kontakt]= aktualizacja_danych
            print("Kontakt został zaktualizowany")
        else:
            print("Nie ma takigo kontaktu w bazie")

    elif operacja == 3:
        print("Wybrano usunięcie pozycji z książki")
        usun_kontakt=input("Wpisz ksywkę/imię, osby której dane chcesz usunąć ")
        if usun_kontakt in kontakty:
            kontakty.pop(usun_kontakt)
            print("Kontakt został usunięty")
        else:
            print("Nie ma takiego kontaktu.")


    elif operacja == 4:
        print("Wybrano 4 - druk imion")
        for imiona in kontakty:
            print(imiona, ", ")
       
    elif operacja == 5:
        print ("Wybrano 5 - druk całej ksiązki")
        for imie, dane in kontakty.items():
            #print(f"{imie}: {dane}")
            print(imie, " kontakt: ", dane)
    elif operacja == 6:
        print ("Wybrano zamknięcie programu: ")
        while True:
            czy_zamknac = input("Czy chcesz zapisać zmiany? Tak - T, Nie - N: ")
            if czy_zamknac == "T":
                with open("kontakty.json", "w", encoding="utf-8") as plik:
                    json.dump(
                        kontakty, 
                        plik, 
                        ensure_ascii=False,
                        sort_keys=True,
                        indent=4)
                print("Zmiany zapisano.")
                break
            elif  czy_zamknac == "N": 
                print("Zmian nie zapisano")
                break
            else:
                print("Mozna podać tylko T lub N, wybierz 6 jeszcze raz i spróbuj ponownie")
                break