- •Курсовая работа по дисциплине
- •Введение
- •Постановка задачи
- •Обоснование выбора технологий
- •Разработка структуры программы
- •1. Основные компоненты программы
- •2. Архитектура взаимодействия компонентов
- •3. Структура базы данных
- •4. Конфигурация проекта Maven
- •Разработка собственных классов
- •5.1. Модель данных (Model)
- •5.1.1. Класс Book
- •1. Поля:
- •2. Методы:
- •5.1.2. Класс User
- •1. Поля:
- •2. Методы:
- •5.1.3. Класс CartItem
- •1. Поля:
- •2. Методы:
- •5.2. Слой доступа к данным (dao)
- •5.2.1. Класс BookDao
- •1. Поля:
- •2. Методы:
- •5.2.2. Класс UserDao
- •1. Поля:
- •2. Методы:
- •5.2.3. Класс CartDao
- •1. Поля:
- •2. Методы:
- •5.2.4. Класс DatabaseConnection
- •1. Поля (константы подключения):
- •2. Методы:
- •5.3. Сервлеты
- •5.3.1. Класс BookServlet
- •1. Поля:
- •2. Методы http обработки:
- •5.3.2. Класс AuthServlet
- •1. Поля:
- •2. Методы http обработки:
- •5.3.3. Класс CartServlet
- •1. Поля:
- •2. Методы http обработки:
- •5.4. Конфигурация проекта Maven
- •5.4.1. Файл pom.Xml
- •Сценарии пользователя
- •Удаление книг из корзины.
- •Оформление заказа.
- •Инструкция пользователю
- •Начало работы с приложением
- •Создание личного кабинета
- •Вход в систему для постоянных клиентов
- •Исследование книжного каталога
- •Фильтрация книг
- •Формирование корзины покупок
- •Управление корзиной
- •Оформление заказа
- •Завершение работы
- •Заключение
- •Список литературы
- •Приложение
2. Методы:
2.1. Операции чтения корзины:
List<CartItem> getCartItemsByUserId(int userId) – получает все элементы корзины для указанного пользователя
Логика работы: выполняет JOIN запрос между cart_items и books для получения полной информации,
Структура результата: возвращает список CartItem, где каждый элемент содержит полный объект Book.
2.2. Операции изменения корзины:
boolean addToCart(int userId, int bookId) – добавляет книгу в корзину пользователя
Логика работы: сначала проверяет наличие книги в корзине, затем либо увеличивает количество, либо добавляет новую запись,
Интеллектуальное добавление: Если книга уже есть в корзине — увеличивает количество на 1.
boolean removeFromCart(int cartItemId) – удаляет конкретный элемент из корзины
Логика работы: выполняет DELETE FROM cart_items WHERE id = ?,
Идентификация: удаляет по уникальному ID элемента корзины, а не по bookId.
boolean updateCartItemQuantity(int cartItemId, int quantity) – изменяет количество товара в корзине
Валидация: Проверяет, что новое количество положительное,
Возвращаемое значение: true при успешном обновлении.
2.3. Операции очистки:
void clearUserCart(int userId) – полностью очищает корзину пользователя после успешной покупки
Логика работы: Выполняет DELETE FROM cart_items WHERE user_id = ?,
Использование: Вызывается только после успешного уменьшения количества книг на складе.
5.2.4. Класс DatabaseConnection
Назначение: Класс DatabaseConnection реализует паттерн Singleton для управления подключениями к базе данных MySQL. Этот класс обеспечивает централизованное создание, использование и закрытие соединений, предотвращая утечки ресурсов.
1. Поля (константы подключения):
private static final String URL – строка подключения к MySQL: jdbc:mysql://localhost:3306/bookstore,
private static final String USER – имя пользователя БД: root,
private static final String PASSWORD – пароль для доступа к БД.
2. Методы:
2.1. Получение соединения:
static Connection getConnection() throws SQLException – возвращает новое соединение с базой данных
Инициализация драйвера: загружает класс MySQL драйвера через Class.forName()
Обработка ошибок: преобразует ClassNotFoundException в SQLException с понятным сообщением
Создание соединения: использует DriverManager.getConnection() с параметрами из констант
2.2. Особенности реализации:
Singleton-like подход: класс содержит только статические методы, не требует создания экземпляра,
Изоляция параметров: данные подключения хранятся в одном месте, легко изменяются,
Обработка исключений: пробрасывает исключения наверх для обработки в вызывающем коде.
5.3. Сервлеты
Данный раздел охватывает HTTP-контроллеры, которые обрабатывают запросы от клиентской части и координируют работу всей системы.
5.3.1. Класс BookServlet
Назначение: Класс BookServlet является HTTP контроллером, обрабатывающим все запросы, связанные с получением информации о книгах. Наследуется от HttpServlet и аннотирован @WebServlet("/books").
