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

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,53 Mb
  • Опубликовано:
    2011-11-21
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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













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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

.1 Назначение программного продукта

.2 Основание для разработки

.3 Требования к квалификации пользователя

.4 Требования к функционированию

.4.1 Разработка спецификации функций

.4.2 Качественные требования

.4.3 Требования к быстродействию

.4.4 Минимальные технические требования для работы с программным продуктом

.5 Требования к условиям выполнения работ по проектированию

.6 Порядок контроля и проверки системы

.6.1 Требования к приемо-сдаточным испытаниям

.6.2 Требования к составу и содержанию работ по установке программного продукта на ПК

.7 Требования к документированию

. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ

.1 Выбор методов реализации

.2 Выбор среды и языка программирования

.3 Выбор технологии программирования

. ЭСКИЗНЫЙ ПРОЕКТ

.1 Разработка частного технического задания

.1.1 Требования к функционированию

.1.2 Расчет нормирования работы на создание программного продукта с учетом частного технического задания

.1.3 Расчет затрат времени на разработку частного технического задания

.2 Проектирование структуры программы

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

.3 Декомпозиция задачи

.4 Разработка структуры хранения данных

.5 Инфологическая модель структуры хранения данных

.6 Разработка интерфейса программы

.6.1 Разработка общего интерфейса

.6.2 Форма «Каталог стран»

.6.3 Форма «Каталог туров»

.6.4 Форма «Бронирование туре»

.6.5. Форма «Добавление / редактирование сведений о турах»

.6.6 Форма «О клиентах»

.6.7 Форма «Подбор тура»

.6.8 Форма «Запрос на в диапазоне дат»

.6.9 Форма «Запрос на выборку в диапазоне цен»

.6.10 Форма «Отчет о бронировании туров»

.6.11 Форма «Туристическая путевка»

.6.12 Компоненты интерфейса

. ТЕХНИЧЕСКИЙ ПРОЕКТ

.1 Разработка технического проекта

.2 Разработка рабочего проекта

. ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКИЙ РАЗДЕЛ

.1 Определение трудозатрат на разработку программного продукта

.1.1 Общие положения

.1.2 Расчет нормирования работы на создание программного продукта

.1.3 Расчет затрат времени на разработку дипломного проекта

.2 Расчет себестоимости разработки проекта

.2.1 Затраты на заработную плату

.2.2 Отчисления в фонд социального страхования и обеспечения

.2.3 Накладные расходы

.2.4 Затраты на работу ЭВМ

.2.5 Составление сметы затрат

БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ

.1 Анализ потенциально-опасных и вредных факторов разработчика электронного офиса и пользователя

.2 Разработка мероприятий производственной санитарии и безопасности жизнедеятельности разработчика и пользователя

.2.1 Требования к ПЭВМ

.2.2 Требования к помещениям для работы с ПЭВМ

.2.3 Требования к рабочему месту для работы с ПЭВМ

.2.4 Общие требования к работе с ПЭВМ

.3 Разработка мероприятий противопожарной безопасности рабочего помещения

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ А

 

ВВЕДЕНИЕ


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

Темой разрабатываемого дипломного проекта является «Разработка программы по формированию заказа по требованию клиента для автоматизированной системы управления продажами путевок туристического агентства».

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

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

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

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

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

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

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

1. Техническое задание

 

.1 Назначение программного продукта


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

 

1.2 Основание для разработки


Основанием для разработки является задание на дипломное проектирование.

 

1.3 Требования к квалификации пользователя


Для работы с данным программным продуктом пользователь должен уметь работать с ПК на уровне оператора ЭВМ.

 

1.4 Требования к функционированию


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

Разрабатываемая программа должна выполнять следующие функции:

. Хранение и доступ к данным о стране назначения.

. Хранение и доступ к данным о турах.

. Хранение и доступ к данным о клиентах.

. Хранение и доступ к данным об отелях.

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

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

. Фильтровать данные о турах по различным параметрам.

. Предоставлять сведения о клиентах.

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

. Определять количество путевок проданных за период (месяц / квартал / полугодие / год).

. Определять количество стран, по которым продано больше всего путевок.

. Определять количество постоянных клиентов.

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

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

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

. Формировать отчеты.

 

1.4.1 Разработка спецификации функций

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

. Хранение и доступ к данным о стране назначения. Спецификация функции представлена на рисунке 1.1.

Рисунок 1.1

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

Выходной информацией является представление на экране дисплея списка стран с описанием в виде текста и фотографией, расчет минимальной стоимости тура для страны, печать представленных данных.

. Хранение и доступ к данным о турах. Спецификация функции представлена на рисунке 1.2.

Рисунок 1.2

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

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

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

. Хранение и доступ к данным о клиентах. Спецификация функции представлена на рисунке 1.3.

Рисунок 1.3

Входной информацией являются:

) данные загранпаспорта - фамилия, имя, отчество, номер и серия загранпаспорта, возраст, пол, дата рождения, дата окончания действия загранпаспорта;

) контактная информация - номер телефона, номер мобильного телефона, адрес электронной почты;

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

Выходной информацией является:

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

) оформление путевки, куда входит: номер заказа, сведения о туре, данные о клиенте: фамилия, имя, отчество, номер и серия загранпаспорта, возраст, пол, дата рождения, дата окончания действия загранпаспорта; данные о билете: вид транспорта, пункт отправления, дата и время отправления, номер рейса / поезда / парома / автобуса, пункт назначения, дата и время прибытия,;

) расчет тура для группы клиентов. Для каждой возрастной группы значение скидки постоянно и неизменно (взрослый - полная стоимость, ребенок (5 - 10 лет) - скидка 20%, ребенок (11-16 лет) - скидка 5%);

) сохранение данных о турах и клиентах в файл;

) предоставление списка клиентов с учетом забронированного билета;

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

) организация вывода данных на печать.

. Хранение и доступ к данным об отелях. Спецификация функции представлена на рисунке 1.4.

Рисунок 1.4

Входной информацией является письменный документ, содержащий сведения о наименовании отеля, описании отеля в виде текста, фотографии.

Выходной информацией является:

) представление на экране дисплея списка отелей с описанием в виде текста и фотографией;

) организация возможности быстрого поиска по наименованию отеля.

. Хранение и доступ к данным о забронированных билетах. Спецификация функции представлена на рисунке 1.5.

Рисунок 1.5

Входной информацией является письменный документ или иной источник информации (файл, данные полученные по информационной сети (например, Internet), или др.), содержащий сведения о виде транспорта, пункте отправления, дате и времени отправление, пункте назначения, дате и времени прибытия, номере транспорта (номер рейса / поезда / парома / автобуса / самолета).

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

. Выборка данных в указанном диапазоне дат или цен. Спецификация функции представлена на рисунке 1.6.

Рисунок 1.6

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

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

. Фильтрация данных о турах по различным параметрам. Спецификация функции представлена на рисунке 1.7.

Рисунок 1.7

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

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

. Предоставление сведений о клиентах. Спецификация функции представлена на рисунке 1.8.

Рисунок 1.8

Входной информацией для функции являются данные, содержащиеся в наборе данных - о наименовании страны, о наименовании тура.

Выходной информацией является:

) представление на экране дисплея списка клиентов, содержащего: номер заказа, наименование страны, наименование тура, ФИО клиента, пол, возраст, дату рождения, номер и серию загранпаспорта, срок действия загранпаспорта, телефон, мобильный телефон, адрес электронной почты клиента;

) организация вывода данных на печать.

. Выборка данных по виду тура, по срокам, по длительности пребывания, по стоимости путевки, по стране назначения. Спецификация функции представлена на рисунке 1.9.

Рисунок 1.9

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

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

. Определение количества путевок проданных за месяц / квартал / полугодие / год. Спецификация функции представлена на рисунке 1.10.

Рисунок 1.10

Входной информацией являются данные, содержащиеся в наборе данных о наименовании страны, сведения о турах.

Выходной информацией является:

) представление на экране дисплея диаграммы (зависимость - страна / количество туров) продаж путевок в зависимости от выбранных параметров (параметры - месяц / квартал / полугодие / год);

) организация вывода диаграммы на печать.

. Определение количества стран, по которым продано больше всего путевок. Спецификация функции представлена на рисунке 1.11.

Рисунок 1.11

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

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

. Определение числа постоянных клиентов. Спецификация функции представлена на рисунке 1.12.

Рисунок 1.12

Входной информацией являются сведения о клиентах содержащиеся в наборе данных.

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

. Определение количества мало востребованных туров. Спецификация функции представлена на рисунок 1.13.

Рисунок 1.13

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

Выходной информацией является:

) представление на экране дисплея списка сведений о турах упорядоченных в соответствии с указанными параметрами, содержащего: наименование тура, вид тура, название отеля, дату заезда, длительность пребывания, стоимость путевки, количество путевок;

) количество свободных путевок, которые предварительно необходимо вычислить.

. Определение прибыли за прошедший месяц / квартал / полугодие / год. Спецификация функции представлена на рисунке 1.14.

Рисунок 1.14

Для формирования входной информации необходимо рассчитать общее число всех туров содержащихся в наборе данных.

Выходная информация представляет собой диаграмму на основании информации полученной на входе.

. Предоставление списка клиентов забронировавших билеты на указанный вид транспорта. Спецификация функции представлена на рисунке 1.15.

Рисунок 1.15

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

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

. Формирование отчетов. Спецификация функции представлена на рисунке 1.16.

Рисунок 1.16

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

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

«страна / тур / сведения о туре / сведения о туристах»;

«номер заказа / страна / тур / вид тура / отель / дата заезда / длительность пребывания / стоимость / вид транспорта / номер транспорта / пункт отправления / пункт назначения / дата и время отправления / дата и время прибытия / сведения о клиенте»;

–   «страна / описанние страны / фото».

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

 

1.4.2 Качественные требования

Надежность

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

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

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

. Работа не должна зависеть от вариантов загрузки.

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

Дружественность

. Удобный и понятный для пользователя интерфейс.

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

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

. Наличие «всплывающих» подсказок.

. Наличие инструкции по работе с программным продуктом.

 

1.4.3 Требования к быстродействию

1. Скорость реализации действий не должна зависеть от качеств ПК.

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

 

.4.4 Минимальные технические требования для работы с программным продуктом

1. Программный продукт должен работать на ПК типа IBM PC с процессором, поддерживающим платформу WIN32.

. Оперативная память - не менее 128 Мб.

. Дисковое пространство - от 100 Мб.

. Монитор с установленным разрешением не менее 1024х768 пикселей.

. Манипулятор типа «мышь».

. Дисковод 3.5” или привод для чтения CD-ROM.

7. Операционная система Windows 9x, Windows 2000, Windows ХР, Windows Vista.

 

1.5 Требования к условиям выполнения работ по проектированию


Исполнитель должен представить программный продукт в срок до 25 мая 2010 года.

 

1.6 Порядок контроля и проверки системы

 

.6.1 Требования к приемо-сдаточным испытаниям

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

) предварительные испытания;

) опытная эксплуатация;

) приемочные испытания.

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

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

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

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

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

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

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

 

1.6.2 Требования к составу и содержанию работ по установке программного продукта на ПК

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

 

1.7 Требования к документированию


Изготовитель программного продукта обязан предоставить следующие документы:

. Инструкцию пользователя программы;

. Руководство по установке.

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

2. Технологический раздел

 

.1 Выбор методов реализации [2]


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

В качестве методов реализации выбранной темы рассматривались несколько вариантов:

иерархическая модель данных;

сетевая модель данных;

реляционная модель данных.

Иерархическая модель данных (ИМД), основана на понятии деревьев, состоящих из вершин и ребер. Вершине дерева ставится в соответствие совокупности атрибутов данных, характеризующих некоторый объект. Вершины и ребра дерева как бы образуют иерархическую древовидную структуру, состоящую из n уровней. Данный метод реализации выбранной темы не приемлем, так как операции в ИМД имеют нелогичный позаписный характер. Механизмы доступа к данным и перемещения по структуре данных в таких моделях достаточно сложны и существенным образом опираются на концепцию текущего состояния механизма доступа. Отношение "многие-ко-многим" реализуется очень сложно, дает громоздкую структуру и требует хранения избыточных данных, иерархическая упорядоченность усложняет операции удаления и добавления, доступ к любой вершине возможен только через корневую вершину, что увеличивает время доступа, сложно осуществить поиск и сортировку данных.

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

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

) доступ к данным свободен от двусмысленности;

) автоматически поддерживается целостность данных;

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

) удобно использовать для хранения любого количества любых данных, особенно если данные однородные;

) полная независимость данных;

) возможна выборка по заданным условиям;

) легко осуществить поиск данных.

 

2.2 Выбор среды и языка программирования


Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на «быструю разработку». В основе систем быстрой разработки или RAD-систем (Rapid Application Development) лежит технология визуального проектирования и событийного программирования. Ее суть заключается в том, что среда разработки берет на себя большую рутинной работы, оставляя программисту работу по конструированию окон и созданию функций обработки событий повышая этим производительность работы программиста.

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

Рынок программных продуктов предлагает множество сред для автоматизации программирования, самыми популярными из которых являются MS Access, Visual C++, Borland Delphi, Borland С++ Builder. В большинстве случаев языки программирования нельзя сравнивать между собой без связи с решаемыми задачами. Кратко рассмотрим их особенности:

1) MS Access - реляционная СУБД <#"513894.files/image017.gif">

Рисунок 3.1

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

Выходной информацией является:

) представление на экране дисплея списка стран с описанием и фотографией,

1)  расчет минимальной стоимости тура для страны.

2. Хранение и доступ к данным о турах. Спецификация функции представлена на рисунке 3.2.

Рисунок 3.2

Входной информацией является:

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

) наименование страны, содержащейся в наборе данных.

Выходной информацией является:

) представление на экране дисплея списка туров для страны с указанием: наименования тура, вида тура, названия отеля, даты заезда, длительности пребывания, стоимости путевки, количества путевок;

) расчет числа туров;

) расчет числа свободных путевок.

. Хранение и доступ к данным о клиентах. Спецификация функции представлена на рисунке 3.3.

Рисунок 3.3

Входной информацией являются:

) данные загранпаспорта - ФИО клиента, номер и серия загранпаспорта, возраст клиента, пол клиента, дата рождения, дата окончания действия загранпаспорта;

) контактная информация - номер телефона;

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

Выходной информацией является:

) представление на экране дисплея списка клиентов забронировавших тур с указанием: ФИО, пола, возраста, даты рождения, номера и серии загранпаспорта, срока действия загранпаспорта, телефона.

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

) расчет тура для группы клиентов. Для каждой возрастной группы значение скидки постоянно и неизменно (взрослый - полная стоимость, ребенок (5 - 10 лет) - скидка 20%, ребенок (11-16 лет) - скидка 5%).

. Хранение и доступ к данным об отелях. Спецификация функции представлена на рисунке 3.4.

Рисунок 3.4

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

Выходной информацией является:

) представление на экране дисплея списка отелей с описанием в виде текста и фотографией;

) организация возможности быстрого поиска по наименованию отеля.

. Хранение и доступ к данным о забронированных билетах. Спецификация функции представлена на рисунке 3.5.

Рисунок 3.5

Входной информацией является письменный документ или иной источник информации (файл, данные полученные по информационной сети (например, Internet), или др.), содержащий сведения о виде транспорта, пункте отправления, дате и времени отправление, пункте назначения, дате и времени прибытия, номере транспорта (рейс / поезд / паром / автобус / самолет).

Выходной информацией является представление на экране дисплея сведений о введенных данных о билете - номер транспорта (номер рейса / поезда / парома / автобуса / самолета), вид транспорта, пункт отправления, дата и время отправления, пункт назначения, дата и время прибытия.

. Выборка данных в указанном диапазоне дат или цен. Спецификация функции представлена на рисунке 3.6.

Рисунок 3.6

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

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

. Фильтрация данных о турах по различным параметрам. Спецификация функции представлена на рисунке 3.7.

Рисунок 3.7

Входной информацией являются данные о турах, содержащиеся в наборе данных.

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

. Предоставление сведений о клиентах забронировавших тур. Спецификация функции представлена на рисунке 3.8.

Рисунок 3.8

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

Выходной информацией является представление на экране дисплея списка клиентов, содержащего: номер заказа, наименование страны, наименование тура, ФИО клиента, пол клиента, возраст клиента, дату рождения, номер и серию загранпаспорта, срок действия загранпаспорта, телефон.

. Выборка данных по виду, по срокам, по длительности, по стоимости, по стране. Спецификация функции представлена на рисунке 3.9.

Рисунок 3.9

Входной информацией являются данные о наименовании стран, сведения о турах содержащиеся в наборе данных.

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

. Составление отчетов. Спецификация функции представлена на рисунке 3.10.

 

Рисунок 3.10

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

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

) «Отчет о бронировании туров» представляет собой: название страны, название тура, сведения о клиентах - номер заказа, ФИО клиента, пол, возраст, дата рождения, номер и серия загранпаспорта, контактная информация - телефон.

) «Туристическая путевка» представляет собой: номер заказа, название страны, название тура, вид тура, название отеля, дата заезда, длительность пребывания, стоимость путевки, вид транспорта, номер транспорта (номер рейса / поезда / парома / автобуса / самолета), пункт отправления, дата и время отправления, пункт назначения, дата отправления и время прибытия, сведения о туристе - ФИО, пол, возраст, дата рождения, номер и серия загранпаспорта».

 

3.1.2 Расчет нормирования работы на создание программного продукта с учетом частного технического задания

Определим трудоемкость и численность исполнителей при разработке дипломного проекта «Разработка информационной системы туристического агентства» с учетом внешних спецификаций, определенных в пункте 3.1.1.

Планируемый срок разработки - 120 дней.

Исходные данные:

Количество разновидностей форм входной информации - 10;

в том числе:

банка данных(БД) - 8;

нормативно-справочной информации (НСИ) - 2;

Количество разновидностей форм выходной информации - 5;

Степень новизны - Г (привязка типовых проектных решений).

Сложность алгоритма - 3, алгоритмы, реализующие стандартные методы решения, а также не предусматривающие применения сложных численных и логических методов.

Объем входной информации - не превышает 50 тысяч документострок.

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

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

Проект разрабатывается с учетом обработки информации в режиме работы в реальном времени (РВ).

Язык программирования - Borland C++ Builder5.

Для определения трудоемкости разработки задачи следует пользоваться поправочными коэффициентами [3].

При использовании информации различных видов поправочный коэффициент на стадиях «Технический проект» и «Рабочий проект» рассчитывается по формуле:

     (3.1)

где

Кn - поправочный коэффициент;

К1, К2, К3 - поправочные коэффициенты согласно табл. 1.1 и 1.2)

m - количество наборов данных переменной информации (ПИ);

n - количество наборов данных нормативно-справочной информации (НСИ);

p - количество наборов данных информации при использовании банка данных.

Определяем поправочные коэффициенты:

Согласно таблице 1.1 [2] поправочный коэффициент для определения трудоемкости работ на стадии «Технический проект»:

К1 = 0        К2 = 0.43    К3 = 1.25    m=0   n=2    p=8

 (3.2)

Кп = 1.08

Согласно таблице 1.2 [2] поправочный коэффициент для определения трудоемкости работ на стадии «Рабочий проект»:

К1 =0         К2 = 0,29    К3 = 0,24    m=0   n=2    p=8

 (3.3)

Кп = 0.25

В случае применения нескольких коэффициентов общий поправочный коэффициент (Кобщ) определяется как произведение всех применяемых коэффициентов по следующей формуле:

 (3.4)   где

К1 х К2 х … Кn - поправочные коэффициенты, учитывающие влияние качественных факторов на изменение затрат времени при выполнении конкретной стадии проектирования;

Кобщ - общий поправочный коэффициент (i-го вида работы).

 

3.1.3 Расчет затрат времени на разработку дипломного проекта с учетом частного технического задания


Таблица 3.1 - Определение затрат времени по стадиям разработки проекта с учетом частного технического задания

Стадия разработки проекта

Затраты времени

Поправочный коэффициент

Затраты времени с учетом поправочного коэффициента


Значение чел. Дней

основание

значение

основание


Разработка технического задания

1.1. Затраты времени разработчика постановки задачи

30

Таблица 4.1 норма Е5

0,65

Примечание  к таблице 4.1

19.5

1.2.Затраты времени разработчика программного обеспечения



0,35


10.5

2. Разработка эскизного проекта

2.1. Затраты времени разработчика постановки задачи

35

Таблица 4.2 норма Е5

0,7

Примечание  к таблице 4.2

24.5

2.2.Затраты времени разработчика программного обеспечения



0,3


10.5

3. Разработка технического проекта

3.1. Затраты времени разработчика постановки задачи

109

Таблица 4.5 норма - Г10

К2 = 0.43 К3 = 1.25 Кп = 1.08 К4 = 1.0 К5 = 1.26 Кобщ =1.36

п. 1.7 (таблица 1.1) п. 1.7 (таблица 1.1) Кп=(К1m*К2n*К3*p)/(m+n+p) п. 1.7 (таблица 1.3) п. 1.9 (таблица 1.5) Кобщ = Кп * К4 * К5

148.2

3.2.Затраты времени разработчика программного обеспечения

36

Таблица 4.6 норма - Г10



48.96

4. Разработка рабочего проекта

4.1. Затраты времени разработчика постановки задачи

65

Таблица 4.31 норма - Г10

К2= 0.29 К3= 0.24 Кп= 0.25 К4=1.00 К5 = 1.07 К6 = 1.32 К7 = 0.8 Кобщ= 0.28

п.1.7( таблица 1.1)  п.1.7( таблица 1.2)  Кп =(К1m*К2n*К3*p)/(m+n+p) п. 1.7(таблица 1.3) п. 1.8(таблица 1.4) п. 1.9(таблица 1.5) п. 1.11 Кобщ=Кп * К4 * К5 * К6 * К7

18.2

4.2. .Затраты времени разработчика программного обеспечения

203

Таблица 4.32 норма - Г10



56.84

5. Внедрение

5.1. Затраты времени разработчика постановки задачи

58

Таблица 4.57 норма - Г10

 п.1.8( таблица 1.4)  п.1.9( таблица 1.5) п.1.16 Кобщ = К1 * К2 * К3

81.2

5.2.Затраты времени разработчика программного обеспечения

54

Таблица 4.58 норма - Г10



75.6

ИТОГО

 494


Расчет общей трудоемкости разработки проекта (Тоб) производится по формуле:

 (3.5)

где

t - трудоемкость работ по стадиям проектирования (от 1 до n)

Тоб = 494 чел/дней в соответствии с таблицей 3.1.

Полученную общую трудоемкость разработки проекта разделим на 5

 

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

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

 

3.2 Проектирование структуры программы [4]


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

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

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

3.2.1 Нормализация таблиц при проектировании базы данных [4]

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

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

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

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

Первая нормальная форма

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

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

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

Вторая нормальная форма

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

Третья нормальная форма

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

Четвертая нормальная форма

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

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

Пятая нормальная форма

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

 

3.3 Декомпозиция задачи


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

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

Нисходящий подход демонстрируется в концепции модели «сущность-связь». В этом случае работа начинается с выявления сущностей и связей между ними.

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

Проектирование - «сверху вниз»

Программирование - «снизу вверх»

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

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

Рисунок 3.11 - Полная декомпозиция задачи

3.4 Разработка структуры хранения данных [4]


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

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

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

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

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

·        Тип поля - определяет тип данных, которые могут содержаться в данном поле.

·        Размер поля - определяет предельную длину (в символах) данных, которые могут размещаться в данном поле.

·        Формат поля - определяет способ форматирования данных в ячейках, принадлежащих полю.

·        Маска ввода - определяет форму, в которой вводятся данные в поле (средство автоматизации ввода данных).

·        Индексированное поле - если поле обладает этим свойством, все операции, связанные с поиском или сортировкой записей по значению, хранящемуся в данном поле, существенно ускоряются.

В таблицах баз данных для работы используются следующие типы данных.

·        Текстовый - тип данных, используемый для хранения обычного неформатированного текста ограниченного размера (до 255 символов).

·        Числовой - тип данных для хранения действительных чисел.

·        Поле Мемо - специальный тип данных для хранения больших объемов текста (до 65 535 символов). Физически текст не хранится в поле. Он храниться в другом месте базы данных, а в поле храниться указатель на него, но для пользователя такое разделение заметно не всегда.

·        Дата/время - тип данных для хранения календарных дат и текущего времени.

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

·        Счетчик - специальный тип данных для уникальных (не повторяющихся в поле) натуральных чисел с автоматическим наращиванием. Естественное использование - для порядковой нумерации записей.

·        Графическое изображение - тип для хранения графического изображения.

При разработке программы дипломного проекта были спроектированы следующие таблицы базы данных:

Таблица «Страны» - TabStran.db

Название поля

Тип данных

Размер

Ключ

Название страны

Текстовый

25

*

Описание страны

поле Мемо

240


Фото

Графическое изображение



Стоимость путевок (min значение)

Числовой



Количество путевок (min значение)

Числовой



Таблица «Туры» - TabTurov.db

Название поля

Тип данных

Размер

Ключ

Код

Счетчик

+/-

*

Название страны

Текстовый

25


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

Текстовый

50


Вид тура

Текстовый

30


Код отеля

Текстовый

10


Название отеля

Текстовый

25


Дата заезда

Дата/время



Длительность тура

Числовой



Сведения о туре

поле Мемо

240


Стоимость

Денежный



Количество путевок

Числовой




Таблица «Заказы» - TabBrony.db

Название поля

Тип данных

Размер

Ключ

Код

Счетчик

+/-

*

Номер заказа

Текстовый

30


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

Текстовый

50


Фамилия

Текстовый

20


Имя

Текстовый

10


Отчество

Текстовый

20


Возраст

Текстовый

4


Пол

Текстовый

2


Номер загранпаспорта

Числовой



Серия загранпаспорта

Текстовый

10


День рождения

Числовой



Месяц рождения

Текстовый

10


Год рождения

Числовой



Телефон

Текстовый

15



Таблица «Отели» - TabHotel.db - справочная таблица.

Название поля

Тип данных

Размер

Ключ

Код

Текстовый

10

*

Название отеля

Текстовый

25


Описание отеля

поле Мемо

240


Фото отеля

Графическое изображение



Название страны

Текстовый

25



Таблица «Билеты» - TabReys.db

Название поля

Тип данных

Размер

Ключ

Код

Счетчик

+/-

*

Номер заказа

Текстовый

30


Номер транспорта

Текстовый

10


Вид транспорта

Текстовый

8


Пункт отправления

Текстовый

20


Пункт назначения

Текстовый

25


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

Дата



Время отправления

Время



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

Дата



Время прибытия

Время




Таблица «Отели2» - TabNameHotelLookUp.db - временная таблица, которая служит для хранения промежуточных значений данных.

Название поля

Тип данных

Размер

Ключ

Код

Счетчик

+/-

*

Код отеля

Текстовый

10


Название отеля

Текстовый

25



3.5 Инфологическая модель структуры хранения данных


Инфологическая модель структуры хранения данных представлена на рисунке 3.12.

1. Таблица «Страны»  Название страны *  Описание   Фото   Стоимость путевок (min значение)   Всего туров  

2. Таблица «Туры»  Код *  Название страны   Название тура   Вид тура   Код отеля   Название отеля   Дата заезда   Длительность   Сведения о туре   Стоимость   Количество путевок  

3. Таблица «Заказы»  Код *  Номер заказа   Название тура   Фамилия   Имя   Отчество   Возраст   Пол   № загранпаспорта   Серия загранпаспорта   День рождения   Месяц рождения   Год рождения   Телефон  

4. Таблица «Отели»  Код *  Название отеля   Описание   Фото   Название страны  

5. Таблица «Отели2»  Npp *  Код отеля   Название отеля   

6. Таблица «Билеты»  Код *  Номер заказа   Номер транспорта   Вид транспорта   Пункт отправления   Пункт назначения   Дата отправления   Время отправления   Дата прибытия   Время прибытия  

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

Рассмотрим подробнее.

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

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

Таблица «Туры» связана с тура таблицей «Заказы» связью один -ко-многим - в такой связи каждому названию тура из таблицы «Туры» соответствует несколько записей о клиентах в таблице «Заказы». Связь установлена по полю Название тура. В таблице «Туры» оно является вторичным индексом и в таблице «Заказы» - вторичным индексом.

Таблица «Заказы» связана с таблицей «Билеты» связью один -ко-многим - в такой связи каждой записи номера заказа из таблицы «Заказы» соответствует несколько записей о билетах из таблице «Билеты». Связь установлена по полю Номер заказа. В таблице «Заказы» и в таблице «Туры» оно является вторичным индексом.

Таблица «Отели2» связана с таблицей «Отели» методом LookUp. Организация метода LookUp подробно описана в пункте 4.2.

3.6 Разработка интерфейса программы

 

.6.1 Разработка общего интерфейса [5,6]

Borland C++ Builder 5 является визуальной средой программирования. Вся работа производится в Интегрированной Среде Программирования (IDE - Integrated DevElopment). Особенностью IDE является то, что проектируемый графический интерфейс сразу отображается на экране и разработчик имеет возможность сразу видеть результат своей разработки. Во время разработки будем руководствоваться следующими основными принципами построения интерфейса:

а) соответствия ожиданиям пользователя. Если интерфейс соответствует этим ожиданиям, им очень удобно пользоваться;

б) простота и ясность интерфейса. Простой и ясный интерфейс не отвлекает пользователя от решения ключевых задач;

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

г) возможность настройки. Такие простые возможности, как выбор цвета могут оказать существенное влияние на восприятие интерфейса пользователем;

д) справочная служба. Для предотвращения попадания пользователя в затруднительную ситуацию нужно предусмотреть один из способов:

организовать службу поддержки;

предложить достаточно полную документацию.

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

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

Основные:

) форма «Каталог стран»;

) форма «Каталог туров»;

) форма «Бронирование туров»;

Вспомогательные:

1)  форма «Добавление / редактирование сведений о турах;

2)      форма «Поиск»

)        форма «О клиентах»;

)        форма «Подбор тура»;

)        форма «Запрос на отбор данных по дате»;

)        форма «Запрос на отбор данных по цене»;

)        форма «Отчет о бронирование туров»;

)        форма «Туристическая путевка».

 

.6.2 Форма «Каталог стран»

На форме «Каталог стран» расположено:

таблица стран, с кратким описанием и фотографией страны;

добавление / редактирование / удаление страны и сведений о ней;

быстрый поиск названия страны в списке стран;

на вкладке «Поиск»:

быстрый поиск туров по предложенным критериям;

на вкладке «Операции»:

кнопка «Уровень продаж за период»;

кнопка «Уровень продаж по странам»;

кнопка «Прибыль за период»;

кнопка «Количество продаж за период»;

кнопка «Маршруты со скидкой»;

кнопка «Популярные маршруты».

Просмотр сведений о стране осуществляется на вкладке «О стране».

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

На форме организована возможность быстрого поиска подходящего тура. Для этого необходимо в правой нижней части формы на вкладке «Поиск» ввести параметры для поиска и нажать кнопку «Найти». В соответствии с введенными параметрами будут отобраны все записи о турах находящиеся в наборе данных и выведены на экран монитора в виде списка.

Кнопка «Справка» предлагает пользователю ознакомиться со справкой по работе с программой.

Кнопка «Продолжить» открывает форму «Каталог туров» со списком туров соответствующих выбранной стране.

По нажатию кнопки «Выход» происходит окончание работы программы.

 

3.6.3 Форма «Каталог туров»

Форма «Каталог туров» отражает перечень всех туров для выбранной страны.

На форме «Каталог туров» расположено:

главное меню;

поиск по критериям;

упорядочивание данных по виду тура;

фильтрация данных по отелю;

отбор туров по количеству мест с указанием даты;

кнопка «Заказать»;

кнопка «Динамика продаж»;

кнопка «Другой выбор».

Главное меню формы «Каталог туров» включает в себя следующие пункты:

) Редактирование:

добавить / редактировать сведения о туре. При выборе этого пункта, открывается вспомогательная форма «Добавление / редактирование сведений о туре»;

удалить тур - удаление выбранного тура с предварительным сообщением на удаление;

) Функции:

подобрать тур. При выборе этого пункта, открывается вспомогательная форма «Подбор тура», где необходимо указать параметры для отбора тура;

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

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

сведения о туристах. При выборе этого пункта открывается форма «О туристах», где представлены сведения о туристах забронировавших тур;

постоянные клиенты;

горящие туры;

невостребованные туры.

) Справка включает в себя:

справку по работе с базой данных;

спарвку о программе;

об авторе.

Кнопка «Другой выбор» открывает форму «Каталог стран».

Кнопка «Заказать» открывает форму «Бронирование туров», где пользователю предлагается ввести сведения о клиентах желающих забронировать выбранный тур.

3.6.4 Форма «Бронирование туров»

Общий вид формы «Бронирование туров» представлен на рисунке 3.17.

Рисунок 3.17

Кнопки «Добавить», «Изменить», «Сохранить», «Удалить» - соответственно, добавляют, редактируют, сохраняют и удаляют сведения о клиентах.

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

Кнопка «Каталог туров» открывает форму «Каталог туров», которая предоставляет возможность выбора нового тура.

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

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

При нажатии кнопки «Справка» - выводится справочная информация по работе с программой.

Кнопи «Новый билет», «Бронировать», «Удалить бронь», «Изменить бронь» служат, соответственно, для введения данных о новом билете, занесения данных о забронированном билете в базу данных, удаления брони билета, редактирования данных брони билета.

 

3.6.5 Форма «Добавление / редактирование сведений о турах»

Форма «Добавление / редактирование сведений о турах» представлена на рисунке 3.18.

Рисунок 3.18

Форма разделена на 2 части. Левая часть - добавление / редактирование сведений о туре, правая часть - работа с данными таблицы «Отели».

При заполнении поля «Код отеля» правой части формы достаточно ввести код выбранного отеля, и в поле «Наименование отеля» название отеля отобразится автоматически (технология LookUp подробно рассмотрена в пункте 4.2).

Кнопка «Новая запись» служит для добавления нового тура и сведений о нем.

Кнопка «Отменить» служит для отмены всех действий и возвращает на форму «Каталог туров».

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

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

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

 

3.6.6 Форма «О клиентах»

Форма «О клиентах» представлена на рисунке 3.19.

Рисунок 3.19

Форма «О клиентах» отражает сведения обо всех клиентах, которые забронировали тур.

Кнопка «Справка» служит для вызова справочной информации по работе с программой.

Кнопка «ОК» служит для закрытия формы «О клиентах» и открытия формы «Каталог туров».

 

3.6.7 Форма «Подбор тура»

Форма «Подбор тура» представлена на рисунке 3.20.

Рисунок 3.20

В форме «Подбор тура» предлагается ввести параметры для отбора сведений о турах.

Кнопка «Найти» служит для нахождения сведений о турах согласно введенным параметрам.

Кнопка «Отменить» служит для отмены всех действий.

 

3.6.8 Форма «Запрос на выборку в диапазоне дат»

Форма «Запрос на выборку по дате» представлена на рисунке 3.21.

Рисунок 3.21

Кнопка «Отмена» отменяет все действия.

 

.6.9 Форма «Запрос на выборку в диапазоне цен»

Форма «Запрос на выборку по цене» представлена на рисунке 3.22.

Рисунок 3.22

В данную форму необходимо ввести начальное и конечное значение цены и нажать кнопку «ОК».

Кнопка «Отмена» отменяет все действия.

 

3.6.10 Форма «Отчет о бронировании туров»


Форма «Отчет о бронировании туров» представлена на рисунке 3.23.

Рисунок 3.23

Для того чтобы сформировать «Отчет о бронировании туров» необходимо нажать кнопку «Отчет» на форме «Бронирование туров». Отчет содержит сведения о наименовании страны, наименовании тура, описании тура, данные о клиентах забронировавших тур.

3.6.11 Форма «Туристическая путевка»

Форма «Туристическая путевка» представлена на рисунке 3.24.

Рисунок 3.24

Для того чтобы оформить туристическую путевку для клиента, необходимо нажать кнопку «Оформить туристическую путевку» на форме «Бронирование туров».

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

3.6.12 Компоненты интерфейса

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

Компоненты Borland Builder делятся на два вида: визуальные - видимые во время разработки и работы программы, и невизуальные - видимые только во время разработки.

В программе для создания интерфейса были использованы следующие компоненты:

Визуальные

TEdit (окно редактирования) - служит для отображения, редактирования и ввода небольших однострочных текстов.

TLabel (метка) - служит для отображения текста, не изменяемого пользователем.

TPanel (панель) - контейнер для группирования органов управления и других контейнеров. Также используется для построения полос состояния палитры инструментов и т.д.

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

TUpDown - компонент представляет собой счетчики. С помощью UpDown создаются спаренные кнопки, с помощью которых прокручивают некоторый компонент, который связывается с данными.

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

TBitBtn - это управляющая кнопка, на поверхности которой можно располагать изображение.

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

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

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

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

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

TDBMemo - позволяет отображать и редактировать данные поля, в частности, типа MEMO и BLOB.

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

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

TQRLabel - надпись, содержащая текст (аналог надписи Label), может размещаться на любой полосе.

TQRDBText - значение поля записи, обычно размещается в полосе данных.

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

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

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

TDBLookUpComboBox - компонент, предназначенный для выбора значения из выпадающего списка. Компонент связывается с полем «своего» набора данных через инспектр объектов.

Невизуальные

DataSource - невизуальный компонент источника данных - обеспечивает интерфейс между компонентом набора данных и средствами визуализации.

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

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

TOpenPictureDialog - вызывает стандартные диалоги Windows открытия и сохранения файлов изображений.

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

MainMenu - позволяет конструировать и создавать на форме полосу главного меню, а также сопутствующие выпадающие меню.

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

4. Технический проект

 

.1 Разработка технического проекта [4]


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

Приложения С++ Builder 5 могут осуществлять доступ к локальным и удаленным базам данных с использованием механизма BDE. BDE представляет собой совокупность динамических библиотек и драйверов, обеспечивающих доступ к данным. Приложение через BDE передает запрос к базе данных, а обратно получает требуемые данные.

Для работы с таблицами баз данных при проектировании приложения используем программу Database Desktop, которая позволяет:

создавать таблицы;

изменять структуры;

редактировать записи.

В начале создания новой таблицы в окне Create Table программы Database Desktop выбирается ее формат. Затем, определяется структура таблицы, в которой выполняются следующие действия:

описание полей;

создание ключа;

задание индексов;

определение ограничений на значение полей;

определение условий (ограничений) ссылочной целостности;

задание паролей;

задание языкового драйвера;

задание таблицы для выбора значений.

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

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

При конструировании формы невизуальные компоненты, используемые для доступа к данным через механизм BDE, такие как DataSource, Table, размещаются в форме, но при выполнении приложения эти компоненты не видны. Поэтому их можно размещать в любом удобном месте формы, которая для них является контейнером - модулем. Для размещения невизуальных компонентов, через которые осуществляется доступ к данным, предназначен объект - модуль данных. Модуль данных позволяет:

отделить управление базой данных от обработки данных;

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

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

При разработке программы дипломного проекта рассматривался простой модуль данных, который представлен объектом DataModule - DataModulTurAg на котором размещены компоненты доступа к данным -

TVibStrani, DataSVibStrani,, DataSTuri,, DataSZakaz,, DataSLookUpOtely,, DataSHotelLookUp,, DataSBilet.

При обращении к содержащимся в модуле данных компонентам для них указывается составное имя, в которое, кроме имени компонента, входит имя модуля данных.>TTuri->Refresh();

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

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

void __fastcall TForm2::InsertTurClick(TObject *Sender)

{

DataModulTurAg->TTuri->Insert();

FormDobav->Tag=0;

FormDobav->ShowModal();

if (FormDobav->Tag)

{

DataModulTurAg->TTuri->Refresh();

}

}

) редактирование данных. Редактирование происходит при помощи метода Edit() - разрешает редактирование данных в таблице.

void __fastcall TFormBrony::BitEditClick(TObject *Sender)

{

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString=EZakaz->Text;

}

) удаление данных. Удаление данных происходит при помощи метода Delete() - удаляет активную запись и устанавливает указатель записи на следующую запись таблицы.

DataModulTurAg->TVibStrani->Delete();

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

void __fastcall TFormDobav::BSaveAndExitClick(TObject *Sender)

{

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("VidTura")->AsString=CBVidTura->Text;

DataModulTurAg->TTuri->FieldByName("Hotel")->AsString=

DataModulTurAg->THotelLookUp->FieldByName("NameHotel")->AsString;

DataModulTurAg->TTuri->Post();

}

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

void __fastcall TForm3::BitBNaytiClick(TObject *Sender)

{ //Организация поиска методом Locate поиск по названию страны

TLocateOptions Options;

Options.Clear();

if (!DataModulTurAg->TVibStrani->Locate("Strana",Edit2- >Text,Options))

ShowMessage ("Такой страны не найдено" + Edit2->Text);

}

) вычисление текущей даты__fastcall TForm3::FormShow(TObject *Sender)

{

int n;

AnsiString stDay[7] = {"воскреcенье","понедельник","вторник","среда",

"четверг","пятница","суббота"};

AnsiString stMonth[12] = {"января", “февраля","марта","апреля",

"мая","июня","июля","августа","сентября",

"октября","ноября","декабря"};

TDateTime Todey;

Word Year, Month, Day;= Now();

DecodeDate(Todey, Year, Month, Day);

Label8-> Caption = "Сегодня: " + IntToStr(Day) + " " + stMonth[Month-1] + " " +

IntToStr(Year) + " года, " + stDay[DayOfWeek(Todey) -1];

7) вычисление min стоимости тура из списка туров для указанной страны.

Для технической реализации данной функции используем компонент Query с параметром, где вместо параметра указывается название страны. Компонент Query [4] представляет собой набор данных, записи которого формируются в результате выполнения SQL-запроса. Текст запроса, на основании которого в набор данных отбираются записи, содержится в свойстве SQL типа TStrings. Запрос включает в себя команды на языке SQL и выполняется при открытии набора данных с помощью вызова его методов ExecSQL или Open.

SQL-текстmin(Cena)TabTurov(Strana=:Strana)код__fastcall TForm3::FormShow(TObject *Sender)

{

DataModulTurAg->TVibStrani->Refresh();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TVibStrani->First();

for (int i=0;i<DataModulTurAg->TVibStrani->RecordCount;i++)

{

QMin->Close();

QMin->Params->Items[0]->AsString=DataModulTurAg->TVibStrani

>FieldByName("Strana")->AsString;

if (QMin->Prepared)

QMin->Prepare();

QMin->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Stoim")

>AsCurrency=QMin->FieldByName("MIN OF Cena")->AsCurrency;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TVibStrani->Next();

}

DataModulTurAg->TVibStrani->First();

}

) вычисление общего числа туров для страны.

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

SQL-текстCOUNT(*)TabTurovStrana=:Strana

код__fastcall TForm2::FormShow(TObject *Sender)

{

QTurov->Close();

QTurov->Params->Items[0]->AsString=>TVibStrani->FieldByName("Strana")->AsString;

QTurov->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")

>AsInteger=QTurov->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TVibStrani->Refresh();

//------------------------------------------------------------------------------------------__fastcall TForm3::FormShow(TObject *Sender)

{

int n;

DataModulTurAg->TVibStrani->First();

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TVibStrani->RecordCount;i++)

{

for (int j=0;j<DataModulTurAg->TTuri->RecordCount;j++)

{

n=DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger;

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger=n;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TVibStrani->Next();

}

}

DataModulTurAg->TVibStrani->First();

}

) фильтрация данных.__fastcall TForm2::BitVypClick(TObject *Sender)

{

AnsiString s=0,t=0;

DataModulTurAg->TTuri->Cancel();

s=DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

t=DataModulTurAg->TTuri->FieldByName("Strana")->AsString;

DataModulTurAg->TTuri->Filtered=false;

if (s == t)

{

DataModulTurAg->TTuri->Filtered=true;

DataModulTurAg->TTuri->Filter="((KolMest>="+(EKol1

->Text)+")and(KolMest<="+(EKol2->Text)+

"))and((DataZaezda>='"+DateToStr(DTData1

->Date)+"')and(DataZaezda<='"+DateToStr(DTData2->Date)+"'))";

}

else return;

}

) подбор тура.__fastcall TForm2::NParamClick(TObject *Sender)

{

FormPodborTura->Tag=0;

FormPodborTura->ShowModal();

if (FormPodborTura->Tag)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter=

"(((DataZaezda>='"+DateToStr(FormPodborTura->DData1->Date)+

"')AND(DataZaezda<='"+DateToStr(FormPodborTura->DData2

->Date)+

"'))AND((KolDney>='"+StrToInt(FormPodborTura->Edit4

->Text)+"')AND(KolDney<='"+

StrToInt(FormPodborTura->Edit3

->Text)+"'))AND((Cena>="+CurrToStr(FormPodborTura->Edit6

->Text)+

")AND(Cena<="+CurrToStr(FormPodborTura->Edit5->Text)+")))";

DataModulTurAg->TTuri->Filtered=true;

}

QTurov->Close();

QTurov->Params->Items[0]->AsString=DataModulTurAg->TVibStran

i->FieldByName("Strana")->AsString;

QTurov->Open();

DataModulTurAg->TTuri->Refresh();

}

) сведения о туристах забронировавших тур.

Для технической реализации данной функции используем компонент Query с параметром, где вместо параметра указывается название тура. Запрос формируется на форме «Каталог туров», результаты запроса передаются на форму «О клиентах».

SQL-текст*TabBrony Tur=:Turкод__fastcall TFormZapOTuristah::FormShow(TObject *Sender)

{

QueryOTuristah->Close();

QueryOTuristah->Params->Items[0]->AsString=DataModulTurAg->TTuri

->FieldByName("Tur")->AsString;

if (! QueryOTuristah->Prepared)

{

QueryOTuristah->Prepare();

}

QueryOTuristah->Open();

if (QueryOTuristah->RecordCount!=0)

DataSOTuristah->DataSet=QueryOTuristah;{ShowMessage ("По вашему запросу ничего не найдено");;

}->Text=IntToStr(DataModulTurAg->TZakaz->RecordCount);

}

) вычисление свободного количества путевок.

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

SQL-текстCOUNT(*)TabBronyTur=:Tur

код__fastcall TForm2::FormShow(TObject *Sender)

{

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TTuri->RecordCount;i++)

{

Form2->QueryTurist->Close();

Form2->QueryTurist->Cancel();

Form2->QueryTurist->Params->Items[0]->AsString=

DataModulTurAg->TTuri->FieldByName("Tur")->AsString;

if (Form2->QueryTurist->Prepared)

Form2->QueryTurist->Prepare();

Form2->QueryTurist->Open();

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger=

Form2->QueryTurist->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("Ost") ->AsInteger=

DataModulTurAg->TTuri->FieldByName("KolMest")->AsInteger

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger;

DataModulTurAg->TTuri->Post();

DataModulTurAg->TTuri->Next();

}>TTuri->First();

}

) калькуляция расчетов для группы клиентов.

Если необходимо рассчитать тур для группы клиентов, предлагается калькуляция расчетов. Пользователю предлагается выбрать для каждого из группы клиентов возрастной уровень (взрослый / ребенок от 5-10 лет / ребенок от 11-16 лет). Уровень взрослый предполагает оплату стоимости тура в полном объеме, уровень ребенок от 5-10 лет предполагает оплату стоимости тура со скидкой 20%, уровень ребенок от 11-16 лет предполагает оплату стоимости тура со скидкой 5%. Организация калькуляции расчетов представлена на рисунке 4.1.

Рисунок 4.1 - Калькуляция расчетов

__fastcall TFormBrony::BitRaschetClick(TObject *Sender)

{

Currency Summ;

Summ=KonCena1+KonCena2+KonCena3+KonCena4;

ECenaSumm->Text=Summ;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox1Click(TObject *Sender)

{

cena=0,cenaPr20=0,cenaPr5=0;

ECena2->Text=

DataModulTurAg->TTuri->FieldByName("Cena")->AsCurrency;

switch (CBox1->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena2->Text);

ECena2->Text=cena;break; }1:{ cena=StrToCurr(ECena2->Text);

cenaPr20=cena-((cena*20)/100);

ECena2->Text=cenaPr20; break; }2:{ cena=StrToCurr(ECena2->Text);

cenaPr5=cena-((cena*5)/100);

ECena2->Text=cenaPr5;break; }

}=ECena2->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox2Click(TObject *Sender)

{

cena=0,cenaPr20=0,cenaPr5=0;->Text=>TTuri->FieldByName("Cena")->AsCurrency;(CBox2->ItemIndex)

{0:{ cena=StrToCurr(ECena3->Text);

ECena3->Text=cena;break; }1:{ cena=StrToCurr(ECena3->Text);

cenaPr20=cena-((cena*20)/100);

ECena3->Text=cenaPr20; break;}2:{ cena=StrToCurr(ECena3->Text);

cenaPr5=cena-((cena*5)/100);

ECena3->Text=cenaPr5;break;}

}=ECena3->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox3Click(TObject *Sender)

{=0,cenaPr20=0,cenaPr5=0;->Text=>TTuri->FieldByName("Cena")->AsCurrency;(CBox3->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena4->Text);

ECena4->Text=cena;break; }

case 1:{ cena=StrToCurr(ECena4->Text);

cenaPr20=cena-((cena*20)/100);

ECena4->Text=cenaPr20; break ;}

case 2:{ cena=StrToCurr(ECena4->Text);

cenaPr5=cena-((cena*5)/100);

ECena4->Text=cenaPr5;break;}

}=ECena4->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox4Click(TObject *Sender)

{

cena=0,cenaPr20=0,cenaPr5=0; ->Text=>TTuri->FieldByName("Cena")->AsCurrency;(CBox4->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena5->Text);

ECena5->Text=cena;break; }

case 1:{ cena=StrToCurr(ECena5->Text);

cenaPr20=cena-((cena*20)/100);

ECena5->Text=cenaPr20; break;}

case 2:{ cena=StrToCurr(ECena5->Text);

cenaPr5=cena-((cena*5)/100);

ECena5->Text=cenaPr5;break;}

}=ECena5->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitBtn4Click(TObject *Sender)

{

DataModulTurAg->TZakaz->Cancel();

ECena2->Clear();

ECena3->Clear();

ECena4->Clear();

ECena5->Clear();

ECenaSumm->Clear();

}

) поиск тура с главной формы «Каталог стран».

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

Компонент Query с текстом SQL размещен на модуле DataModulTurAg, а вызов осуществляется с формы «Каталог стран» при нажатии кнопки «Найти». Результатом является перечень туров, отобранных в соответствии с указанными критериями, на форме «Каталог туров».

На рисунке 4.2 представлена организация ввода параметров для выполнения поиска.

Рисунок 4.2 - Организация поиска

-текст*

FROM TabTurov (Strana=:Strana) AND

(DataZaezda BETWEEN :Data1 AND :Data2) AND

(KolDney BETWEEN :Dn1 AND :Dn2) AND

(Cena BETWEEN :Cena1 AND :Cena2)код__fastcall TForm3::BNaytiClick(TObject *Sender)

{>QSort2->Close();>QSort2->Params->Items[0]->AsString=Edit3->Text;>QSort2->Params->Items[1]->AsDateTime=Date1->Date;>QSort2->Params->Items[2]->AsDateTime=Date2->Date;>QSort2->Params->Items[3]->AsInteger=StrToInt(Edit4->Text);>QSort2->Params->Items[4]->AsInteger=StrToInt(Edit5->Text);>QSort2->Params->Items[5]->AsCurrency=StrToCurr(Edit6->Text);>QSort2->Params->Items[6]->AsCurrency=StrToCurr(Edit11->Text);>QSort2->Open();

if (DataModulTurAg->QSort2->RecordCount!=0)

DataModulTurAg->DataSTuri->DataSet=DataModulTurAg->QSort2;

else { ShowMessage ("По Вашему запросу ничего не найдено");

}

Form2->Show();

}

) программирование кнопки «Оформить туристическую путевку».

Формирование отчета для кнопки «Оформить туристическую путевку» происходит после нажатия кнопки на форме «Бронирование туров».

Builder-код__fastcall TFormBrony::BKartaTuristaClick(TObject *Sender)

{>QKartaTurista->Close();>QKartaTurista->Params->Items[0]->AsString=

DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString;>QKartaTurista->Open();>QRKartaTurista->Preview();>QRKartaTurista->Print();

}

В процессе программирования в контейнер DataModulTurAg был добавлен компонент Query и в SQL был сформирован запрос.текст

“SELECT a.Strana, a.Tur,a.VidTura,a.Hotel,a.DataZaezda,a.KolDney,

a.Cena,c.Fam,c.Imy,c.Otchestvo,c.Pol,c.Vozr,c.Den,c.Mes,c.God,

c.ZPnom,c.ZPser,b.Zakaz, b.Nomer, b.PunktOtprav, b.PunktNaznach,

b.DataOyprav,b.DataPrib, b.VremOtprav, b.VremNaznach, b.TransportTabReys b, TabTurov aOUTER JOIN TabBrony c ON ((a.Tur=c.Tur) AND (b.Zakaz=c.Zakaz)) (c.Zakaz=:Zakaz)”

Далее формируется отчет и в режиме предварительно просмотра выводится на экран. На отдельной форме разрабатывается отчет, компоненты которого подключаются к Query через инспектор объектов. Форма разработки отчета представлена на рисунке 4.3.

Рисунок 4.3

) формирование отчета «Отчет о бронировании туров».

На форме разрабатывается отчет, элементы которого, через инспектор объектов, подключаются к соответствующим компонентам таблиц базы данных (рисунок 4.4).

Рисунок 4.4 - Форма разработки «Отчет о бронировании туров»

Builder-код__fastcall TFormBrony::BitOtchetClick(TObject *Sender)

{>QROtchet->Preview();>QROtchet->Print();

}

Полный листинг программы представлен в Приложении А.

4.2 Разработка рабочего проекта


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

. Зашита ввода данных.

В поля Название страны, Название тура, Фамилия, Имя, Отчество клиента разрешается вводить только русские буквы и символ «-» (для двойных фамилий и названий туров), иначе программа запрещает ввод с клавиатуры. Идея защиты состоит в том, что перед тем, как отобразится в поле нажатый символ, он анализируется на принадлежность к разрешенному диапазону. Если символ разрешен - символ выводится в окно, если нет - состояние окна не изменяется (символ не отображается).

Ниже приведен соответствующий фрагмент кода для поля Название тура

void __fastcall TFormDobav::DBETurKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я')|| (Key=’-’) || (Key=’ ’))

return;

else Key=0;

}

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

Рисунок 4.5 - Проверка полного ввода

void __fastcall TForm3::BNaytiClick(TObject *Sender)

{

if ((Edit4->Text).Length() == 0)

{

MessageDlg("Укажите длительность 'от' ", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit4->Handle);

return;

}

if ((Edit5->Text).Length() == 0)

{

MessageDlg("Укажите длительность 'до' ", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit5->Handle);

return;

}

if ((Edit6->Text).Length() == 0)

{

MessageDlg("Укажите начальную цену", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit6->Handle);

return;

}

if ((Edit11->Text).Length() == 0)

{

MessageDlg("Укажите конечную цену", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit11->Handle);

return;

}

. Для обеспечения корректного ввода даты используется компонент TDateTimePicker [6], который предназначен для ввода и отображения даты и времени. Компонент очень эффективен за счет появления выпадающего календаря и обеспечивает безошибочный ввод дат и времени.

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

Организация метода LookUp - поле выбора [2,4].

Чтобы создать поле выбора типа LookUp, требуется:

) в Редактор полей для таблицы THotelLookUp выбрать пункт New Field.

) создать в редакторе полей новое поле NameHotel, указав для него тип и размер.

) в группе радиокнопок Field Type указать кнопку LookUp.

) в выпадающем списке Key Fields выбирать ключевое поле из таблицы THotelLookUp. Это поле, по которому установлена связь с другой таблицей. Выбираем поле KodOtely.

) в выпадающем списке DataSet выбрать таблицу, которую будем просматривать - TLookUpOtely.

) в выпадающем списке LookUpKeys выбрать ключевое поле просматриваемой таблицы - Npp.

) в выпадающем списке Result Field выбрать просматриваемое поле - Otely.

Использование поля выбора заключается в том, что пользователь выбирает значение в поле связи KodOtely, содержащем список, который построен на основании значения поля связи Npp. После выбора для поля связи KodOtely из результирующего поля Otely автоматически заносятся соответствующие значения в поле NameHotel. Таким образом, поле связи KodOtely, содержащее список, используется для выбора, а поле NameHotel - для занесения в него значения. На рисунке 4.7 приведена форма создания поля выбора LookUp.

Рисунок 4.7

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

void __fastcall TFormDobav::BSaveAndExitClick(TObject *Sender)

{

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("Hotel")->AsString=

DataModulTurAg->THotelLookUp->FieldByName("NameHotel")->AsString;

DataModulTurAg->TTuri->Post();

}

. Для удобного ввода чисел используется компонент TUpDown [4] представляющий собой счетчик. С помощью TUpDown создается спаренная кнопка, с помощью которой прокручивается некоторый компонент, например TEdit, имя прокручиваемого компонента указывают в свойстве Associate. Пример создание спаренных кнопок представлен на рисунке 4.8.

Рисунок 4.8

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

Рисунок 4.9

__fastcall TDataModulTurAg::TVibStraniBeforeDelete(TDataSet *DataSet)

{

if (Application->MessageBox ("Вы действительно хотите удалить запись?",

"Подтвердите Ваши действия",

MB_YESNOCANCEL + MB_ICONQUESTION) != IDYES)

Abort () ;

}

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

Рисунок 4.10

. При завершении работы программы выводится предупреждающее сообщение. Вид формы сообщения представлен на рисунке 4.11.

Рисунок 4.11

. От неверного ввода данных предусмотрен компонент TComboBox [4], который позволяет пользователю выбирать данные из выпадающего списка, обеспечивая тем самым правильный ввод данных.

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

void __fastcall TFormBrony::EZakazChange(TObject *Sender)

{

int RecordNumber;

AnsiString as=EZakaz->Text;

AnsiString bs;

DataModulTurAg->TZakaz->Edit();

if (EZakaz->Modified)

{

DataModulTurAg->TZakaz->First();

for (int i=0;i<DataModulTurAg->TZakaz->RecordCount;i++)

{

bs=DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString;

if (as != bs)

{

DataModulTurAg->TZakaz->Next();

}

else { MessageDlg("Запись с таким номером есть", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(EZakaz->Handle);

RecordNumber=DataModulTurAg->TZakaz->RecNo;

DataModulTurAg->TZakaz->Edit();

return;

}

}

}

DataModulTurAg->TZakaz->RecNo=RecordNumber;

}

5. Организационно-экономический раздел

 

.1 Определение трудозатрат на разработку программного продукта

 

.1.1 Общие положения

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

Себестоимость продукта определяется затратами на изготовление продукта:

трудозатраты;

материальные затраты.

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

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

Нормы времени охватывают работы, выполняемые специалистами на следующих стадиях разработки проектных материалов:

) техническое задание;

) эскизный проект;

) технический проект;

) рабочий проект;

) внедрение.

Нормы времени рассчитаны на комплексы задач (задачи) и указаны в человеко-днях при пятидневной рабочей неделе с продолжительностью рабочего дня 8 ч 12 мин. В случае изменения продолжительности рабочего дня нормы времени пересчитываются.

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

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

Наименования комплексов задач определены Общесоюзным классификатором подсистем и комплексов задач АСУ (ОКПКЗ), утвержденным постановлением Госстандарта СССР. 154 от 20 марта 1985 г.

Состав, наименование и назначение задач, входящих в комплекс, регламентируется общеотраслевыми руководящим и методическими материалами по созданию АСУП и типовыми проектными решениями.

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

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

подсистемы: управление материально-техническим снабжением, управление сбытом продукции, управление комплектацией, управление экспортными и импортными поставками;        

подсистемы: управление финансовой деятельностью, бухгалтерский учет;

подсистемы: управление организацией труда и заработной платой, управление кадрами, нормы и нормативы, управление охраной труда;

подсистемы: управление качеством, управление технологическими процессами, управление стандартизацией, управление технической подготовкой производства;

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

подсистема: управление научно-исследовательскими и опытно-конструкторскими работами (НИР и ОКР);

подсистема: управление научно-технической информацией,

подсистема: совершенствование документооборота и контроль исполнения документов;

подсистема: управление охраной природы и окружающей средой;

подсистема: учета пенсий, пособий и страховых операций;

подсистема: статистических задач;

подсистема: задач расчетного характера.

Нормы времени рассчитаны в зависимости от факторов, наибольшим образом влияющих на трудоемкость разработки проекта:

) количества разновидностей форм входной информации (макетов входной информации);

) количества разновидностей форм выходной информации;

) степени новизны комплекса задач (задачи);

) сложности алгоритма;

) вида используемой информации;

) сложности контроля входной и выходной информации;

) языка программирования;

) объема входной информации;

) использования типовых проектных решений (пакетов прикладных программ), типовых проектов, типовых программ, стандартных модулей.

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

Количество разновидностей форм выходной информации включает формы печатных документов и информации, переносимой на машинные носители.

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

Сборником предусмотрены четыре степени новизны разрабатываемых комплексов задач (задачи):

А       - разработка комплекса задач (задачи), предусматривающая применение принципиально новых методов разработки, проведение научно-исследовательских работ;1)

Б       - разработка типовых проектных решений, оригинальных задач и систем, не имеющих аналогов;)

В       - разработка проекта с использованием типовых проектных решений при условии их изменения; разработка проектов, имеющих аналогичные решения;    

Г       - привязка типовых проектных решений.

Сложность алгоритма представлена тремя группами:

) алгоритмы оптимизации и моделирования систем и объектов;

) алгоритмы учета, отчетности, статистики поиска;

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

Трудоемкость разработки проекта зависит также от вида используемой информации:

1.        переменной информации (ПИ);

2.       нормативно-справочной информации (НСИ);

.        банка данных (БД);

.        вида обработки в режиме работы в реальном времени (РВ)

.        обеспечения телекоммуникационной обработки данных и управления удаленными объектами (ТОУ);

.        от объема входной информации.

Сложность организации контроля входной и выходной информации представлена следующими группами:

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

         - входные данные и документы однообразной формы и содержания, осуществляется формальный контроль:

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

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

5.1.2 Расчет нормирования работы на создание программного продукта

Определим трудоемкость и численность при разработке дипломного проекта «Разработка программы по формированию заказа по требованию клиента для автоматизированной системы управления продажами путевок туристического агентства».

Планируемый срок разработки - 120 дней.

Исходные данные:

Количество разновидностей форм входной информации - 18;

в том числе:

банка данных(БД) - 15;

нормативно-справочной информации (НСИ) - 3;

Количество разновидностей форм выходной информации - 14;

Степень новизны - Г (привязка типовых проектных решений).

Сложность алгоритма - 3, алгоритмы, реализующие стандартные методы решения, а также не предусматривающие применения сложных численных и логических методов.

Объем входной информации - не превышает 50 тысяч документострок.

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

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

Проект разрабатывается с учетом обработки информации в режиме работы в реальном времени (РВ).

Язык программирования - Borland C++ Builder5.

Для определения трудоемкости разработки задачи следует пользоваться поправочными коэффициентами [3].

При использовании информации различных видов поправочный коэффициент на стадиях «Технический проект» и «Рабочий проект» рассчитывается по формуле:

          (5.1)

где

Кn - поправочный коэффициент;

К1, К2, К3 - поправочные коэффициенты согласно табл. 1.1 и 1.2[3]

m - количество наборов данных переменной информации (ПИ);

n - количество наборов данных нормативно-справочной информации (НСИ);

p - количество наборов данных информации при использовании банка данных.

Определяем поправочные коэффициенты:

Согласно таблице 1.1[3] поправочный коэффициент для определения трудоемкости работ на стадии «Технический проект»:

К1 = 0        К2 = 0.43    К3 = 1.25    m=0   n=3    p=15

 (5.2)

Кп = 1.11

Согласно таблице 1.2[3] поправочный коэффициент для определения трудоемкости работ на стадии «Рабочий проект»:

К1 =0         К2 = 0.29    К3 = 0.24    m=0   n=3    p=15

 (5.3)

Кп = 0.65

В случае применения нескольких коэффициентов общий поправочный коэффициент (Кобщ) определяется как произведение всех применяемых коэффициентов по следующей формуле:

            (5.4)

где

К1 х К2 х … Кn - поправочные коэффициенты, учитывающие влияние качественных факторов на изменение затрат времени при выполнении конкретной стадии проектирования;

Кобщ - общий поправочный коэффициент (i-го вида работы).

5.1.3 Расчет затрат времени на разработку дипломного проекта


Таблица 5.1 - Определение затрат времени по стадиям разработки проекта

Стадия разработки проекта

Затраты времени

Поправочный коэффициент

Затраты времени с учетом поправочного коэффициента


Значение чел. Дней

основание

значение

основание


Разработка технического задания

1.2. Затраты времени разработчика постановки задачи

42

Таблица 4.1 норма В2

0,65

Примечание  к таблице 4.1

27.3

1.2.Затраты времени разработчика программного обеспечения



0,35


14.7

2. Разработка эскизного проекта

2.1. Затраты времени разработчика постановки задачи

53

Таблица 4.2 норма В2

0,7

Примечание  к таблице 4.2

37.1

2.2.Затраты времени разработчика программного обеспечения



0,3


15.9

3. Разработка технического проекта

3.1. Затраты времени разработчика постановки задачи

187

Таблица 4.5 Норма - Е18

К2 = 0.43 К3 = 1.25 Кп = 1.11 К4 = 1.0 К5 = 1.26 Коб = 1.39

п. 1.7 (таблица 1.1) п. 1.7 (таблица 1.1) Кп=(К1m*К2n*К3*p)/(m+n+p) п. 1.7 (таблица 1.3) п. 1.9 (таблица 1.5) Кобщ = Кп * К4 * К5

260

3.2.Затраты времени разработчика программного обеспечения

54

Таблица 4.6 Норма - Е18



75.06

4. Разработка рабочего проекта

4.1. Затраты времени разработчика постановки задачи

127

Таблица 4.31 Норма - Е18

К2= 0.29 К3= 0.24 Кп= 0.65 К4=1.00 К5 = 1.07 К6 = 1.32 К7 = 0.8 Кобщ= 0.73

п.1.7( таблица 1.1)  п.1.7( таблица 1.2)  Кп =(К1m*К2n*К3*p)/(m+n+p) п. 1.7(таблица 1.3) п. 1.8(таблица 1.4) п. 1.9(таблица 1.5) п. 1.11 Кобщ=Кп * К4 * К5 * К6 * К7

93.27

4.2. .Затраты времени разработчика программного обеспечения

375

Таблица 4.32 Норма - Е18



273.75

5. Внедрение

5.1. Затраты времени разработчика постановки задачи

110

Таблица 4.57 Норма - Е18

 К1=1.07 К2=1.21 К3=1.1 Кобщ=1.4

 п.1.8( таблица 1.4)  п.1.9( таблица 1.5) п.1.16 Кобщ = К1 * К2 * К3

154

5.2.Затраты времени разработчика программного обеспечения

106

Таблица 4.58 норма - Е18



148.4

ИТОГО

 1100.02


Расчет общей трудоемкости разработки проекта (Тоб) производится по формуле:

, (5.5)

где

t - трудоемкость работ по стадиям проектирования (от 1 до n)

Тобщ = 1100 чел/дней

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

 (5.6)

где    Ч - численность специалистов;

Тоб - общая трудоемкость работ;

Фпл - плановый фонд рабочего времени одного специалиста.

Фпл = 4 мес. = 120 дней

Ч =8.4

Норма времени работы ЭВМ при отладке и внедрении программ определяем по таблице 4.92 [2] она равна 56 ч (норма Г - 3).

Определим поправочный коэффициент К.

К = 1.08 (пункт 1.15 таблица 1.7 [2]).

Норма времени () с учетом поправочного коэффициента определяется по следующей формуле:

 (5.7)

где

Нвр - базисная норма времени, определенная по нормативной таблице;

Кобщ - поправочный коэффициент

= 60 часов = 2.5 дня

В связи с тем, что «Типовые нормы времени» были разработаны в 1987 и со временем не менялись и не дополнились, они значительно устарели, приблизительно в 5 раз. Но время не стоит на месте, вычислительная техника и программирование развивается большими темпами, поэтому необходимо учитывать эти изменения. Полученную общую трудоемкость разработки проекта разделим на 5

 

Вывод:

Для разработки всего проекта, как показано из расчетов, потребуется 220 дней, а для выполнения в установленный для дипломного проекта срок потребуется 9 человек. Поэтому для того, чтобы уложится в указанные сроки разработки 120 дней, составлено частное техническое задание, отраженное в пункте 3.1 данного дипломного проекта.

 

5.2 Расчет себестоимости разработки проекта


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

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

. Отчисления в фонды социального страхования и обеспечения.

. Накладные расходы.

. Затраты на работу ЭВМ.

Для разработки программы за планируемый срок 120 дней требуется 1 человек - исполнитель дипломного проекта.

 

5.2.1 Затраты на заработную плату

Затраты на заработную плату включают основную и дополнительную заработную плату.

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

Среднее количество рабочих дней в месяце равно 20-ти. Следовательно, дневная заработная плата определяется делением размера оклада на количество рабочих дней в месяце.

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

К дополнительной зарплате относятся выплаты, предусмотренные законодательством о труде за неотработанное по уважительным причинам время: оплата очередных и дополнительных отпусков и т.п. (принимается в размере 20% от суммы основной заработной платы).

Расчеты заработной платы исполнителя (основной и дополнительной) сведены в таблицу 5.2.1.

Таблица 5.2.1 - Расчеты заработной платы исполнителя   

Стадия разработки

Трудоемкость, чел.-дней

Должность исполнителя

Месячный оклад, руб.

Дневная зарплата, руб.

Основная зарплата, руб.

Дополни тельная зарплата, руб.

1. Разработка технического задания

20

Программист

18000

900

3600

2. Разработка эскизного проекта

40

Программист

18000

900

36000

7200

3. Разработка технического проекта

35

Программист

18000

900

31500

6300

4. Разработка рабочего проекта

20

Программист

18000

900

18000

3600

5. Внедрение

5

Программист

18000

900

1800

360

Всего:

120




105300

21060

 

5.2.2 Отчисления в фонды социального страхования и обеспечения

Отчисления на социальное страхование принимаются равными 5,4 %, в пенсионный фонд - 28%, обязательное медицинское страхование (ОМС) - 3,6%, в фонд содействия занятости - 2% от суммы основной и дополнительной заработной платы. Расчет отчислений представлен в таблице 5.2.2.

Таблица 5.2.2 - Расчет отчислений

Наименование должности

Фонд зарплаты, руб.

Отчисления

Сумма отчислений, руб.



Соц. страхование, руб.

Пенсионный фонд, руб.

ОМС, руб.

Фонд содействия занятости, руб.


Программист

126360,00

6823,44

35380,80

4548,96

2527,20

49280,4

Всего

126360,00





49280,4


5.2.3 Накладные расходы

К накладным расходам относят расходы за коммунальные услуги, канцелярские принадлежности, общехозяйственные расходы и т.п. Накладные расходы (НР) принимаются в размере 30% от суммы основной и дополнительной заработной платы [мет]:

НР = 126360,00*0,3 = 37908,00 руб.

 

5.2.4 Затраты на работу ЭВМ

Расходы на работу ЭВМ рассчитываются как произведение стоимости 1 машино-часа на число часов работы .

Время работы ЭВМ при отладке и внедрении проекта определяется по формуле:

,    (5.2.1)

где НВР - базисная норма машинного времени;, К2 - поправочные коэффициенты.

Норма машинного времени определяется по таблице 4.92 (пункт 1.15 [3]). Время, соответствующее значениям факторов «количество разновидностей форм входной информации» - 11 и «количество разновидностей форм выходной информации» - 5, равно 56 ч (норма 3Г).

По таблице 1.7 [3] определяется величина поправочного коэффициента, учитывающего степень новизны, группу сложности алгоритма и язык программирования (К1 = 0,65).

В разрабатываемой программе используется система управления базами данных (СУБД), поэтому к норме времени работы ЭВМ применяется коэффициент К2 = 1,1 (пункт 1.16 [3]).

Время работы ЭВМ при отладке и внедрении проекта по формуле 5.2.1 составит:

,

в том числе на внедрение 12 ч (20%).

Стоимость часа работы ЭВМ рассчитывается по формуле:

,        (5.2.2)

где С - затраты на содержание и обслуживание ЭВМ (за 120 дней);

Тэвм - полезный фонд времени работы ЭВМ (за 120 дней);- количество машин.

Затраты на содержание и обслуживание ЭВМ рассчитываются по формуле:

С = СЗП + ССФ + СНР + САМ + СРЕМ + СЭЛ,                           (5.2.3)

где СЗП - зарплата обслуживающего персонала;

ССФ - отчисления в социальные фонды;

СНР - накладные расходы;

САМ М - амортизационные отчисления;

СРЕМ - затраты на ремонт оборудования;

СЭЛ - затраты на электроэнергию.

Расчет амортизационных отчислений ведется по формуле:

, (5.2.4)

где СПЕР - первоначальная стоимость оборудования;

А - процент годовой нормы амортизационных отчислений (А=12,5% = 0,125).

Расчет амортизационных отчислений сведен в таблицу 5.2.3.

Таблица 5.2.3 - Затраты на обслуживание ЭВМ

Состав оборудования

Кол-во

Первоначальная стоимость СПЕР, руб.

Амортизационные отчисления САМ, руб.

AMD Athlon 64 X2 4000+/ 2048Mb/ 160Gb Hitachi 7200 SATA-II

1

15519

161.65

Принтер Canon iP 1500

1

2100

21.88

Итого:

183.53


Расчет затрат на ремонт за 120 дней ведется по формуле:

,      (5.2.5)

где Р - процент годовых затрат на ремонт (Р = 9% = 0.09);

СПЕР - первоначальная стоимость оборудования.

Расчет затрат на работу ЭВМ сведен в таблицу 6.4.

Таблица 5.2.4 - Расчет затрат на ремонт

Состав оборудования

Кол-во

Первоначальная стоимость СПЕР, руб.

Затраты на ремонт СРЕМ, руб.

AMD Athlon 64 X2 4000+/ 2048Mb/ 160Gb Hitachi 7200 SATA-II

1

15519

116.39

Принтер Canon iP 1500

1

2100

15.75

Итого:

132.14


Расчет затрат на электроэнергию за 120 дней ведется по формуле:

,         (5.2.6)

где P - мощность оборудования; - время работы оборудования;- цена одного кВт. ч (Z = 2 руб. 31 коп.).

Расчет затрат на электроэнергию сведен в таблицу 5.2.5.

Таблица 5.2.5 - Расчет затрат на электроэнергию

Состав оборудования

Кол-во

Мощность Р, кВт

Время работы оборудования Т, час

Затраты на электроэнергию СЭЛ, руб.

AMD Athlon 64 X2 4000+/ 2048Mb/ 160Gb Hitachi 7200 SATA-II

1

0,25

960

554.4

Принтер Canon iP 1500

1

0,025

10

0.58

Итого:

0,275

960

554.98


По формуле (6.3) затраты на содержание и обслуживание ЭВМ составят:

С = 126360 + 49280.4 + 37908 + 183.53 + 132.14 + 554.98 = 176890.85 руб.

По формуле (7.2) стоимость часа работы ЭВМ составит:

Общее время работы ЭВМ составит примерно 960 ч (120 дней по 8 ч), в том числе 58 ч на отладку и внедрение проекта. Таким образом, затраты на работу ЭВМ составят 44 тысяч 227 руб. 20 коп.

 

5.2.5 Составление сметы затрат

Результаты расчетов сведены в таблицу 5.2.6 - сметы затрат на разработку программы.

Таблица 5.2.6 - Смета затрат на разработку программы

Наименование статей затрат

Сумма, руб.

Удельный вес отдельных статей в общей сумме затрат, %

1. Основная з/плата

105300.00

40,2

2. Дополнительная з/плата

21060.00

8,0

3. Отчисления в социальные фонды

49280.40

18,8

4. Накладные расходы

37908.00

14,5

5. Затраты на работу ЭВМ

44227.20

18,5

Всего затрат:

257775.6

100


Полная себестоимость разработки определяется суммированием пункты 1 - 5 таблицы 7.6. Таким образом, себестоимость готовой программы составит 257тысяч 775 руб. 60 коп.

6. Безопасность жизнедеятельности [9,10]

 

.1 Анализ потенциально-опасных и вредных факторов разработчика электронного офиса и пользователя


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

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

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

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

.        Несоответствие нормам параметров микроклимата.

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

.        Повышенный уровень шума на рабочем месте.

.        Повышенный уровень статистического электричества при неправильно запроектированной рабочей зоне.

.        Опасный уровень напряжения в электрической цепи, замыкание которой может пройти через тело человека.

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

.        Повышенный уровень электромагнитных излучений.

.        Повышенный уровень ионизирующих излучений (мягкое рентгеновское, гамма-излучение).

.        Отсутствие или недостаток естественного света.

.        Недостаточная освещенность рабочей зоны.

.        Повышенная яркость света.

.        Пониженная контрастность.

.        Прямая и обратная блёсткость.

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

.        Длительное пребывание в одном и том же положении и повторение одних и тех же движений приводит к синдрому длительных статических нагрузок (СДСН).

.        Нерациональная организация рабочего места.

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

.        Умственное перенапряжение, которое обусловлено характером решаемых задач, приводит к синдрому длительных психологических нагрузок (СДПН).

.        Большой объем перерабатываемой информации приводит к значительным нагрузкам на органы зрения.

.        Монотонность труда.

.        Нервно-психические нагрузки.

.        Нервно-эмоциональные стрессовые нагрузки.

.        Опасность возникновения пожара.        

Их можно разделить на следующие группы:

а)       физические:

-       низкочастотные электрические и магнитные поля,

-       статическое электричество,

-       мягкое рентгеновское, лазерное и ультрафиолетовое излучение,

-       повышенная температура,

-      ионизация воздуха (повышенное содержание положительных аэроионов в воздухе и пониженное содержание отрицательное аэтоионов),

-       опасное напряжение в электросети,

-       акустический шум;

б)      химические:

-       пыль,

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

в)      психофизиологические:

-       напряжение зрения и внимания,

-       интеллектуальные и эмоциональные нагрузки,

-       длительные статические нагрузки и монотонность труда.

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

 

6.2 Разработка мероприятий производственной санитарии и безопасности жизнедеятельности разработчика и пользователя

 

Требования к ПЭВМ

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

Не допускаются к эксплуатации ПЭВМ, не имеющие санитарно-эпидемиологического заключения.

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

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

Мощность экспозиционной дозы мягкого рентгеновского излучения в любой точке на расстоянии 0,05 м от экрана и корпуса устройства отображения информации (видеодисплейного терминала (ВДТ)) с электронно-лучевой трубкой при любых положениях регулировочных устройств не должна превышать 100 мкР/час.

Конструкция ПЭВМ должна обеспечивать возможность поворота корпуса в горизонтальной и вертикальной плоскости с фиксацией в заданном положении для обеспечения фронтального наблюдения экрана ВДТ. Дизайн ПЭВМ должен предусматривать окраску корпуса в спокойные мягкие тона с диффузным рассеиванием света. Корпус ПЭВМ, клавиатура и другие блоки и устройства ПЭВМ должны иметь матовую поверхность с коэффициентом отражения 0,4-0,6 и не иметь блестящих деталей, способных создавать блики.

Конструкция ВДТ должна предусматривать регулирование яркости и контрастности.

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

Требования к помещениям для работы с ПЭВМ

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

Площадь на 1 рабочее место пользователя ПЭВМ с ВДТ на базе электронно-лучевой трубки должна составлять не менее 6 кв.м.

Для внутренней отделки интерьера помещений, где расположены ПЭВМ, должны использоваться диффузно-отражающие материалы с коэффициентом отражения для потолка - 0,7 - 0,8; для стен - 0,5 - 0,6; для пола - 0,3 - 0,5.

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

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

В помещениях, оборудованными ПЭВМ, должна проводиться влажная ежедневная уборка.

В помещениях, где расположены ПЭВМ, должны обеспечиваться оптимальные параметры микроклимата (таблица 6.1)

программирование язык данное проектирование

Таблица 6.1 - Требования к параметрам микроклимата в производственном помещении

Параметры микроклимата

Значения параметров


Зимой

Летом

1. Температура, °C

22-24

23-25

2. Скорость воздушных масс, м/с

0.1

0.1-0.2

3. Относительная влажность, %

40-60

40-60


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

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

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

Искусственное освещение в помещении должно осуществляться системой общего равномерного освещения. Следует ограничивать прямую блесткость от источников освещения, при этом яркость светящихся поверхностей (окна, светильники и др.), находящихся в поле зрения должна быть не более 200 кдiм2. В качестве источника света при искусственном освещении следует применять преимущественно люминесцентные лампы типа ЛБ и компактные люминесцентные лампы (КЛЛ). В светильниках местного освещения допускается применение ламп накаливания, в том числе галогенных.

Освещенность на рабочем месте должна соответствовать зрительным условиям труда согласно гигиеническим нормам. Так, в соответствии с ГОСТ 12.1.006-84, освещенность при работе с дисплеем должна быть 200 лк, а в сочетании с работой с документами - 400 лк.

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

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

Расчет освещения рабочего места.

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

Основными требованиями к освещенности рабочего места являются:

обеспечение равномерного распределения яркости в окружающем пространстве;

исключение резких теней на освещаемой поверхности;

постоянство освещенности в пространстве и времени.

Необходимо рассчитать общее освещение помещения вычислительного центра, площадью 20 м2 (А=4 м, В=5 м) и высотой Н=3 м. Высота рабочих столов hрм=0,8 м.

Из таблицы выбираем потолочные светильники рассеянного света (класс Р) типа ЛПО 01 с двумя люминесцентными лампами типа ЛДЦ. По нормам освещенности согласно СНИП 23-05-95 освещенность рабочих поверхностей для ВЦ равна Ен=400лк. Из таблицы выбираем коэффициент запаса Кз=1,5.

Из характеристик светильника ЛПО 01 выбираем значение lнв=1,7. Определяем наивыгоднейшее расстояние между соседними рядами светильников:

Lнв = lнв×Н = 1,7×3 = 5,1 м. (6.1)

Рассчитаем количество рядов светильников:

nв = В/Lнв = 5/5,1 = 0,98, (6.2)

следовательно, берем 1 ряд светильников.

Выбираем коэффициенты отражения потолка rп = 70 %, стен rст = 50 %, расчетной поверхности rрп = 30 %.

Рассчитаем индекс помещения по формуле:

 (6.3)

Принимаем i = 0,8.

По найденным i, rп, rст, rрп и заданному типу светильника определим коэффициент использования η= 0,35.

Определяем световой поток от светильников одного ряда, по формуле:

лм. (6.4)

где

Ен - нормированная освещенность ( Ен=400лк );- площадь помещения;

Z - коэффициент, учитывающий старение ламп и загрязнение светильников ( z1=1.5 );

Кз - коэффициент, учитывающий неравномерность освещения помещения ( К=1.1 );· η - коэффициент использования светового потока; определяется в зависимости от коэффициентов отражения от стен, потолка, рабочих поверхностей, типов светильников и геометрии помещения.

В светильниках типа ЛПО 01 можно применить люминесцентные лампы ЛБ40-4 со световым потоком Fл=2850 лм. Т. к. они имеют ряд преимуществ перед лампами накаливания: их спектр ближе к естественному; они имеют большую экономичность (больше светоотдача) и срок службы (в 10 - 12 раз). Наряду с этим имеются и недостатки: их работа сопровождается иногда шумом; хуже работают при низких температурах; их нельзя применять во взрывоопасных помещениях; имеют малую инерционность. Для нашего помещения люминесцентные лампы подходят.

Число ламп, необходимых для организации общего освещения определяется по формуле:

nА =  (6.3)

светильников.

Проверяем, удовлетворяет ли проведенный расчет освещения допустимым отклонениям расчетной освещенности, Ерасч от нормируемой величины Ен (не более, чем +20%...-10%).

Ерасч = лк. (6.4)

Отклонение от нормируемой освещенности ∆E= Ен - Ерасч =23лк, что составляет 5,7%.

Таким образом, 7 светильников типа ЛПО 01-2х40 обеспечат требуемую освещенность рабочих мест.

Требования к рабочему месту для работы с ПЭВМ

Рабочее место следует размещать таким образом, чтобы ВДТ было ориентировано боковой стороной к световым проемам, чтобы естественный свет падал преимущественно слева.

Расстояние между рабочими столами с ПЭВМ должно быть в направлении тыла - не менее 2 м, а между поверхностями не менее 1,2 м.

Экран видеомонитора должен находится от глаз пользователя на расстоянии 600-700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов. Плоскость экрана должна быть перпендикулярна направлению взгляда и центр экрана должен быть ниже уровня (или на уровне) глаз пользователя.

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

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

Модульными размерами рабочей поверхности стола для ПЭВМ, на основании которых должны рассчитываться конструктивные размеры, следует считать: ширину 800, 1000, 1200 и 1400 мм, глубину 800 и 1000 мм при нерегулируемой его высоте равной 725 мм.

Рабочий стол должен иметь пространство для ног высотой не менее 600 мм, шириной не менее 500 мм, глубиной на уровне колен - не менее 450 мм и на уровне вытянутых ног - не менее 650 мм.

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

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

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

Конструкция рабочего стула должна обеспечивать:

-   ширину и глубину поверхности сиденья не менее 400 мм;

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

регулировку высоты поверхности сиденья в пределах 400-500 мм и углам наклона вперед до 15 град. и назад до 5 град.;

высоту опорной поверхности спинки 300 +/- 20 мм, в ширину - не менее 380 мм и радиус кривизны горизонтальной плоскости - 400 мм;

угол наклона спинки в вертикальной плоскости в пределах +1-30 градусов;

регулировку расстояния спинки от переднего края сиденья в пределах 260-400 мм;

стационарные или съемные подлокотники длиной не менее 250 мм и шириной 50-70 мм;

регулировку подлокотников по высоте над сиденьем в пределах 230 +/- 30 мм и внутреннего расстояния между подлокотниками в пределах 350-500 мм.

Рабочее место пользователя ПЭВМ следует оборудовать подставкой для ног, имеющей ширину не менее 300 мм, глубину не менее 400 мм, регулировку по высоте в пределах до 150 мм и по углу наклона опорной поверхности подставки до 20 градусов. Поверхность подставки должна быть рифленой и иметь по переднему краю бортик высотой 10 мм.

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

Общие требования к работе с ПЭВМ

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

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

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

Проверить правильность расположения оборудования:

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

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

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

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

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

Протереть антистатической салфеткой поверхность экрана монитора.

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

После включения оборудования и запуска используемой программы разработчик (пользователь) обязан:

убедиться в отсутствии дрожания и мерцания изображения на экране монитора,

установить яркость, контрастность, цвет и размер символов, фон экрана, обеспечивающие наиболее комфортное и четкое восприятие изображения.

Во время работы разработчик (пользователь) должен:

в течение рабочего времени содержать в порядке и чистоте рабочее место,

держать открытыми все вентиляционные отверстия устройств,

при необходимости прекращения работы на некоторое время корректно закрыть все активные задачи,

выполнять санитарные нормы и соблюдать режимы работы и отдыха,

соблюдать правила эксплуатации вычислительной техники в соответствии с инструкциями по эксплуатации,

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

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

соблюдать расстояние от глаз до экрана к пределах 60-70 см, но не менее 50 см,

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

Разработчик (пользователь) во время работы не должен:

прикасаться к задней панели системного блока при включенном питании,

работать на ПЭВМ при снятых кожухах,

переключать разъемы интерфейсных кабелей периферийных устройств при включенном питании,

закрывать оборудование бумагами и посторонними предметами,

допускать скапливание бумаг и посторонних предметов на рабочем месте,

производить отключение питания во время выполнения активной задачи,

допускать попадание влаги на поверхности устройств,

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

перемещать приборы, блоки, устройства,

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

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

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

Режимы труда и отдыха при работе с ПЭВМ рекомендуется организовываться в соответствии с требованиями СанПиН 2.2.2/2.4.1340-03 в зависимости от вида и категории трудовой деятельности. Виды трудовой деятельности разделяются на 3 группы:

группа А - работа по считыванию информации с экрана ПЭВМ с предварительным запросом,

группа Б - работа по вводу информации,

группа В - творческая работа в режиме диалога с ЭВМ.

Для видов трудовой деятельности устанавливается 3 категории тяжести и напряженности работы с ПЭВМ, которые определяются: для группы А - по суммарному числу считываемых знаков за рабочую смену, но не более 60000 знаков за смену, для группы Б - по суммарному числу считываемых или вводимых знаков за рабочую смену, для группы В - по суммарному времени непосредственной работы с ПЭВМ за рабочую смену, но не более 6 ч за смену.

В зависимости от категории трудовой деятельности и уровня нагрузки за рабочую смену при работе на ПЭВМ непосредственным начальником устанавливается суммарное время регламентированных перерывов (таблица 6.2):

Таблица 6.2

Категория работы с ПЭВМ

Уровень нагрузки за рабочую смену при видах работы с ПЭВМ


Группа А, Кол-во знаков

Группа Б, Кол-во знаков

Группа В, ч

При 8-часовой смене

При 12-часовой смене

I

До 20 000

До 15000

До 2

50

80

II

До 40 000

До 30 000

До 4

70

110

III

До 60 000

До 40 000

До 6

90

140


В случаях, когда характер работы требует постоянного взаимодействия с видеодисплейным терминалом (набор текста, ввод данных) с напряжением внимания и сосредоточенности, при исключении возможности периодического переключении на другие виды трудовой деятельности, не связанные с ПЭВМ, рекомендуется организовать перерывы на 10 - 15 мин через каждые 45 - 60 мин работы.

Продолжительность непрерывной работы с ВДТ без регламентированною перерыва не должна превышать 1 ч.

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

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

После каждого часа работы на ПЭВМ проводить проветривание.

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

По окончании работ разработчик (пользователь) должен соблюдать следующую последовательность отключения оборудования:

произвести закрытие всех выполняемых на ПЭВМ задач,

отключить питание в последовательности, установленной инструкциями по эксплуатации на оборудование с учетом характера выполняемых работ,

убрать со стола рабочие материалы и привести в порядок рабочее место.

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

Разработка мероприятий противопожарной безопасности рабочего помещения

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

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

Основными причинами являются:

-   неосторожное обращение с огнем;

-       неисправность оборудования и нарушение режимов технологических процессов;

-       неудовлетворительное состояние электротехнических устройств и несоблюдение правил их эксплуатации;

-       самовозгорание взрывогорючих газов, паров и пыли;

-       разряды статического электричества и грозовые разряды;

-       неисправность отопительных приборов при нарушении правил пожарной безопасности при их эксплуатации.

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

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

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

Пожарная безопасность помещений, имеющих электрические сети, регламентируется ГОСТ 12.1.033-81, ГОСТ 12.1.004-85. Работа оператора ЭВМ должна вестись в помещении, соответствующем категории Д пожарной безопасности (негорючие вещества и материалы в холодном состоянии). Огнестойкость здания по СНиП 2.01.02-85 соответствует I степени (стены выполнены из искусственного или натурального камня и являются несущими, в перекрытиях здания отсутствуют горючие материалы).

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

Пожарная безопасность объекта обеспечивается:

-       системой предотвращения пожара;

-       системой противопожарной защиты;

-       организационно-техническими мероприятиями.

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

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

Огнетушители углекислотные (ОУ-8) предназначены для тушения в офисных помещениях при наличии оргтехники. Основное их преимущество перед огнетушителями других видов - минимальное нанесение вреда защищаемому объекту.

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

ЗАКЛЮЧЕНИЕ


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

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

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

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

Дружественность системы обеспечивают:

интуитивно понятный интерфейс;

наличие справочной системы «Help»;

В организационно-экономическом разделе произведено определение

трудоемкости разработки.

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

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

- Microsoft Visio;

Borland Database Desktop;

- Borland C++ Builder 5.

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

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ


1. ГОСТ 7.32 - 2001.

. Мартин Дж. Организация баз данных в вычислительных системах. - М.: Мир, 1978. - 616 с.: ил.

. Типовые нормы времени на программирование задач для ЭВМ. - М.: Экономика, 1989. - 124, [1] c.: табл.

. Хоменко А. Д. , Ададуров С. Е. Работа с базами данных в С++ Builder.- СПб.: БХВ-Петербург,2006.- 496 с.: ил.

. Архангельский А. Я. Программирование в С++ Builder 5. - М.: БИНОМ, 2003. - 1152с.: ил.

. Пахомов Б. И. С/С++ и Borland C++ Builder для начинающих.- СПб.: БХВ -Петербург, 2006. - 640 с.: ил.

. Культин Н. Б. Самоучитель С++ Builder.- СПб.: БХВ-Петербург,2006.- 320 с.: ил.

. Кантор Е.Л. Экономика предприятия: Учебник для вузов. - М.: ПИТЕР, 2003.

. Гуткин В. И. Безопасность жизнедеятельности при эксплуатации ПК: учебное пособие/ В. И. Гуткин. - СПб.: Изд-во СЗТУ, 2002. - 114 с.

. Гуткин В. И. Безопасность жизнедеятельности: основы физиологии труда и рациональные условия деятельности: учебное пособие/ В. И. Гуткин, Е. В. Мельникова. - СПб.: Изд-во СЗТУ, 2003. - 152 с.: ил.

ПРИЛОЖЕНИЕ А

Листинг «Главный проект»

124

Листинг формы «Каталог стран»

125

Листинг формы «Каталог туров»

132

Листинг формы «Добавление / редактирование сведений о турах»

138

Листинг формы «О клиентах»

141

Листинг формы «Запрос на отбор данных по дате»

142

Листинг формы «Запрос на отбор данных по цене»

143

Листинг формы «Бронирование туров»

144

Листинг формы «Отчет о бронирование туров»

152

Листинг формы «Туристическая путевка»

153


Листинг «Главный проект»

//-------------------------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

USERES("BDTurAgenstvo.res");

USEFORM("Turi.cpp", FormPodborTura);

USEFORM("TuriPoRussii.cpp", Form2);

USEFORM("ViborGoroda.cpp", Form3);

USEFORM("Poisk.cpp", FormPoisk);

USEFORM("PoiskPoDatam.cpp", Form7);

USEFORM("ZaprosPoCene.cpp", FormDiapazonCen);

USEFORM("Brony.cpp", FormBrony);

USEFORM("Dobav.cpp", FormDobav);

USEFORM("Otchet.cpp", FormOtchet);

USEFORM("DModulTurAg.cpp", DataModulTurAg); /* TDataModule: File Type */("ZapOTuristah.cpp", FormZapOTuristah);("KartaTurista.cpp", FormKartaTurista);

//---------------------------------------------------------------------------WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->HelpFile = "C:\\BD_Diplom\\MHelp\\TURAGHELP.HLP";

Application->CreateForm(__classid(TForm3), &Form3);

Application->CreateForm(__classid(TFormPodborTura), &FormPodborTura);

Application->CreateForm(__classid(TForm2), &Form2);

Application->CreateForm(__classid(TFormPoisk), &FormPoisk);

Application->CreateForm(__classid(TForm7), &Form7);

Application->CreateForm(__classid(TFormDiapazonCen), &FormDiapazonCen);

Application->CreateForm(__classid(TFormBrony), &FormBrony);

Application->CreateForm(__classid(TFormDobav), &FormDobav);

Application->CreateForm(__classid(TFormOtchet), &FormOtchet);

Application->CreateForm(__classid(TDataModulTurAg), &DataModulTurAg);

Application->CreateForm(__classid(TFormZapOTuristah), &FormZapOTuristah);

Application->CreateForm(__classid(TFormKartaTurista), &FormKartaTurista);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

//---------------------------------------------------------------------------

Листинг формы «Каталог стран»

//---------------------------------------------------------------------------

#include <vcl.h>

#include <ComObj.hpp>

#pragma hdrstop

#include "ViborGoroda.h"

#include "TuriPoRussii.h"

#include "DModulTurAg.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form3;

//---------------------------------------------------------------------------

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn1Click(TObject *Sender)

{

Form2->Show();

}

//---------------------------------------------------------------------------__fastcall TForm3::fPhotoClick(TObject *Sender)

{

if(Photo->Execute())

fPhoto->Picture->LoadFromFile(Photo->FileName);

fPhoto->CopyToClipboard();

fPhoto->PasteFromClipboard();

}

//---------------------------------------------------------------------------

void __fastcall TForm3::BitBNaytiClick(TObject *Sender)

{

TLocateOptions Options; //организация метода Locate

// поиск по названию страны

Options.Clear();

if (!DataModulTurAg->TVibStrani->Locate("Strana",Edit2->Text,Options))

ShowMessage ("Не найдено такой страны" + Edit2->Text);

}

//---------------------------------------------------------------------------__fastcall TForm3::FormShow(TObject *Sender)

{

int n;

AnsiString stDay[7] = {"воскреcенье","понедельник","вторник","среда",

"четверг","пятница","суббота"};

AnsiString stMonth[12] = {"января","февраля","марта","апреля",

"мая","июня","июля","августа","сентября",

"октября","ноября","декабря"};

TDateTime Todey;

Word Year, Month, Day;

EStrana->Clear();

//--------- определение min стоимости тура ---------------------------------

DataModulTurAg->TVibStrani->Refresh();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TVibStrani->First();

for (int i=0;i<DataModulTurAg->TVibStrani->RecordCount;i++)

{

QMin->Close();

QMin->Params->Items[0]->AsString=

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

if (QMin->Prepared)

QMin->Prepare();

QMin->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Stoim")->AsCurrency=

QMin->FieldByName("MIN OF Cena")->AsCurrency;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TVibStrani->Next();

}

DataModulTurAg->TVibStrani->First();

//--------------------- Вычисление сегодняшней даты ----------------------------

Todey = Now();

DecodeDate(Todey, Year, Month, Day);

Label8-> Caption = "Сегодня: " + IntToStr(Day) + " " + stMonth[Month-1] + " " +

IntToStr(Year) + " года, " + stDay[DayOfWeek(Todey) -1];

//---------------- организация вывода количества туров ------------------------

DataModulTurAg->TVibStrani->First();

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TVibStrani->RecordCount;i++)

{

for (int j=0;j<DataModulTurAg->TTuri->RecordCount;j++)

{

n=DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger;

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger=n;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TVibStrani->Next();

}

}

DataModulTurAg->TVibStrani->First();

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn2Click(TObject *Sender)

{

WinHelp(Form3,"MHelp\\TurAgHelp.hlp",HELP_INDEX,0);

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn3Click(TObject *Sender)

{

if (Application->MessageBox (

"Вы действительно хотите завершить работу?",

"Подтвердите выход из программы",

MB_YESNOCANCEL + MB_ICONQUESTION) != IDYES)

Abort () ;

Application->Terminate();

}

//---------------------------------------------------------------------------__fastcall TForm3::BNaytiClick(TObject *Sender)

{

if ((Edit4->Text).Length() == 0)

{

MessageDlg("Укажите длительность 'от' ", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit4->Handle);

return;

}

if ((Edit5->Text).Length() == 0)

{

MessageDlg("Укажите длительность 'до' ", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit5->Handle);

return;

}

if ((Cena1->Text).Length() == 0)

{

MessageDlg("Укажите начальную цену", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Cena1->Handle);

return;

}

if ((Cena2->Text).Length() == 0)

{

MessageDlg("Укажите конечную цену", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Cena2->Handle);

return;

}

if ((Edit4->Text).Length() > (Edit5->Text).Length())

{

MessageDlg("Неверно указано количество дней пребывания", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Edit5->Handle);

return;

}

if ((Cena1->Text).Length() > (Cena2->Text).Length())

{

MessageDlg("Цена конечная больше цены начальной", mtInformation, TMsgDlgButtons()

<< mbOK, 0);

::SetFocus(Cena2->Handle);

return;

}

DataModulTurAg->QSort2->Close();

DataModulTurAg->QSort2->Params->Items[0]->AsString=Strana->Text;

DataModulTurAg->QSort2->Params->Items[1]->AsDateTime=Date1->Date;

DataModulTurAg->QSort2->Params->Items[2]->AsDateTime=Date2->Date;

DataModulTurAg->QSort2->Params->Items[3]->AsInteger=StrToInt(Edit4->Text);

DataModulTurAg->QSort2->Params->Items[4]->AsInteger=StrToInt(Edit5->Text);

DataModulTurAg->QSort2->Params->Items[5]->AsCurrency=StrToCurr(Cena1->Text);

DataModulTurAg->QSort2->Params->Items[6]->AsCurrency=StrToCurr(Cena2->Text);

DataModulTurAg->QSort2->Params->Items[7]->AsString=CBVidTura->Text;

DataModulTurAg->QSort2->Open();

if (DataModulTurAg->QSort2->RecordCount!=0)

DataModulTurAg->DataSTuri->DataSet=DataModulTurAg->QSort2;

else

{

ShowMessage ("По Вашему запросу ничего не найдено");

return;

}

Form2->QTurov->Close();

Form2->QTurov->Params->Items[0]->AsString=Form3->Strana->Text;;

Form2->QTurov->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger=

Form2->QTurov->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TVibStrani->Refresh();

Form2->Show();

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn4Click(TObject *Sender)

{

Form2->QTurov->Close();

Form2->QTurov->Params->Items[0]->AsString=

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

Form2->QTurov->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger=

Form2->QTurov->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->DataSTuri->DataSet=DataModulTurAg->TTuri;

Form2->Show();

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn4MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

BitBtn4->Font->Color=clRed;

}

//---------------------------------------------------------------------------__fastcall TForm3::FormMouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

BitBtn1->Font->Color=clBlack;

BitBtn2->Font->Color=clBlack;

BitBtn3->Font->Color=clBlack;

BitBtn4->Font->Color=clBlack;

BitBtn6->Font->Color=clBlack;

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn1MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

BitBtn1->Font->Color=clRed;

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn2MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

BitBtn2->Font->Color=clRed;

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn3MouseMove(TObject *Sender,

{

BitBtn3->Font->Color=clRed;

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn5MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

BitBtn6->Font->Color=clGreen;

}

//---------------------------------------------------------------------------__fastcall TForm3::BInsertClick(TObject *Sender)

{

DataModulTurAg->TVibStrani->Insert();

EStrana->Clear();

EStrana->SetFocus();

}

//---------------------------------------------------------------------------__fastcall TForm3::BSaveClick(TObject *Sender)

{

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString=EStrana->Text;

DataModulTurAg->TVibStrani->Post();

}

//---------------------------------------------------------------------------__fastcall TForm3::BDeleteClick(TObject *Sender)

{

DataModulTurAg->TVibStrani->Delete();

}

//---------------------------------------------------------------------------__fastcall TForm3::EStranaKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я'))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TForm3::BEditClick(TObject *Sender)

{

EStrana->Text=DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString=EStrana->Text;

DataModulTurAg->TVibStrani->Post();

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn5Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn7Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn9Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn11Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn12Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm3::BitBtn13Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm3::StranaKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я')||(Key==' '))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TForm3::Cena2KeyPress(TObject *Sender, char &Key)

{

if ((Key>='0')&&(Key<='9'))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TForm3::Cena1KeyPress(TObject *Sender, char &Key)

{((Key>='0')&&(Key<='9'))

return;

else Key=0;

}

//---------------------------------------------------------------------------

Листинг формы «Каталог туров»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "TuriPoRussii.h"

#include "ViborGoroda.h"

#include "Turi.h"

#include "PoiskPoDate.h"

#include "ZaprosPoCene.h"

#include "Brony.h"

#include "Dobav.h"

#include "ZapOTuristah.h"

#include "jpeg.hpp"

#include "DModulTurAg.h"

#include "PoiskPoDatam.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"*Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm2::BitBtn5Click(TObject *Sender)

{

DataModulTurAg->TVibStrani->Refresh();

Form3->Show();

}

//---------------------------------------------------------------------------__fastcall TForm2::InsertTurClick(TObject *Sender)

{

DataModulTurAg->TTuri->Insert();

FormDobav->Tag=0;

FormDobav->DBEKod->Clear();

FormDobav->DBENameHotel->Clear();

FormDobav->ShowModal();

if (FormDobav->Tag)

{

DataModulTurAg->TTuri->Refresh();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm2::N3Click(TObject *Sender)

{

FormDobav->Tag=0;

FormDobav->ShowModal();

}

//---------------------------------------------------------------------------__fastcall TForm2::N4Click(TObject *Sender)

{

DataModulTurAg->TTuri->Delete();

}

//---------------------------------------------------------------------------__fastcall TForm2::DiapazonDatClick(TObject *Sender)

{

Form7->Tag=0;

Form7->ShowModal(); //отбражает окно запроса

if (Form7->Tag)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="((DataZaezda>='"+DateToStr(Form7->DDate1->Date)+

"')AND(DataZaezda<='"+DateToStr(Form7->DDate2->Date)+"'))";

DataModulTurAg->TTuri->Filtered=true;

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

}

}

//---------------------------------------------------------------------------__fastcall TForm2::N12Click(TObject *Sender)

{

FormDiapazonCen->Tag=0;

FormDiapazonCen->ShowModal();

if (FormDiapazonCen->Tag)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="((Cena>='"+CurrToStr(FormDiapazonCen->Edit2->Text)+

"')AND(Cena<='"+CurrToStr(FormDiapazonCen->Edit3->Text)+"'))";

DataModulTurAg->TTuri->Filtered=true;

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

}

}

//---------------------------------------------------------------------------__fastcall TForm2::BZakazClick(TObject *Sender)

{

FormBrony->EZakaz->Clear();

FormBrony->Fam->Clear();

FormBrony->Name->Clear();

FormBrony->Ot->Clear();

FormBrony->N->Clear();

FormBrony->Ser->Clear();

FormBrony->Tel->Clear();

FormBrony->Show();

}

//---------------------------------------------------------------------------__fastcall TForm2::VseZapPoiskClick(TObject *Sender)

{

DataModulTurAg->DataSTuri->DataSet=DataModulTurAg->TTuri;

}

//---------------------------------------------------------------------------__fastcall TForm2::NParamClick(TObject *Sender)

{

FormPodborTura->Tag=0;

FormPodborTura->ShowModal();

if (FormPodborTura->Tag)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="((VidTura='"+

FormPodborTura->CBoxTur->Text+"')AND((DataZaezda>='"+

DateToStr(FormPodborTura->DData1->Date)+

"')AND(DataZaezda<='"+DateToStr(FormPodborTura->DData2->Date)+

"'))AND((KolDney>='"+StrToInt(FormPodborTura->Edit4->Text)+"')AND(KolDney<='"+

StrToInt(FormPodborTura->Edit3->Text)+"'))AND((Cena>="+

CurrToStr(FormPodborTura->Edit6->Text)+

")AND(Cena<="+CurrToStr(FormPodborTura->Edit5->Text)+")))";

DataModulTurAg->TTuri->Filtered=true;

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

}

DataModulTurAg->TTuri->Refresh();

}

//---------------------------------------------------------------------------__fastcall TForm2::N9Click(TObject *Sender)

{

FormZapOTuristah->ShowModal();

}

//---------------------------------------------------------------------------__fastcall TForm2::DBGTuriDrawColumnCell(TObject *Sender,

const TRect &Rect, int DataCol, TColumn *Column,

TGridDrawState State)

{

AnsiString s,a;

s= DataModulTurAg->TTuri->FieldByName(Column->FieldName)->AsString;

if (Column->FieldName == "KolMest")

{

DBGTuri->Canvas->Font->Color = clRed;

DBGTuri->Canvas->FillRect(Rect);

DBGTuri->Canvas->TextOut(Rect.Left+2,Rect.Top,s);

}

a= DataModulTurAg->TTuri->FieldByName(Column->FieldName)->AsString;

if (Column->FieldName == "Ost")

{

DBGTuri->Canvas->Font->Color = clGreen;

DBGTuri->Canvas->FillRect(Rect);

DBGTuri->Canvas->TextOut(Rect.Left+2,Rect.Top,a);

}

}

//---------------------------------------------------------------------------__fastcall TForm2::BitBtn1Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm2::BitBtn6Click(TObject *Sender)

{

AnsiString hotvib=LCHotel->Text;

AnsiString hot;

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TTuri->RecordCount;i++)

{

hot=DataModulTurAg->TTuri->FieldByName("Hotel")->AsString;

if (hotvib == hot)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="Hotel='"+LCHotel->Text+"'";

DataModulTurAg->TTuri->Filtered=true;

DataModulTurAg->TTuri->Next();

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

return;

}

else DataModulTurAg->TTuri->Next();

}

ShowMessage("Туров с названием такого отеля нет");

}

//---------------------------------------------------------------------------__fastcall TForm2::BitVypClick(TObject *Sender)

{

DataModulTurAg->TTuri->Cancel();

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filtered=true;

DataModulTurAg->TTuri->Filter="((KolMest>="+(EKol1->Text)+")and(KolMest<="+

(EKol2->Text)+ "))and((DataZaezda>='"+DateToStr(DTData1->Date)+

"')and(DataZaezda<='"+DateToStr(DTData2->Date)+"'))";

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

}

//---------------------------------------------------------------------------__fastcall TForm2::BitBtn8Click(TObject *Sender)

{

DataModulTurAg->TTuri->Filtered=false;

QTurov->Close();

QTurov->Params->Items[0]->AsString=

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

QTurov->Open();

Edit1->Clear();

Edit2->Clear();

Edit3->Clear();

Edit4->Clear();

EKol1->Clear();

EKol2->Clear();

}

//---------------------------------------------------------------------------__fastcall TForm2::FormShow(TObject *Sender)

{///--------- вычисление числа свободных путевок (остатка) ----------------------

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TTuri->RecordCount;i++)

{

Form2->QueryTurist->Close();

Form2->QueryTurist->Cancel();

Form2->QueryTurist->Params->Items[0]->AsString=

DataModulTurAg->TTuri->FieldByName("Tur")->AsString;

if (Form2->QueryTurist->Prepared)

Form2->QueryTurist->Prepare();

Form2->QueryTurist->Open();

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger=

Form2->QueryTurist->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("Ost")->AsInteger=

DataModulTurAg->TTuri->FieldByName("KolMest")->AsInteger -

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger;

DataModulTurAg->TTuri->Post();

DataModulTurAg->TTuri->Next();

}

DataModulTurAg->TTuri->First();

//---------- определение общего числа туров --------------------------------

QTurov->Close();

QTurov->Params->Items[0]->AsString=

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

QTurov->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger=

QTurov->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TVibStrani->Refresh();

}

//---------------------------------------------------------------------------__fastcall TForm2::BPoiskVidTuraClick(TObject *Sender)

{

AnsiString VidTurVib=CBDep->Text;

AnsiString VidTur;

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TTuri->RecordCount;i++)

{

VidTur=DataModulTurAg->TTuri->FieldByName("VidTura")->AsString;

if (VidTurVib == VidTur)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="VidTura='"+CBDep->Text+"'";

DataModulTurAg->TTuri->Filtered=true;

DataModulTurAg->TTuri->Next();

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

return;

}

else DataModulTurAg->TTuri->Next();

}

ShowMessage("Туров с указанным видом нет");

}

//---------------------------------------------------------------------------__fastcall TForm2::N10Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm2::N18Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TForm2::RBPoisk1Click(TObject *Sender)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="(KolDney>='"+(Edit1->Text)+"')AND(KolDney<='"+

(Edit4->Text)+"')";

DataModulTurAg->TTuri->Filtered=true;

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

}

//---------------------------------------------------------------------------__fastcall TForm2::RBPoisk2Click(TObject *Sender)

{

DataModulTurAg->TTuri->Filtered=false;

DataModulTurAg->TTuri->Filter="(Ost>='"+(Edit2->Text)+"')AND(Ost<='"+(Edit3->Text)+"')";

DataModulTurAg->TTuri->Filtered=true;

DBETuri->Text=IntToStr(DataModulTurAg->TTuri->RecordCount);

}

//---------------------------------------------------------------------------__fastcall TForm2::N11Click(TObject *Sender)

{

WinHelp(Form2,"MHelp\\TurAgHelp.hlp",HELP_INDEX,0);

}

//---------------------------------------------------------------------------__fastcall TForm2::N7Click(TObject *Sender)

{

"Вы действительно хотите завершить работу?",

"Подтвердите выход из программы",

MB_YESNOCANCEL + MB_ICONQUESTION) != IDYES)

Abort () ;

Application->Terminate();

}

//---------------------------------------------------------------------------

Листинг формы «Добавление / редактирование сведений о турах»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Dobav.h"

#include "TuriPoRussii.h"

#include "ViborGoroda.h"

#include "DModulTurAg.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*FormDobav;

//---------------------------------------------------------------------------

__fastcall TFormDobav::TFormDobav(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TFormDobav::BSaveAndExitClick(TObject *Sender)

{

if (Application->MessageBox (

"Внести изменения?",

"Подтвердите свои действия",

MB_YESNOCANCEL + MB_ICONQUESTION) != IDYES)

Abort () ;

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("VidTura")->AsString=CBVidTura->Text;

DataModulTurAg->TTuri->FieldByName("Hotel")->AsString=

DataModulTurAg->THotelLookUp->FieldByName("NameHotel")->AsString;

DataModulTurAg->TTuri->Post();

//----------- вычисление количества туров -------------------

Form2->QTurov->Close();

Form2->QTurov->Params->Items[0]->AsString=

DataModulTurAg->TVibStrani->FieldByName("Strana")->AsString;

Form2->QTurov->Open();

DataModulTurAg->TVibStrani->Edit();

DataModulTurAg->TVibStrani->FieldByName("Putev")->AsInteger=

Form2->QTurov->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TVibStrani->Post();

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TVibStrani->Refresh();

//--------- вычисление количества свободных путевок (остаток) ----------------------

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TTuri->RecordCount;i++)

{

Form2->QueryTurist->Close();

Form2->QueryTurist->Cancel();

Form2->QueryTurist->Params->Items[0]->AsString=

DataModulTurAg->TTuri->FieldByName("Tur")->AsString;

if (Form2->QueryTurist->Prepared)

Form2->QueryTurist->Prepare();

Form2->QueryTurist->Open();

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger=

Form2->QueryTurist->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("Ost")->AsInteger=

DataModulTurAg->TTuri->FieldByName("KolMest")->AsInteger -

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger;

DataModulTurAg->TTuri->Post();

DataModulTurAg->TTuri->Next();

}

DataModulTurAg->TTuri->First();

Tag=1;

Close();

}

//---------------------------------------------------------------------------__fastcall TFormDobav::BitBPoiskClick(TObject *Sender)

{

TLocateOptions Options; //организация метода Locate - поиск по названию отеля

Options.Clear();

if (!DataModulTurAg->TLookUpOtely->Locate("Otely",Edit1->Text,Options))

ShowMessage ("Такого отеля в списке нет" + Edit1->Text);

}

//---------------------------------------------------------------------------__fastcall TFormDobav::BitBtn4Click(TObject *Sender)

{

DBEKod->Clear();

DBENameHotel->Clear();

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("VidTura")->AsString=CBVidTura->Text;

DataModulTurAg->TTuri->FieldByName("Hotel")->AsString=

DataModulTurAg->THotelLookUp->FieldByName("NameHotel")->AsString;

DataModulTurAg->TTuri->Post();

DataModulTurAg->TTuri->Insert();

}

//---------------------------------------------------------------------------__fastcall TFormDobav::DBEDlitKeyPress(TObject *Sender, char &Key)

{

if ((Key>='0')&&(Key<='9'))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TFormDobav::DTPDobavlenCloseUp(TObject *Sender)

{

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("DataZaezda")->AsDateTime=DTPDobavlen->Date;

DataModulTurAg->TTuri->Post();

}

//---------------------------------------------------------------------------__fastcall TFormDobav::DBETurKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я'))

return;Key=0;

}

//---------------------------------------------------------------------------__fastcall TFormDobav::DFotoClick(TObject *Sender)

{

if (OpenPicture->Execute())

DFoto->Picture->LoadFromFile(OpenPicture->FileName);

DFoto->CopyToClipboard();

DFoto->PasteFromClipboard();

}

//---------------------------------------------------------------------------

Листинг формы «О клиентах»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "ZapOTuristah.h"

#include "DModulTurAg.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*FormZapOTuristah;

//---------------------------------------------------------------------------

__fastcall TFormZapOTuristah::TFormZapOTuristah(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TFormZapOTuristah::BitCloseClick(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------__fastcall TFormZapOTuristah::BitHelpClick(TObject *Sender)

{

WinHelp(FormZapOTuristah,"MHelp\\TurAgHelp.hlp",HELP_INDEX,0);

}

//---------------------------------------------------------------------------__fastcall TFormZapOTuristah::FormShow(TObject *Sender)

{

QueryOTuristah->Close();

QueryOTuristah->Params->Items[0]->AsString=

DataModulTurAg->TTuri->FieldByName("Tur")->AsString;

if (! QueryOTuristah->Prepared)

{

QueryOTuristah->Prepare();

}

QueryOTuristah->Open();

if (QueryOTuristah->RecordCount!=0)

{

DataSOTuristah->DataSet=QueryOTuristah;

}

else { ShowMessage ("По Вашему запросу ничего ненайдено");

return;

}

Edit1->Text=IntToStr(DataModulTurAg->TZakaz->RecordCount);

}

//---------------------------------------------------------------------------

Листинг формы «Запрос на отбор данных в диапазоне дат»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "PoiskPoDatam.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form7;

//---------------------------------------------------------------------------

__fastcall TForm7::TForm7(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm7::FormShow(TObject *Sender)

{

DDate2->SetFocus();

DDate1->SetFocus();

}

//---------------------------------------------------------------------------__fastcall TForm7::BitBtn1Click(TObject *Sender)

{

Tag=1; //нажата кнопка Найти

Close();

}

//---------------------------------------------------------------------------

Листинг формы «Запрос на отбор данных в диапазоне цен»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "ZaprosPoCene.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*FormDiapazonCen;

//---------------------------------------------------------------------------

__fastcall TFormDiapazonCen::TFormDiapazonCen(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TFormDiapazonCen::FormShow(TObject *Sender)

{

Cena2->SetFocus();

Cena1->SetFocus();

}

//---------------------------------------------------------------------------__fastcall TFormDiapazonCen::BitBtn1Click(TObject *Sender)

{

Tag=1;

Close();

}

//---------------------------------------------------------------------------

Листинг формы «Бронирование туров»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Brony.h"

#include "ViborGoroda.h"

#include "TuriPoRussii.h"

#include "Turi.h"

#include "Otchet.h"

#include "DModulTurAg.h"

#include "KartaTurista.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*FormBrony;KonCena1=0,KonCena2=0,KonCena3=0,KonCena4=0;cena,cenaPr20,cenaPr5;

//---------------------------------------------------------------------------

__fastcall TFormBrony::TFormBrony(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BKatalogTurClick(TObject *Sender)

{

//--------- вычисление свободных путевок (остаток) ----------------------

DataModulTurAg->TTuri->Refresh();

DataModulTurAg->TTuri->First();

for (int i=0;i<DataModulTurAg->TTuri->RecordCount;i++)

{

Form2->QueryTurist->Close();

Form2->QueryTurist->Cancel();

Form2->QueryTurist->Params->Items[0]->AsString=

DataModulTurAg->TTuri->FieldByName("Tur")->AsString;

if (Form2->QueryTurist->Prepared)

Form2->QueryTurist->Prepare();

Form2->QueryTurist->Open();

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger=

Form2->QueryTurist->FieldByName("COUNT(*)")->AsInteger;

DataModulTurAg->TTuri->Edit();

DataModulTurAg->TTuri->FieldByName("Ost")->AsInteger=

DataModulTurAg->TTuri->FieldByName("KolMest")->AsInteger -

DataModulTurAg->TZakaz->FieldByName("Vsego")->AsInteger;

DataModulTurAg->TTuri->Post();

DataModulTurAg->TTuri->Next();

}

DataModulTurAg->TTuri->First();

Form2->Show();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitBtn2Click(TObject *Sender)

{

WinHelp(FormBrony,"MHelp\\TurAgHelp.hlp",HELP_INDEX,0);

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitInsertClick(TObject *Sender)

{

EZakaz->SetFocus();

EZakaz->Clear();

Fam->Clear();

Name->Clear();

Ot->Clear();

N->Clear();

Ser->Clear();

DataModulTurAg->TZakaz->Insert();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitEditClick(TObject *Sender)

{

int RecordNumber;

AnsiString as=EZakaz->Text;

AnsiString bs;

DataModulTurAg->TZakaz->Edit();

EZakaz->Text=DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString;

Fam->Text=DataModulTurAg->TZakaz->FieldByName("Fam")->AsString;

Name->Text=DataModulTurAg->TZakaz->FieldByName("Imy")->AsString;

Ot->Text=DataModulTurAg->TZakaz->FieldByName("Otchestvo")->AsString;

CBPol->Text=DataModulTurAg->TZakaz->FieldByName("Pol")->AsString;

CBVozr->Text=DataModulTurAg->TZakaz->FieldByName("Vozr")->AsString;

CBDen->Text=DataModulTurAg->TZakaz->FieldByName("Den")->AsInteger;

CBMes->Text=DataModulTurAg->TZakaz->FieldByName("Mes")->AsString;

CBGod->Text=DataModulTurAg->TZakaz->FieldByName("God")->AsInteger;

Nom->Text=DataModulTurAg->TZakaz->FieldByName("ZPnom")->AsInteger;

Ser->Text=DataModulTurAg->TZakaz->FieldByName("ZPser")->AsString;

DateTPData->Date=DataModulTurAg->TZakaz->FieldByName("ZPdeystv")->AsDateTime;

Tel->Text=DataModulTurAg->TZakaz->FieldByName("Tel")->AsString;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitSaveClick(TObject *Sender)

{

int RecordNumber;

AnsiString as=EZakaz->Text;

AnsiString bs;

if ((Fam->Text).Length() == 0)

{

MessageDlg("Введите фамилию", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Fam->Handle);

return;

}

if ((Name->Text).Length() == 0)

{

MessageDlg("Введите имя", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Name->Handle);

return;

}

if ((Ot->Text).Length() == 0)

{

MessageDlg("Введите отчество", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Ot->Handle);

return;

}

if ((EZakaz->Text).Length() == 0)

{

MessageDlg("Введите номер заказа", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(EZakaz->Handle);

return;

}

if ((Nom->Text).Length() == 0)

{

MessageDlg("Введите номер паспорта", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(N->Handle);

return;

}

if ((Ser->Text).Length() == 0)

{

MessageDlg("Введите серию паспорта", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Ser->Handle);

return;

}

if ((Tel->Text).Length() == 0)

{

MessageDlg("Укажите номер телефона", mtInformation, TMsgDlgButtons() << mbOK, 0);

::SetFocus(Tel->Handle);

return;

}(EZakaz->Modified)

{

DataModulTurAg->TZakaz->First();

for (int i=0;i<DataModulTurAg->TZakaz->RecordCount;i++)

{

bs=DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString;

if (as != bs)

{

DataModulTurAg->TZakaz->Next();

}

else

{

MessageDlg("Запсись с таким номером уже есть", mtInformation, TMsgDlgButtons()

<< mbOK, 0);

::SetFocus(EZakaz->Handle);

RecordNumber=DataModulTurAg->TZakaz->RecNo;

return;

}

DataModulTurAg->TZakaz->RecNo=RecordNumber;

DataModulTurAg->TZakaz->Edit();

}

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString=EZakaz->Text;

DataModulTurAg->TZakaz->FieldByName("Fam")->AsString=Fam->Text;

DataModulTurAg->TZakaz->FieldByName("Imy")->AsString=Name->Text;

DataModulTurAg->TZakaz->FieldByName("Otchestvo")->AsString=Ot->Text;

DataModulTurAg->TZakaz->FieldByName("Vozr")->AsString=CBVozr->Text;

DataModulTurAg->TZakaz->FieldByName("Pol")->AsString=CBPol->Text;

DataModulTurAg->TZakaz->FieldByName("Den")->AsString=CBDen->Text;

DataModulTurAg->TZakaz->FieldByName("Mes")->AsString=CBMes->Text;

DataModulTurAg->TZakaz->FieldByName("God")->AsString=CBGod->Text;

DataModulTurAg->TZakaz->FieldByName("ZPnom")->AsString=Nom->Text;

DataModulTurAg->TZakaz->FieldByName("ZPser")->AsString=Ser->Text;

DataModulTurAg->TZakaz->FieldByName("ZPdeystv")->AsDateTime=DateTPData->Date;

DataModulTurAg->TZakaz->FieldByName("Tel")->AsString=Tel->Text;

DataModulTurAg->TZakaz->Post();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitOtchetClick(TObject *Sender)

{

FormOtchet->QROtchet->Preview();

FormOtchet->QROtchet->Print();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::DateTPDataCloseUp(TObject *Sender)

{

DataModulTurAg->TZakaz->Edit();

DataModulTurAg->TZakaz->FieldByName("ZPdeystv")->AsDateTime=DateTPData->Date;

DataModulTurAg->TZakaz->Post();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitRaschetClick(TObject *Sender)

{

Currency Summ;

Summ=KonCena1+KonCena2+KonCena3+KonCena4;

ECenaSumm->Text=Summ;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox1Click(TObject *Sender)

{

cena=0,cenaPr20=0,cenaPr5=0;

ECena2->Text=DataModulTurAg->TTuri->FieldByName("Cena")->AsCurrency;

switch (CBox1->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena2->Text);

ECena2->Text=cena;break; }

case 1:{ cena=StrToCurr(ECena2->Text);

cenaPr20=cena-((cena*20)/100);

ECena2->Text=cenaPr20; break;}

case 2:{ cena=StrToCurr(ECena2->Text);

cenaPr5=cena-((cena*5)/100);

ECena2->Text=cenaPr5;break;}

}=ECena2->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox2Click(TObject *Sender)

{=0,cenaPr20=0,cenaPr5=0;->Text=DataModulTurAg->TTuri->FieldByName("Cena")->AsCurrency;(CBox2->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena3->Text);

ECena3->Text=cena;break; }

case 1:{ cena=StrToCurr(ECena3->Text);

cenaPr20=cena-((cena*20)/100);

ECena3->Text=cenaPr20; break;}

case 2:{ cena=StrToCurr(ECena3->Text);

cenaPr5=cena-((cena*5)/100);

ECena3->Text=cenaPr5;break;}

}=ECena3->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox3Click(TObject *Sender)

{=0,cenaPr20=0,cenaPr5=0;->Text=DataModulTurAg->TTuri->FieldByName("Cena")->AsCurrency;(CBox3->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena4->Text);

ECena4->Text=cena;break; }

case 1:{ cena=StrToCurr(ECena4->Text);

cenaPr20=cena-((cena*20)/100);

ECena4->Text=cenaPr20; break;}

case 2:{ cena=StrToCurr(ECena4->Text);

cenaPr5=cena-((cena*5)/100);

ECena4->Text=cenaPr5;break;}

}=ECena4->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::CBox4Click(TObject *Sender)

{=0,cenaPr20=0,cenaPr5=0;->Text=DataModulTurAg->TTuri->FieldByName("Cena")->AsCurrency;

switch (CBox4->ItemIndex)

{

case 0:{ cena=StrToCurr(ECena5->Text);

ECena5->Text=cena;break; }

case 1:{ cena=StrToCurr(ECena5->Text);

cenaPr20=cena-((cena*20)/100);

ECena5->Text=cenaPr20; break;}

case 2:{ cena=StrToCurr(ECena5->Text);

cenaPr5=cena-((cena*5)/100);

ECena5->Text=cenaPr5;break;}

}=ECena5->Text;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitBtn4Click(TObject *Sender)

{>TZakaz->Cancel();->Clear();->Clear();->Clear();->Clear();>Clear();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::SaveFileClick(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TFormBrony::DateTime1CloseUp(TObject *Sender)

{

DataModulTurAg->TBilet->Edit();

DataModulTurAg->TBilet->FieldByName("DataOyprav")->AsDateTime=DateTime1->Date;

DataModulTurAg->TBilet->Post();

}

//--------------------------------------------------------------------------__fastcall TFormBrony::DateTime2CloseUp(TObject *Sender)

{

DataModulTurAg->TBilet->Edit();

DataModulTurAg->TBilet->FieldByName("DataPrib")->AsDateTime=DateTime2->Date;

DataModulTurAg->TBilet->Post();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BBronyClick(TObject *Sender)

{

DataModulTurAg->TBilet->Edit();

DataModulTurAg->TBilet->FieldByName("VremNaznach")->AsDateTime=Time2->Date;

DataModulTurAg->TBilet->FieldByName("VremOtprav")->AsDateTime=Time1->Date;

DataModulTurAg->TBilet->FieldByName("Transport")->AsString=CBTransp->Text;

DataModulTurAg->TBilet->FieldByName("DataPrib")->AsDateTime=DateTime2->Date;

DataModulTurAg->TBilet->Post();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BEditClick(TObject *Sender)

{

DataModulTurAg->TBilet->Edit();

DataModulTurAg->TBilet->FieldByName("DataPrib")->AsDateTime=DateTime2->Date;

DataModulTurAg->TBilet->Post();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BDeleteClick(TObject *Sender)

{

DataModulTurAg->TBilet->Delete();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitDeleteClick(TObject *Sender)

{

DataModulTurAg->TZakaz->Delete();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BKartaTuristaClick(TObject *Sender)

{

DataModulTurAg->QKartaTurista->Close();

DataModulTurAg->QKartaTurista->Params->Items[0]->AsString=

DataModulTurAg->TZakaz->FieldByName("Zakaz")->AsString;

DataModulTurAg->QKartaTurista->Open();

FormKartaTurista->QRKartaTurista->Preview();

FormKartaTurista->QRKartaTurista->Print();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::Time1CloseUp(TObject *Sender)

{

DataModulTurAg->TBilet->Edit();

DataModulTurAg->TBilet->FieldByName("VremOyprav")->AsDateTime=Time1->Date;

DataModulTurAg->TBilet->Post();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::BitBtn1Click(TObject *Sender)

{

ShowMessage("Извените, но данная функция находится в разработке");

}

//---------------------------------------------------------------------------__fastcall TFormBrony::N1Click(TObject *Sender)

{

if (Application->MessageBox (

"Вы действительно хотите завершить работу?",

"Подтвердите выход из программы",

MB_YESNOCANCEL + MB_ICONQUESTION) != IDYES)

Abort () ;

Application->Terminate();

}

//---------------------------------------------------------------------------__fastcall TFormBrony::FamKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я')||(Key=' '))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::NameKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я')||(Key=' '))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::OtKeyPress(TObject *Sender, char &Key)

{

if ((Key>='А')&&(Key<='я')||(Key=' ')|| (Key='-'))

return;

else Key=0;

}

//---------------------------------------------------------------------------__fastcall TFormBrony::NKeyPress(TObject *Sender, char &Key)

{

if ((Key>='0')&&(Key<='9'))

return;

else Key=0;

}

//---------------------------------------------------------------------------

Листинг формы «Отчет о бронировании туров»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Otchet.h"

#include "Brony.h"

#include "TuriPoRussii.h"

#include "ViborGoroda.h"

#include "DModulTurAg.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*FormOtchet;

//---------------------------------------------------------------------------

__fastcall TFormOtchet::TFormOtchet(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

Листинг формы «Туристическая путевка»

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "KartaTurista.h"

#include "DModulTurAg.h"

#include "Brony.h"

#include "TuriPoRussii.h"

#include "ViborGoroda.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*FormKartaTurista;

//---------------------------------------------------------------------------

__fastcall TFormKartaTurista::TFormKartaTurista(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!