Создание базы данных авиаперевозок

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

Создание базы данных авиаперевозок

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

"САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ"





Курсовой проект

"Создание базы данных авиаперевозок"

по дисциплине: Распределенные базы данных











Пятигорск

2011

Содержание

Введение

1. Описание предметной области

. Требования к системе

. Концептуальная модель базы данных

. Физическая модель базы данных

4.1 Хранимые процедуры

.2 Триггеры

.3 Индексы

.4 Ограничения целостности

5. Интерфейс пользователя

. Репликация данных

6.1 Описание схемы репликации

.2 Способ организации репликации данных

7. Хранилище данных

. Описание отчётов

8.1 Sql скрипт базы данных

.2 Код c#

Заключение

Список использованной литературы

Введение


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

Поставленная цель определяет задачи исследования:

.        Выявить основную проблему Авиаперевозок в современных условиях.

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

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

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

.        Исследовать предметную область.

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

.        Построить даталогическую модель организации данных.

.        Реализовать базу данных посредством MS SQL Server 2008.

.        Реализовать соответствующее приложение на Windows посредоством языка C#.

.        Произвести развертывание и тестирование системы.

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

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

В разделе "Заключение" описаны Выводы, Рекомендации и Итоги выполненной работы.

Наиболее важными источниками при проектировании проекта были

.        Русская Википедия

.        Атре Ш. Структурный подход к организации баз данных.

.        Интуит. Введение в WPF.

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

1.     
Описание предметной области


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

Объект управления - заказы клиентов.

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

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

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

Состав и содержание работ по созданию системы:

.Создание графического интерфейса.

.Создание распределённых БД.

.Разработка программы.

.Заполнение БД.

.Тестирование программы.

.Описание программных средств.

.Разработка программной документации.

.Настройка приложения.

2.     
Требования к системе


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

.        Хранение информации о проведённых заказах.

.        Обработка хранимых данных на сервере.

.        Простой быстрый ввод/вывод данных из базы данных.

Система осуществляет следующие операции:

.        Покупка/ Продажа билета.

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

Система предназначена:

1.      Сотрудников компании.

.        Для IT-специалистов.

.        Для системного администратора.

.        Для конечных потребителей продукта.

Надёжность системы обеспечена правильностью вводимых данных пользователя. В случае неправильно введённых данных, всю вину пользователь берет на себя.

Таблица 1. Требования к программной и аппаратной совместимости

Системные требования

Минимальные

Рекомендуемые

Процессор

2.0Ghz

3.0Ghz

ОЗУ

512mb

512mb

ОС

Windows XP SP3

Windows Vista

Видеокарта

128 mb

256 mb

.net framework

4.0

4.0


Требования к транспортировке и хранению:

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

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

.        Система должна храниться на ЖД ЭВМ.

.        Условия хранения системы на НГМД должны соответствовать условиям хранения НГМД, требования к которым предъявляются в эксплуатационной документации НГМД.

Порядок контроля и приёмки системы:

.        Контроль осуществляется Исполнителем системы.

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

.        Состав документации определяется Заказчиком и согласовывается с Исполнителем.

3.     
Концептуальная модель базы данных


Рис. 1. Концептуальная модель (Часть 1)

Рис. 2. Концептуальная модель (Часть 2)

Из рисунка 1 и 2 видно, что в системе реализованы следующие сущности: Самолет, клиент, билет, расписание рейса, авиакомпания и др.

Каждая сущность включает в себя различные данные: название авиакомпании, модель, дату и время отправления, продолжительность полета, пункт назначения, цены на билеты каждого класса, количество свободных мест каждого класса и прочее. Так же в базе данных хранится информации о количестве свободных мест первого и второго класса на заданный рейс. На этапе концептуального проектирования использовалась модель "сущность-связь". Как видно из рисунка 1 и 2, в предметной области выделено 18 сущностей: среди них - пользователи (users), заказы (orders), рейсы (flights), города (cities), самолеты (aircrafts) и авиакомпании (companies).

4.     
Физическая модель базы данных


Рис. 4. Физическая модель

4.1 Хранимые процедуры


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

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

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

Выбор Российских пользователей

- ================================================ANSI_NULLS ONQUOTED_IDENTIFIER ON

- =============================================

- Author:<Author,,Name>

- Create date: <Create Date,,>

- Description:<извлекаем информацию о русских клиентах >

- =============================================PROCEDURE SelectRussian

- Add the parameters for the stored procedure here

@Russian text

- SET NOCOUNT ON added to prevent extra result sets from

- interfering with SELECT statements.[ID КЛИЕНТА] from [КЛИЕНТ] Where [ЯЗЫК] Like @Russian

Добавление пользователя

CREATE PROCEDURE InsUser

@login text,

@password text,

@email textПОЛЬЗОВАТЕЛЬ

(LOGIN, PASSWORD, EMAIL)

(@login, @password, @email)

 

.2 Триггеры


Запрета попытки подключения к SQL Server в качестве члена login_ admin, если под этой учётной записью уже запущен 1 сеанс.

LOGIN login_admin WITH PASSWORD = 'Admin' MUST_CHANGE,_EXPIRATION = ON;VIEW SERVER STATE TO login_admin;TRIGGER connection_limit_admin_triggerALL SERVER WITH EXECUTE AS 'login_admin'LOGONORIGINAL_LOGIN()= 'Admin' AND

(SELECT COUNT(*) FROM sys.dm_exec_sessionsis_user_process = 1 AND_login_name = 'Admin') > 1;;

Запрет взятия багажа, если он превышает 15 кг:

USE [Aviatickets]

/****** Object: Trigger [dbo].[MnogoVeschey] Script Date: 04/13/2012 14:26:51 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ON

- =============================================TRIGGER [dbo].[MnogoVeschey][dbo].[БАГАЖ]INSERTNOCOUNT ON;(select [ОБЪЕМ ГРУЗА] from inserted)>'15''Вы не можете вставлять запись с менее 15'

4.3 Индексы


При разработке были использованы все виды индексов:

.        Не кластерные индексы.

.        Уникальные индексы.

.        Кластерные индексы.

.        Не уникальные индексы.

4.4 Ограничения целостности


В программе существует ограничение целостности данных. ON DELETE NO ACTION. При попытке удалить строку с ключом, на которую ссылаются внешние ключи в строках других таблиц, происходит сообщение об ошибке и строка не удаляется. Ограничение настраиваются автоматически для каждого столбца. А при неправильной инструкции DELETE выполняется откат к предыдущему состоянию.

5.     
Интерфейс пользователя


Интерфейс программы написан с использованием технологии Windows Presentation Foundation. Это система для построения Windows приложений с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), имеющая прямое отношение к XAML.

Рис. 5. Главное окно программы

Рис. 7. Поиск по Базе Данных

Рис. 6. Окно работы администратора системы

Рис. 9. Форма проверки данных

Рис. 10. Форма заполнения данных клиента

6.     
Репликация данных


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

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

Второе - осуществляет выплату заработной платы, и использует систему в полном объёме.

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

6.1 Описание схемы репликации


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

Рис. 11. Описание схемы репликации

6.2 Способ организации репликации данных

Описание схемы и способа организации репликации данных в территориально распределённых БД в направлениях:

Центральный офис ® Филиал (Мобильный клиент)

Филиал (Мобильный клиент) ® Центральный офис

7.     
Хранилище данных


Система включает:

.        Информационные источники: оперативные базы данных (базы данных OLTP-систем), "плоские" файлы с наборами данных, внешние источники (например, информационные источники глобальных вычислительных сетей).

.        Средства трансформации и загрузки данных в хранилище (процедуры загрузки, созданные на языке сервера хранилища данных).

.        Сервер хранилища данных.

.        Клиентские рабочие места аналитиков и/или средства разработки аналитических приложений.

Рис. 12. Схема хранилища данных

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

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

Рис. 13. Концептуальная модель хранилища данных

На рис. 13. приведён пример структуры реляционной базы данных, построенной по схеме "звезда". Здесь таблица с информацией о продажах билета связана с четырьмя таблицами - измерениями (сервис, рейс, регион, клиент).

8.     
Описание отчётов


8.1 SQL Скрипт базы данных

DATABASE Aviatickets

( NAME = Aviatickets1,= "c:\Aviatickets.mdf",= 5MB,= 10,= 2),

( NAME = Aviatickets2,= "c:\Aviatickets.ndf",= 5MB,= 10,= 2)ON( NAME = Aviaticketslog,= "c:\Aviatickets.ldf",= 5MB,= 10,= 2)

/*==============================================================*/

/* DBMS name: Microsoft SQL Server 2008 */

/* Created on: 24.03.2012 21:19:48 */

/*==============================================================*/EXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('АВИАКОМПАНИЯ') AND O.NAME = 'FK_АВИАКОМП_АВИАКОМПА_САМОЛЕТ')TABLE АВИАКОМПАНИЯCONSTRAINT FK_АВИАКОМП_АВИАКОМПА_САМОЛЕТEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('"АДРЕС НАЗНАЧЕНИЯ"') AND O.NAME = 'FK_АДРЕС НА_АДРЕС НАЗ_МЕСТО')TABLE "АДРЕС НАЗНАЧЕНИЯ"CONSTRAINT "FK_АДРЕС НА_АДРЕС НАЗ_МЕСТО"EXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('"АДРЕС ОТПРАВЛЕНИЯ"') AND O.NAME = 'FK_АДРЕС ОТ_АДРЕС ОТП_МЕСТО')TABLE "АДРЕС ОТПРАВЛЕНИЯ"CONSTRAINT "FK_АДРЕС ОТ_АДРЕС ОТП_МЕСТО"EXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('БИЛЕТ') AND O.NAME = 'FK_БИЛЕТ_БИЛЕТ_РЕЙ_РЕЙС')TABLE БИЛЕТCONSTRAINT FK_БИЛЕТ_БИЛЕТ_РЕЙ_РЕЙСEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('БИЛЕТ') AND O.NAME = 'FK_БИЛЕТ_БИЛЕТ_СЕР_СЕРВИС')TABLE БИЛЕТCONSTRAINT FK_БИЛЕТ_БИЛЕТ_СЕР_СЕРВИСEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('КЛИЕНТ') AND O.NAME = 'FK_КЛИЕНТ_КЛИЕНТ_БИ_БИЛЕТ')TABLE КЛИЕНТCONSTRAINT FK_КЛИЕНТ_КЛИЕНТ_БИ_БИЛЕТEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('ПРОФЕССИЯ') AND O.NAME = 'FK_ПРОФЕССИ_ПРОФЕССИЯ_ЗАРПЛАТА')TABLE ПРОФЕССИЯCONSTRAINT FK_ПРОФЕССИ_ПРОФЕССИЯ_ЗАРПЛАТАEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('РЕЙС') AND O.NAME = 'FK_РЕЙС_РЕЙС_АДРЕ_АДРЕС НА')TABLE РЕЙСCONSTRAINT "FK_РЕЙС_РЕЙС_АДРЕ_АДРЕС НА"EXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('РЕЙС') AND O.NAME = 'FK_РЕЙС_РЕЙС_АДРЕ_АДРЕС ОТ')TABLE РЕЙСCONSTRAINT "FK_РЕЙС_РЕЙС_АДРЕ_АДРЕС ОТ"EXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('РЕЙС') AND O.NAME = 'FK_РЕЙС_РЕЙС_РАСП_РАСПИСАН')TABLE РЕЙСCONSTRAINT FK_РЕЙС_РЕЙС_РАСП_РАСПИСАНEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('САМОЛЕТ') AND O.NAME = 'FK_САМОЛЕТ_САМОЛЕТ_О_ОБСЛУЖИВ')TABLE САМОЛЕТCONSTRAINT FK_САМОЛЕТ_САМОЛЕТ_О_ОБСЛУЖИВEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('САМОЛЕТ') AND O.NAME = 'FK_САМОЛЕТ_САМОЛЕТ_Э_ЭКИПАЖ')TABLE САМОЛЕТCONSTRAINT FK_САМОЛЕТ_САМОЛЕТ_Э_ЭКИПАЖEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('СЕРВИС') AND O.NAME = 'FK_СЕРВИС_СЕРВИС_БА_БАГАЖ')TABLE СЕРВИСCONSTRAINT FK_СЕРВИС_СЕРВИС_БА_БАГАЖEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('СОТРУДНИК') AND O.NAME = 'FK_СОТРУДНИ_СОТРУДНИК_АВИАКОМП')TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_АВИАКОМПEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('СОТРУДНИК') AND O.NAME = 'FK_СОТРУДНИ_СОТРУДНИК_ПАСПОРТ')TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_ПАСПОРТEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('СОТРУДНИК') AND O.NAME = 'FK_СОТРУДНИ_СОТРУДНИК_ПОЛЬЗОВА')TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_ПОЛЬЗОВАEXISTS (SELECT 1SYS.SYSREFERENCES R JOIN SYS.SYSOBJECTS O ON (O.ID = R.CONSTID AND O.TYPE = 'F')R.FKEYID = OBJECT_ID('СОТРУДНИК') AND O.NAME = 'FK_СОТРУДНИ_СОТРУДНИК_ПРОФЕССИ')TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_ПРОФЕССИEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('АВИАКОМПАНИЯ')NAME = 'АВИАКОМПАНИЯ_САМОЛЕТ_FK'INDID > 0INDID < 255)INDEX АВИАКОМПАНИЯ.АВИАКОМПАНИЯ_САМОЛЕТ_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('АВИАКОМПАНИЯ')TYPE = 'U')TABLE АВИАКОМПАНИЯEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('"АДРЕС НАЗНАЧЕНИЯ"')NAME = 'АДРЕС НАЗНАЧЕНИЯ_МЕСТО_FK'INDID > 0INDID < 255)INDEX "АДРЕС НАЗНАЧЕНИЯ"."АДРЕС НАЗНАЧЕНИЯ_МЕСТО_FK"EXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('"АДРЕС НАЗНАЧЕНИЯ"')TYPE = 'U')TABLE "АДРЕС НАЗНАЧЕНИЯ"EXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('"АДРЕС ОТПРАВЛЕНИЯ"')NAME = 'АДРЕС ОТПРАВЛЕНИЯ_МЕСТО_FK'INDID > 0INDID < 255)INDEX "АДРЕС ОТПРАВЛЕНИЯ"."АДРЕС ОТПРАВЛЕНИЯ_МЕСТО_FK"EXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('"АДРЕС ОТПРАВЛЕНИЯ"')TYPE = 'U')TABLE "АДРЕС ОТПРАВЛЕНИЯ"EXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('БАГАЖ')TYPE = 'U')TABLE БАГАЖEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('БИЛЕТ')NAME = 'БИЛЕТ_РЕЙС_FK'INDID > 0INDID < 255)INDEX БИЛЕТ.БИЛЕТ_РЕЙС_FKEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('БИЛЕТ')NAME = 'БИЛЕТ_СЕРВИС_FK'INDID > 0INDID < 255)INDEX БИЛЕТ.БИЛЕТ_СЕРВИС_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('БИЛЕТ')TYPE = 'U')TABLE БИЛЕТEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('ЗАРПЛАТА')TYPE = 'U')TABLE ЗАРПЛАТАEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('КЛИЕНТ')NAME = 'КЛИЕНТ_БИЛЕТ_FK'INDID > 0INDID < 255)INDEX КЛИЕНТ.КЛИЕНТ_БИЛЕТ_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('КЛИЕНТ')TYPE = 'U')TABLE КЛИЕНТEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('МЕСТО')TYPE = 'U')TABLE МЕСТОEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('"ОБСЛУЖИВАЮЩИЕ БРИГАДЫ"')TYPE = 'U')TABLE "ОБСЛУЖИВАЮЩИЕ БРИГАДЫ"EXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('ПАСПОРТ')TYPE = 'U')TABLE ПАСПОРТEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('ПОЛЬЗОВАТЕЛЬ')TYPE = 'U')TABLE ПОЛЬЗОВАТЕЛЬEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('ПРОФЕССИЯ')NAME = 'ПРОФЕССИЯ_ЗАРПЛАТА_FK'INDID > 0INDID < 255)INDEX ПРОФЕССИЯ.ПРОФЕССИЯ_ЗАРПЛАТА_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('ПРОФЕССИЯ')TYPE = 'U')TABLE ПРОФЕССИЯEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('РАСПИСАНИЕ')TYPE = 'U')TABLE РАСПИСАНИЕEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('РЕЙС')NAME = 'РЕЙС_АДРЕС НАЗНАЧЕНИЯ_FK'INDID > 0INDID < 255)INDEX РЕЙС."РЕЙС_АДРЕС НАЗНАЧЕНИЯ_FK"EXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('РЕЙС')NAME = 'РЕЙС_АДРЕС ОТПРАВЛЕНИЯ_FK'INDID > 0INDID < 255)INDEX РЕЙС."РЕЙС_АДРЕС ОТПРАВЛЕНИЯ_FK"EXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('РЕЙС')NAME = 'РЕЙС_РАСПИСАНИЕ_FK'INDID > 0INDID < 255)INDEX РЕЙС.РЕЙС_РАСПИСАНИЕ_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('РЕЙС')TYPE = 'U')TABLE РЕЙСEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('САМОЛЕТ')NAME = 'САМОЛЕТ_ЭКИПАЖ_FK'INDID > 0INDID < 255)INDEX САМОЛЕТ.САМОЛЕТ_ЭКИПАЖ_FKEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('САМОЛЕТ')NAME = 'САМОЛЕТ_ОБСЛУЖИВАЮЩИЕ БРИГАДЫ_FK'INDID > 0INDID < 255)INDEX САМОЛЕТ."САМОЛЕТ_ОБСЛУЖИВАЮЩИЕ БРИГАДЫ_FK"EXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('САМОЛЕТ')TYPE = 'U')TABLE САМОЛЕТEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('СЕРВИС')NAME = 'СЕРВИС_БАГАЖ_FK'INDID > 0INDID < 255)INDEX СЕРВИС.СЕРВИС_БАГАЖ_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('СЕРВИС')TYPE = 'U')TABLE СЕРВИСEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('СОТРУДНИК')NAME = 'СОТРУДНИК_ПОЛЬЗОВАТЕЛЬ_FK'INDID > 0INDID < 255)INDEX СОТРУДНИК.СОТРУДНИК_ПОЛЬЗОВАТЕЛЬ_FKEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('СОТРУДНИК')NAME = 'СОТРУДНИК_ПАСПОРТ_FK'INDID > 0INDID < 255)INDEX СОТРУДНИК.СОТРУДНИК_ПАСПОРТ_FKEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('СОТРУДНИК')NAME = 'СОТРУДНИК_АВИАКОМПАНИЯ_FK'INDID > 0INDID < 255)INDEX СОТРУДНИК.СОТРУДНИК_АВИАКОМПАНИЯ_FKEXISTS (SELECT 1SYSINDEXESID = OBJECT_ID('СОТРУДНИК')NAME = 'СОТРУДНИК_ПРОФЕССИЯ_FK'INDID > 0INDID < 255)INDEX СОТРУДНИК.СОТРУДНИК_ПРОФЕССИЯ_FKEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('СОТРУДНИК')TYPE = 'U')TABLE СОТРУДНИКEXISTS (SELECT 1SYSOBJECTSID = OBJECT_ID('ЭКИПАЖ')TYPE = 'U')TABLE ЭКИПАЖ

/*==============================================================*/

/* Table: АВИАКОМПАНИЯ */

/*==============================================================*/TABLE АВИАКОМПАНИЯ (

"ID АВИАКОМПАНИИ" INT NOT NULL,

"БОРТ НОМЕР САМОЛЕТА" INT NULL,

НАЗВАНИЕ TEXT NOT NULL,

"ДАТА ОСНОВАНИЯ" DATETIME NOT NULL,

"КОЛИЧЕСТВО СОТРУДНИКОВ" BIGINT NOT NULL,

"КОЛИЧЕСТВО САМОЛЕТОВ" INT NOT NULL,PK_АВИАКОМПАНИЯ PRIMARY KEY NONCLUSTERED ("ID АВИАКОМПАНИИ")

)

/*==============================================================*/

/* Index: АВИАКОМПАНИЯ_САМОЛЕТ_FK */

/*==============================================================*/INDEX АВИАКОМПАНИЯ_САМОЛЕТ_FK ON АВИАКОМПАНИЯ (

"БОРТ НОМЕР САМОЛЕТА" ASC

)

/*==============================================================*/

/* Table: "АДРЕС НАЗНАЧЕНИЯ" */

/*==============================================================*/TABLE "АДРЕС НАЗНАЧЕНИЯ" (

"ID АДРЕСА НАЗНАЧЕНИЯ" INT NOT NULL,

"ID МЕСТА" INT NOT NULL,"PK_АДРЕС НАЗНАЧЕНИЯ" PRIMARY KEY NONCLUSTERED ("ID АДРЕСА НАЗНАЧЕНИЯ")

)

/*==============================================================*/

/* Index: "АДРЕС НАЗНАЧЕНИЯ_МЕСТО_FK" */

/*==============================================================*/INDEX "АДРЕС НАЗНАЧЕНИЯ_МЕСТО_FK" ON "АДРЕС НАЗНАЧЕНИЯ" (

"ID МЕСТА" ASC

)

/*==============================================================*/

/* Table: "АДРЕС ОТПРАВЛЕНИЯ" */

/*==============================================================*/TABLE "АДРЕС ОТПРАВЛЕНИЯ" (

"ID АДРЕСА ОТПРАВЛЕНИЯ" INT NOT NULL,

"ID МЕСТА" INT NOT NULL,"PK_АДРЕС ОТПРАВЛЕНИЯ" PRIMARY KEY NONCLUSTERED ("ID АДРЕСА ОТПРАВЛЕНИЯ")

) приложение отчет sql скрипт

/*==============================================================*/

/* Index: "АДРЕС ОТПРАВЛЕНИЯ_МЕСТО_FK" */

/*==============================================================*/INDEX "АДРЕС ОТПРАВЛЕНИЯ_МЕСТО_FK" ON "АДРЕС ОТПРАВЛЕНИЯ" (

"ID МЕСТА" ASC

)

/*==============================================================*/

/* Table: БАГАЖ */

/*==============================================================*/TABLE БАГАЖ (

"ID БАГАЖА" INT NOT NULL,

"ОБЪЕМ ГРУЗА" FLOAT NOT NULL,

"ЦЕНА БАГАЖА" MONEY NOT NULL,PK_БАГАЖ PRIMARY KEY NONCLUSTERED ("ID БАГАЖА")

)

/*==============================================================*/

/* Table: БИЛЕТ */

/*==============================================================*/TABLE БИЛЕТ (

"НОМЕР БИЛЕТА" INT NOT NULL,

"КЛАСС СЕРВИСА" INT NOT NULL,

"ID РЕЙСА" INT NOT NULL,

ЦЕНА MONEY NOT NULL,

ВАЛЮТА TEXT NOT NULL,PK_БИЛЕТ PRIMARY KEY NONCLUSTERED ("НОМЕР БИЛЕТА")

)

/*==============================================================*/

/* Index: БИЛЕТ_СЕРВИС_FK */

/*==============================================================*/INDEX БИЛЕТ_СЕРВИС_FK ON БИЛЕТ (

"КЛАСС СЕРВИСА" ASC

)

/*==============================================================*/

/* Index: БИЛЕТ_РЕЙС_FK */

/*==============================================================*/INDEX БИЛЕТ_РЕЙС_FK ON БИЛЕТ (

"ID РЕЙСА" ASC

)

/*==============================================================*/

/* Table: ЗАРПЛАТА */

/*==============================================================*/TABLE ЗАРПЛАТА (

"ID ЗАРПЛАТЫ" INT NOT NULL,

ОКЛАД MONEY NOT NULL,PK_ЗАРПЛАТА PRIMARY KEY NONCLUSTERED ("ID ЗАРПЛАТЫ")

)

/*==============================================================*/

/* Table: КЛИЕНТ */

/*==============================================================*/TABLE КЛИЕНТ (

"ID КЛИЕНТА" INT NOT NULL,

"НОМЕР БИЛЕТА" INT NULL,

"КОНТАКТНЫЙ НОМЕР" TEXT NOT NULL,

ЯЗЫК TEXT NOT NULL,

ПОСТОЯННЫЙ BIT NOT NULL,PK_КЛИЕНТ PRIMARY KEY NONCLUSTERED ("ID КЛИЕНТА")

)

/*==============================================================*/

/* Index: КЛИЕНТ_БИЛЕТ_FK */

/*==============================================================*/INDEX КЛИЕНТ_БИЛЕТ_FK ON КЛИЕНТ (

"НОМЕР БИЛЕТА" ASC

)

/*==============================================================*/

/* Table: МЕСТО */

/*==============================================================*/TABLE МЕСТО (

"ID МЕСТА" INT NOT NULL,

СТРАНА TEXT NOT NULL,

ГОРОД TEXT NOT NULL,

ВОКЗАЛ TEXT NOT NULL,PK_МЕСТО PRIMARY KEY NONCLUSTERED ("ID МЕСТА")

)

/*==============================================================*/

/* Table: "ОБСЛУЖИВАЮЩИЕ БРИГАДЫ" */

/*==============================================================*/TABLE "ОБСЛУЖИВАЮЩИЕ БРИГАДЫ" (

"НОМЕР БРИГАДЫ" INT NOT NULL,

"НАЗВАНИЕ БРАГАДЫ" TEXT NOT NULL,"PK_ОБСЛУЖИВАЮЩИЕ БРИГАДЫ" PRIMARY KEY NONCLUSTERED ("НОМЕР БРИГАДЫ")

)

/*==============================================================*/

/* Table: ПАСПОРТ */

/*==============================================================*/TABLE ПАСПОРТ (

"НОМЕР ПАСПОРТА" BIGINT NOT NULL,

ФИО TEXT NOT NULL,

"ДАТА РОЖДЕНИЯ" DATETIME NOT NULL,

"МЕСТО ПРОПИСКИ" TEXT NOT NULL,

"МЕСТО ПРОЖИВАНИЯ" TEXT NOT NULL,PK_ПАСПОРТ PRIMARY KEY NONCLUSTERED ("НОМЕР ПАСПОРТА")

)

/*==============================================================*/

/* Table: ПОЛЬЗОВАТЕЛЬ */

/*==============================================================*/TABLE ПОЛЬЗОВАТЕЛЬ (TEXT NOT NULL,TEXT NOT NULL,TEXT NULL,

"ID ПОЛЬЗОВАТЕЛЯ" INT NOT NULL,PK_ПОЛЬЗОВАТЕЛЬ PRIMARY KEY NONCLUSTERED ("ID ПОЛЬЗОВАТЕЛЯ")

)

/*==============================================================*/

/* Table: ПРОФЕССИЯ */

/*==============================================================*/TABLE ПРОФЕССИЯ (

"ID ПРОФЕССИИ" INT NOT NULL,

"ID ЗАРПЛАТЫ" INT NOT NULL,

НАЗВАНИЕ TEXT NOT NULL,PK_ПРОФЕССИЯ PRIMARY KEY NONCLUSTERED ("ID ПРОФЕССИИ")

)

/*==============================================================*/

/* Index: ПРОФЕССИЯ_ЗАРПЛАТА_FK */

/*==============================================================*/INDEX ПРОФЕССИЯ_ЗАРПЛАТА_FK ON ПРОФЕССИЯ (

"ID ЗАРПЛАТЫ" ASC

)

/*==============================================================*/

/* Table: РАСПИСАНИЕ */

/*==============================================================*/TABLE РАСПИСАНИЕ (

"ВРЕМЯ РЕЙСА" DATETIME NOT NULL,PK_РАСПИСАНИЕ PRIMARY KEY NONCLUSTERED ("ВРЕМЯ РЕЙСА")

)

/*==============================================================*/

/* Table: РЕЙС */

/*==============================================================*/TABLE РЕЙС (

"ID РЕЙСА" INT NOT NULL,

"ВРЕМЯ РЕЙСА" DATETIME NOT NULL,

"ID АДРЕСА НАЗНАЧЕНИЯ" INT NOT NULL,

"ID АДРЕСА ОТПРАВЛЕНИЯ" INT NOT NULL,

ПРЯМОЙ BIT NOT NULL,PK_РЕЙС PRIMARY KEY NONCLUSTERED ("ID РЕЙСА")

)

/*==============================================================*/

/* Index: РЕЙС_РАСПИСАНИЕ_FK */

/*==============================================================*/INDEX РЕЙС_РАСПИСАНИЕ_FK ON РЕЙС (

"ВРЕМЯ РЕЙСА" ASC

)

/*==============================================================*/

/* Index: "РЕЙС_АДРЕС ОТПРАВЛЕНИЯ_FK" */

/*==============================================================*/INDEX "РЕЙС_АДРЕС ОТПРАВЛЕНИЯ_FK" ON РЕЙС (

"ID АДРЕСА ОТПРАВЛЕНИЯ" ASC

)

/*==============================================================*/

/* Index: "РЕЙС_АДРЕС НАЗНАЧЕНИЯ_FK" */

/*==============================================================*/INDEX "РЕЙС_АДРЕС НАЗНАЧЕНИЯ_FK" ON РЕЙС (

"ID АДРЕСА НАЗНАЧЕНИЯ" ASC

)

/*==============================================================*/

/* Table: САМОЛЕТ */

/*==============================================================*/TABLE САМОЛЕТ (

"БОРТ НОМЕР САМОЛЕТА" INT NOT NULL,

"НОМЕР БРИГАДЫ" INT NOT NULL,

"НОМЕР ЭКИПАЖА" INT NOT NULL,

"КОЛИЧЕСТВО МЕСТ" INT NOT NULL,

МОДЕЛЬ TEXT NOT NULL,

"ДАТА ВЫПУСКА" DATETIME NOT NULL,PK_САМОЛЕТ PRIMARY KEY NONCLUSTERED ("БОРТ НОМЕР САМОЛЕТА")

)

/*==============================================================*/

/* Index: "САМОЛЕТ_ОБСЛУЖИВАЮЩИЕ БРИГАДЫ_FK" */

"НОМЕР БРИГАДЫ" ASC

)

/*==============================================================*/

/* Index: САМОЛЕТ_ЭКИПАЖ_FK */

/*==============================================================*/INDEX САМОЛЕТ_ЭКИПАЖ_FK ON САМОЛЕТ (

"НОМЕР ЭКИПАЖА" ASC

)

/*==============================================================*/

/* Table: СЕРВИС */

/*==============================================================*/TABLE СЕРВИС (

"КЛАСС СЕРВИСА" INT NOT NULL,

"ID БАГАЖА" INT NULL,

ПИТАНИЕ BIT NOT NULL,PK_СЕРВИС PRIMARY KEY NONCLUSTERED ("КЛАСС СЕРВИСА")

)

/*==============================================================*/

/* Index: СЕРВИС_БАГАЖ_FK */

/*==============================================================*/INDEX СЕРВИС_БАГАЖ_FK ON СЕРВИС (

"ID БАГАЖА" ASC

)

/*==============================================================*/

/* Table: СОТРУДНИК */

/*==============================================================*/TABLE СОТРУДНИК (

"ID СОТРУДНИКА" INT NOT NULL,

"ID ПРОФЕССИИ" INT NULL,

"ID АВИАКОМПАНИИ" INT NULL,

"НОМЕР ПАСПОРТА" BIGINT NOT NULL,

"ID ПОЛЬЗОВАТЕЛЯ" INT NULL,PK_СОТРУДНИК PRIMARY KEY NONCLUSTERED ("ID СОТРУДНИКА")

)

/*==============================================================*/

/* Index: СОТРУДНИК_ПРОФЕССИЯ_FK */

/*==============================================================*/INDEX СОТРУДНИК_ПРОФЕССИЯ_FK ON СОТРУДНИК (

"ID ПРОФЕССИИ" ASC

)

/*==============================================================*/

/* Index: СОТРУДНИК_АВИАКОМПАНИЯ_FK */

/*==============================================================*/INDEX СОТРУДНИК_АВИАКОМПАНИЯ_FK ON СОТРУДНИК (

"ID АВИАКОМПАНИИ" ASC

)

/*==============================================================*/

/* Index: СОТРУДНИК_ПАСПОРТ_FK */

/*==============================================================*/INDEX СОТРУДНИК_ПАСПОРТ_FK ON СОТРУДНИК (

"НОМЕР ПАСПОРТА" ASC

)

/*==============================================================*/

/* Index: СОТРУДНИК_ПОЛЬЗОВАТЕЛЬ_FK */

/*==============================================================*/INDEX СОТРУДНИК_ПОЛЬЗОВАТЕЛЬ_FK ON СОТРУДНИК (

"ID ПОЛЬЗОВАТЕЛЯ" ASC

)

/*==============================================================*/

/* Table: ЭКИПАЖ */

/*==============================================================*/TABLE ЭКИПАЖ (

"НОМЕР ЭКИПАЖА" INT NOT NULL,PK_ЭКИПАЖ PRIMARY KEY NONCLUSTERED ("НОМЕР ЭКИПАЖА")

)TABLE АВИАКОМПАНИЯCONSTRAINT FK_АВИАКОМП_АВИАКОМПА_САМОЛЕТ FOREIGN KEY ("БОРТ НОМЕР САМОЛЕТА")САМОЛЕТ ("БОРТ НОМЕР САМОЛЕТА")TABLE "АДРЕС НАЗНАЧЕНИЯ"CONSTRAINT "FK_АДРЕС НА_АДРЕС НАЗ_МЕСТО" FOREIGN KEY ("ID МЕСТА")МЕСТО ("ID МЕСТА")TABLE "АДРЕС ОТПРАВЛЕНИЯ"CONSTRAINT "FK_АДРЕС ОТ_АДРЕС ОТП_МЕСТО" FOREIGN KEY ("ID МЕСТА")МЕСТО ("ID МЕСТА")TABLE БИЛЕТCONSTRAINT FK_БИЛЕТ_БИЛЕТ_РЕЙ_РЕЙС FOREIGN KEY ("ID РЕЙСА")РЕЙС ("ID РЕЙСА")TABLE БИЛЕТCONSTRAINT FK_БИЛЕТ_БИЛЕТ_СЕР_СЕРВИС FOREIGN KEY ("КЛАСС СЕРВИСА")СЕРВИС ("КЛАСС СЕРВИСА")TABLE КЛИЕНТCONSTRAINT FK_КЛИЕНТ_КЛИЕНТ_БИ_БИЛЕТ FOREIGN KEY ("НОМЕР БИЛЕТА")БИЛЕТ ("НОМЕР БИЛЕТА")TABLE ПРОФЕССИЯCONSTRAINT FK_ПРОФЕССИ_ПРОФЕССИЯ_ЗАРПЛАТА FOREIGN KEY ("ID ЗАРПЛАТЫ")ЗАРПЛАТА ("ID ЗАРПЛАТЫ")TABLE РЕЙСCONSTRAINT "FK_РЕЙС_РЕЙС_АДРЕ_АДРЕС НА" FOREIGN KEY ("ID АДРЕСА НАЗНАЧЕНИЯ")"АДРЕС НАЗНАЧЕНИЯ" ("ID АДРЕСА НАЗНАЧЕНИЯ")TABLE РЕЙСCONSTRAINT "FK_РЕЙС_РЕЙС_АДРЕ_АДРЕС ОТ" FOREIGN KEY ("ID АДРЕСА ОТПРАВЛЕНИЯ")"АДРЕС ОТПРАВЛЕНИЯ" ("ID АДРЕСА ОТПРАВЛЕНИЯ")TABLE РЕЙСCONSTRAINT FK_РЕЙС_РЕЙС_РАСП_РАСПИСАН FOREIGN KEY ("ВРЕМЯ РЕЙСА")РАСПИСАНИЕ ("ВРЕМЯ РЕЙСА")TABLE САМОЛЕТCONSTRAINT FK_САМОЛЕТ_САМОЛЕТ_О_ОБСЛУЖИВ FOREIGN KEY ("НОМЕР БРИГАДЫ")"ОБСЛУЖИВАЮЩИЕ БРИГАДЫ" ("НОМЕР БРИГАДЫ")TABLE САМОЛЕТCONSTRAINT FK_САМОЛЕТ_САМОЛЕТ_Э_ЭКИПАЖ FOREIGN KEY ("НОМЕР ЭКИПАЖА")ЭКИПАЖ ("НОМЕР ЭКИПАЖА")TABLE СЕРВИСCONSTRAINT FK_СЕРВИС_СЕРВИС_БА_БАГАЖ FOREIGN KEY ("ID БАГАЖА")БАГАЖ ("ID БАГАЖА")TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_АВИАКОМП FOREIGN KEY ("ID АВИАКОМПАНИИ")АВИАКОМПАНИЯ ("ID АВИАКОМПАНИИ")TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_ПАСПОРТ FOREIGN KEY ("НОМЕР ПАСПОРТА")ПАСПОРТ ("НОМЕР ПАСПОРТА")TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_ПОЛЬЗОВА FOREIGN KEY ("ID ПОЛЬЗОВАТЕЛЯ")ПОЛЬЗОВАТЕЛЬ ("ID ПОЛЬЗОВАТЕЛЯ")TABLE СОТРУДНИКCONSTRAINT FK_СОТРУДНИ_СОТРУДНИК_ПРОФЕССИ FOREIGN KEY ("ID ПРОФЕССИИ")ПРОФЕССИЯ ("ID ПРОФЕССИИ")

8.2 Код C#

class Buy {const string connectionString =

@"Data Source=(local);Initial Catalog=Aviatickets;Integrated Security=True";readonly SqlConnection con = new SqlConnection(connectionString);string nomerBileta;DataTable SendSearch(bool pryam, string avia, string racebegin, string raceend) {query = string.Format("Select * " +

"FROM [РЕЙС] " + INNER JOIN [АВИАКОМПАНИЯ] ON [ID АВИАКОМПАНИИ] = {0}", avia);{cmd = new SqlCommand(query, con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "АВИАКОМПАНИЯ");ds.Tables[0];

}{.Close();

}

}void SendData2(string nomerbileta, string language, string contactniynum) {= nomerbileta;idc = new Random();idClient = idc.Next();query = string.Format("INSERT INTO [КЛИЕНТ] " +Values(" +'{0}', " +'{1}', " +'{2}', " +'{3}', " +'{4}') ", idClient, nomerBileta, contactniynum, language, false

);ip = new InputData();.Vvodim(query);

}void SendData3(string pasportid,fiomiliya,dt,mestopro,mestolives) {query = string.Format("INSERT INTO [ПАСПОРТ] " +VALUES(" +'{0}', " +'{1}', " +'{2}', " +'{3}', " +'{4}') ",, fiomiliya, dt, mestopro, mestolives);ip = new InputData();.Vvodim(query);

}string GetZena() {query = string.Format("Select [ЦЕНА] " +

"From [БИЛЕТ] " +"WHERE [НОМЕР БИЛЕТА] = '{0}'", nomerBileta);output = null;{com = new SqlCommand(query, con);.Open();drr = com.ExecuteReader();(drr.HasRows) {(drr.Read()) {(!(drr.IsDBNull(0))){= drr.GetDecimal(0).ToString();

}

}output;

}

}(Exception a) {.Show(a.Message);

}null;

}

}class Dal {const string connectionString =

@"Data Source=(local);Initial Catalog=Aviatickets;Integrated Security=True";readonly SqlConnection con = new SqlConnection(connectionString);

/// <summary>

/// Проверка на наличие прав юзера

/// </summary>

/// <param name="login"></param>

/// <param name="password"></param>

/// <param name="email"></param>

/// <returns>

/// false - вход не разрешен

/// true - вход возможен</returns>static bool IsUser(string login, string password, string email = "") {query = null;(email != "") {= string.Format("Select * from [ПОЛЬЗОВАТЕЛЬ] WHERE" + "[LOGIN] like '{0}' and " + "[PASSWORD] like '{1}' and " + "[EMAIL] like '{2}'", login, password, email);

}{= string.Format("Select * from [ПОЛЬЗОВАТЕЛЬ] WHERE" +"[LOGIN] like '{0}' and " + "[PASSWORD] like '{1}'", login, password); //login

}

//Запрос по системе(var con = new SqlConnection(connectionString)) {com = new SqlCommand(query, con);.Open();dr = com.ExecuteReader();dr.HasRows;

}

}DataTable GetTickets() {{cmd = new SqlCommand("Select * from [БИЛЕТ]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "Билеты");ds.Tables[0];

}{.Close();

}

}DataTable GetAviacompany() {{cmd = new SqlCommand("Select * from [АВИАКОМПАНИЯ]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "АВИАКОМПАНИЯ");ds.Tables[0];

}{.Close();

}

}DataTable GetClient() {{cmd = new SqlCommand("Select * from [КЛИЕНТ]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "КЛИЕНТ");ds.Tables[0];

}{.Close();

}

}DataTable GetPlace() {{cmd = new SqlCommand("Select * from [МЕСТО]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "МЕСТО");ds.Tables[0];

}{.Close();

}

}DataTable GetTrade() {{cmd = new SqlCommand("Select * from [ЗАРПЛАТА]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "ЗАРПЛАТА");ds.Tables[0];

}{.Close();

}

}DataTable GetUsers() {{cmd = new SqlCommand("Select * from [ПОЛЬЗОВАТЕЛЬ]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "ПОЛЬЗОВАТЕЛЬ");ds.Tables[0];

}{.Close();

}

}DataTable GetPasports() {{cmd = new SqlCommand("Select * from [ПАСПОРТ]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "ПАСПОРТ");ds.Tables[0];

}{.Close();

}

}DataTable GetAir() {{cmd = new SqlCommand("Select * from [САМОЛЕТ]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "Самолет");ds.Tables[0];

}{.Close();

}

}DataTable GetWorkers() {{cmd = new SqlCommand("Select * from [СОТРУДНИК]", con);.Open();adapter = new SqlDataAdapter(cmd);ds = new DataSet();.Fill(ds, "СОТРУДНИКИ");ds.Tables[0];

}{.Close();

}

}

}class ExportToExcel {ExportToExcel(DataTable dt, string strFilePath) {

// Create the CSV file to which grid data will be exported.sw = new StreamWriter(strFilePath, false, Encoding.UTF8);// First we will write the headers.

//DataTable dt = m_dsProducts.Tables[0];iColCount = dt.Columns.Count;(int i = 0; i < iColCount; i++) {.Write(dt.Columns[i]);(i < iColCount - 1) {.Write(";");

}

}.Write(sw.NewLine);(DataRow dr in dt.Rows) {(int i = 0; i < iColCount; i++){(!Convert.IsDBNull(dr[i])){.Write(dr[i].ToString());

}(i < iColCount - 1){.Write(",");

}

}.Write(sw.NewLine);

}.Close();

}

}class InputData {const string connectionString =

@"Data Source=(local);Initial Catalog=Aviatickets;Integrated Security=True";readonly SqlConnection con = new SqlConnection(connectionString);bool IntoClient(int id, string numticket, string phonenumber, string lang, bool ispostoyan) {str = string.Format("Количество билетов {0} " +"Телефон {1} " +"Язык {2} " +"Постоянный {3}", numticket, phonenumber, lang, ispostoyan);.Show(str);query = string.Format("Insert Into КЛИЕНТ " +

"([ID КЛИЕНТА], [НОМЕР БИЛЕТА], [КОНТАКТНЫЙ НОМЕР], ЯЗЫК, ПОСТОЯННЫЙ) " + "Values ('{0}', '{1}', '{2}', '{3}', '{4}')", id, numticket, phonenumber, lang, ispostoyan);Vvodim(query);

}bool Vvodim(string query) {{cmd = new SqlCommand(query, con);.Open();.ExecuteNonQuery();true;

}(SqlException ex) {.Show(ex.Message);false;

}{.Close();

}

}bool IntoWorker(int id, int idprofessii, int idaviacompany, int pasportnum, int iduser) {str = string.Format("профессия {0} " +

"авиакомпания {1} " +"паспорт {2} " +"юзер {3}", idprofessii, idaviacompany, pasportnum, iduser);query = string.Format("Insert Into СОТРУДНИК " +"([ID СОТРУДНИКА], [ID ПРОФЕССИИ], [ID АВИАКОМПАНИИ], [НОМЕР ПАСПОРТА], [ID ПОЛЬЗОВАТЕЛЯ]) " +"Values ('{0}', '{1}', '{2}', '{3}', '{4}')", id, idprofessii, idaviacompany, pasportnum, iduser);.Show(str);Vvodim(query);

}bool IntoPlane(int id, int brigade, int ekipazh, int mestcount, int model, string datavipuska) {date = Convert.ToDateTime(datavipuska);str = string.Format("бригада {0} " +

"экипаж {1} " +"число мест {2} " +"модель {3}" +"дата {4}", brigade, ekipazh, mestcount, model, date.ToShortDateString());query = string.Format("Insert Into САМОЛЕТ " +"([БОРТ НОМЕР САМОЛЕТА], [НОМЕР БРИГАДЫ], [НОМЕР ЭКИПАЖА], [КОЛИЧЕСТВО МЕСТ], МОДЕЛЬ, [ДАТА ВЫПУСКА]) " +"Values ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')", id, brigade, ekipazh, mestcount, model, date);.Show(str);Vvodim(query);

}

}partial class inputData : Window {const string strabout = "Сохранение выполнено успешно!";const string strerror = "Неудача в сохранении";const string errormsg = "Ошибка в воде!!!";readonly InputData input;inputData() {();= new InputData();

}void View() {{dal = new Dal();tickets = dal.GetTickets();.ItemsSource = tickets.DefaultView;workers = dal.GetWorkers();.ItemsSource = workers.DefaultView;air = dal.GetAir();.ItemsSource = air.DefaultView;trade = dal.GetTrade();.ItemsSource = trade.DefaultView;passport = dal.GetPasports();.ItemsSource = passport.DefaultView;user = dal.GetUsers();.ItemsSource = user.DefaultView;place = dal.GetPlace();.ItemsSource = place.DefaultView;client = dal.GetClient(); //Правильно.ItemsSource = client.DefaultView;avia = dal.GetAviacompany();.ItemsSource = avia.DefaultView;

}(Exception e) {.Show(e.Message);

}

}void SetRandIds() {random = new Random();.Text = random.Next().ToString();.Text = random.Next().ToString();.Text = random.Next().ToString();

}void LayoutRoot_Loaded(object sender, RoutedEventArgs e) {();();

}void btnExp_Click(object sender, RoutedEventArgs e) {

//Выбираем что хотим сохранятьdal = new Dal();dt = dal.GetClient();//сохраняем таблицу клиентовsaveFile = new SaveFileDialog();.ShowDialog(); //открываем диалог сохранения(dt != null)ExportToExcel(dt, saveFile.FileName); //сохраняем файл

}void btnNewCLient_Click(object sender, RoutedEventArgs e) {{cheked = false;(cbPostoyan.IsChecked == true)= true;.Show(input.IntoClient(Convert.ToInt32(tbxIdCLient.Text),.Text, tbxPhone.Text, tbxtLang.Text, cheked)

? strabout : strerror);

}{.Show(errormsg);

}

}void btnNewWorker_Click(object sender, RoutedEventArgs e) {{ MessageBox.Show(input.IntoWorker(Convert.ToInt32(tbWorkerID.Text), Convert.ToInt32(tbProfID.Text), Convert.ToInt32(tbxAvia.Text), Convert.ToInt32(tbxPasport.Text), Convert.ToInt32(tbxtUserID.Text))

? strabout: strerror);

}{.Show(errormsg);

}

}void btnAdd_Click(object sender, RoutedEventArgs e) {{.Show(input.IntoPlane(Convert.ToInt32(tbPlaneID.Text), Convert.ToInt32(tbBrigadeID.Text), Convert.ToInt32(tbEkipazID.Text), Convert.ToInt32(tbCount.Text), Convert.ToInt32(tbModel.Text), calendarDate.ToString())

? strabout: strerror);

}{.Show(errormsg);

}

}

}partial class MainWindow : Window{MainWindow(){.InitializeComponent();

// Insert code required on object creation below this point.

}bool thisisuser;void BtnReport_Click(object sender, RoutedEventArgs e) {= Dal.IsUser(TbLogin.Text, tbPass.Password, tbEmail.Password);message = string.Format("Добро пожаловать в систему юзер");(!thisisuser) {.Show("Мошенник! не играйся с компутером"); ;

}.Visibility = Visibility.Visible;.Show(message);

}void BtnSearch_Click(object sender, RoutedEventArgs e) {Searching().Show();

}void BtnInput_Click(object sender, RoutedEventArgs e) {inputData().Show();

}void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {(thisisuser) {message = "Форма будет закрыта юзер!";.Show(message, "Название проги", MessageBoxButton.OK);

}

}void BtnExit_Click(object sender, RoutedEventArgs e) {.Close();

}

}partial class Searching : Window {readonly Buy buy;string fiomiliya;string pasportID;Searching() {();= new Buy();

}void btnSearch_Click(object sender, RoutedEventArgs e) {pryam = cbPryam.IsChecked == true;avia = tbAvia.Text;racebegin = tbRaceBegin.Text;raceend = tbRaceEnd.Text;temp = string.Format("Прямой рейс {0} " +

"авиа {1} " +"начало {2} " + "конец {3}",pryam, avia, racebegin, raceend);.ItemsSource = buy.SendSearch(pryam, avia, racebegin, raceend).DefaultView;.Show(temp);

}void buttonBuy_Click(object sender, RoutedEventArgs e) {temp = string.Format("Вы выбрали {0}", dgAviaInfo.SelectedIndex);.Show(temp);

}void btnNextToPage2_Click(object sender, RoutedEventArgs e) {Contactniynum = tbNum.Text;language = tbLang.Text;NomerBileta = tbNumPas.Text;= textBoxPassportID.Text;= tbFIO.Text;.SendData2(NomerBileta, language, Contactniynum);temp = string.Format("Ваш номер {0} " +"язык {1} " +"Номер билета {2} " +"номер паспорта {3}",Contactniynum, language, NomerBileta, pasportID);.Show(temp);

}void buttonFinish_Click(object sender, RoutedEventArgs e) {dt = cldDataBirthday.SelectedDate.Value.ToShortDateString();mestopro = tbMestoPropiska.Text;mestolive = tbMestoProlive.Text;mes = string.Format("Номер паспорта: {0} " +

"ФИО: {1} " +"Дата рождения {2} " + "Место жизни {3} " +"Место прописки {4} ",pasportID, fiomiliya, dt, mestopro, mestolive);.Show(mes);.SendData3(pasportID, fiomiliya, dt, mestopro, mestolive);message = String.Format("Цена составляет {0} рублей Оплатите плиз",buy.GetZena());.Show(message);

}

}

Заключение


В рамках данного курсового проекта была разработана система бронирования авиабилетов: спроектирована база данных SQL Server 2008, а так же реализован слой доступа к данным через WPF-интерфейс. При проектировании базы данных, акцент делался на клиентскую часть. На стороне сервера были применены индексы, хранимые процедуры, функции, триггеры, представления. Клиентская часть была реализована посредством языка С# на платформе .NET. В частности: доступ к данным был обеспечен провайдером ADO.NET.

Итогом работы, в соответствии с поставленной задачей, стала работающая, полноценная система бронирования авиабилетов. Данное приложение предоставляет удобный, интуитивно понятный интерфейс для клиентов компании и администраторов. Кроме того, администратор получает возможность выполнять многие операции по сопровождению системы: по добавлению, удалении, редактированию пользователей, рейсов, заказов посредством того же (но уже расширенного в соответствии с его ролью) интерфейса, а также, в завершении, программа способна экспортировать данные в формат CSV для удобного сопровождения.

В процессе выполнения курсового проекта были закреплены знания, полученные при изучении дисциплины "Системы управления распределёнными базами данных". Были изучены такие аспекты как:

.        Сопровождение базы данных

.        Подготовка программной документации

В процессе организации БД проведён до необходимого уровня абстракций анализ предметной области, построены концептуальная и реляционная модель БД, произведена нормализация реляционной БД. Оформляя пояснительную записку, был ознакомлен с государственными стандартами ДСТУ 3008-95.

Список использованной литературы


.        Атре Ш. Структурный подход к организации баз данных. - М.: Финансы и статистика, 1983. - 320 с.

.        Бойко В.В., Савинков В.М. Проектирование баз данных информационных систем. - М.: Финансы и статистика, 1989. - 351 с.

.        Джексон Г. Проектирование реляционных баз данных для использования с микроЭВМ. -М.: Мир, 1991. - 252 с.

.        Кириллов В.В. Структурированный язык запросов (SQL). - СПб.: ИТМО, 1994. - 80 с.

5.      Жилинский А.А. Самоучитель Microsoft SQL Server 2005 - СПб.: БХВ-Петербург, 2007. - 224 с.

6.      Рихтер ДЖ. CLR via C#. Программирование на платформе.NET Framework 2.0 на языке С#. Мастер-класс./ Пер. с англ. - М.: Издательство "Русская редакция"; СПб.; Питер, 2007. - 656 с.

.        Microsoft Corporation. Проектирование и реализация баз данных Microsoft SQL Server 2000. Учебный курс MCAD/MSCE, MCDMA/ Пер. с англ. - 2-е изд., испр. - М.: Издательско-торговый дом "Русская редакция", 2003. - 512с.

Похожие работы на - Создание базы данных авиаперевозок

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!