Создание защищенного приложения для ведения учета продаж и закупок, ориентированного на малый бизнес

Проектирование модели базы данных в соответствии с предметной областью "Торговля". Разработка архитектуры системы безопасности приложения по ведению базы данных. Реализация приложения, обеспечивающего учет продаж и закупок предприятия. Способы его защиты.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.