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


import sqlite3
import json

conn = sqlite3.connect('education.db')
cursor = conn.cursor()

cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    full_name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    birth_date TEXT,
    registration_date TEXT DEFAULT CURRENT_TIMESTAMP,
    is_active INTEGER DEFAULT 1
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS courses (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    description TEXT,
    duration_hours INTEGER,
    price REAL,
    created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS tests (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    course_id INTEGER,
    title TEXT NOT NULL,
    max_score INTEGER NOT NULL,
    passing_score INTEGER NOT NULL,
    time_limit_minutes INTEGER,
    FOREIGN KEY (course_id) REFERENCES courses(id)
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS marks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    student_id INTEGER,
    course_id INTEGER,
    test_id INTEGER,
    score INTEGER NOT NULL,
    finish_time TEXT DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id),
    FOREIGN KEY (test_id) REFERENCES tests(id)
)
''')

conn.commit()

def add_student(full_name, email, birth_date=None):
    cursor.execute('INSERT INTO students (full_name, email, birth_date) VALUES (?, ?, ?)', (full_name, email, birth_date))
    conn.commit()
    return cursor.lastrowid

def remove_student(student_id):
    cursor.execute('DELETE FROM students WHERE id = ?', (student_id,))
    conn.commit()
    return cursor.rowcount > 0

def update_student(student_id, **kwargs):
    allowed = ['full_name', 'email', 'birth_date', 'is_active']
    updates = [f"{k} = ?" for k in kwargs if k in allowed]
    values = [v for k, v in kwargs.items() if k in allowed]
    if updates:
        cursor.execute(f'UPDATE students SET {", ".join(updates)} WHERE id = ?', values + [student_id])
        conn.commit()
        return cursor.rowcount > 0
    return False

def add_course(title, description, duration_hours, price):
    cursor.execute('INSERT INTO courses (title, description, duration_hours, price) VALUES (?, ?, ?, ?)', (title, description, duration_hours, price))
    conn.commit()
    return cursor.lastrowid

def remove_course(course_id):
    cursor.execute('DELETE FROM courses WHERE id = ?', (course_id,))
    conn.commit()
    return cursor.rowcount > 0

def update_course(course_id, **kwargs):
    allowed = ['title', 'description', 'duration_hours', 'price']
    updates = [f"{k} = ?" for k in kwargs if k in allowed]
    values = [v for k, v in kwargs.items() if k in allowed]
    if updates:
        cursor.execute(f'UPDATE courses SET {", ".join(updates)} WHERE id = ?', values + [course_id])
        conn.commit()
        return cursor.rowcount > 0
    return False

def add_test(course_id, title, max_score, passing_score, time_limit_minutes):
    cursor.execute('INSERT INTO tests (course_id, title, max_score, passing_score, time_limit_minutes) VALUES (?, ?, ?, ?, ?)', (course_id, title, max_score, passing_score, time_limit_minutes))
    conn.commit()
    return cursor.lastrowid

def remove_test(test_id):
    cursor.execute('DELETE FROM tests WHERE id = ?', (test_id,))
    conn.commit()
    return cursor.rowcount > 0

def update_test(test_id, **kwargs):
    allowed = ['course_id', 'title', 'max_score', 'passing_score', 'time_limit_minutes']
    updates = [f"{k} = ?" for k in kwargs if k in allowed]
    values = [v for k, v in kwargs.items() if k in allowed]
    if updates:
        cursor.execute(f'UPDATE tests SET {", ".join(updates)} WHERE id = ?', values + [test_id])
        conn.commit()
        return cursor.rowcount > 0
    return False

def add_mark(student_id, course_id, test_id, score):
    cursor.execute('INSERT INTO marks (student_id, course_id, test_id, score) VALUES (?, ?, ?, ?)', (student_id, course_id, test_id, score))
    conn.commit()
    return cursor.lastrowid

cursor.execute('''
CREATE TABLE IF NOT EXISTS activity (
    id INTEGER PRIMARY KEY,
    student_id INTEGER,
    course_id INTEGER,
    test_id INTEGER,
    action TEXT,
    time TEXT,
    details TEXT
)
''')

conn.commit()

cursor.execute('INSERT INTO activity (id, student_id, course_id, test_id, action, time, details) VALUES (?, ?, ?, ?, ?, ?, ?)', (1, 1, 10, 5, 'start', '2024-01-15 13:00', json.dumps({"attempt_number": 5})))
conn.commit()