Автор работы: Пользователь скрыл имя, 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) |