
отчеты по лабам / СУБД_ЛР9
.pdf
Лр 7-8 Таблицы
Таблица факультетов
Таблица кафедр
Таблица
преподавателей
Таблица групп Таблица
студентов

Таблица
предметов
Таблица аудиторий
Таблица расписаний
Представления
Расписание на текущую неделю

Загрузка преподавателя
Триггеры
Проверка доступности аудитории

Обновление информации о старосте при изменении группы
Функции и процедуры
Расписание группы

Расписание преподавателя

Добавления занятия с проверками
Обновление старосты

Свободные аудитории в указанное время

Код приложения

import psycopg2
from psycopg2 import sql
from psycopg2.extras import DictCursor from tabulate import tabulate
import datetime import sys
from getpass import getpass
class UniversityScheduleApp: def __init__(self):
self.conn = None self.current_user = None self.connect_to_db()
def connect_to_db(self): try:
print("\n=== Подключение к базе данных ===")
dbname = input("Имя базы данных (university_schedule): ") or "university_schedule" user = input("Пользователь (postgres): ") or "postgres"
password = input("Пароль: ") or "postgres" host = input("Хост (localhost): ") or "localhost" port = input("Порт (5432): ") or "5432"
self.conn = psycopg2.connect( dbname=dbname, user=user, password=password, host=host,
port=port
)
print("Успешное подключение к базе данных") except Exception as e:
print(f"Ошибка подключения к базе данных: {e}") sys.exit(1)
def close_connection(self): if self.conn:
self.conn.close()
print("\nСоединение с базой данных закрыто")
def login(self): while True:
print("\n=== Система расписания университета ===") print("1. Администратор")
print("2. Преподаватель") print("3. Студент") print("4. Выход")
choice = input("Выберите роль: ")
if choice == "1": self.admin_menu()
elif choice == "2": self.teacher_login()
elif choice == "3": self.student_login()
elif choice == "4": self.close_connection() sys.exit(0)
else:

print("Неверный выбор. Пожалуйста, попробуйте снова.")
def admin_menu(self): while True:
print("\n=== Меню администратора ===") #print("\n=== Главное меню ===")
print("1. Управление факультетами") print("2. Управление кафедрами") print("3. Управление преподавателями") print("4. Управление группами") print("5. Управление студентами") print("6. Управление предметами") print("7. Управление аудиториями") print("8. Управление расписанием") print("9. Просмотр отчетов")
print("10. Выполнение функций/процедур") print("11. Выход")
choice = input("Выберите опцию: ")
if choice == "1": self.manage_entities("faculties", "факультет")
elif choice == "2": self.manage_entities("departments", "кафедра")
elif choice == "3":
self.manage_entities("teachers", "преподаватель") elif choice == "4":
self.manage_entities("student_groups", "группа") elif choice == "5":
self.manage_entities("students", "студент") elif choice == "6":
self.manage_entities("subjects", "предмет") elif choice == "7":
self.manage_entities("classrooms", "аудитория") elif choice == "8":
self.manage_schedule() elif choice == "9":
self.view_reports() elif choice == "10":
self.execute_functions() elif choice == "11":
self.current_user = None self.login()
break else:
print("Неверный выбор. Пожалуйста, попробуйте снова.")
def teacher_login(self):
print("\n=== Вход для преподавателя ===") email = input("Email: ")
password = getpass("Пароль: ") or "password"
try:
with self.conn.cursor(cursor_factory=DictCursor) as cursor: cursor.execute(
"SELECT * FROM teachers WHERE email = %s", (email,)
)
teacher = cursor.fetchone()
if teacher:
if password: