Мобильное приложение "Магазин строительных инструментов Мастак"

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.05.2023
Размер файла 7,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования «БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ

ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ»

Факультет Информационных технологийКафедра Информационные системы и технологии

Специальность 1-98 01 03 “Программное обеспечение информационной безопасности мобильных систем”

Специализация Инженер-программист

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОМУ ПРОЕКТУ НА ТЕМУ:

«Мобильное приложение “магазин строительных инструментов Мастак”»

Выполнил студент Макрица Фёдор Николаевич

Руководитель проектаст. преподаватель Блинова Е.А.

Минск 2023

Содержание

Введение

1.Постановка задачи и аналитический обзор литературы

1.1 Приложение «Wildberries»

1.2 Приложение «Ozon»

1.3Выводы по главе «Обзор аналогов приложений»

2.Проектирование информационной системы

2.1 Локальная и глобальная база данных

2.2 Проектирование мобильного приложения

2.3 Проектирование веб-сервера

2.4Вывод по главе «Проектирование информационной системы»

3.Разработка информационной системы

3.1Разработка базы данных

3.2 Разработка мобильного приложения

3.3 Разработка веб-приложения

3.2Вывод по главе «Разработка информационной системы»

4. Обеспечение безопасности информационной системы

Заключение

Список использованных источников

Приложение А

Приложение B

Приложение С

Введение

С каждым годом интернет-технологии занимают все более важное место в повседневной жизни людей. Сейчас подавляющее большинство магазинов различных направлений имеют свои онлайн-версии. Это позволяет наиболее эффективным образом продавать и доставлять товары, а также удобно хранить данные о продажах. В сети можно купить практически все, но остается множество магазинов, которые только начинают свой онлайн-путь. В этом контексте можно отметить такие ниши рынка, как продажа профессионального строительного инструмента и оборудования. Мобильное приложение "Мастак" представляет собой магазин, специализирующийся на продаже строительных инструментов.

Мобильно приложение будет сделано с помощью Android Studio на языке Java. Так же будет использован Node.js для создания сервера на котором будет храниться база данных.

Будет возможность работать при отключении интернета. Приложение будет держать всю информацию, а после подключения интернета информация будет перенесена в базу данных и сохранена.

Таким образом, данное приложение очень полезно для многих людей, которые организовывают мероприятия или же какие-то собрания.

1.Постановка задачи и аналитический обзор литературы

1.1 Приложение «Wildberries»

Важным этапом создания различных проектов является ознакомление с разных литературных источников и аналитический разбор.

Я проанализировал несколько разных программных средств связанных с моей тематикой. 

Приложение Wildberries позволяет совершать интернет-покупки одежды, обуви и аксессуаров. У магазина Wildberries есть и свое приложение для смартфонов, которое очень удобно использовать. Самый большой плюс этого приложения - это простой и понятный интерфейс. В плане навигации и поиска товаров, приложение Wildberries оставляет только положительные эмоции. Большой ассортимент товаров, простая и понятная фильтрация, наличие акций и скидок - все это делает приложение Wildberries одним из лучших в виртуальном мире.

Рис. 1.1 - Мобильное приложение.

Данное приложение так же имеет и десктопнаю версию, которая показана на рисунке ниже (рисунок 1.2).

Рис. 1.2 - Версия для компьютеров.

1.2 Приложение «Ozon»

Есть еще более удобное приложение под название «Ozon».

Это многофункциональный интернет-магазин, который предлагает широкий ассортимент товаров, начиная от бытовой техники, продуктов питания, книг и заканчивая парфюмерией и косметикой. Один из недостатков данный магазин - это не слишком удобный интерфейс в приложении. Несмотря на это, если вы знаете, что хотите купить, на Ozon можно быстро найти то, что вам нужно, настроив при этом фильтры так, как вы считаете удобным. Также на сайте и в приложении Ozon есть множество акций и скидок, которые могут сохранить ваш бюджет. Удобной функцией является возможность оплаты заказа при получении товара и приложение может работать на разных телефонах с разными разрешениями экрана.

Рис. 1.3 - Ozon - дизайн под телефон.

Рис. 1.4 - Интерфейс пользователя и администратора.

В моей программе будут сохранены товары в избранное, которые можно будут удалять. Это позволит не тратить время на поиск. Пользователи могут создать и авторизоваться в свою учетную запись.

Выводы по главе «Обзор аналогов приложений»

В данной главе были показаны два популярных приложения, которые являются аналогами приложения «Мастак»: «Wildberries» и «Ozon». В результате подытожим сравнения.

Таким образом, сравнение этих двух магазинов показало, что у каждого из них есть свои достоинства и недостатки. Wildberries позволяет с легкостью найти и заказать желаемый товар, обеспечивая при этом легкую навигацию, множество скидок и акций. Ozon же направлен на усовершенствование своего сервиса и расширение ассортимента товаров. Несмотря на особенности каждого магазина, оба из них предлагают высокое качество обслуживания. Выбор между ними зависит только от потребностей и предпочтений покупателя.

2. Проектирование информационной системы

2.1 Локальная и глобальная база данных

Задачей курсового проекта создать приложение, которое будет иметь заданный функционал:

Просмотр товара

Заказ товара

Управление заказанных товаров в корзине клиента

Авторизация и регистрация аккаунта

В базе данных данного приложения созданы для использования 3 таблицы. Скрипт создания БД и таблиц находится в Приложении А. Ниже представлена их характеристика.

Схема базы данных представлена в таблице 2.1 - 2.9.

Таблица 2.1- схема таблицы Users.

Имя атрибута

Типы данных

Назначение

id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

name

String

Имя пользователя

password

String

Пароль пользователя в хешированном виде

isAdmin

Bool

Определяет права пользователя

image

String

Изображение пользователя

В таблице «Users» содержится информация для авторизации пользователей. Столбцы данной таблицы:

id - уникальный идентификатор, который придумывает сам пользователь, является первичным ключом;

name - строковый тип данных, максимальная длина 20;

password - строковый тип данных, максимальной длины 12, хешируется на сервере и на мобильном приложении с помощью bcrypt

isAdmin - булевый тип данных, определяющий права доступа

Image - строковый тип данных, определяющий изображение пользователя(Приложение В);

Таблица 2.2 - схема таблицы Favorite.

Имя атрибута

Тип данных

Назначение

Favorite_id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

User_id

Integer

Идентификатор пользователя

Product_id

Integer

Идентификатор мероприятия

В таблице «Favorite» содержатся пользователи и товары, на которые они хотят приобрести. Столбцы данной таблицы:

id - целочисленный тип данных, первичный ключ, имеется AUTOINCREMENT позволяющий автоматически ставит id;

user_id - целочисленный тип данных, вторичный ключ, ссылается на первичный ключ таблицы Users, служит для связи этих таблиц;

event_id - целочисленный тип данных, вторичный ключ, ссылается на первичный ключ таблицы Product, служит для связи этих таблиц;

Таблица 2.3 - схема таблицы Product.

Имя атрибута

Тип данных

Назначение

id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

product_name

String

Название товара

price

Double

Цена товара

quantity

Integer

Количество товара

supplier

String

Поставщик товара

image

String

Изображение товара

category

String

Категория товара

В таблице «Product» содержится информация о товаров. Столбцы данной таблицы:

id - целочисленный тип данных, первичный ключ, имеется AUTOINCREMENT позволяющий автоматически ставит id товара;

product_name - строковый тип данных, не допускается null;

price - строковый тип данных;

quantity - целочисленный тип данных;

supplier - содержит дату проведения мероприятия, тип данных дата, неуникальное значение, не допускается null, удаляется автоматически после истечения времени;

image - строковый тип данных, содержит информацию о изображении;

category - строковый тип данных;

Таблица 2.4 - схема таблицы Ordering.

Имя атрибута

Тип данных

Назначение

ordering_id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

order_number

String

Номер заказа

order_date

Double

Дата заказа

status

Integer

Статус заказа

name_on_card

String

Имя карточки (имя на карточке)

card_number

String

Номер карты

expiration_date

Date

дата истечения срока действия

user_id

Integer

Идентификатор пользователя

product_id

Integer

Идентификатор мероприятия

Таблица 2.5 - схема таблицы Cart.

Имя атрибута

Тип данных

Назначение

user_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

product_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с product и ordering.

Таблица 2.6 - схема таблицы History.

Имя атрибута

Тип данных

Назначение

history_id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

user_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

product_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

Таблица 2.7 - схема таблицы Shipping.

Имя атрибута

Тип данных

Назначение

shipping_id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

address

String

Адрес пользователя

city

String

Город пользователя

country

String

Страна пользователя

zip

String

Почтовый индекс

phone

String

Номер телефона

user_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

product_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

Таблица 2.8 - схема таблицы poster.

Имя атрибута

Тип данных

Назначение

poster_id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

image

String

Имя картинки для poster

Таблица 2.9 - схема таблицы review.

Имя атрибута

Тип данных

Назначение

review_id

Integer

Первичный ключ. Определяет уникальный идентификатор записи.

user_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

product_id

Integer

Вторичный ключ. Определяет уникальный идентификатор cart с user и ordering.

feedback

Varchar (150)

обратная связь

rate

Float (11,1)

Оценка

review_date

Date

Дата Оценки

Рис. 2.4 - структура базы данных

В таблице Users будут все данные о зарегистрированных пользователях: их имя и фамилия, пароль, который они же смогут поменять, если решат, что он не надежный и их права, которые будут отвечать, могут ли пользователи добавлять товар.

В таблице Favorite содержатся пользователи и товары, на которые они хотят приобрести.

В таблице Product содержаться информация о товаре.

2.2 Проектирование мобильного приложения

В данной курсовой работе необходимо было разработать приложение, позволяющее пользователям совершать онлайн покупки инструментов.

Если пользователь запускает приложение на устройстве в первый раз, то открывается страница с именем магазина рисунок 2.5, а затем идет переход к экрану регистрации рисунок 2.6.

Рис. 2.5 - Пользователь запускает приложение

Рис. 2.6 - Страница регистрации

На этом экране есть можно зарегистрироваться или же создать свой аккаунт. Для регистрации пользователю нужно возможность ввести email и пароль. Если же email, который вводит пользователь нету в базе данных, то выскакивает соответствующее сообщение. По умолчанию у всех пользователей нету прав для добавления товаров, права выдает администратор. Для создания нового аккаунта нужно будет нажать на “Создать свой ученую запись” и приложение перейдет на страницу создания аккаунта рисунок 2.7.

Рис 2.7 - Страница создания аккаунта

мобильное приложение магазин

Пользователь необходимо ввести имя, почту и пароль, который должен быть не менее 8 символов. При введении пользователем электронной почты, которая уже есть приложение выдаст сообщение о том, что такой пользователь существует. После успешной пройденной регистрации пользователь переходит на страницу со всеми товарами рисунок 2.8.

Рис 2.8 - Страница со всеми товарами

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

Рис. 2.9 - диаграмма использования мобильного приложения для пользователей

2.3 Проектирование веб-сервера

Веб-приложение -- клиент-серверное приложение, в котором клиент взаимодействует с веб-сервером при помощи браузера. Логика веб-приложения распределена между сервером и клиентом, хранение данных осуществляется, преимущественно, на сервере, обмен информацией происходит по сети. Одним из преимуществ такого подхода является тот факт, что клиенты не зависят от конкретной операционной системы пользователя, поэтому веб-приложения являются межплатформенными службами.

Веб приложение состоит из двух компонентов: веб сервера и клиента. Веб. Веб сервер имеет REST архитектуру и осуществляет взаимодействие с базой данных. Сервер содержит в себе реализованные сервисы для взаимодействия с каждой сущностью базы данных.

При обращении к серверу по заданному маршруту и определенному HTTP методу сервер будет определять с какой сущностью базы данных необходимо взаимодействовать и какие действия над данными необходимо будет произвести.

При помощи HTTP метода GET сервер будет возвращать данные клиенту, ссылаясь на аргументы в запросе, как на условие для выборки данных. Метод POST в свою очередь позволяет передать данные на сервер для последующей обработки. Метод PUT позволяет обновить соответствующие данные, переданные с клиента. Метод DELETE удаляет с базы данных заданную запись.

Веб-приложение состоит их двух частей: клиент и сервер. Клиент в свою очередь выступает в роле интерфейса веб-приложения.

Вывод по главе «Проектирование информационной системы»

В данной главе было рассмотрено проектирование каждого отдельного компонента приложения.

По части мобильного приложения был определен основной функционал приложения, также были разработаны диаграмма вариантов использования приложения и описаны варианты использования программного средства.

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

При проектировании серверного приложения был определен архитектурный стиль взаимодействия между сервером и клиентом.

3. Разработка информационной системы

Для разработки приложений курсового проекта были использованы следующие технические средства:

SQLite - компактная встраиваемая реляционная база данных.

MySQL - свободная реляционная система управления базами данных.

SQL - декларативный язык программирования, применяемый для создания, модификации, и управления данными в РБД.

Android Studio - интегрированная среда разработки для работы с платформой Android.

Visual Studio Code - редактор исходного кода.

Java - строго типизированный объектно-ориентированный язык программирования.

Node.js -- это платформа с открытым исходным кодом для работы с языком JavaScript.

Postman - набор инструментов тестирования API.

3.1 Разработка базы данных

Для хранения данных на телефоне будет использоваться встраиваемая СУБД SQLite. Для сервера будет использована СУБД MySQL.

Также были созданы функции и хранимые процедуры, для взаимодействия с таблицами базы данных.

CREATE TABLE `cart` (

`user_id` int(11) NOT NULL,

`product_id` int(11) NOT NULL,

FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `favorite` (

`favorite_id` int(11) NOT NULL,

`user_id` int(11) DEFAULT NULL,

`product_id` int(11) DEFAULT NULL,

FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `history` (

`history_id` int(11) NOT NULL,

`user_id` int(11) DEFAULT NULL,

`product_id` int(11) DEFAULT NULL,

FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `ordering` (

`ordering_id` int(11) NOT NULL,

`order_number` int(11) DEFAULT NULL,

`order_date` date DEFAULT NULL,

`status` text,

`name_on_card` text,

`card_number` text,

`expiration_date` date DEFAULT NULL,

`user_id` int(11) DEFAULT NULL,

`product_id` int(11) DEFAULT NULL,

FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `poster` (

`poster_id` int(11) NOT NULL,

`image` text NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `poster` (`poster_id`, `image`) VALUES

(4, 'storage_poster\\poster.jpg'),

(5, 'storage_poster\\poster1.jpg'),

(6, 'storage_poster\\poster2.jpg');

CREATE TABLE `product` (

`id` int(11) NOT NULL,

`product_name` text,

`price` double(11,2) NOT NULL,

`quantity` int(11) NOT NULL,

`supplier` text NOT NULL,

`image` text NOT NULL,

`category` text NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `review` (

`review_id` int(11) NOT NULL,

`user_id` int(11) DEFAULT NULL ,

`product_id` int(11) DEFAULT NULL,

`feedback` varchar(150) DEFAULT NULL,

`rate` float(11,1) DEFAULT NULL,

`review_date` date DEFAULT NULL,

FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `shipping` (

`shipping_id` int(11) NOT NULL,

`address` text,

`city` text,

`country` text,

`zip` text,

`phone` text,

`user_id` int(11) DEFAULT NULL,

`product_id` int(11) DEFAULT NULL,

FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user` (

`id` int(11) NOT NULL,

`name` text NOT NULL,

`email` text NOT NULL,

`password` text NOT NULL,

`gender` text NOT NULL,

`age` int(11) NOT NULL,

`image` text NOT NULL,

`isAdmin` tinyint(1) NOT NULL DEFAULT '0'

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Листинг 1 - база данных на сервере

CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteUser`(IN userId INT)

BEGIN

DELETE FROM user WHERE id = userId;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `getUserById`(IN userId INT)

BEGIN

SELECT id, name, email, password, IF(isAdmin=1, 'true', 'false') AS isAdmin

FROM user

WHERE id = userId;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `getUserIDByEmail`(IN userEmail VARCHAR(255))

BEGIN

SELECT id FROM user

WHERE email = userEmail;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `getUsers`(IN limitNum INT, IN offsetNum INT)

BEGIN

SELECT * FROM user

LIMIT limitNum

OFFSET offsetNum;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_user`(

IN u_name VARCHAR(255),

IN u_email VARCHAR(255),

IN u_password VARCHAR(255),

IN u_gender VARCHAR(10),

IN u_age INT(11),

IN u_image LONGTEXT

)

BEGIN

INSERT INTO user(name, email, password, gender, age, image)

VALUES(u_name, u_email, u_password, u_gender, u_age, u_image);

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_user`(

IN user_name VARCHAR(255),

IN user_email VARCHAR(255),

IN user_id INT)

BEGIN

UPDATE user

SET name = user_name,

email = user_email

WHERE id = user_id;

END

CREATE DEFINER=`root`@`localhost` PROCEDURE `updateUserPasswordByID`(IN userID INT, IN userPassword VARCHAR(255))

BEGIN

UPDATE user

SET password = userPassword

WHERE id = userID;

END

Листинг 2 - Хранимые процедуры

3.2 Разработка мобильного приложения

Мобильное приложение было реализовано в среде разработки - Android Studio. Для написания приложения был использован язык программирования Java.

Графическая структура проекта представлена на рисунке 3.

Рис. 3 - Графическая структура проекта

Для взаимодействия мобильного приложения и сервера используется Retrofit. Для его подключения в build.gradle подключаем нужные библиотеки как показано на рисунке 3.1.

Рис. 3.1 - Подключение библиотек для Retrofit.

С помощью класса RetrofitClient мы настраиваем соединения для дальнейшей работы. В методе RetrofitClient помещаем путь, по которому будет подключаться к серверу наше приложение. В данном случае, наш путь будет прописан так: http://наше_ip_адрес:порт_сервера.

Рис. 3.2 - Метод для подключения к серверу

Рис. 3.3 - RetrofitClient для подключения к серверу

Сам же Retrofit реализован в файле Api. В нем реализован интерфейс запросов и классы необходимые для работы с запросами (POST, DELETE, GET, PUT).

public interface Api {

@POST("users/register")

Call<RegisterApiResponse> createUser(@Body User user);

@GET("users/login")

Call<LoginApiResponse> logInUser(@Query("email") String email, @Query("password") String password);

@DELETE("users/{userId}")

Call<ResponseBody> deleteAccount(@Header("authorization") String token , @Path("userId") int userId);

@Multipart

@PUT("users/upload")

Call<ResponseBody> uploadPhoto(@Header("authorization") String token , @Part MultipartBody.Part userPhoto, @Part("id") RequestBody userId);

@PUT("users/info")

Call<ResponseBody> updatePassword(@Header("authorization") String token, @Query("password") String password, @Query("id") int userId);

@Multipart

@POST("products/insert")

Call<ResponseBody> insertProduct(@Header("authorization") String token, @PartMap Map<String, RequestBody> productInfo, @Part MultipartBody.Part image);

@GET("users/getImage")

Call<Image> getUserImage(@Query("id") int userId);

@GET("users/otp")

Call<Otp> getOtp(@Header("authorization") String token, @Query("email") String email);

@GET("products")

Call<ProductApiResponse> getProductsByCategory(@Query("category") String category, @Query("userId") int userId,@Query("page") int page);

@GET("products/search")

Call<ProductApiResponse> searchForProduct(@Query("q") String keyword, @Query("userId") int userId);

@POST("favorites/add")

Call<ResponseBody> addFavorite(@Body Favorite favorite);

@DELETE("favorites/remove")

Call<ResponseBody> removeFavorite(@Query("userId") int userId, @Query("productId") int productId);

@GET("favorites")

Call<FavoriteApiResponse> getFavorites(@Query("userId") int userId);

@POST("carts/add")

Call<ResponseBody> addToCart(@Body Cart cart);

@DELETE("carts/remove")

Call<ResponseBody> removeFromCart(@Query("userId") int userId, @Query("productId") int productId);

@GET("carts")

Call<CartApiResponse> getProductsInCart(@Query("userId") int userId);

@POST("history/add")

Call<ResponseBody> addToHistory(@Body History history);

@DELETE("history/remove")

Call<ResponseBody> removeAllFromHistory();

@GET("history")

Call<HistoryApiResponse> getProductsInHistory(@Query("userId") int userId, @Query("page") int page);

@POST("review/add")

Call<ResponseBody> addReview(@Body Review review);

@GET("review")

Call<ReviewApiResponse> getAllReviews(@Query("productId") int productId);

@GET("posters")

Call<NewsFeedResponse> getPosters();

@GET("orders/get")

Call<OrderApiResponse> getOrders(@Query("userId") int userId);

@POST("address/add")

Call<ResponseBody> addShippingAddress(@Body Shipping shipping);

@POST("orders/add")

Call<ResponseBody> orderProduct(@Body Ordering ordering);

}

Листинг 3 - создание методов POST, DELETE, PUT и GET в файле Api

Если пользователь хочет создать учетную запись в классе SignUpActivity, то при вводе корректных данных вызывается POST метод isLoggedIn у IRetrofit. Тем самым он передает данные на сервер, где сервер уже выполняет данный запрос и заполняет или же нет данные в таблицу.

Рис. 3.4 - выполнения метода POST для регистрации

Класс SignUpActivity служит отправной точкой всей программы. От сюда пользователь выбирает что ему нужно (регистрация или авторизация) и выполняется соответствующее действие.

3.3 Разработка веб-приложения

Веб-сервер разработан с использование языка программирование JavaScript и среды исполнения NodeJS. NodeJS -- программная платформа, основанная на движке V8 (компилирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения.

Веб сервер разработан с использованием архитектуры REST. Каждая программная сущность определена в отдельный модуль. В общем случае каждая программная сущность описывается тремя компонентами: контроллер, сервис и роутер. Такое разделение позволяет независимо разрабатывать каждый компонент модуля по отдельности, а также позволяет относительно легко применить юнит тестирование к программному модулю.

Для создания курсового проекта использовался фреймворк Express. Данный фреймворк позволяет более удобным образом сконфигурировать и создать HTTP сервер, а также позволяет гибко настраивать маршрутизацию.

Роутер служит для описания маршрутов к конечным точкам веб-сервера (рисунок 3.5). Контроллер осуществляет передачу параметров запроса и обработку результата ответа. Сервис нужен для выполнения бизнес логики приложения.

Рис. 3.5 - структура веб-сервера

Роутер создается с помощью фреймворка Express. Для создания конечные точек необходимо вызвать нужный HTTP метод роутера и передать некоторые параметры: путь к конечной точке и функцию, которая будет срабатывать при отправке запроса по этому пути. Второй аргумент, который является ссылкой на функцию оборачивается в специальный класс обертку, который предназначен для обработки исключений и генерации ответов при ошибках.

Рис. 3.6 - Контроллер веб-сервера

Вывод по главе «Разработка информационной системы»

В данной главе было рассмотрена разработка каждого отдельного компонента приложения.

На первоначальном этапе были рассмотрены технологии, которые применены для разработки курсового проекта.

Вторым этапом была разработка структуры базы данных на стороне сервера и клиента.

Третьим этапом стала разработка мобильного приложения, где была представлена графическая структура приложения, рассмотрены некоторые классы и их методы, в частности.

Четвертый этап - это разработка веб-приложения, где была представлена графическая структура веб-сервера и веб-клиента, рассмотрены некоторые классы и их методы.

4. Обеспечение безопасности информационной системы

Для обеспечения защиты персональных данных пользователей применялись методы хеширования и криптографии. Пароли пользователей информационной системы хранятся в базе данных в хешированном виде. Хеширование - это процесс преобразования входной строки переменной длины в выходную строку фиксированной длины, называемой хеш-кодом или дайджестом сообщения. Процесс хеширования реализуется путем использования криптографической хеш-функции (Приложение B). Хеширование паролей не позволяет злоумышленнику получить доступ к аккаунту пользователя информационной системы.

В данном приложении реализована функция хеширование пароля с помощью bcrypt. Он надежнее чем MD5, так как не может из хешированных данных получить пароль. Вместо этого он сравнивает два разных хеша и смотрит на совпадение. Если хеши совпадают, значит пароль введен правильно.

Заключение

Целью моего курсового проекта было предоставить пользователям возможность легко и удобно покупать товары.

Были решены следующие поставленные задачи:

обзор аналогов;

В результате было рассмотрено 2 приложения и были выявлены их положительные и отрицательные стороны. Эта информация была использована для улучшения функционала приложения и пользовательского интерфейса.

проектирование приложения;

Был спроектирован каждый отдельный компонент приложения. В мобильном и веб-приложении был определен основной функционал, также была разработана диаграмма вариантов использования. При проектировании базы данных, были определены необходимые таблицы и разработана схема базы данных. В серверном приложении был определен архитектурный стиль взаимодействия между клиентом и сервером, формат передаваемых данных и HTTP методы для работы с серверной частью.

реализация приложения;

Данная задача была реализована с помощью следующих технических средств: MySQL, сред разработки Android Studio и Visual Studio Code, языков программирования JavaScript, Java, библиотеки Retrofit 2.

Были реализованы базы данных на стороне сервера и клиента.

При решении данной задачи была достигнута поставленная цель, и был создан проект Мастак, который включает в себя android-клиент, веб-клиент и веб-сервер.

Список использованных источников

Retrofit 2. Upgrade Guide [Электронный ресурс] / futurestud.io. - Режим доступа: https://futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9

Архитектура REST [Электронный ресурс] - habr.com - Режим доступа: https://habr.com/ru/post/38730/

Solutions on Stackoverflow [Электронный ресурс] - Режим доступа: https://stackoverflow.com.

«Сайт Александра Климова» по Android [Электронный ресурс] - Режим доступа: http://developer.alexanderklimov.ru

Simple POST request on Android Kotlin using Retrofit [Электронный ресурс] - Режим доступа: https://medium.com/swlh/simplest-post-request-on-android-kotlin-using-retrofit-e0a9db81f11a

Приложение А

const express = require('express')

const bodyParser = require('body-parser')

require('dotenv').config();

const app = express()

// User can read pictures from it

app.use('/storage_user', express.static('storage_user'));

app.use('/storage_product', express.static('storage_product'));

app.use('/storage_poster', express.static('storage_poster'));

// Import my file

const userRouter = require('./api/routes/users')

const productRouter = require('./api/routes/products')

const favoriteRouter = require('./api/routes/favorites')

const cartRouter = require('./api/routes/carts')

const historyRouter = require('./api/routes/history')

const reviewRouter = require('./api/routes/review')

const posterRouter = require('./api/routes/posters')

const addressRouter = require('./api/routes/address')

const orderRouter = require('./api/routes/orders')

const port = 3000

// Middleware

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json())

// Use methods from my file

app.use('/users', userRouter)

app.use('/products',productRouter)

app.use('/favorites',favoriteRouter)

app.use('/carts',cartRouter)

app.use('/history',historyRouter)

app.use('/review',reviewRouter)

app.use('/posters',posterRouter)

app.use('/address',addressRouter)

app.use('/orders',orderRouter)

app.get('/', (req, res) => {

res.send(`

<h1>Главная страница</h1>

<ul>

<li><a href="/users">Пользователи</a></li>

<li><a href="/products/all">Продукты</a></li>

<li><a href="/orders/allrouter">Заказы</a></li>

<li><a href="/review/full">Отзывы</a></li>

</ul>

`);

});

// Make my server work on port 3000 and listen when user use it

app.listen(port, () => console.log("Server Started"))

console.log("http://localhost:"+port);

Приложение B

public interface Api {

@POST("users/register")

Call<RegisterApiResponse> createUser(@Body User user);

@GET("users/login")

Call<LoginApiResponse> logInUser(@Query("email") String email, @Query("password") String password);

@DELETE("users/{userId}")

Call<ResponseBody> deleteAccount(@Header("authorization") String token , @Path("userId") int userId);

@Multipart

@PUT("users/upload")

Call<ResponseBody> uploadPhoto(@Header("authorization") String token , @Part MultipartBody.Part userPhoto, @Part("id") RequestBody userId);

@PUT("users/info")

Call<ResponseBody> updatePassword(@Header("authorization") String token, @Query("password") String password, @Query("id") int userId);

@Multipart

@POST("products/insert")

Call<ResponseBody> insertProduct(@Header("authorization") String token, @PartMap Map<String, RequestBody> productInfo, @Part MultipartBody.Part image);

@GET("users/getImage")

Call<Image> getUserImage(@Query("id") int userId);

@GET("users/otp")

Call<Otp> getOtp(@Header("authorization") String token, @Query("email") String email);

@GET("products")

Call<ProductApiResponse> getProductsByCategory(@Query("category") String category, @Query("userId") int userId,@Query("page") int page);

@GET("products/search")

Call<ProductApiResponse> searchForProduct(@Query("q") String keyword, @Query("userId") int userId);

@POST("favorites/add")

Call<ResponseBody> addFavorite(@Body Favorite favorite);

@DELETE("favorites/remove")

Call<ResponseBody> removeFavorite(@Query("userId") int userId, @Query("productId") int productId);

@GET("favorites")

Call<FavoriteApiResponse> getFavorites(@Query("userId") int userId);

@POST("carts/add")

Call<ResponseBody> addToCart(@Body Cart cart);

@DELETE("carts/remove")

Call<ResponseBody> removeFromCart(@Query("userId") int userId, @Query("productId") int productId);

@GET("carts")

Call<CartApiResponse> getProductsInCart(@Query("userId") int userId);

@POST("history/add")

Call<ResponseBody> addToHistory(@Body History history);

@DELETE("history/remove")

Call<ResponseBody> removeAllFromHistory();

@GET("history")

Call<HistoryApiResponse> getProductsInHistory(@Query("userId") int userId, @Query("page") int page);

@POST("review/add")

Call<ResponseBody> addReview(@Body Review review);

@GET("review")

Call<ReviewApiResponse> getAllReviews(@Query("productId") int productId);

@GET("posters")

Call<NewsFeedResponse> getPosters();

@GET("orders/get")

Call<OrderApiResponse> getOrders(@Query("userId") int userId);

@POST("address/add")

Call<ResponseBody> addShippingAddress(@Body Shipping shipping);

@POST("orders/add")

Call<ResponseBody> orderProduct(@Body Ordering ordering);

}

Приложение С

public class RetrofitClient {

private static final String BASE_URL = LOCALHOST;

private static RetrofitClient mInstance;

private final Retrofit retrofit;

// Конструктор RetrofitClient, который инициализирует экземпляр Retrofit с помощью строителя Retrofit.Builder.

// Здесь мы указываем основной URL-адрес сервера, используемый для запросов, и определяем, что должно использоваться для сериализации

// и десериализации JSON, с помощью конвертера GsonConverterFactory.

private RetrofitClient() {

retrofit = new Retrofit.Builder()

.baseUrl(BASE_URL)

.addConverterFactory(GsonConverterFactory.create())

.build();

}

//Метод getInstance, который используется для получения единственного экземпляра RetrofitClient.

// Если экземпляр не был создан, то данный метод создает новый экземпляр.

public static synchronized RetrofitClient getInstance() {

if (mInstance == null) {

mInstance = new RetrofitClient();

}

return mInstance;

}

//Метод getApi, который возвращает экземпляр интерфейса Api.

//Он используется для выполнения HTTP-запросов на сервер. Вызов retrofit.create() возращает экземпляр Api.class, который содержит методы для выполнения запросов.

public Api getApi() {

return retrofit.create(Api.class);

}

//Таким образом, этот класс предоставляет инстанс Retrofit, который может быть использован для запросов на сервер, с использованием API, реализованного в классе Api.

}

Размещено на Allbest.ru


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

  • Анализ российского рынка мобильных приложений. Мобильное приложение как новый канал коммуникации с целевой аудиторией. Этапы создания мобильного приложения. План продвижения мобильного приложения в сети Интернет. Бесплатные инструменты продвижения.

    дипломная работа [1,6 M], добавлен 23.06.2016

  • Обзор рынка мобильных приложений, социальных сетей, аналогов. Обзор инструментов разработки: Android Studio, Microsoft visual С# 2012, PostgreeSQL, API Открытых данных Вологодской области, API Социальных сетей. Программный код, разработка интерфейса.

    дипломная работа [2,6 M], добавлен 10.07.2017

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

    дипломная работа [2,6 M], добавлен 13.09.2017

  • Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.

    курсовая работа [987,1 K], добавлен 27.06.2019

  • Проектирование удобного приложения для комфортной навигации по файлам облачного хранилища в одном файловом менеджере. Выбор интегрированной среды разработки. Выбор инструментов для визуализации приложения. Выбор средств отслеживания HTTPзапросов.

    курсовая работа [3,6 M], добавлен 16.07.2016

  • Мобильное приложение и его предназначение для организации информационного обмена между мобильными сотрудниками компании (водитель эвакуатора, мастер техпомощи) и CRM системой. Синхронизация данных о заказах. Пользовательский интерфейс приложения.

    дипломная работа [594,5 K], добавлен 12.08.2017

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

    дипломная работа [791,8 K], добавлен 10.07.2017

  • Обзор подходов к разработке музейных приложений с элементами дополненной реальности, формирование требований к ним. Выбор методов разработки приложения, разработка пользовательского интерфейса. Принципы тестирования. Реализация раздела "Распознавание".

    дипломная работа [2,8 M], добавлен 03.07.2017

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

    дипломная работа [2,6 M], добавлен 09.02.2017

  • Реализация приложения "Книжный магазин" средствами систем управления базами данных. Проектирование структуры базы данных, определение сущности и атрибутов. Логическое проектирование базы данных и реализация базы данных в СУБД Microsoft Office Access.

    курсовая работа [7,8 M], добавлен 13.02.2023

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