
отчеты по лабам / СУБД_ЛР9
.pdf
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()

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

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

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

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

Представления
Расписание на текущую неделю
Загрузка преподавателей

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

Функции/процедуры
Получение расписания группы
Получение расписания преподавателя

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