💾 Zadanie domowe: Książka kontaktów - zajęcia 8

💾 Zadanie domowe: Książka kontaktów - zajęcia 8

📌 Struktura danych - słownik

kontakty = {imie1:dane1, imie2;dane2, imie3:dane3}

📌 Import bibliotek:

  • json - obsługa plików w formacie json. Umożliwia odczyt i zapisywanie danych.
  • os - umożliwia dostęp do funkcjonalności systemu. Pozwala m.in. sprawdzać, czy pliki i katalogi istnieją.
if os.path.exists("kontakty.json"):
  with open("kontakty.json", "r", encoding="utf8") as plik:
      kontakty = json.load(plik)

os.path.exist - funkcja sprawdza czy plik istnieje w katalogu, w którym uruchamiany jest program.

📁 Jeżeli istnieje to:

  • otwierany jest w trybie odczytu - "r",
  • encoding="utf8" używamy metody, żeby poprawnie obsłużyć polskie znaki,
  • as plik - przypisujemy alias pliku,
  • json.load(plik) - funkcja przypisana jako zmienna,
    która wywołuje dane pliku jako słownik.

🆕 Jeżeli nie istnieje to:

  • kontakty = {} - tworzy się pusty słownik kontaktów

📌 Aplikacja oparta o pętlę WHILE
aplikacja wykonuje się tak długo aż nie spełni się warunek operacji'6 - koniec'

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:
    menu = """
    Wybierz operację do wykoniania: 
          1 - dopisanie pozycji do ksiązki 
          2 - aktualizacja pozycji książki
          3 - usunięcie pozycji książki 
          4 - wydruk imion z książki 
          5 - wydruk całej książki z kontaktami 
          6 - koniec
          """
    print(menu)

    kod_operacji = int(input("Wybierz kod operacji: "))
   
    if kod_operacji == 1:
        print("Wybrano dopisanie pozycji do książki")
        nowy_kontak = input("Wpisz nazwę/imię dla nowej pozycji: ")
        if nowy_kontak not in kontakty:
            nowy_dane = input("Wpisz dane kontaktowe: ")
            kontakty[nowy_kontak]= nowy_dane
            print("Dodano kontakt")
        else: 
            print("""
                  Kontakt o tym imieniu już istnieje.
                  Wybierz ponownie kod operacji.
                """)
            
    elif kod_operacji == 2:
        print("Wybrano aktualizację pozycji książki")
        nowy_kontak = input("Wpisz nazwę/imię do aktualizacji danych: ")
        if nowy_kontak in kontakty:
            aktualizacja_danych = input("Wpisz dane kontaktowe: ")
            kontakty[nowy_kontak]= aktualizacja_danych
            print("Kontakt został zaktualizowany")
        else:
            print("Nie ma kontaktu o tej nazwie/imieniu")


    elif kod_operacji == 3:
        print("Wybrano usunięcie pozycji z książki")
        del_kontakt=input("Podaj nazwę/imie kotaktu, który chcesz usunąć: ")
        if del_kontakt in kontakty:
            kontakty.pop(del_kontakt)
            print("Kontakt został usunięty")
        else:
            print("Nie ma takiego kontaktu.")


    elif kod_operacji == 4:
        print("Wybrano wydruk imion z książki")
        for imiona in kontakty:
            print(imiona, end=", ")
        liczba_kontaktow = len(kontakty)
        if liczba_kontaktow == 1:
            odmiana = "kontakt"
        elif 2 <= liczba_kontaktow % 10 <= 4 and not 
            (12 <= liczba_kontaktow % 100 <= 14):
            koncowka = "kontakty"
        else:
            koncowka = "kontaktów"

        print(f"Książka zawiera {liczba_kontaktow} {koncowka}")


    elif kod_operacji == 5:
        print ("Wybrano wydruk całej książki: ")
        for imie, dane in kontakty.items():
            print(f"{imie}: {dane}")
    
     elif kod_operacji == 6:
        print ("Wybrano zamknięcie programu: ")
        while True:
            pytanie = input("Czy chcesz zapisać zmiany? 
            Tak - T, Nie - N: ").strip().upper()
            if pytanie in ("T", "N"):
                break
            print("Nieprawidłowa odpowiedź. Wpisz T albo N.")
        if pytanie == "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 zostały zapisane.")
        else:
            print("Zmiany nie zostały zapisane.")
            break

💡 Operacja nr 4 Wydruk imion z książki
Wyświetla w jednej linii, oddzielając przecinkami wszystkie imiona z książki kontaktów, a na końcu podaje ile ich jest wraz z poprawną odmianą liczebnika.

💡 Operacja nr 6 Zamknięcie programu

Zastosowałam pętlę WHILE, która wymusza na użytkowniku wpisanie tylko
"T" - tak lub "N" - nie

Dodatkowo zastosowałam metody:
👉 .strip() aby usunąć spacje i linie z początku i końca.
👉 .upper() zamienia ciąg znaków na wielkie litery — więc t czy T traktowane są tak samo.

Następnie w pętli WHILE zagnieździłam warunek o wyborze poprawnej odpowiedzi
✅ jeżeli użytkownik wybrała "T" lub "N" przerywam pętlę.
❌ jeżeli użytkownik wybrał inną odpowiedź niż "T" lub "N", wyświetlam komunikat
print("Nieprawidłowa odpowiedź. Wpisz T albo N.") i wykonuje się ponownie początek pętli.