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


import sqlite3

def get_connection():
    conn = sqlite3.connect("clinic.db")
    conn.execute("PRAGMA foreign_keys = ON;")
    return conn

def init_db():
    conn = get_connection()
    cursor = conn.cursor()
    cursor.executescript("""
    CREATE TABLE IF NOT EXISTS Service (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        price REAL NOT NULL
    );
    CREATE TABLE IF NOT EXISTS Patient (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        first_name TEXT NOT NULL,
        last_name TEXT NOT NULL,
        phone TEXT NOT NULL
    );
    CREATE TABLE IF NOT EXISTS Doctor (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        first_name TEXT NOT NULL,
        last_name TEXT NOT NULL,
        specialization TEXT NOT NULL
    );
    CREATE TABLE IF NOT EXISTS Cabinet (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        room_number TEXT NOT NULL
    );
    CREATE TABLE IF NOT EXISTS Appointment (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        patient_id INTEGER NOT NULL,
        doctor_id INTEGER NOT NULL,
        service_id INTEGER NOT NULL,
        cabinet_id INTEGER NOT NULL,
        datetime TEXT NOT NULL,
        status TEXT NOT NULL,
        diagnosis TEXT,
        FOREIGN KEY (patient_id) REFERENCES Patient(id) ON DELETE CASCADE,
        FOREIGN KEY (doctor_id) REFERENCES Doctor(id) ON DELETE RESTRICT,
        FOREIGN KEY (service_id) REFERENCES Service(id) ON DELETE RESTRICT,
        FOREIGN KEY (cabinet_id) REFERENCES Cabinet(id) ON DELETE RESTRICT
    );
    """)
    conn.commit()
    conn.close()

# 1. CREATE
def add_patient():
    first_name = input("Имя пациента: ")
    last_name = input("Фамилия пациента: ")
    phone = input("Номер телефона: ")
    
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("""
        INSERT INTO Patient (first_name, last_name, phone)
        VALUES (?, ?, ?)
    """, (first_name, last_name, phone))
    conn.commit()
    print(f"-> Пациент успешно добавлен с ID {cursor.lastrowid}!\n")
    conn.close()

# 2. READ (пользователь сам выбирает какую таблицу смотреть)
def show_table_records():
    tables = {
        "1": "Patient",
        "2": "Doctor",
        "3": "Service",
        "4": "Cabinet",
        "5": "Appointment"
    }
    print("\nКакую таблицу вывести?")
    for key, name in tables.items():
        print(f"{key}. {name}")
    
    choice = input("Выбери номер: ")
    table_name = tables.get(choice)
    
    if not table_name:
        print("Неверный выбор таблицы.\n")
        return

    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute(f"SELECT * FROM {table_name}")
    rows = cursor.fetchall()
    
    # Получаем названия столбцов
    columns = [desc[0] for desc in cursor.description]
    print(f"\n--- Данные таблицы {table_name} ---")
    print(" | ".join(columns))
    print("-" * 40)
    for row in rows:
        print(" | ".join(str(item) for item in row))
    print()
    conn.close()

# 3. UPDATE (пользователь выбирает ID, поле и новое значение)
def update_patient_field():
    patient_id = input("Введи ID пациента для изменения: ")
    print("Какое поле обновить?")
    print("1. first_name (Имя)")
    print("2. last_name (Фамилия)")
    print("3. phone (Телефон)")
    field_choice = input("Выбери пункт (1-3): ")

    field_map = {
        "1": "first_name",
        "2": "last_name",
        "3": "phone"
    }
    field_name = field_map.get(field_choice)
    if not field_name:
        print("Неверное поле.\n")
        return

    new_value = input(f"Введи новое значение для {field_name}: ")

    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute(f"UPDATE Patient SET {field_name} = ? WHERE id = ?", (new_value, patient_id))
    conn.commit()
    if cursor.rowcount > 0:
        print(f"-> Запись #{patient_id} успешно обновлена!\n")
    else:
        print(f"-> Пациент с ID {patient_id} не найден.\n")
    conn.close()

# 4. DELETE (пользователь вводит ID для удаления)
def delete_patient():
    patient_id = input("Введи ID пациента, которого нужно удалить: ")
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("DELETE FROM Patient WHERE id = ?", (patient_id,))
    conn.commit()
    if cursor.rowcount > 0:
        print(f"-> Пациент #{patient_id} успешно удален!\n")
    else:
        print(f"-> Пациент с ID {patient_id} не найден.\n")
    conn.close()

def main():
    init_db()
    while True:
        print("=== СИСТЕМА УПРАВЛЕНИЯ КЛИНИКОЙ ===")
        print("1. Добавить пациента (CREATE)")
        print("2. Просмотреть записи в таблице (READ)")
        print("3. Изменить данные пациента (UPDATE)")
        print("4. Удалить пациента (DELETE)")
        print("0. Выход")
        
        action = input("Выберите действие: ")
        if action == "1":
            add_patient()
        elif action == "2":
            show_table_records()
        elif action == "3":
            update_patient_field()
        elif action == "4":
            delete_patient()
        elif action == "0":
            print("Работа завершена.")
            break
        else:
            print("Неизвестный пункт, попробуй еще раз.\n")

if __name__ == "__main__":
    main()