Академический Документы
Профессиональный Документы
Культура Документы
Допущен(а) к защите
«_____»___________2022г.
Москва 2022
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«МИРЭА – Российский технологический университет»
РТУ МИРЭА
Утверждаю
Заведующий кафедрой
(подпись) Ф.И.О.
«___»__________ 2022г.
ЗАДАНИЕ
на выполнение курсовой проекта (работы) по дисциплине
«___»______2022 г.
Задание на курсовой проект (работу) получил
(подпись обучающегося) (Ф.И.О. обучающегося)
3
СОДЕРЖАНИЕ
ВВЕДЕНИЕ............................................................................................................................5
1 ПОСТАНОВКА ЗАДАЧ.....................................................................................................6
2 ОПИСАНИЕ ДОКУМЕНТООБОРОТА НА ОБЪЕКТЕ..................................................8
3 СТРУКТУРА БАЗЫ ДАННЫХ СИСТЕМЫ....................................................................9
4 ОПИСАНИЕ ВХОДНОГО КОНТРОЛЯ И МЕТОДИКИ ПОДДЕРЖАНИЯ
ЛОГИЧЕСКОЙ ЦЕЛОСТНОСТИ БАЗЫ ДАННЫХ.......................................................12
5 ОПИСАНИЕ АЛГОРИТМОВ И ПРОГРАММ ОБРАБОТКИ ДАННЫХ ВНУТРИ
БАЗЫ ДАННЫХ..................................................................................................................14
6 ОПИСАНИЕ АЛГОРИТМОВ И ПРОГРАММ ОБРАБОТКИ ДАННЫХ У
КЛИЕНТА И ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА..............................................15
7 ОПИСАНИЕ ПОРЯДКА РАБОТЫ С СОЗДАННЫМ ПРОГРАММНЫМ
КОМПЛЕКСОМ...................................................................................................................21
7.1 Инструкция по запуску приложения............................................................................21
7.2 Инструкция по использованию приложения...............................................................21
СПИСОК ЛИТЕРАТУРЫ...................................................................................................24
ПРИЛОЖЕНИЯ....................................................................................................................26
Приложение А......................................................................................................................27
Приложение Б.......................................................................................................................32
4
ВВЕДЕНИЕ
5
1 ПОСТАНОВКА ЗАДАЧ
6
2 ОПИСАНИЕ ДОКУМЕНТООБОРОТА НА ОБЪЕКТЕ
7
Таким образом был составлен граф документооборота, выделены основные
центры принятия решений и сформирован процесс предоставления услуг сервиса для
создания учебных карточек.
8
Таблица 3.1 – Структура таблицы " users "
Название поля Тип данных
id Integer (Primary key)
username Varchar(25)
password Text
email Varchar(60)
Таким образом первичным ключом выступает поле «id», оно также является
авто-инкрементом и используется для связи с другими таблицами.
Опишем таблицу «decks». Структура таблицы представлена в Таблице 3.2.
front Varchar(200)
back Varchar(200)
deck_id Integer (Foreign key)
type_note Varchar(20)
repeat_date timestamp
Таким образом первичным ключом выступает поле «id», оно также является
авто-инкрементом, поле «deck_id» является внешним ключом. Связь между
таблицами decks и notes – один ко многим. Поле «front» хранит содержимое передней
части карточки, поле «back» – хранит содержимое задней части карточки. Поле
«type_note» предназначено для хранения типа карточки. Поле «repeat_date» хранит
дату последнего просмотра карточки.
9
Опишем структуру таблицы «history». Данная таблица хранит изменения
других таблиц и используется для логгирования. Модель таблицы отображена в
Таблице 3.4.
tstamp timestamp
tabname text
operation text
new_val json
old_val json
item_id bigint
Таким образом первичным ключом выступает поле «id», оно также является
авто-инкрементом.
В данной главе курсовой работы была составлена модель базы данных, а также
составлено текстовое описание каждой таблицы.
10
4 ОПИСАНИЕ ВХОДНОГО КОНТРОЛЯ И МЕТОДИКИ
ПОДДЕРЖАНИЯ ЛОГИЧЕСКОЙ ЦЕЛОСТНОСТИ БАЗЫ
ДАННЫХ
11
DELETE ON notes FOR EACH ROW EXECUTE PROCEDURE
change_trigger();
12
5 ОПИСАНИЕ АЛГОРИТМОВ И ПРОГРАММ ОБРАБОТКИ
ДАННЫХ ВНУТРИ БАЗЫ ДАННЫХ
13
6 ОПИСАНИЕ АЛГОРИТМОВ И ПРОГРАММ ОБРАБОТКИ
ДАННЫХ У КЛИЕНТА И ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА
14
Далее приведем скриншоты основных элементов пользовательского
интерфейса.
При запуске приложения появляется приветственное окно.
15
Рисунок 6.3 – Страница с формой регистрации
16
Рисунок 6.4 – Главное меню
На данной странице пользователь может создать колоду, перейти на страницу
«Добавить карточки», перейти на страницу «Учить», а также выйти из аккаунта.
Пользователь может переименовать или удалить колоду, нажав на выпадающий
список «Редактировать».
17
Пользователь выбирает колоду, в которую будет добавлена карточка, тип карточки,
заполняет лицевую и оборотную стороны. Описанная страница представлена на
рисунке ниже.
18
Рисунок 6.10 – Отображение карточки в режиме тренировки
19
Рисунок 7.1.1 – Запуск приложения
20
user
Пароль Поле, заполняемое при регистрации и
авторизации, данные записываются в таблицу
user
Создать Кнопка, которая осуществляет функционал
добавления колоды или карточки в таблицы
decks и notes
Название колоды Поле, заполняемое при создании колоды,
данные записываются в таблицу decks
Колоды Кнопка, переход к одноименной странице
Добавить карточку Кнопка, переход к одноименной странице
Учить Кнопка, переход к одноименной странице
Переименовать Кнопка, при нажатии изменяет название колоды
или карточки на введенные пользователем
Удалить Кнопка, при нажатии удаляет колоду или
карточку из колоды
Выбор колоды Поле с выбором колоды
Тип карточки Поле с выбором типа карточки
Лицевая сторона Заполняемое поле, данные будут записаны в
таблицу notes
Оборотная сторона Заполняемое поле, данные будут записаны в
таблицу notes
Учить карточки Кнопка, запускающая обучающий режим
Выйти Кнопка, при нажатии пользователь выйдет из
аккаунта
Определим системные требования приложения. Они отображены в Таблице
7.2.2.
СПИСОК ЛИТЕРАТУРЫ
22
11. Скляр А.Я. Введение в InterBase. - М: Горячая линия –Телеком, 2002. -
517 с.
12. Руководство по языку SQL СУБД Firebird 3.0.
https://www.ibase.ru/files/firebird/Firebird_3_0_Language_Reference_RUS.pdf
13. Урман С. Oracle 8. Программирование на языке PL/SQL - М: Лори, 2000.
– 606 с.
14. Урман Скотт, Хардман Рон. Oracle Database 10g. Программирование на
языке PL/SQL. - М: Лори 2010 - 792 с.
15. Фейерштейн С., Прибыл Б. Oracle PL/SQL для профессионалов. - Спб:
Питер, 2011. - 800 с.
16. Хардман Рон, МакЛафлин Майкл. Oracle Database PL/SQL.
Рекомендации эксперта. -М: Лори 2014. - 450 с.
17. Дэвидсон Л. Проектирование баз данных на SQL Server 2000. - М:
Бином. Лаборатория Базовых Знаний , 2003. – 680 с.
18. Архангельский А.Я., Тагин М.А. Программирование в C++ Builder 6 и
2006. . - М: "Бином-Пресс", 2007. - 992 стр.
19. Архангельский А.Я. Программирование в С++ Builder. М.: Бином, 2007 -
1182 c.
20. Архипенков С., Голубев Д., Максименко О. ХРАНИЛИЩА ДАННЫХ.
От концепции до внедрения - М.: ДИАЛОГ-МИФИ, 2002.
21. Барсегян А., Куприянов М., Холод И., Степаненко В. Методы и модели
анализа данных: OLAP и Data Mining. – СПб.: БХВ-Петербург, 2004.
22. Спирли Эрик - “Корпоративные хранилища данных. Планирование,
разработка и реализация“. - 2001. - 400с.
23. Федоров А., Елманова Н. Введение в OLAP-технологии Microsoft. –М.:
Диалог-МИФИ, 2002. – 268 с.
24. Codd E.F., Codd S.B., and Salley C.T. "Providing OLAP (On-line Analytical
Processing) to User-Analysts: An IT Mandate". Codd & Date, Inc. 1993.
25. Скляр А.Я. Технология обработки и хранения данных (sql серверы и
хранилища данных). Учебное пособие. Электронное издание. М.; МИРЭА. 2017, 181
с.
23
26. Ян Робинсон, Джим Вебер, Эмиль Эифрем. Графовые базы данных
Новые возможности для работы со связанными данными. – М.: ДМК Пресс, 2016, 256
с.
ПРИЛОЖЕНИЯ
26
tstamp timestamp DEFAULT now(),
tabname text,
operation text,
new_val json,
old_val json,
item_id int8
);
Приложение Б
app = Flask(__name__)
app.secret_key = 'replace later'
# Configure database
app.config['SQLALCHEMY_DATABASE_URI']='postgresql://
lxwvizyttgkgqf:8bb45888158e3468b011f6742ea3a84c91494679be1155
bc5ff58e0aa72f5bf2@ec2-54-228-125-183.eu-west-
1.compute.amazonaws.com:5432/d7eb449u08v2c7'
28
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
@login.user_loader
def load_user(id):
return User.query.get(int(id))
reg_form = RegistrationForm()
deck_form = DeckForm()
user_id = int(current_user.get_id())
30
# Способ отобразить колоды
# print(User.query.get(3).decks[0].deck_name)
return render_template("decks.html", form=deck_form,
user_decks=user_decks)
@app.route("/delete", methods=['POST'])
def delete():
# Delete deck
if request.form.get('delete'):
deck_name = request.form.get('delete')
deck_object =
Deck.query.filter_by(deck_name=deck_name).first()
# print()
u = db.session.get(Deck, deck_object.id)
db.session.delete(u)
db.session.commit()
# return "test"
return redirect(url_for('decks'))
note_form = NoteForm()
user_id = int(current_user.get_id())
print(User.query.get(user_id).decks)
user_decks = [deck.deck_name for deck in
User.query.get(user_id).decks]
@app.route("/user/<string:name_deck>", methods=['GET',
'POST'])
def uniq_deck(name_deck):
if not current_user.is_authenticated:
flash('Please login', 'danger')
return redirect(url_for('login'))
if request.method == "POST":
name_deck = request.form.get('deck_name')
deck_id =
Deck.query.filter_by(deck_name=name_deck).first().id
notes = Note.query.filter_by(deck_id=deck_id).all()
notes_front = [note.front for note in notes]
notes_back = [note.back for note in notes]
return render_template("learn_deck.html",
notes_front=notes_front, notes_back=notes_back,
Deck_name=name_deck)
user_id = int(current_user.get_id())
user_decks = [deck.deck_name for deck in
User.query.get(user_id).decks]
return render_template("learn.html",
user_decks=user_decks)
@app.route("/logout", methods=['GET'])
def logout():
if not current_user.is_authenticated:
flash('Please login', 'danger')
return redirect(url_for('login'))
# Logout user
logout_user()
flash('You have logged out successfully', 'success')
return redirect(url_for('login'))
def get_notes_value(name_deck):
deck_id =
Deck.query.filter_by(deck_name=name_deck).first().id
notes = Note.query.filter_by(deck_id=deck_id).all()
notes_front = [note.front for note in notes]
notes_back = [note.back for note in notes]
return (notes_front, notes_back)
name_deck = request.form.get('deck_name')
notes_front, notes_back = get_notes_value(name_deck)
return json.dumps({'notes_front':
notes_front[note_number_next],
'notes_back':
notes_back[note_number_next],
'notes_number': note_number_next})
return json.dumps({'notes_front':
notes_front[note_number_prev],
'notes_back':
notes_back[note_number_prev],
'notes_number': note_number_prev})
34
if __name__ == '__main__':
app.run(debug=True)
35