Системные требования
|
Минимальные
|
Рекомендуемые
|
Процессор
|
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с.