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

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

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

Лр 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:

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