Автор работы: Пользователь скрыл имя, 27 Декабря 2010 в 17:04, курсовая работа
Предметная область, подлежащая изучению – «кинотеатр». В сферу этой предметной области попадают предприятия, занимающиеся оказанием услуг проведения досуга. Цель функционирования предприятий этой предметной области – оказание услуг, таких как: показ кинофильмов, реклама и анонс будущих фильмов и получение прибыли, извлекаемой из оплаты этих услуг клиентами. Для оказания услуг необходимо наличие квалифицированных специалистов и помещений, удовлетворяющих нормам санитарных и других требований в соответствии с действующим законодательством.
1 Постановка задачи	4
2 Анализ предметной области	5
3 Проектирование базы данных	9
4 Реализация базы данных в формате MS SQL Server 2000	10
5 Хранимые процедуры для вставки данных	21
6 Представления на выборку данных из базы данных	39
7 Проектирование программного обеспечения	42
8 Руководство пользователя	45
Список литературы	47
Приложение	48
Оператор nvarchar (25) not null default (''),
Режисер nvarchar (25) not null default (''),
Сценарист nvarchar (25) not null default (''),
[Дата выхода фильма] datetime not null default (getdate ()),
Изображение nvarchar (10) not null default (''),
[Время фильма] int not null default (1.00),
Жанр nvarchar (25) not null default (''),
Субтитры nvarchar (25) not null default (''),
Язык nvarchar (30) not null default (''),
[Аудио поток] nvarchar (30) not null default (''))
go 
--4 Создание таблицы Актеры, хранящую информацию об актерах
create table Актеры (
Фамилия nvarchar (25) not null default (''),
Имя nvarchar (25) not null default (''),
-- Первичный ключ
[Идентификатор актера] int not null primary key clustered identity (1,1))
go 
--5 Создание 
таблицы Кинотеатр, хранящую 
create table Кинотеатр (
[Название кинотеатра] nvarchar(25) not null primary key clustered,
[Номер здания] int not null default (1),
[Номер корпуса] nvarchar (1) null default (''),
Улица nvarchar (30) not null default (''))
go 
--6 Создание таблицы Сеансы, хранящую информацию о сеансах
create table Сеансы (
[Идентификатор сеанса] int not null primary key clustered identity (1,1),
[Дата сеанса] datetime not null default(getdate()) check ([Дата сеанса]>=getdate()),
[Время сеанса] datetime not null default (0.00),
[Идентификатор фильма] int null foreign key references Фильм ([Идентификатор фильма])
on update cascade on delete cascade)
go 
--7 Создание 
таблицы Билет, хранящую 
create table Билет (
--Первичный ключ
[Номер билета] int not null primary key clustered identity (1,1),
--Внешний ключ связывающий с таблицей Фильм
[Идентификатор фильма] int null foreign key references Фильм([Идентификатор фильма])
on update cascade on delete cascade,
--Внешний ключ связывающий с таблицей Сеансы
[Идентификатор сеанса] int null foreign key references Сеансы([Идентификатор сеанса]),
Ряд int not null default (1),
Место int not null default (1),
Цена money not null default (250.00),
[Название кинотеатра] nvarchar (25) null foreign key references Кинотеатр([Название кинотеатра])
on update cascade on delete cascade)
go 
--8 Создание таблицы Расписание, хранящую расписание рабочих дней.
create table Расписание (
--Внешний 
ключ связывающий таблицу 
[Номер личного дела] int not null foreign key references Работник([Номер личного дела])
on update cascade on delete cascade,
--Внешний 
ключ связывающий таблицу 
[Название кинотеатра] nvarchar(25) not null foreign key references Кинотеатр([Название кинотеатра])
on update cascade on delete cascade,
--Первичный ключ
[Рабочие дни] datetime not null default (getdate()),
[Время начала] datetime not null default (12.11),
[Время окончания] datetime not null default (13.22),
[Составитель] int not null foreign key references Работник([Номер личного дела]),
constraint [Номер дела_Название кино] primary key clustered ([Название кинотеатра],[Номер личного дела],
[Рабочие дни]))
go 
--9 Создание 
ассоциативной таблицы 
create table Работник_Должность (
[Идентификатор должности] int not null foreign key references Должность([Идентификатор должности]),
[Номер личного дела] int not null foreign key references Работник([Номер личного дела]),
--Составной ключ, из внешних ключей таблиц Должность и Работник
   
constraint ключ_Должность_Работник primary key 
clustered ([Идентификатор должности],[
go 
--10 Создание 
ассоциативной таблицы Сеанс_
create table Сеанс_Кинотеатр (
[Идентификатор сеанса] int not null foreign key references Сеансы([Идентификатор сеанса]),
[Название кинотеатра] nvarchar (25) not null foreign key references Кинотеатр ([Название кинотеатра]),
constraint ключ_Сеанс_Кинотеатр primary key clustered ([Идентификатор сеанса],[Название кинотеатра]))
go 
--11 Создание 
ассоциативной таблицы Актер_
create table Актер_Фильм (
[Идентификатор фильма] int not null foreign key references Фильм([Идентификатор фильма]),
[Идентификатор актера] int not null foreign key references Актеры([Идентификатор актера]),
constraint ключ_Актер_Фильм primary key clustered ([Идентификатор фильма],[Идентификатор актера]))
     go 
5 Хранимые процедуры 
для вставки данных 
      В 
целях упрощения программного доступа 
к разрабатываемой базе данных и обеспечения 
целостности данных следует разработать 
SQL-команды для осуществления вставки 
данных в таблицы и сохранить их на сервере 
для последующего использования. Для этого 
разработаны хранимые процедуры на сервере 
MS SQL Server 2000, которые могут быть вызваны 
всякий раз в случае необходимости добавления 
новых записей. 
     Для 
каждой таблицы базы данных создана хранимая 
процедура вставки, которая может быть 
использована для выполнения запроса 
на добавление новых записей в таблицу.  
1. Хранимая 
процедура для таблицы «Работник» 
Имя процедуры: добавить_работника
Назначение процедуры: добавление работника с указанием всех характеристик, необходимых для принятия на работу.
Требования 
к целостности данных: При добавлении 
работника, и указания даты найма, выполняется 
проверка введенной даты найма, при указании 
даты «задним числом» запрос не выполняется.  
Таблица 
25 – Аргументы процедуры 
«добавить_скидку» 
| Аргумент | Смысл | Вид аргумента | Значение по умолчанию | Тип | 
| @res | Результат работы процедуры | Выходной | нет | tinyint | 
| @Name | Имя работника | Выходной | Пустая строка | Nvarchar(25) | 
| @SName | Фамилия работника | Выходной | Пустая строка | Nvarchar(25) | 
| @MName | Отчество работника | Выходной | Пустая строка | Nvarchar(25) | 
| @NumWork | Номер трудовой книжки | Выходной | Пустая строка | Nvarchar(25) | 
| @IDDolz | Идентификатор должности (из таблицы должностей) | Выходной | null | int | 
| @NumPens | Номер пенсионного удостоверения | Выходной | Пустая строка | Nvarchar(25) | 
| @Birthday | День рождения | Выходной | Пустая строка | Nvarchar(10) | 
| @Passport | Номер и серия паспорта | Nvarchar(25) | ||
| @NaimDate | Дата найма | Выходной | Пустая строка | Nvarchar(10) | 
Возвращаемый 
результат процедуры: 1, если запись 
добавлена 
 
 
Листинг 
2. SQL код создания и использования 
процедуры «добавить_работника» 
use Moveis
if exists (select name from sysobjects where name = 'добавить_работника' and type = 'P')
drop procedure добавить_работника
go
create procedure добавить_работника
@res tinyint output,
@SName nvarchar(25)='', @Name nvarchar(25)='',@MName nvarchar(25)='',
@NumWork nvarchar(10)='', @IDDolz int=null, @NumPens nvarchar(14)='',
@Birthday nvarchar(10)='', @NaimDate nvarchar(10)='', @Passport nvarchar(11)=''
as
begin
set @res=0
declare @Birth_temp datetime
if isdate(@Birthday)=1
begin
set @Birth_temp=cast (@Birthday as datetime)
end
--Получение и обработка даты найма работника.
declare @datetmp datetime set @datetmp = getdate()
if isdate(@NaimDate)=1 --Если получен правильный формат даты
begin
--и если дата не позднее текущей
--то принять полученную дату
declare @datetmp1 datetime --локальная переменная для даты
--конвертировать полученную дату в формат datetime
set @datetmp1 = cast(@NaimDate as datetime)
if (@datetmp1<=getdate())
set @datetmp = @datetmp1
end
if exists(select [Идентификатор должности] from Работник where
[Идентификатор должности] = @IDDolz)
begin
insert into Работник
(Фамилия, Имя, Отчество, [Номер трудовой], [Идентификатор должности],
[Номер пенсионного удостоверения], [Дата рождения], [Дата найма],
[Номер паспорта])
              values(@Sname,@Name,@MName,@
@Passport)
if @@rowcount>0 set @res = 1
end
else
begin
insert into Работник
(Фамилия,Имя,Отчество,[Номер трудовой],[Номер пенсионного удостоверения], [Дата рождения], [Дата найма],
[Номер паспорта])
              values(@Sname,@Name,@MName,@
@Passport)
if @@rowcount>0 set @res = 1
end
end
go 
Пример использования:
use Moveis
declare @res tinyint
exec добавить_работника 
@res output, 'Кадыров','Арсений','
'19880102', 
'20100517', '6422 32166589' 
2. Хранимая 
процедура для таблицы «Должность» 
Имя процедуры: добавить_должность
Назначение: Добавляет должность с указанием оклада.
Требования 
к целостности 
данных: При попытке вставки должности, 
имеющейся в таблице, запрос не выполняется 
. 
Таблица 
26 – Аргументы процедуры 
«Добавить_должность» 
| Аргумент | Смысл | Вид аргумента | Значение по умолчанию | Тип | 
| @res | результат работы процедуры | выходной | нет | tinyint | 
| @Oklad | Оклад должности | входной | 1.0 | money | 
| @NameDolz | Название должности | входной | пустая строка | nvarchar(25) |