Коллективная разработка программного продукта, направленного на усовершенствование поиска туристической информации
Курсовая работа, 18 Мая 2013, автор: пользователь скрыл имя
Краткое описание
Развитие туристической индустрии привело к появлению на рынке программного обеспечения огромного количества решений для автоматизации турфирм, турагентств и туроператоров. Большое количество туристических услуг предлагает глобальная сеть Интернет, в которой информация о туроператорах представлена достаточно наглядно и подробно.
Но, не смотря на такое разнообразие ПО, создаются все новые приложения и системы для туризма. В данном курсовом проекте необходимо разработать систему поиска туроператора для заданного туристического маршрута. в качестве заказчика ПО выступает ООО «Бюро туристических маршрутов».
Содержание
Введение 3
Основная часть 4
1. Цель работы 4
2. Декомпозиция и распределение ролей в проекте 4
3. Выполнение предписанных задач 5
3.1. Теоретическая часть 5
3.2. Практическая часть 8
Заключение 13
Список литературы 14
Прикрепленные файлы: 1 файл
Курсовая.doc
— 337.50 Кб (Скачать документ)Министерство высшего
Кафедра Информационных технологий
Курсовая работа
по технологии разработки программного обеспечения
Тема: "Коллективная разработка программного продукта, направленного на усовершенствование поиска туристической информации"
Выполнила:
Проверил:
Протвино - 2008
Содержание
Введение
Высокие темпы роста отечественной и зарубежной туриндустрии привели к огромному количеству туроператоров, представляющие зачастую одинаковые туры по различным условиям. В связи с этим, выбор подходящего туроператора занимает много времени и усилий. Одно из возможных решений этой проблемы: облегчение поиска подходящего туроператора за счет систематизирования информации по определенным турам.
Развитие туристической индустрии привело к появлению на рынке программного обеспечения огромного количества решений для автоматизации турфирм, турагентств и туроператоров. Большое количество туристических услуг предлагает глобальная сеть Интернет, в которой информация о туроператорах представлена достаточно наглядно и подробно.
Но, не смотря на такое разнообразие ПО, создаются все новые приложения и системы для туризма. В данном курсовом проекте необходимо разработать систему поиска туроператора для заданного туристического маршрута. в качестве заказчика ПО выступает ООО «Бюро туристических маршрутов».
Основная часть
Цель работы
Цели курсового проекта носят как практический, так и организационный характер.
Практической целью курсового проекта является создание системы поиска туроператора по выбранному туристическому маршруту. Система, получившая название «Гуру - тур» должна разрабатываться по требованиям заказчика, описанным в приложении №1 к договору №-2404/8. В качестве обрабатываемой информации выступает информация обо всех туроператорах Центрального ФО РФ.
Организационная цель проекта заключается в создании группы разработчиков, распределения ролей в проекте и согласованности в работе.
Декомпозиция и распределение ролей в проекте
В качестве модели разработки ПО была выбрана каскадная модель, основной характеристикой которой является разбиение всей разработки проекта на этапы:
- Анализ;
- Проектирование;
- Реализация;
- Внедрение;
- Сопровождение.
Разработка системы - это процесс преобразования исходных требований в конечный программный продукт. Стандарт оговаривает, что этот процесс должен проводиться в строго определенном порядке, что позволит предотвратить появление ошибок. Требования строгой дисциплины процесса разработки послужат гарантией того, что программный продукт будет создаваться в соответствии с заданными требованиями.
Для реализации проекта была произведена декомпозиция – разделение основной задачи проекта на подзадачи для каждого из участников. Каждый из участников для осуществления данного проекта выполнял определенные этапы разработки ПО.
Проектирование и анализ выполнялись одновременно всей группой проектировщиков. Так как эти этапы являются основополагающими проекта, то к ним требовался общий подход.
Декомпозиция разрабатываемого проекта:
- Анализ требований;
- Проектирование базы данных;
- Разработка базы данных;
- Проектирование пользовательских интерфейсов;
- Разработка модуля работы с БД и формирования запросов;
- Разработка пользовательского интерфейса для программного обеспечения;
- Создание инсталлятора;
- Тестирование;
- Создание руководства пользователя.
В соответствии с декомпозицией были распределены роли всех членов группы. Лидером команды была выбрана Мандрик Е. Её задачами в рамках проекта были: анализ требований, составление план-графика, разработка модуля работы с БД и формирования запросов, тестирование, написание пользовательской документации. Среди остальных участников группы роли распределились следующим образом:
- Ларкина Т. - анализ требований, проектирование и разработка пользовательских интерфейсов.
- Моисеева О. – анализ требований, проектирование и разработка пользовательских интерфейсов, создание инсталлятора системы.
- Хан О. – анализ требований, проектирование и разработка базы данных, тестирование.
Выполнение предписанных задач
3.1. Теоретическая часть
ODBC
ODBC (Open DataBase Connectivity) — это программный интерфейс (API) доступа к базам данных.
ODBC является одной из самых старых технологий для работы с базами данных, которые выпустила фирма Microsoft. Одной из основных причин разработки ODBC была необходимость предоставления программистам простого способа доступа к содержимому баз данных с минимальной ориентацией на какой-либо конкретный язык. Среди платформ программирования, на которые фирма Microsoft изначально ориентировала на работу с ODBC, находится и Visual C++.
Чтобы получить доступ к базе данных с использованием ODBC, необходимо создать источник данных.
Классы для работы с ODBC
Среда Visual Studio.NET предоставляет различные подходы для реализации работы с базами данных:
- Применение библиотеки MFC (Microsoft Foundation Class Library).
- Применение ATL (Active Template Library).
- Использование библиотек Framework.
Библиотека MFC реализует поддержку доступа к базам данных, основанную на двух механизмах:
- через ODBC-драйверы;
- с применением провайдеров данных OLE DB.
Приложения, использующие доступ к базам данных с применением ODBC-драйверов, в обязательном порядке используют класс CDatabase для создания объекта "база данных" и класс CRecordset для создания объекта "результирующий набор".
CDatabase
CDatabase – класс, инкапсулирующий соединение с источником данных.
Объекты этого класса используются для соединения с базами данных, посредством которого можно манипулировать источником данных (рис.1). Список категорий, на которые можно условно разделить все компоненты и методы данного класса:
- Данные. Эти компоненты класса CDatabase хранят информацию, используемую в том случае, когда вы хотите работать непосредственно с базой данных, к которой присоединен объект CDatabase.
- Создание соединения. В эту категорию входят конструктор и методы для открытия/закрытия базы данных.
- Атрибуты данных. Сюда относятся десять функций, используемых для получения информации о базе данных, к которой присоединен объект CDatabase.
- Операции — пять функций, позволяющих обрабатывать транзакции и непосредственно выполнять команды SQL.
- Переопределяемые методы. Один метод, позволяющий программисту более конкретно настроить функционирование объекта CDatabase.
Рис. 1. Место класса CDatabase в иерархии библиотеки MFC
CRecordset
CRecordset – класс, инкапсулирующий работу с результирующим набором, включая переход между записями, добавление, удаление и изменение записей, задание фильтров и выполнение параметризированных запросов.
Все компоненты и методы этого класса можно разбить на семь категорий:
- Компоненты данных. Служат для хранения информации, используемой для непосредственной работы с базой данных, к которой объект этого класса был присоединен.
- Конструирование. В эту категорию входят конструктор и методы для открытия/закрытия форм базы данных.
- Атрибуты результирующего набора. Функции, используемые для получения информации о результирующем наборе, к которому присоединен объект класса CRecordset.
- Операции обновления результирующего набора. Четыре операции, предназначенные для обработки транзакций.
- Операции перемещения по результирующему набору. Функции, позволяющие перемещаться по записям результирующего набора.
- Другие операции над результирующим набором. Восемь функций, предоставляющие дополнительные функциональные возможности.
- Переопределяемые методы. Пять переопределяемых функций, позволяющие программисту настроить функционирование объекта класса CRecordset.
Класс CRecordset реализует операции над результирующим набором, получаемым из источника данных при выполнении SQL-оператора SELECT.
SQL
SQL – это язык программирования и запросов к базам данных, он применяется для осуществления доступа к данным, для запросов к реляционным СУБД, для управления базами данных и их обновления. Стандарт SQL утвержден как Американским Национальным Институтом Стандартов (ANSI), так и Международной организацией по стандартизации (ISO).
Практическая часть
Создание план-графика работ
В процессе составления графика весь массив работ, необходимых для реализации проекта, разбивался на отдельные этапы и оценивалось время, требующееся для выполнения каждого этапа. В результате был создан план-график (см. Приложение 1), в котором отражена длительность всех этапов разработки с учетом проблем и задержек.
Модуль соединения с базой данных (БД).
Для своей курсовой работы в качестве метода доступа к базе данных я использовала ODBC, т.к. считаю его самым практичным. Все СУБД имеют драйвера ODBC.
Для имеющейся базы данных TravellTour (структуру БД см. Приложение 2) был создан объект класса CDatabase.
Само соединение приложения с источником данных записывается в таком виде:
// ----------------- Connect with database
DataDSN.Format(_T("DSN=
// -----------------
“Trusted_Connection=yes” говорит о том , что соединение с базой данных не зависит от типа авторизации SQL Server (SQL Server Authentication или Windows Authentication).
Модуль формирования запросов к БД.
Для работы с записями базы данных были созданы классы, наследованные от CRecordset, причем эти классы создавались не как MFC Class, а как MFC ODBC Consumer. Это значительно облегчило работу, потому что создается системный DSN ODBC, прототипы функций соединения с базой данных, функции SQL-запроса к таблице, идентифицирует поля таблицы.
Классы, отражающие структуру таблиц базы данных, реализованы таким образом, что можно формировать любой запрос к этой таблице из других классов, создав лишь объект класса-таблицы. Рассмотрим это на примере одного класса, например, к запрос к таблице TourOperator.
// ----------------- Запрашивает туроператора по идентификационноу номеру
BOOL CTourDlg::RequestTourOperator( long IdOperator)
{
CTourOperator* pRecordOperator = new CTourOperator( &TravellTourDB );
if( pRecordOperator == NULL )
{
AfxMessageBox(_T("Не удается создать объект TourOperator!"));
return FALSE;
}
CString RequestStr;
RequestStr.Format(_T("select * from [TourOperator] WHERE idTourOperator=%d"), (int) IdOperator);
pRecordOperator->
try
{
pRecordOperator->Open();
}
catch( CDBException* DataExcept )
{
CString TmpStr;
TmpStr.Format(_T("Ошибка открытия Таблицы [%s], Запрос: <%s> "), DataExcept->m_strError, RequestStr );
DataExcept->Delete();
AfxMessageBox( TmpStr, IDOK );
}
catch( CMemoryException* MemExcept )
{
CString TmpStr;
TmpStr.Format(_T("Ошибка памяти при открытии Таблицы, Запрос: <%s> "), RequestStr );
MemExcept->Delete();
AfxMessageBox( TmpStr, IDOK );
}
catch( ... )
{
CString TmpStr;
TmpStr.Format(_T("Ошибка Y-917 при открытии Таблицы, Запрос: <%s> "), RequestStr );
AfxMessageBox( TmpStr, IDOK );
}
if( !pRecordOperator->IsOpen() )
{
delete pRecordOperator;
return FALSE;
}
if( pRecordOperator->
{
pRecordOperator->Close();
delete pRecordOperator;
return TRUE;
}
int RecordCounter = 0;
pRecordOperator->MoveFirst();
while( !pRecordOperator->IsEOF() )
{
pRecordOperator->Normalise();
SelectTourOperator.m_
SelectTourOperator.m_Phone = pRecordOperator->m_Phone;
SelectTourOperator.m_email = pRecordOperator->m_email;
SelectTourOperator.m_Adress = pRecordOperator->m_Adress;
SelectTourOperator.m_Site = pRecordOperator->m_Site;
RecordCounter++;
pRecordOperator->MoveNext();
};