Добавил:
t.me Прошиваю/настраиваю роутеры в общаге МИЭТ, пишите в тг: t.me/aogudugnp Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчеты по лабам / СУБД_ЛР9

.pdf
Скачиваний:
1
Добавлен:
21.06.2025
Размер:
1.82 Mб
Скачать

print("\nВаша нагрузка:")

headers = ['Преподаватель', 'Кафедра', 'Занятий', 'Часов'] rows = [[

workload['teacher'], workload['department_name'], workload['total_classes'], workload['total_hours']

]]

print(tabulate(rows, headers=headers, tablefmt="grid")) except Exception as e:

print(f"Ошибка при просмотре нагрузки: {e}")

def view_free_classrooms(self): try:

day = input("День недели (1-7, где 1=Понедельник): ") start_time = input("Время начала (ЧЧ:ММ): ") end_time = input("Время окончания (ЧЧ:ММ): ")

week_num = datetime.datetime.now().isocalendar()[1] week_type = "четная" if week_num % 2 == 0 else "нечетная"

with self.conn.cursor(cursor_factory=DictCursor) as cursor: cursor.callproc("get_free_classrooms", [day, start_time, end_time, week_type, None]) results = cursor.fetchall()

if not results:

print("Свободные аудитории не найдены") return

print("\nСвободные аудитории:")

headers = ['Корпус', 'Аудитория', 'Вместимость', 'Тип'] rows = [

[r['building'], r['room_number'], r['capacity'], r['room_type']] for r in results

]

print(tabulate(rows, headers=headers, tablefmt="grid")) except Exception as e:

print(f"Ошибка при поиске свободных аудиторий: {e}")

def view_student_schedule(self): try:

with self.conn.cursor(cursor_factory=DictCursor) as cursor: week_num = datetime.datetime.now().isocalendar()[1] week_type = "четная" if week_num % 2 == 0 else "нечетная"

cursor.callproc("get_group_schedule", [self.current_user['group_id'], week_type]) results = cursor.fetchall()

if not results:

print("На этой неделе занятий для вашей группы нет") return

print(f"\nРасписание вашей группы (Неделя: {week_type})")

headers = ['День', 'Начало', 'Конец', 'Предмет', 'Преподаватель', 'Аудитория'] rows = [

[r['day_of_week'], r['start_time'], r['end_time'], r['subject_name'], r['teacher_name'], r['classroom']] for r in results

]

print(tabulate(rows, headers=headers, tablefmt="grid")) except Exception as e:

print(f"Ошибка при просмотре расписания: {e}")

def view_student_group(self): try:

with self.conn.cursor(cursor_factory=DictCursor) as cursor: cursor.execute("""

SELECT sg.*, s.first_name || ' ' || s.last_name AS head_name FROM student_groups sg

LEFT JOIN students s ON sg.head_student_id = s.id

WHERE sg.id = %s

""", (self.current_user['group_id'],)) group = cursor.fetchone()

if not group:

print("Информация о группе не найдена") return

print("\nИнформация о вашей группе:") print(f"Название группы: {group['group_name']}") print(f"Курс: {group['course']}")

print(f"Староста: {group['head_name'] or 'Не назначен'}")

cursor.execute("""

SELECT id, first_name, last_name

FROM students

WHERE group_id = %s

ORDER BY last_name, first_name

""", (self.current_user['group_id'],)) students = cursor.fetchall()

print("\nЧлены группы:") headers = ['ID', 'Имя', 'Фамилия']

rows = [[s['id'], s['first_name'], s['last_name']] for s in students] print(tabulate(rows, headers=headers, tablefmt="grid"))

except Exception as e:

print(f"Ошибка при просмотре информации о группе: {e}")

if __name__ == "__main__":

app = UniversityScheduleApp() #app.login() app.admin_menu()

Демонстрация работы

Подключение к бд

Просмотр данных таблицы (на примере таблицы факультетов)

Добавление факультета

Обновление факультета

Удаление факультета

Представления

Расписание на текущую неделю

Загрузка преподавателей

Триггеры

Демонстрация работы триггера, проверяющего, принадлежит ли студент заданной группе, при попытке наделить его полномочиями старосты

Функции/процедуры

Получение расписания группы

Получение расписания преподавателя

Обновление старосты группы

Соседние файлы в папке отчеты по лабам