DataBase Project
Проект включает 4 файла:
- Базу данных DataBase.db
- Файл с моделями models.py
- Исполняемый файл executefile.py
- Вспомогательный файл text_base.py
В базе данных содержится 5 основных таблиц и 3 вспомогательне, служащие для связи основных таблиц
- Поля таблицы Студенты
- Первичный ключ
- ФИО
- Дата рождения
- Является старостой или нет
- Средний рейтинг
id | full_name | birth_date | headman | rating |
---|---|---|---|---|
PrimaryKey | Char | Date | Boolean | Float |
- Поля таблицы Преподаватели
- Первичный ключ
- ФИО
- Дата рождения
- ID преподаваемого предмета
id | full_name | birth_date | subject_id |
---|---|---|---|
PrimaryKey | Char | Date | ForeignKey |
Модели Преподаватель и Студент наследуются от родителя Человек 3. Поля таблицы Человек
- Первичный ключ
- ФИО
- Дата рождения
id | full_name | birth_date |
---|---|---|
PrimaryKey | Char | Date |
- Поля таблицы Предметы
- Первичный ключ
- Название предмета
id | full_name |
---|---|
PrimaryKey | Char |
- Поля таблицы Группы
- Первичный ключ
- ID старосты
- ID куратора
- Название кафедры
- Дата выпуска
id | headman_name_id | curator_id | title | end_date |
---|---|---|---|---|
PrimaryKey | ForeignKey | ForeignKey | Char | Date |
- Поля таблицы связывающей Студентов и Предметы
- Первичный ключ
- ID студента
- ID предмета
Таблица нужна для того, чтобы у студентов были предметы, которые они посещают дополнительно вне занятий со своей группой
id | student_id | subject_id |
---|---|---|
PrimaryKey | ManyToMany | ManyToMany |
- Поля таблицы связывающей Студентов и Группы
- Первичный ключ
- ID группы
- ID студента
Таблица нужна для того, чтобы знать какой студент числится в какой группе
id | group_id | student_id |
---|---|---|
PrimaryKey | ManyToMany | ManyToMany |
- Поля таблицы связывающей Группы и Предметы
- Первичный ключ
- ID группы
- ID предмета
Таблица нужна для того, чтобы знать какие предметы у группы являются основными
id | group_id | subject_id |
---|---|---|
PrimaryKey | ManyToMany | ManyToMany |
Прорамма реализована с помощью библиотеки PeeWee работающей на ORM
- Наследование моделей
- BaseModel наследуется от библиотечной Model
- Human наследуется от BaseModel
- Teacher и Student наследуются от Human
- все остальные модели наследуются от BaseModel
- Связи моделей
- Teacher обращается по внешнему ключу к Subjects
- Group обращается по внешним ключам к Teacher и Student
- Student связан ManyToMany с Subject
- Group связан ManyToMany с Subject и Student
Архитектура консольного приложения основана на обращении к пользователю с помощью нумерованных списков и реализации различных функций взависимости от его выбора
- Главная функция
main_loop
Зацикленная функция, в которой содержатся все остальные, прервется только если пользователь выберет соответствующую опцию в главном меню
main_menu()
Отображение главного меню, содержащего 3 пункта: выбор таблицы, выбор действия и выход
Возвращает три значения:
action
- номер введенного действия,table
- номер введенной таблицы,out
- булево значение для выхода/не выхода из системы
action_choice
иtable_choice
Отображение меню и выбор действия и таблицы соответственно
choice(request, qty)
Зацикленный ввод выбора пользователя, пока он не введет корректное значение
Принимает два значения:
request
- текст меню выбора,qty
- количество пунктов ответаВозращает
answer
- ответ который ввел пользователь
selection_check(answer, key, qty)
Проверяет введеный выбор пользователя на ввод удовлетворяющего числа
Принимает три значения:
answer
- ввод пользователя,key
- ключ для внесение в него информации о том, правильный ли ввод ввел пользователь,qty
- количество вариантов ответаВозращает два значения:
answer
- ответ пользователя,key
- булево значение для цикла вchoice()
redirect(action, table)
Принимает два значения:
action
иtable
- выбор пользователя и переправляет на функции, взависимости от выбора
view(table, key_for_view=True):
Функция подготавливает данные для отображения таблиц, когда пользователь функцию просмотра таблиц
Принимает
table
- для отображения определенной таблицы и необязательный аргументkey_for_view
для определения нужно ли полное отображение или не полное
draw_table(columns, model)
Отрисовка таблицы
Принимает два значения:
columns
- словарь с заголовками колонок и их шириной в символах,model
- модель для отрисовки
subject_group()
,student_group()
,student_subject()
Отрисовка вспомогательных таблиц
prepare_fields(data)
Принимает один аргумент -
data
, собирающий данные о введенных данных при добавлении в модель и пропускает черезvalidation()
- валидацию
validation(field_type, count, message)
Валидация данных введенных пользователем
Принимает три аргумента:
field_type
- тип поля, в которое вводятся данные,count
- ключ, применяющийся для разных задач,message
- сообщение, которое выводится пользователю
removal(model, model_name, table)
Удаление данных
Принимает три аргумента:
model
- модель,model_name
- имя модели,table
- номер таблицы
human_definition(model_name, name)
При удалении из одной модели может понадобится удаление и из другой. Эта функция помогает в этом, сравнивая имена в разных таблицах и при нахождении совпадений возращает
response
- булево значение нашло или нет,id_found
- ID найденного объектаПринимает два аргумента:
model_name
- модель,name
- имя человека
В файле содержатся словари с заготовленными фразами для вывода на экран.
text_base(category, n)
принимает два аргумента:category
- категория сообщения иn
- идентификатор
Тестовое задание подготовлено для Students Lab от iCode, 2021