Разработка автоматизированной информационной системы "Турагентство"

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

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

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

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

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

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

ВВЕДЕНИЕ

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

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

- данные, которые они используют, имеют сложную структуру;

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

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

Каждый раз, когда мы что-то ищем в поисковике, мы используем базу данных. Когда мы вводитм свои логин и пароль для входа на какой-нибудь сервис, они сравниваются со значениями, которые хранятся в базе данных этого сервиса. База данных - набор сведений, хранящихся некоторым упорядоченным способом, иными словами, база данных - это хранилище данных. Сами по себе базы данных не представляли бы интереса, если бы не было систем управления базами данных (СУБД). Система управления базами данных - это совокупность языковых и программных средств, которая осуществляет доступ к данным, позволяет их создавать, менять и удалять, обеспечивает безопасность данных и т.д. В общем СУБД - это система, позволяющая создавать базы данных и манипулировать сведениями из них. А осуществляет этот доступ к данным СУБД посредством специального языка - SQL. SQL - язык структурированных запросов, основной задачей которого является предоставление простого способа считывания и записи информации в базу данных.

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

1. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ

1.1 Построение концептуальной модели

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

Концептуальная модель базы данных моего проекта находится в приложении. Концептуальная модель - это отражение предметной области, для которой разрабатывается база данных. Отметим, что это диаграмма с принятыми обозначениями элементов. Так, все объекты, обозначающие вещи, обозначаются в виде прямоугольника. Атрибуты, характеризующие объект - в виде овала, а связи между объектами - ромбами, по типу различают множественные связи "один к одному" (1:1), "один ко многим" (1:N) и "многие ко многим" (M:N).

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

1.2 Построение логической модели

база данных модель тестирование

На этапе логического проектирования разрабатывается логическая структура БД, соответствующая логической модели ПО. Проектирование БД должно решать задачи минимизации дублирования данных и упрощения процедур их обработки и обновления. При неправильно спроектированной схеме БД могут возникнуть аномалии модификации данных. Они обусловлены отсутствием средств явного представления типов множественных связей между объектами ПО и неразвитостью средств описания ограничений целостности на уровне модели данных. Построение логической модели БД включает в себя нормализацию, нормализация - это пошаговый, обратимый процесс замены исходной схемы другой схемой, в которой таблицы имеют более простую и логичную структуру. Это нужно, во-первых, для устранения избыточности данных, так как далеко не все недостатки можно учесть сразу. Для их устранения и применяется процесс нормализации. Он включает ряд правил, используемых для проверки всех таблиц базы данных. Различают: 1НФ - первая нормальная форма, 2НФ - вторая нормальная форма, 3НФ - третья нормальная форма, НФБК - нормальная форма Бойса-Кодда, 4НФ - четвертая нормальная форма, 5НФ - пятая нормальная форма.

Каждое реляционное отношение соответствует одной сущности (объекту ПО) и в него вносятся все атрибуты сущности. Для каждого отношения необходимо определить первичный ключ и внешние ключи (если они есть). В том случае, если базовое отношение не имеет потенциальных ключей, вводится суррогатный первичный ключ, который не несёт смысловой нагрузки и служит только для идентификации записей. Так же суррогатный первичный ключ также может вводиться в тех случаях, когда потенциальный ключ имеет большой размер (например, длинная символьная строка) или является составным (не менее трёх атрибутов). Составим реляционные отношения, нормализуя их (до 3НФ):

Таблица 1 - Схема отношения Тур (tour)

Содержание поля

Имя поля

Тип

Примечания

Номер тура

id

int

первичный ключ

Стоимость тура

cost

double

обязательное поле

Транспорт

transport

text

обязательное поле

Дата отправления

date_from

date

обязательное поле

Дата прибытия

date_to

date

обязательное поле

Страна

country

text

обязательное поле

Тип отеля

hotel

int

Тип тура

type_of_trip

text

обязательное поле

Количество свободных мест

free_places

int

обязательное поле

Таблица 2 - Схема отношения Пользователь (user)

Содержание поля

Имя поля

Тип

Примечания

Номер пользователя

id

int

первичный ключ

Фамилия

surname

tinytext

обязательное поле

Имя

name

tinytext

обязательное поле

Права доступа

role

text

обязательное поле, значение которого admin либо user.

Количество всех путевок, приобретенных в этом агентстве

sum_of_trip

int

обязательное поле, необходимое для определения скидки, если значение больше 3, то действует скидка

Распространяется ли скидка для этого пользователя

discount

int

обязательное поле

Таблица 3 - Схема отношения Бронь (book)

Содержание поля

Имя поля

Тип

Примечания

Номер брони

bookid

int

первичный ключ

Номер пользователя

tour_id

Int

внешний ключ (к user)

Номер тура

user_id

int

внешний ключ (к tour)

Количество бронируемых мест

amount

int

обязательное поле

Определим дополнительные ограничения целостности, которые не указаны в таблицах 1-3.

1. Значения всех числовых атрибутов, за исключением hotel, - больше 0 (или null, если атрибут необязателен).

2. Область значений атрибута hotel отношения tour - равно количеству звезд отеля (от 0 до 5),0 если отель в туре не предусмотрен.

3. Область значений атрибута discount отношения user - 0 или 10, если 0, то нет скидки, если 10, то скидка 10%.

4. Если значение атрибута amount отношения user больше 5, то значение атрибута discount становится равным 10.

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

Представители администрации компании: имеют доступ по чтению ко всем данным и доступ по записи ко всем отношениям, кроме book.

Пользователи имеют доступ по чтению к следующим отношениям:

-tour;

-reserv, только при вводе имеющихся в базе имени и фамилии.

1.3 Построение физической модели

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

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

Как правило, основной целью физического проектирования базы данных является описание способа физической реализации логического проекта базы данных.

В случае реляционной модели данных под этим подразумевается следующее:

создание набора реляционных таблиц и ограничений для них на основе информации, представленной в глобальной логической модели данных; определение конкретных структур хранения данных и методов доступа к ним, обеспечивающих оптимальную производительность СУБД; разработка средств защиты создаваемой системы.

Фрагменты описания схемы БД:

- Отношение Тур (tour):

CREATE TABLE `tour` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`cost` DOUBLE NULL DEFAULT NULL,

`transport` TEXT NULL,

`date_from` DATE NULL DEFAULT NULL,

`date_to` DATE NULL DEFAULT NULL,

`country` TEXT NULL,

`hotel` INT(11) NULL DEFAULT NULL,

`type_of_trip` TEXT NULL,

`free_places` INT(11) NULL DEFAULT NULL,

PRIMARY KEY (`id`)

);

- отношения Пользователь (user):

CREATE TABLE `user` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`surname` TINYTEXT NULL,

`name` TINYTEXT NULL,

`age` INT(11) NULL DEFAULT NULL,

`sum_of_trip` INT(11) NULL DEFAULT NULL,

`discount` INT(11) NULL DEFAULT NULL,

PRIMARY KEY (`id`)

);

- отношения Бронь (book):

CREATE TABLE `book` (

`book_id` INT(11) NOT NULL AUTO_INCREMENT,

`tour_id` INT(11) NULL DEFAULT NULL,

`user_id` INT(11) NULL DEFAULT NULL,

`how_many` INT(11) NULL DEFAULT NULL,

PRIMARY KEY (`id`),

INDEX `tour_id` (`tour_id`),

INDEX `client_id` (`user_id`)

);

Приведём примеры примененных запросов:

- Вывод на главную страницу информации о турах:

SELECT * FROM tour WHERE free_places > 0;

-Добавление, удаление администратором тура на главную страницу:

INSERT INTO tour (cost, transport, date_from, date_to, country, hotel, type_of_trip, free_places) VALUES (?, ?, ?, ?, ?, ?, ?, ?);

DELETE FROM tour WHERE id = ?;

-Просмотр, удаление, добавление пользователя:

SELECT * FROM user;

DELETE FROM user WHERE id = ?;

INSERT INTO user (surname, name, role, sum_of_trip, discount) VALUES (?, ?, ?, ?, ?);

-При авторизации пользователя отрабатывает следующий запрос:

SELECT * FROM USER WHERE surname = ? AND name = ?;

-Добавление брони:

INSERT INTO book (tourId, userId, amount) VALUES (?, ?, ?);

-Редактируется количество свободных мест на главной странице при осуществлении брони:

UPDATE tour SET free_places = ? WHERE id = ?;

- Редактируется количество поездок и скидка для пользователя при бронирование:

UPDATE user SET sum_of_trip = ?, discount = ? WHERE id = ?;

- Вывод всех туров, заказанных конкретным пользователем:

SELECT * FROM tour JOIN book ON tour.id = book.tourId WHERE book.userId = ?;

2. Разработка приложения по работе с базой данных

2.1 Назначение

Приложение «Турагентство» разработанное в данном курсовом проекте для работы с базой данных имеет следующее назначение, а именно, позволяет пользователю, желающему отправится в путешествие, подобрать тур подходящий ему по следующим критериям: стоимость тура, транспорт (самолет, автобус), дата отправления, дата прибытия, страна, тип отеля, вид тура (горнолыжный, море, шоппинг). Просмотреть количество свободных мест, забронировать тур. А так же данное приложение формирует скидки для постоянных клиентов. Помимо этого администратор турагентства может добавлять и удалять туры, добавлять и удалять клиентов.

2.2 Структура приложения

Приложение представлено в виде веб-приложения со структурой Model-view-controller и реализовано на языке программирования Java, с применением HTML и CSS для отображения на веб-странице.

Model-view-controller (MVC, «модель-представление-поведение», «модель-представление-контроллер», «модель-вид-контроллер») -- схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области. Концепция MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента:

· Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.

· Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами.

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

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

Java -- объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине вне зависимости от компьютерной архитектуры.

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

HTML (Hyper Text Markup Language) - язык разметки гипертекста, является основой Всемирной паутины. Именно он является основой создания веб-страниц. С помощью HTML осуществляется логическое форматирование документа, и только для этих целей он и может использоваться.

Если HTML используется для логического форматирования документа, то для управления его отображением на экране монитора или выводом на принтер применяются каскадные таблицы стилей CSS. CSS (англ. Cascading Style Sheets -- каскадные таблицы стилей) -- формальный язык описания внешнего вида документа, написанного с использованием языка разметки.CSS используется создателями веб-страниц для задания цветов, шрифтов, расположения отдельных блоков и других аспектов представления внешнего вида этих веб-страниц. Основной целью разработки CSS являлось разделение описания логической структуры веб-страницы (которое производится с помощью HTML или других языков разметки) от описания внешнего вида этой веб-страницы (которое теперь производится с помощью формального языка CSS). Такое разделение может увеличить доступность документа, предоставить большую гибкость и возможность управления его представлением, а также уменьшить сложность и повторяемость в структурном содержимом.

2.3 Описание приложения

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

Рисунок 2.1 - Главная страница приложения

Рисунок 2.2 - Страница авторизации

Рисунок 2.3 - Главная страница после авторизации

Рисунок 2.4 - Страница выбора количества мест, при бронировании конкретного тура

Рисунок 2.5 - Сообщение об успешной брони, в данном случае и о распространении скидки в 10% на этого пользователя

Рисунок 2.6 - Просмотр туров, забронированных конкретным пользователем

Рисунок 2.7 - Главная страница после авторизации администратора

Рисунок 2.8 - Добавление тура администратором

Рисунок 2.9 - Просмотр списка пользователей администратором

2.4 Тестирование приложения

План тестирования:

Тестовый случай

Сценарий тестирования

Ожидаемый результат

1.Бронирование тура пользователем.

2.Добавление-удаление тура администратором.

3.Неотображение тура в списке, если нет свободных мест.

4.Добавление скидки, если более пяти путевок приобретено одним пользователем.

Заходим на главную страницу, вводим данные для авторизации, выбираем тур и нажимаем забронировать.

Заходим на главную страницу, вводим данные для авторизации. Выбираем «добавить тур»/ «удалить тур». Вводим соответствующие данные.

Заходим на главную страницу, вводим данные для авторизации, выбираем тур и нажимаем забронировать. Бронируем все свободные места. Возвращаемся на главную страницу.

Заходим на главную страницу, вводим данные для авторизации, выбираем тур и нажимаем забронировать (чтоб в сумме было более пяти путевок).

Пользователь видит сообщение о том, что бронь произведена успешно.

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

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

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

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

Рисунок 2.10 - Тестовый случай1. Забронированные пользователем путевки до и после последней брони

Рисунок 2.11 - Тестовый случай1. Список туров на главной странице до и после последней брони

Рисунок 2.12 - Тестовый случай1. Бронирование тура

Рисунок 2.13 - Тестовый случай2. Авторизация администратора

Рисунок 2.14 - Тестовый случай2. Добавление тура

Рисунок 2.15 - Тестовый случай2. Список туров на главной странице после добавления

Рисунок 2.16 - Тестовый случай2. Список туров на главной странице после удаления

Рисунок 2.17 - Тестовый случай3. Список туров на главной странице до и после брони последних свободных путевок

Рисунок 2.18 - Тестовый случай4. Сообщение о скидке

Результаты тестирования: приложение успешно прошло тестирование и не показало отклонений от поставленной задачи.

2.5 Руководство пользователю

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

ЗАКЛЮЧЕНИЕ

В результате выполнения данной курсовой работы была разработана автоматизированная информационная система «Турагентство», спроектирована база данных, позволяющая выдавать информацию о наличии путевок и их стоимость, бронирование билетов, и формирующая скидки для постоянных клиентов. Приложение представлено в виде веб-приложения со структурой Model-view-controller и реализовано на языке программирования Java, с применением HTML и CSS для отображения на веб-странице.

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1.Эд Титтел, Джефф Ноубл HTML, XHTML и CSS для чайников, 7-е издание

2. Герберт Шилдт. Java. Полное руководство.

3. Барри Берд Программирование на Java для чайников, 3-е издание

4.Алекс Кригель, Борис Трухнов. SQL. Библия пользователя. Язык запросов SQL

5. К. Дж. Дейт. Введение в системы баз данных

6. Крис Фиайли SQL: Руководство по изучению языка.

7. Кузнецов С. Д. Основы баз данных. -- 2-е изд.

Приложение А

Листинг программы

package by.bntu.touragency.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import by.bntu.touragency.manager.ConfigurationManager;

public class DAOConnection {

public static Connection connectToDB() {

Connection cn = null;

try {

String driver = ConfigurationManager.getInstance().getProperty(

ConfigurationManager.DATABASE_DRIVER_NAME);

Class.forName(driver);

String url = ConfigurationManager.getInstance().getProperty(ConfigurationManager.DATABASE_URL);

cn = DriverManager.getConnection(url);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return cn;

}

}

package by.bntu.touragency.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class ConfirmBookDAO {

public static int daoConfirmBook(int tourId, int userId, int amount, int free_places, int discount, int sum_of_trip) {

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("INSERT INTO book (tourId, userId, amount) VALUES (?, ?, ?);");

st.setInt(1, tourId);

st.setInt(2, userId);

st.setInt(3, amount);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

try {

int i = free_places - amount;

st = cn.prepareStatement("UPDATE tour SET free_places = ? WHERE id = ?;");

st.setInt(1, i);

st.setInt(2, tourId);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

try {

int sum = sum_of_trip + 1;

if (sum >= 5) {

discount = 10;

}

System.out.println("sum_of_trip: " + sum_of_trip + " new sum: " + sum + " dicount: " + discount);

st = cn.prepareStatement("UPDATE user SET sum_of_trip = ?, discount = ? WHERE id = ?;");

st.setInt(1, sum);

st.setInt(2, discount);

st.setInt(3, userId);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return discount;

}

}

package by.bntu.touragency.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import by.bntu.touragency.model.User;

public class DAOLogin {

private static final String SQL_CHECK_LOGIN = "SELECT * FROM USER WHERE surname = ? AND name = ?";

public static User daoCheckLogin(String name, String surname) {

User user = null;

// checking login & password

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement(SQL_CHECK_LOGIN);

st.setString(1, surname);

st.setString(2, name);

ResultSet rs = null;

try {

rs = st.executeQuery();

// checking whether the user with the given login & password

if(rs.next()){

user = new User();

user.setId(rs.getInt("id"));

user.setName(rs.getString("name"));

user.setSurname(rs.getString("surname"));

user.setRole(rs.getString("role"));

user.setSum_of_trip(rs.getInt("sum_of_trip"));

user.setDiscount(rs.getInt("discount"));

} else {

}

} finally{

rs.close();

}

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return user;

}

}

package by.bntu.touragency.dao;

import java.sql.Connection;

import java.sql.Date;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import by.bntu.touragency.model.Tour;

public class TourDAO {

private static final String SQL_MY_TOUR_LIST = "SELECT * FROM tour JOIN book ON tour.id = book.tourId WHERE book.userId = ?;";

public static List<Tour> daoBuildTourList() {

Tour tour = null;

List<Tour> tourList = new ArrayList<Tour>();

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("SELECT * FROM tour WHERE free_places > 0;");

ResultSet rs = null;

try {

rs = st.executeQuery();

while (rs.next()) {

tour = new Tour();

tour.setId(rs.getInt("id"));

tour.setCost(rs.getDouble("cost"));

tour.setTransport(rs.getString("transport"));

tour.setDate_from(rs.getDate("date_from"));

tour.setDate_to(rs.getDate("date_to"));

tour.setCountry(rs.getString("country"));

tour.setHotel(rs.getInt("hotel"));

tour.setType_of_trip(rs.getString("type_of_trip"));

tour.setFree_places(rs.getInt("free_places"));

tourList.add(tour);

}

} finally{

rs.close();

}

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return tourList;

}

public static List<Tour> daoBuildMyTourList(int userId) {

Tour tour = null;

List<Tour> tourList = new ArrayList<Tour>();

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement(SQL_MY_TOUR_LIST);

st.setInt(1, userId);

ResultSet rs = null;

try {

rs = st.executeQuery();

while (rs.next()) {

tour = new Tour();

tour.setId(rs.getInt("id"));

tour.setCost(rs.getDouble("cost"));

tour.setTransport(rs.getString("transport"));

tour.setDate_from(rs.getDate("date_from"));

tour.setDate_to(rs.getDate("date_to"));

tour.setCountry(rs.getString("country"));

tour.setHotel(rs.getInt("hotel"));

tour.setType_of_trip(rs.getString("type_of_trip"));

tour.setFree_places(rs.getInt("free_places"));

System.out.println("tour: " + tour.getId());

tourList.add(tour);

}

} finally{

rs.close();

}

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return tourList;

}

public static void deleteTour(int tourId) {

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("DELETE FROM tour WHERE id = ?");

st.setInt(1, tourId);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void addTour(Double cost, String transport, Date date_from, Date date_to, String country, int hotel, String type_of_trip,

int free_places) {

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("INSERT INTO tour (cost, transport, date_from, date_to, country, hotel, type_of_trip, free_places) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");

st.setDouble(1, cost);

st.setString(2, transport);

st.setDate(3, date_from);

st.setDate(4, date_to);

st.setString(5, country);

st.setInt(6, hotel);

st.setString(7, type_of_trip);

st.setInt(8, free_places);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

package by.bntu.touragency.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import by.bntu.touragency.model.User;

public class UserDAO {

/**

* @return

*/

public static List<User> daoBuildUserList() {

User user = null;

List<User> userList = new ArrayList<User>();

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("SELECT * FROM user");

ResultSet rs = null;

try {

rs = st.executeQuery();

while (rs.next()) {

user = new User();

user.setId(rs.getInt("id"));

user.setSurname(rs.getString("surname"));

user.setName(rs.getString("name"));

user.setRole(rs.getString("role"));

user.setSum_of_trip(rs.getInt("sum_of_trip"));

user.setDiscount(rs.getInt("discount"));

userList.add(user);

}

} finally{

rs.close();

}

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return userList;

}

public static void deleteUser(int userId) {

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("DELETE FROM user WHERE id = ?");

st.setInt(1, userId);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void createUser(String surname, String name, String role, int i, int j) {

Connection cn = null;

try {

cn = DAOConnection.connectToDB();

PreparedStatement st = null;

try {

st = cn.prepareStatement("INSERT INTO user (surname, name, role, sum_of_trip, discount) VALUES (?, ?, ?, ?, ?);");

st.setString(1, surname);

st.setString(2, name);

st.setString(3, role);

st.setInt(4, i);

st.setInt(5, j);

st.executeUpdate();

} finally {

if (st != null)

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

if (cn != null)

try {

cn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

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


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

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