Загрузка данных


import sqlite3

def init_db():
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS contacts (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                phone TEXT NOT NULL,
                email TEXT
            )
        """)
        conn.commit()

def add_contact(name: str, phone: str, email: str):
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute(
            "INSERT INTO contacts (name, phone, email) VALUES (?, ?, ?)",
            (name, phone, email)
        )
        conn.commit()
    print("Контакт успешно добавлен.")

def get_all_contacts():
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT id, name, phone, email FROM contacts")
        rows = cursor.fetchall()
        
    if not rows:
        print("Список контактов пуст.")
        return

    print("\n--- Список контактов ---")
    for cid, name, phone, email in rows:
        print(f"[{cid}] {name} | Тел: {phone} | Email: {email}")

def find_contact_by_name(name: str):
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute(
            "SELECT id, name, phone, email FROM contacts WHERE name LIKE ?",
            (f"%{name}%",)
        )
        rows = cursor.fetchall()

    if not rows:
        print(f"Контакты с именем '{name}' не найдены.")
        return

    print(f"\n--- Результаты поиска для '{name}' ---")
    for cid, cname, phone, email in rows:
        print(f"[{cid}] {cname} | Тел: {phone} | Email: {email}")

def update_phone(contact_id: int, new_phone: str):
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute(
            "UPDATE contacts SET phone = ? WHERE id = ?",
            (new_phone, contact_id)
        )
        conn.commit()
        if cursor.rowcount > 0:
            print("Телефон успешно обновлен.")
        else:
            print(f"Контакт с ID {contact_id} не найден.")

def delete_contact(contact_id: int):
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("DELETE FROM contacts WHERE id = ?", (contact_id,))
        conn.commit()
        if cursor.rowcount > 0:
            print("Контакт успешно удален.")
        else:
            print(f"Контакт с ID {contact_id} не найден.")

def main():
    init_db()
    menu = (
        "\n1. Добавить контакт\n"
        "2. Показать все контакты\n"
        "3. Найти контакт по имени\n"
        "4. Обновить телефон контакта\n"
        "5. Удалить контакт\n"
        "0. Выход\n"
        "Выберите действие: "
    )

    while True:
        choice = input(menu).strip()

        if choice == "1":
            name = input("Имя: ").strip()
            phone = input("Телефон: ").strip()
            email = input("Email: ").strip()
            if name and phone:
                add_contact(name, phone, email)
            else:
                print("Имя и телефон обязательны к заполнению.")

        elif choice == "2":
            get_all_contacts()

        elif choice == "3":
            name = input("Введите имя для поиска: ").strip()
            find_contact_by_name(name)

        elif choice == "4":
            try:
                cid = int(input("Введите ID контакта: ").strip())
                new_phone = input("Новый номер телефона: ").strip()
                update_phone(cid, new_phone)
            except ValueError:
                print("ID должен быть числом.")

        elif choice == "5":
            try:
                cid = int(input("Введите ID контакта для удаления: ").strip())
                delete_contact(cid)
            except ValueError:
                print("ID должен быть числом.")

        elif choice == "0":
            print("Выход из программы.")
            break
        else:
            print("Некорректный ввод, попробуйте снова.")

if __name__ == "__main__":
    main()