Создание защищенного приложения для ведения учета продаж и закупок, ориентированного на малый бизнес
Проектирование модели базы данных в соответствии с предметной областью "Торговля". Разработка архитектуры системы безопасности приложения по ведению базы данных. Реализация приложения, обеспечивающего учет продаж и закупок предприятия. Способы его защиты.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 05.02.2017 |
Размер файла | 2,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Простейшей защитой от дизассемблирования является подстановка дополнительных функций. В нашем случае после функции проверки пароля вставлена ничего не значащая функция, которая нарушает логику того, что после проверки пароля происходит функция авторизации.
Также различные функции находятся в разных местах программы, что изменяет последовательность её выполнения на уровне кода.
Подобные меры позволяют запутать картину дизассемблированного кода, что усложняет применение данной атаки для злоумышленника [26].
2.9 Резервное копирование
В приложении предусмотрена возможность создания резервной копии базы данных. Для этой цели используется утилита mysqldump, которая автоматически устанавливается вместе с СУБД MySql.
Mysqldump формирует текстовый документ, содержащий все sql-команды необходимые для создания копии базы данных. Для восстановления базы данных можно также использовать утилиту mysqldumpили любое иное программное обеспечение, позволяющее автоматически выполнить sql-команды из заданного файла.
Полный код, реализующий резервное копирование, представлен в приложении А, в описании содержимого файла «interfaceadmin.cpp».
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ
Программа написана с использованием интегрированной среды разработкиQtCreator на языке программирования C++.
При разработке приложения использовалась библиотека OpenSSL.
Основной задачей разрабатываемого приложения является предоставление конечному пользователю возможности работы с базой данных посредством программного интерфейса.
С помощью приложения пользователь сможет занести необходимую первоначальную информацию (такую как имена и пароли новых пользователей приложения, наименования товаров, данные о поставщиках и так далее) и в дальнейшем использовать её при оформлении торговых операций (закупок товара, продаж товара), а также для вывода отчетности на экран.
Классы приложения, которые условно можно разделить на служебные (хэширование, шифрование и так далее), и относящиеся к работе с базой данных (номенклатура, склады и так далее) взаимодействуют между собой.
Представленная диаграмма классов отражает данное взаимодействие (рисунок 18).
Рисунок 18-Диаграмма классов
Рассмотрим пример работы с программой. Представим, что наша компания занимается продажей дизайнерских изделий ручной работы, закупаемых у индивидуального предпринимателя Совкиной Дарьи, а также букетов от компании ООО «Цветы Радости». Для продажи мы арендуем торговое место в магазине «Любимый» по адресу Джамбула 45, а также занимаемся продажами через Интернет.
Вход в программу показан на рисунке 19.
Рисунок 19-Первый вход
Изначально в программе не созданы пользователи. Для их создания нажимается кнопка «Первый вход». Создается пользователь «Администратор» со стандартным паролем «123» и следующим интерфейсом (рисунок 20).
Рисунок 20-Интерфейс администратора
Далее администратор заходит в окно «Текущие пользователи» для изменения своего пароля (рисунок 21).
Рисунок 21-Обновление пароля
После этого администратор может вернуться в свой интерфейс и создать новых пользователей (рисунок 22).
Рисунок 22-Создание новых пользователей
Чтобы создать нового пользователя, его пароль должен быть больше 3 символов, данное условие необходимо для дополнительной проверки, о чем говорилось ранее в работе (рисунок 23).
Рисунок 23-Создание новых пользователей
Созданный пользователь входит под своим логином и паролем, получая тот интерфейс, который определен ему его правами доступа (рисунок 24).
Рисунок 24-Пример произвольного пользовательского интерфейса
Войдя в свой профиль, пользователь начинает заполнять базу данных первичными данными. Например, заполняя поставщика (рисунок 25).
Рисунок 25-Окно поставщиков
Создав поставщика и занеся остальные данные в таблицу, пользователь может переходить к заведению номенклатуры в базе (рисунок 26).
Рисунок 26-Окно номенклатуры
ЗАКЛЮЧЕНИЕ
В процессе выполнения ВКР была проделана следующая работа:
1) была спроектирована модель базы данных в соответствии с предмет-ной областью «Торговля»;
2) разработана архитектура безопасности системы, создана диаграмма классов будущего приложения;
3) проанализировано взаимодействие методов защиты с работой приложения;
4) разработано приложение для работы с базой данных, внедрены методы защиты приложения.
Выполнив данную работу, в результате мы получили защищенную программу, которая позволяет осуществлять работу для выбранных пользователей с учетом их спецификации - товаровед задает наименование товаров, поставщиков, складов, производителей и т.д., а также ведает закупками. Продавец формирует продажи по имеющейся номенклатуре. Директор просматривает отчеты с информацией о доходах и расходах предприятия. Администратор может корректировать все таблицы, а также исполнять административные функции, такие как, например, создавать новых пользователей. Таким образом, была достигнута поставленная цель ВКР.
Данное приложение обеспечивает минимальный функционал для ведения торгового учета и может успешно использоваться компаниями малого бизнеса.
СПИСОК ИСПОЛЬЗОВАННЫХИСТОЧНИКОВ
1. Гайдамакин Н. А. Автоматизированные информационные системы, базы и банки данных. Вводный курс: учебное пособие/Н. А. Гайдамакин - М.: Гелиос АВР, 2002. - 368 с.
2. Вакуленко Т. Г. Анализ бухгалтерской (финансовой) отчетности для принятия управленческих решений / Т. Г. Вакуленко - СПб.: Герда, 2003. - 288 с.
3. Когаловский М. Р. Энциклопедия технологий баз данных / М. Р. Когаловский- М.: Финансы и статистика, 2002. - 800 с.
4. Савицкий Н. И. Технологии организации, хранения и обработки данных. / Н. И. Савицкий - М.: Инфра, 2001. - 232 с.
5. Куперштейн В. И. Современные информационные технологии в делопроизводстве и управлении. / В. И. Куперштейн- СПб.: Питер, 1999.
6. Андрейчиков А.В. Анализ, синтез, планирование решений в экономике. / Андрейчиков А. В. - М.: Финансы и статистика, 2002. - 368 с.
7. ГусеваТ. И.Проектирование баз данных в примерах и задачах. / Т. И. Гусева - М.:Юнити, 2000.
8. Гилула М. М. Множественная модель данных в информационных системах. /М. М. Гилула- М.: Наука, 1992.
9. Грабер М. А. Введение в SQL. / М. А. Грабер- М.: Лори, 1996. - 379 с.
10. Карпова И.П. Базы данных: Учебное пособие / И.П. Карпова. - СПб.: Питер, 2013. - 240 c.
11. Кириллов В. В. Введение в реляционные базы данных.Введение в реляционные базы данных / В.В. Кириллов, Г.Ю. Громов. - СПб.: БХВ-Петербург, 2012. - 464 c.
12. Википедия. Хэширование [Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа :https://ru.wikipedia.org/wiki/Хэширование(дата обращения 23.11.2016).
13. Википедия. Алгоритм MD5 [Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа :https://ru.wikipedia.org/wiki/MD5(дата обращения 20.11.2016).
14. Википедия. Шифрование [Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа :https://ru.wikipedia.org/wiki/ Шифрование(дата обращения 27.11.2016).
15. Практическая криптография. Лекция 9.[Электронный ресурс]. Электронный документ. - Режим доступа:http://bit.nmu.org.ua/ua/student/metod/cryptology/%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%209.pdf(дата обращения 23.10.2016).
16. Сингх С. С. Книга шифров. Тайная история шифров и их расшифровки. / Сингх С. С.М.: Аст, Астрель, 2006. 245-300 с.
17. Мао B. Современная криптография. Теория и практика. / Мао B.- .: Вильямс, 2005. 127-129 с.
18. Хабрахабр. Защита от Sql-инъекций[Электронный ресурс] : адрес статьи https://habrahabr.ru/post/148701/(дата обращения 02.12.2016).
19. Инджекшн. Подборка материалов по Sql-инъекциям [Электронный ресурс]:адрес сайта http://injection.rulezz.ru/(дата обращения 03.12.2016).
20. Хабрахабр . Sql-инъекции для начинающих [Электронный ресурс]: адрес статьиhttps://habrahabr.ru/post/148151/(дата обращения 07.12.2016).
21. Википедия. SSL [Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа :https://ru.wikipedia.org/wiki/SSL(дата обращения 01.12.2016).
22. MySQL. ConfiguringMySQL 5.5. toUseSecureConnections[Электронный ресурс] : сайт компании. - Режим доступа :https://dev.mysql.com/doc/refman/5.5/en/using-secure-connections.html(дата обращения 10.12.2016).
23. MySQL. ConfiguringMySQL 5.7. toUseSecureConnections[Электронный ресурс] : сайт компании. - Режим доступа :https://dev.mysql.com/doc/refman/5.7/en/using-secure-connections.html(дата обращения 10.12.2016).
24. Описание протоколов SSL/TLS // 3. - ООО "КРИПТО-ПРО"., 2002.103-114с.
25. Безопасность в сети.[Электронный ресурс]: адрес статьи http://www.inssl.com/about-ssl-protocol.html%20 (дата обращения 13.12.2016).
26. Википедия. Дизассемблер[Электронный ресурс] : сайт свободной энциклопедии. - Режим доступа :https://ru.wikipedia.org/wiki/Дизассемблер (дата обращения 15.12.2016).
Приложения
Приложение А. Исходный код программы
А.1 СОДЕРЖАНИЕ ФАЙЛА w_nomenklatura.h
#ifndef W_NOMENKLATURA_H
#define W_NOMENKLATURA_H
#include <QDialog>
#include"login.h"
#include <QtSql>
#include <QFileInfo>
#include <QMessageBox>
#include <QDebug>
#include <QCloseEvent>
namespaceUi {
classW_Nomenklatura;
}
classW_Nomenklatura : public QDialog
{
Q_OBJECT
public:
explicitW_Nomenklatura(QWidget *parent = 0);
~W_Nomenklatura();
private slots:
voidcloseEvent(QCloseEvent *event);
voidon_pushButton_update_clicked();
void on_pushButton_update_2_clicked();
voidon_pushButton_create_clicked();
voidon_tableView_clicked(constQModelIndex&index);
voidon_pushButton_delete_clicked();
private:
QSqlDatabasemydb;
QSqlTableModel *model_nomenkl;
Ui::W_Nomenklatura *ui;
};
#endif // W_NOMENKLATURA_H
А.2 СОДЕРЖАНИЕ ФАЙЛА w_nomenklatura.cpp
#include "w_nomenklatura.h"
#include "ui_w_nomenklatura.h"
W_Nomenklatura::W_Nomenklatura(QWidget *parent) :
QDialog(parent),
ui(new Ui::W_Nomenklatura)
{
ui->setupUi(this);
this->setWindowTitle("Номенклатура");
model_nomenkl = new QSqlTableModel(this);
model_nomenkl->setTable("Nomenklatura");
if(model_nomenkl->select())
{
// передаем данные из модели в tableView
ui->tableView->setModel(model_nomenkl);
// устанавливаем высоту строки по тексту
ui->tableView->resizeRowsToContents();
// шапка для первой колонки
model_nomenkl->setHeaderData(0, Qt::Horizontal, tr("Наименование"));
model_nomenkl->setHeaderData(1, Qt::Horizontal, tr("Единицаизм."));
model_nomenkl->setHeaderData(2, Qt::Horizontal, tr("Страна"));
model_nomenkl->setHeaderData(3, Qt::Horizontal, tr("Штрихкод"));
model_nomenkl->setHeaderData(4, Qt::Horizontal, tr("Поставщик"));
model_nomenkl->setHeaderData(5, Qt::Horizontal, tr("НДС"));
model_nomenkl->setHeaderData(6, Qt::Horizontal, tr("Производитель"));
// передачауправленияэлементуtableView
ui->tableView->setFocus();
}
//ЗаполненийQComboBox
QSqlQueryModel *postavshik;
postavshik = new QSqlQueryModel; // созданиемодели
postavshik->setQuery(tr("SELECT * FROM Postavshiki;"));// созданиезапроса
ui->postavshik->setModel(postavshik);// отображениетаблицыпозапросу
QSqlQueryModel *stavka;
stavka = new QSqlQueryModel; // созданиемодели
stavka->setQuery(tr("SELECT * FROM StavkaNDS;"));// созданиезапроса
ui->stavka_nds->setModel(stavka);// отображение таблицы по запросу
QSqlQueryModel *proizv;
proizv = newQSqlQueryModel; // создание модели
proizv->setQuery(tr("SELECT * FROM Proizvoditeli;"));// созданиезапроса
}
W_Nomenklatura::~W_Nomenklatura()
{
deleteui;
}
voidW_Nomenklatura::on_pushButton_update_clicked()
{
model_nomenkl->submitAll();
ui->label_Change->setText("");
}
voidW_Nomenklatura::on_pushButton_update_2_clicked()// отменаинтерактивныхизмененийв table view
{
model_nomenkl->revertAll();
ui->label_Change->setText("");
}
voidW_Nomenklatura::on_pushButton_create_clicked()
{
// Добавить
// Если одна из ячеек для ввода данных пуста
if (ui->name->text() == "" )
{
// предупреждение
QMessageBox::warning(this, "Ошибка",
"Не заполнено наименование, перепроверьте информацию");
// остановка дальнейшего выполнения
return;
}
// если значения указаны пользователем
else
{
QSqlRecord rec = model_nomenkl->record();
rec.setValue("Name", ui->name->text());
rec.setValue("EdinitsaIzmereniya", ui->ed_izm->text());
rec.setValue("Country", ui->strana->text());
rec.setValue("Shtrihkod", ui->shtrihkod->text());
rec.setValue("Postavshiki_Name", ui->postavshik->currentText());
rec.setValue("StavkaNDS_RazmerStavki", ui->stavka_nds->currentText().toInt());
rec.setValue("Proizvoditeli_Name", ui->proizv->currentText());
model_nomenkl->insertRecord(-1, rec);
// обнуляемполяввода
ui->name->setText("");
ui->ed_izm->setText("");
ui->strana->setText("");
ui->shtrihkod->setText("");
// выравниваем высоту строк по тексту
ui->tableView->resizeRowsToContents();
model_nomenkl->select();
}
// добавление нового родителя
}
voidW_Nomenklatura::on_tableView_clicked(constQModelIndex&index)
{
//ui->label_Change->setText("Данныебылиизменены");
}
voidW_Nomenklatura::closeEvent(QCloseEvent *event)
{
if (ui->label_Change->text()!= "")
{
event->ignore();
QMessageBoxms;
QAbstractButton *yes = ms.addButton("Да",QMessageBox::YesRole);
QAbstractButton *no = ms.addButton("Нет",QMessageBox::NoRole);
ms.setText("Данные были изменены.Закрыть, не сохраняя данные?");
ms.exec();
if(ms.clickedButton() == yes) event->accept();
}
}
voidW_Nomenklatura::on_pushButton_delete_clicked()
{
if (ui->label_Change->text()!= "")
{
QMessageBoxwarning;
warning.setText("Перед удалением строки потвердите или отмените предыдущие изменения в таблице");
warning.exec();
return;
}
QMessageBox::StandardButtonstButtonYes;
// присваиваем значение, которое выберет пользователь: "Yes" или "No"
stButtonYes = QMessageBox::question(this, "Подтверждение удаления",
"Вы действительно хотите удалить строку?",
QMessageBox::Yes | QMessageBox::No);
// проверяем нажата ли кнопка "Yes"
if(stButtonYes == QMessageBox::Yes)
{
// если нажата, то удаляем выбранную строку
model_nomenkl->removeRow(ui->tableView->currentIndex().row());
Приложение Б
Скриншоты работы программного продукта
На рисунке Б.1 проиллюстрировано окно запуска программы «Система ведения учета продаж и закупок».
Рисунок Б.1- Окно запуска программы
На рисунке Б.2 проиллюстрировано окно создания складов с уже существующими записями.
Рисунок Б.2- Окно создания складов
На рисунке Б.3проиллюстрировано окно создания складов с уже существующими записями.
Рисунок Б.3- Окно создания складов
Следующий рисунок отображает создание ставок НДС.
Рисунок Б.4- Окно создания ставок НДС
На рисунке Б.5 проиллюстрировано окно назначения цен товаров, с учетом поставщика.
Рисунок Б.5- Окно назначения цен
Следующее окно показывает закупки, сделанные кладовщиком (товароведом).
Рисунок Б.6- Окно закупок
Рисунок Б.7 показывает работу продавца (создание продаж).
Рисунок Б.7- Окно продаж
Следующие окна показывают функционалдиректора. На рисунке Б.8 изображена статистика продаж за весь перирод ( флажкив отборах не установлены).
Рисунок Б.8- Интерфейс директора, статистика продаж
Рисунок Б.9- Интерфейс директора, продажи по выбранной номенклатуре
Рисунок Б.10- Интерфейс директора, выручка по выбранной номенклатуре
Рисунок Б.11- Интерфейс директора, выручка за выбранный период
Отрицательная выручка на рисунке выше характеризуется тем, что в данный период мы оформляли закупки, чья стоимость превысила сумму продаж в данный день.
Размещено на Allbest.ru
Подобные документы
Проектирование базы данных для автоматизации деятельности по учету автотранспорта ГИБДД Вяземского района. Выбор инструментария для разработки базы данных и приложения по её ведению. Описание интерфейса и физической структуры приложения баз данных.
курсовая работа [2,2 M], добавлен 28.06.2011Разработка приложения, позволяющего автоматизировать документооборот предприятия по списанию основных средств. Мероприятия по защите и обеспечению целостности базы данных. Разработка клиентского приложения. Запросы к базе данных, руководство пользователя.
курсовая работа [700,0 K], добавлен 14.01.2015Разработка клиент-серверного приложения, определяющего объемы закупок товаров; автоматизация построения тренда с целью уменьшения затрат времени на прогнозирование объемов продаж. Программная реализация: структура базы данных, интерфейс программы.
курсовая работа [3,0 M], добавлен 23.05.2013Инфологическая и даталогическая модели предметной области. Проектирование функциональной структуры приложения, защиты базы данных. Алгоритмы решения задачи и их реализация. Разработка инструкций для сопровождающего программиста и для пользователя.
курсовая работа [2,5 M], добавлен 20.11.2013Проектирование приложения для базы данных "Оптовый склад" средней сложности с типовым пользовательским интерфейсом. Изучение особенностей ведения учета поставщиков, покупателей, продаж, движения товара на складе. Выборка, удаление таблиц из базы данных.
курсовая работа [424,1 K], добавлен 03.11.2014Логическая и физическая модели базы данных. Запрет на содержание неопределенных значений. Размещение базы данных на сервере. Реализация клиентского приложения управления базой данных. Модульная структура приложения. Основные экранные формы приложения.
курсовая работа [1,4 M], добавлен 13.06.2012Разработка Web-приложения для ООО "Научно-производственная фирма по применению информационных технологий в электрических сетях". Техническое задание, проектирование процессов, создание базы данных, разработка дизайна, тестирование и отладка сайта.
дипломная работа [3,8 M], добавлен 24.06.2011Автоматизация системы снятия показаний счетчиков энергии. Разработка базы данных и клиентского приложения для структур жилищно-коммунального хозяйства, занимающихся составлением квитанций. Описание предметной области. Тестирование клиентского приложения.
курсовая работа [953,3 K], добавлен 01.09.2016Методы проектирования базы данных по заданной предметной области с использованием CASE-средств ER/Studio и СУБД MS Access. Формирование и связывание таблиц, ввод данных. Создание экранных форм, запросов, отчетов, меню приложения. Генерация приложения.
курсовая работа [884,0 K], добавлен 08.09.2010Назначение и логическая структура системы документооборота ИП Быкова Л.Ф. Техническое задание и программное обеспечение информационной подсистемы учета закупок и реализации продовольственной продукции; создание базы данных и клиентского приложения.
дипломная работа [5,7 M], добавлен 11.06.2014