- •Содержание
- •1.1 Анализ предметной области
- •1.2 Постановка задачи
- •2.1 Функциональная модель
- •2.1.1 Контекстная диаграмма и диаграммы детализации процессов
- •2.2.1 Идентификация сущностей и связей. Er-диаграмма логического уровня
- •2.2.3 Определение представлений, хранимых процедур серверной компоненты
- •1. Вывод информации о блюдах при условии, что калорийность больше 800 ккал, а стоимость больше 30000р.
1. Вывод информации о блюдах при условии, что калорийность больше 800 ккал, а стоимость больше 30000р.
CREATE VIEW bluda2
AS
SELECT name_bluda, vremya_prigotovleniya, stoimost
FROM bluda
WHERE kalorinost>800 and stoimost>30000
2. Вывод информацию о блюдах, которые заказал клиент в определенный день.
CREATE VIEW NameBluda
AS
SELECT Bluda.name_bluda, Zakaz.data_zakaza, Klienti.familia
FROM Bluda, Zakaz, Klienti
WHERE (Bluda.kod_bluda=Zakaz.kod_bluda and
Klienti.kod_klienta=Zakaz.kod_klienta and name_bluda='Роллы')
3. Вывод информации о блюдах, название которых уже прописано.
CREATE VIEW ViborBlud
AS
SELECT Bluda.name_bluda, Bluda.sostav_bluda, Bluda.ves
FROM Bluda
WHERE name_bluda IN ('Зефир','Канапе','Пицца','Ситро', 'Оладьи')
4. Вывод информации о блюдах вида «Салаты», с условием, что стоимость больше 20000.
CREATE VIEW VidBlud
AS
SELECT Vid_bluda.name_vida, Bluda.name_bluda, Bluda.stoimost
FROM Bluda, Vid_bluda
WHERE Vid_bluda.kod_vida=Bluda.kod_vida and stoimost>20000 and name_vida='Салаты'
5. Вывод информации о работнике, который выполнял заказы в определенный день.
CREATE VIEW Zakaz3
AS
SELECT Personal.familia, Personal.imya, Zakaz.data_zakaza,
Zakaz.kolichestvo_blud
FROM Personal, Zakaz
WHERE Personal.kod_rabotnika=Zakaz.kod_rabotnika and data_zakaza between '01/12/2013' and '01/13/2013'
6. Вывод информации о должности работника, оклад которого больше 2000000, а дата рождения находится в рамках от 06.12.1988 до 02.19.1990.
CREATE VIEW Personal2
AS
SELECT Dolshnosti.name_dolshnosti,Dolshnosti.oklad,
Personal.familia,Personal.imya, Personal.data_roshdeniya
FROM Dolshnosti, Personal
WHERE Dolshnosti.kod_dolshnosti=Personal.kod_dolshnosti and
oklad>2000000 and data_roshdeniya between '06/12/1988' and '02/19/1990'
7. Вывод информации о должности определенного названия.
CREATE VIEW NameDolshnosti2
AS
SELECT Dolshnosti.name_dolshnosti, Dolshnosti.vipoln_funkcii
FROM Dolshnosti
WHERE name_dolshnosti IN ('Официант','Повар')
8. Вывод информации о клиентах, фамилия которых содержит частицу «ин».
CREATE VIEW KusokSlova
AS
SELECT *
FROM Klienti
WHERE familia LIKE '%ин%'
9. Вывод информации о клиентах, фамилия которых начинается на букву, которая находится в диапазоне от "А" до "Г".
CREATE VIEW FamiliaKlienta
AS
SELECT familia
FROM Klienti
WHERE familia between 'А' and 'Г'
10. Вывод информации о работнике, который проживает по определенному адресу.
CREATE VIEW AdresPersonala
AS
SELECT Personal.familia, Personal.imya, Personal.adres
FROM Personal
WHERE adres in ('г. Бобруйск','г. Осиповичи')
T-SQL-определения триггеров
1. blud1 срабатывает при вставке или обновлении записи в таблице «Блюда». Он проверяет на корректность вставленные поля таблицы. В случае ошибки записи изменены не будут.
Create Trigger tIU_Blud1
ON Bluda
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS(Select name_bluda From inserted WHERE name_bluda IS NULL)
BEGIN
RAISERROR('Введите название блюда', 16,10)
ROLLBACK TRANSACTION
END
End
2. bluda2 запрещает удалять из таблицы «Блюда» запись, если стоимость блюда меньше 10000 р. В случае ошибки записи изменены не будут.
Create Trigger tIU_Bluda2
ON Bluda
AFTER DELETE
AS
BEGIN
IF (Select stoimost From deleted) < 10000
BEGIN
RAISERROR('Нельзя удалить с низкой стоимостью', 16,10)
ROLLBACK TRANSACTION
END
End
3. dolshnosti срабатывает при вставке нового элемента в таблицу «Должности». Триггер проверяет поля название должности, оклад и выполняемые функции. Если хотя бы одно из них остается не заполненным, то программа выдает ошибку;
CREATE TRIGGER tIU_Dolshnosti
ON Dolshnosti
FOR INSERT, UPDATE
AS
BEGIN
IF Exists(Select name_dolshnosti From inserted Where name_dolshnosti IS NULL)
BEGIN
RAISERROR('Поле с наименованием не может быть пустым', 16,10)
ROLLBACK TRANSACTION
END
IF (Select oklad From inserted) is NULL
BEGIN
RAISERROR('Оклад не может быть нулевым', 16,10)
ROLLBACK TRANSACTION
END
IF EXISTS (Select vipoln_funkcii From inserted Where vipoln_funkcii IS NULL)
BEGIN
RAISERROR('Поле с выполняемыми функциями не может быть пустым', 16,10)
ROLLBACK TRANSACTION
END
END
4. klienti запрещает удалять из таблицы «Клиенты» запись, если скидка у клиента на весь ассортимент блюд в данном кафе меньше 10.
CREATE TRIGGER tIU_Klienti
ON Klienti
AFTER DELETE
AS
BEGIN
IF (Select skidki From deleted) < 10
BEGIN
RAISERROR('Скидка меньше 10', 16,10)
ROLLBACK TRANSACTION
END
End
5. personal срабатывает при вставке нового элемента в таблицу «Персонал». Триггер проверяет поле adres. Если оно остается не заполненным, то программа выдает ошибку;
Create Trigger tIU_Personal
ON Personal
for INSERT, UPDATE
AS
BEGIN
IF Exists(Select adres From inserted Where adres is NULL)
BEGIN
RAISERROR('Поле с адресом не может быть пустым', 16,10)
ROLLBACK TRANSACTION
END
End
3.3 T-SQL-определения хранимых процедур
1. При вводе названия должности выдает имя и фамилию подходящего работника.
CREATE PROCEDURE Dolshnosti3
@Dol nvarchar(30)
AS
SELECT Personal.imya, Personal.familia, Dolshnosti.name_dolshnosti
FROM Personal, Dolshnosti
WHERE Dolshnosti.kod_dolshnosti=Personal.kod_dolshnosti and
name_dolshnosti=@Dol
2. Выводит ФИО клиента, имя которого совпадает с введенными с клавиатуры данными.
CREATE PROCEDURE Imya4
@imya nvarchar(20)
AS
SELECT imya, otchestvo, familia
FROM Klienti
WHERE imya like '%'+@imya+'%'
3. Выводит фамилию клиента, который заказал такое количество блюд, которое будет меньше, чем введенное с клавиатуры.
CREATE PROCEDURE KolBlud3
@Kol Int
AS
SELECT Klienti.familia, Bluda.name_bluda, Zakaz.kolichestvo_blud
FROM Klienti, Bluda, Zakaz
WHERE Bluda.kod_bluda=Zakaz.kod_bluda and
Klienti.kod_klienta=Zakaz.kod_klienta and kolichestvo_blud<@Kol
4. Выводит название блюда, вес которого меньше 300 г., а калорийность больше или равна 600 ккал.
CREATE Procedure NameBlud2
AS
SELECT name_bluda
FROM Bluda
WHERE ves>300 and Kalorinost>=600
5. Выводит информацию о работнике, оклад которого равен цифре, введенной с клавиатуры.
CREATE Procedure Oklad
@Oklad int
AS
SELECT Dolshnosti.name_dolshnosti, Personal.familia, Personal.imya
FROM Dolshnosti, Personal
WHERE Dolshnosti.kod_dolshnosti=Personal.kod_dolshnosti and
oklad=@Oklad
6. Выводит данные о работнике, дата рождения которого находятся в указанном пользователем периоде.
CREATE PROCEDURE Personal3
@NachaloPerioda DATETIME, @KonecPerioda DATETIME
AS
SELECT familia, imya, adres
FROM Personal
WHERE data_roshdeniya between @NachaloPerioda and @KonecPerioda
7. Выводит данные о работнике, пол которого такой же, как и введенный с клавиатуры.
CREATE Procedure Pol2
@Pol nvarchar(10)
AS
SELECT familia, imya, data_roshdeniya
FROM Personal
WHERE pol=@Pol
8. Выводит данные о клиенте, у которого размер скидки больше, чем введенный с клавиатуры.
CREATE Procedure Skidki
@Skidki Int
AS
SELECT *
FROM Klienti
WHERE skidki>@Skidki
9. Выводит данные о блюде, в состав которого входит слово, введенное пользователем.
CREATE Procedure Sostav2
@Slovo nvarchar(20)
AS
SELECT name_bluda, sostav_bluda
FROM Bluda
WHERE sostav_bluda like '%'+@Slovo+'%'
10. Выводит название блюда равное введенному с клавиатуры названию.
CREATE PROCEDURE SpisokBlud3
@NameBluda Char(20)
AS
SELECT name_bluda
FROM Bluda
WHERE name_bluda=@NameBluda
11. Выводит название блюд, стоимость которых больше, чем введенная пользователем.
CREATE Procedure StoimBlud
@Stoimost Int
AS
SELECT name_bluda
FROM Bluda
WHERE stoimost>@stoimost
12. Выводит данные о блюдах, вид которых равен виду, введенному с клавиатуры и стоимость которого больше 50000р.
CREATE Procedure VidBluda
@Vid nvarchar(30)
AS
SELECT Bluda.name_bluda, Bluda.stoimost, Vid_bluda.name_vida
FROM Bluda, Vid_bluda
WHERE Bluda.kod_vida=Vid_bluda.kod_vida and name_vida=@Vid and stoimost>50000
13. Выводит название блюда, время приготовления которого больше 40 минут, а стоимость – меньше 100000р.
CREATE Procedure Vremya
AS SELECT name_bluda
FROM Bluda
WHERE vremya_prigotovleniya>40 and stoimost<100000
14. Выводит информацию о блюдах, код заказа которых равен коду, введенному с клавиатуры.
CREATE PROCEDURE Zakaz5
@ZakazBluda Int
AS SELECT Bluda.name_bluda, Bluda.stoimost, Zakaz.data_zakaza
FROM Bluda, Zakaz
WHERE Bluda.kod_bluda=Zakaz.kod_bluda and kod_zakaza=@ZakazBluda
15. Выводит данные о клиентах, сделавших заказ в период времени, который вводится с клавиатуры.
CREATE PROCEDURE ZakKlient3
@NachaloPerioda DATETIME, @KonecPerioda DATETIME
AS SELECT Klienti.familia, Klienti.imya, Zakaz.data_zakaza
FROM Klienti, Zakaz
WHERE Klienti.kod_klienta=Zakaz.kod_klienta and data_zakaza between @NachaloPerioda and @KonecPerioda
T-SQL-определения курсоров
1. Курсор для просмотра информации о блюдах и заказах.
DECLARE MyCursor1 INSENSITIVE SCROLL CURSOR FOR
(SELECT Bluda.name_bluda, Bluda.stoimost, Zakaz.data_zakaza,
Zakaz.kolichestvo_blud from Bluda, Zakaz
WHERE Bluda.kod_bluda=Zakaz.kod_bluda)
3.5 Описание клиентских приложений
При разработке клиентского приложения были созданы следующие формы.
При запуске приложения появляется форма (рисунок 10), на форме присутствует следующие кнопки: «Блюда», «Виды блюд», «Заказы», «Клиенты», «Должности», «Персонал», «Запросы», «Справка» и «Выход», нажатие на которые открывает другие формы. Код обработки нажатия кнопок в соответствующем порядке:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide();
Form2.Show(); end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Hide();
Form4.Show(); end;
procedure TForm1.Button3Click(Sender: TObject); begin
Form1.Hide();
Form5.Show(); end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.Hide();
Form6.Show(); end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Form1.Hide();
Form7.Show(); end;
procedure TForm1.Button6Click(Sender: TObject);
begin
Form1.Hide();
Form8.Show(); end;
procedure TForm1.Button8Click(Sender: TObject); begin
Form1.Hide();
Form12.Show(); end;
procedure TForm1.Button9Click(Sender: TObject);
var h:HWND; begin
h:=FindWindow('HH Parent','О программе');
if h=0 then
WinExec('hh.exe Spravka.chm',SW_RESTORE)
else begin
ShowWindow(h,SW_RESTORE);
Windows.SetForegroundWindow(h); end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Form1.Close(); end;
Рисунок 10 – Главная форма
При нажатии кнопки «Блюда» появится форма «Блюда» - рисунок 11. На форме находятся таблица с данными и навигация для добавления и удаления данных о блюдах. Также на форме присутствует кнопка «Поиск», при нажатии на которую осуществляется поиск по заданным параметрам. Код обработки нажатия кнопки:
procedure TForm2.Button1Click(Sender: TObject);
begin
If radioButton2.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'kalorinost = ' + Edit2.Text;
DBGrid1.DataSource.DataSet.Filtered := true;
end;
If radioButton3.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'vremya_prigotovleniya = ' + Edit3.Text;
DBGrid1.DataSource.DataSet.Filtered := true;
end;
If radioButton4.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'stoimost = ' + Edit4.Text;
DBGrid1.DataSource.DataSet.Filtered := true;
end;
end;
Кнопка «Сброс» сбрасывает результаты поиска. Код обработки нажатия кнопки:
procedure TForm2.Button2Click(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Filter := '';
DBGrid1.DataSource.DataSet.Filtered := true;
end;
При нажатии на кнопку «Сортировка по калорийности» осуществляется сортировка данных по столбцу Калорийность. Код обработки нажатия кнопки:
procedure TForm2.Button3Click(Sender: TObject);
begin
DataModule3.ADOTable1.Sort:='kalorinost';
end;
Кнопка «Вывести отчет» выводит отчет о блюдах. Код обработки нажатия кнопки:
procedure TForm2.Button4Click(Sender: TObject);
begin
RvProject1.Execute;
end;
Рисунок 11 – Форма «Блюда»
На форме имеется меню, с помощью которого можно легко перейти к другой форме. При выборе пункта меню «Виды блюд» осуществляется переход к форме «Виды блюд» - рисунок 12. На форме находятся таблица с данными о
видах юблюд и навигация для добавления и удаления данных.
Рисунок 12 – Форма «Виды блюд»
При выборе пункта меню «Заказы» появится форма «Заказы» - рисунок 13. На форме находятся таблица с данными и навигация для добавления и удаления данных о заказах. Также существует кнопка «Фильтрация», при нажатии на которую осуществляется фильтрациия данных в таблице по столбцу kolichestvo_blud. Код обработки нажатия кнопки:
procedure TForm5.Button3Click(Sender: TObject);
begin
DataModule3.ADOTable3.Sort:='kolichestvo_blud';
end;
Для данной таблицы организован поиск по дате заказа и по количеству блюд. Код обработки нажатия кнопки «Поиск»:
procedure TForm5.Button1Click(Sender: TObject);
begin
If radioButton1.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'data_zakaza = ' + Edit1.Text;
DBGrid1.DataSource.DataSet.Filtered := true;
end;
If radioButton2.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'kolichestvo_blud = ' + Edit2.Text;
DBGrid1.DataSource.DataSet.Filtered := true;
end;
end;
Код обработки нажатия кнопки «Сброс»:
procedure TForm5.Button2Click(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Filter := '';
DBGrid1.DataSource.DataSet.Filtered := true;
end;
Кнопка «Вывести отчет» выводит отчет о заказах. Код обработки нажатия кнопки:
procedure TForm5.Button4Click(Sender: TObject);
var Excel, Workbook, Sheet: variant; i:integer;a:integer;
begin
try
Excel:=CreateOleObject('Excel.Application');
except
showmessage('Ошибка доступа! Microsoft Excel не установлен');
exit;
end;
DataModule3.ADOTable4.First;
workbook:=eXcel.workbooks.add;
sheet:=workbook.sheets[1];
Sheet.Cells[1,3]:='Информация о заказах';
Sheet.Cells[2,1]:='Фамилия';
Sheet.Cells[2,2]:='Имя';
DataModule3.ADOTable3.First;
Sheet.Cells[2,3]:='Дата заказа';
Sheet.Cells[2,4]:='Время заказа';
Sheet.Cells[2,5]:='Кличество блюд';
for i:=1 to DataModule3.ADOTable4.RecordCount do begin
a:= StrToInt(Edit3.Text);
if DataModule3.ADOTable4.FieldByName('kod_klienta').AsInteger=a then begin
Sheet.Cells[3,1]:= DataModule3.ADOTable4.FieldByName('familia').AsString;
Sheet.Cells[3,2]:= DataModule3.ADOTable4.FieldByName('imya').AsString;
DataModule3.ADOTable3.RecordCount;
Sheet.Cells[3,3]:=DataModule3.ADOTable3.FieldByName('data_zakaza').AsDatetime;
Sheet.Cells[3,4]:=DataModule3.ADOTable3.FieldByName('vremya_zakaza').AsString;
Sheet.Cells[3,5]:=DataModule3.ADOTable3.FieldByName('kolichestvo_blud').AsInteger;
end;
DataModule3.ADOTable4.Next;
DataModule3.ADOTable3.Next;
end; Excel.Visible:=true; end;
Рисунок 13 – Форма «Заказы»
При выборе пункта меню « Клиенты» откроется форма «Клиенты» - рисунок 14. На форме находятся таблица с данными и навигация для добавления и удаления данных о заказах. Кнопка «Вывести отчет о клиентах» выводит соответствующий отчет. Код обработки нажатия кнопки:
procedure TForm6.Button1Click(Sender: TObject);
begin
RvProject3.Execute; end;
Для данной таблицы организован поиск по коду клиента и по скидкам. Код обработки нажатия кнопки «Поиск»:
procedure TForm6.Button2Click(Sender: TObject; begin
If radioButton1.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'kod_klienta = ' + Edit1.Text;
DBGrid1.DataSource.DataSet.Filtered := true; end;
If radioButton2.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'skidki = ' + Edit2.Text; end; end;
Код обработки нажатия кнопки «Сброс», которая сбрасывает результаты поиска:
procedure TForm6.Button3Click(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Filter := '';
DBGrid1.DataSource.DataSet.Filtered := true;
end;
Рисунок 14 – Форма «Клиенты»
При выборе пункта меню «Должности» происходит переход на форму «Должности» - рисунок 15. На форме находятся таблица с данными и навигация для добавления и удаления данных о заказах. Также на форме размещен поиск по запрашиваемым данным. Код обработки нажатия кнопки «Поиск»:
procedure TForm7.Button1Click(Sender: TObject);
begin
If radioButton1.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'oklad = ' + Edit1.Text;
DBGrid1.DataSource.DataSet.Filtered := true; end;
If radioButton2.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'kod_dolshnosti = ' + Edit2.Text;
DBGrid1.DataSource.DataSet.Filtered := true; end; end;
procedure TForm7.Button2Click(Sender: TObject); begin
DBGrid1.DataSource.DataSet.Filter := '';
DBGrid1.DataSource.DataSet.Filtered := true; end;
Кнопка «Сброс» позволяет нам сбросить результаты поиска. Код обработки нажатия кнопки:
procedure TForm7.Button2Click(Sender: TObject); begin
DBGrid1.DataSource.DataSet.Filter := '';
DBGrid1.DataSource.DataSet.Filtered := true; end;
Рисунок 15 – Форма «Должности»
При выборе пункта меню «Персонал» появляется форма «Персонал» - рисунок 16. На форме находятся таблица с данными и навигация для добавления и удаления данных о заказах. Для данной таблицы организован поиск. Код обработки нажатия кнопки «Поиск»:
procedure TForm8.Button1Click(Sender: TObject); begin
If radioButton1.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'kod_rabotnika = ' + Edit1.Text;
DBGrid1.DataSource.DataSet.Filtered := true; end;
If radioButton2.Checked=True then begin
DBGrid1.DataSource.DataSet.Filter := 'telephon = ' + Edit2.Text;
DBGrid1.DataSource.DataSet.Filtered := true;
end; end;
Для сброса результатов поиска существует кнопка «Сброс». Код обработки нажатия кнопки:
procedure TForm8.Button2Click(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Filter := '';
DBGrid1.DataSource.DataSet.Filtered := true;
end;
4 Результат тестирования информационной системы
Для нормальной работы системы необходимо 256 Мбайт оперативной памяти, Windows NT/2000/XP и выше, Microsoft SQL Server 2005, Microsoft Excel 2003 и выше.
Результатом тестирования в данном случае может послужить создание отчета, содержащего информацию о работе кафе.
После тестирования получили результаты:
- информационная система поддерживает многопользовательский режим;
- тестирование запросов прошло успешно.
В данном курсовом проекте разработана информационная система с одним клиентским приложением. Для администрации кафе составлены запросы, формы и отчеты. Формы составлены на основе запросов и таблиц, и используются для занесения и модификации информации в базе данных.
Отчеты составлены на основе запросов и используются для получения информации и оформления документации.
Заключение
Прогресс, достигнутый за последние несколько лет во всех аспектах вычислительной техники, включая теорию, технологию и приложения, привели к значительному расширению области применения компьютеров и росту числа их пользователей. Существенной частью современного общества являются разнообразные системы доступа и хранения информации, которые являются неотъемлемой составляющей современного научно-технического прогресса. Существует много веских причин перевода существующей информации на компьютерную основу, т.к. более быстрая обработка данных и централизация их хранения с использованием клиент/серверных технологий позволяют сберечь значительные средства, а главное и время для получения необходимой информации, а также упрощает доступ и ведение.
Во время выполнения курсового проекта была разработана однопользовательская информационная система «Кафе».
При создании информационной системы использовались сервер баз данных Microsoft SQL Server 2005, Microsoft Excel 2010, Borland Delphi 7 и CASE-средства Erwin и BPWin.
Функциональная модель информационная система описывает одно клиентское приложение. При разработке программного обеспечения использовались представления, хранимые процедуры с параметрами, триггеры, курсоры.
Все пункты курсового задания были выполнены, разработанная система выполняет поставленную перед ним задачу.
Список использованных источников
1. ГОСТ 19.101-77. Единая система программной документации. Виды программ и программных документов. – М.: ИПК Изд-во стандартов, 2004. – 22 с.
2. ГОСТ 19.105-78. Единая система программной документации. Общие требования к программным документам. – М.: ИПК Изд-во стандартов, 2004. – 38 с.
3. Артемов, Д.В. Microsoft SQL Server 2000. Новейшие технологии / Д.В. Артемов. – М.: Издательско-торговый дом «Русская Редакция», 2001. – 576 с.
4. Астахова, И.Ф. SQL в примерах и задачах: учеб. пособие / И.Ф. Астахова, А.П. Толстобров, В.М. Мельников. – Мн.: Новое знание, 2002. – 176 с.
5. Виейра Роберт. Программирование баз данных Microsoft SQL Server 2005. Базовый курс = Beginning Microsoft SQL Server 2005 Programming. — М.: «Диалектика», 2007. — С. 832. — ISBN 0-7645-8433-2
6. Гандерлой, М. Освоение Microsoft SQL Server 2005 : пер. с англ. / М. Гандерлой, Дж. Джорден, Д. Чанц. — М. : ООО "И. Д. Вильямс", 2007. — 1104 с.
7. Глушаков, С. В. Базы данных/ С.В. Глушаков, Д.В. Ломотько. — Харьков: Фолио; М.: ООО «Издательство ACT», 2002. – 504 с.
8. Кузин, А.В. Базы данных: учеб. пособие для студ. высш. учеб. заведений / А.В. Кузин, С.В. Левонисова. – 2-е изд., стер. – М.: Издательский центр «Академия», 2008. – 320 с.
9. Леоненков, А.В. Объектно-ориентированный анализ и проектирование с использованием UML и IBM Rational Rose: учебное пособие / А.В. Леоненков. - М. : Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2006. – 320 с.
10. Партыка Т.Л., Попов И.И. Информационная безопасность. Учебное пособие для студентов учреждений среднего профессионального образования. ~М.: ФОРУМ: ИНФРА-М, 2004,-368с.: ил. - (Серия «Профессиональное образование»)
11. Ратушный А.С. Сборник рецептур блюд и кулинарных изделий для предприятий общественного питания / А. С. Ратушный, Л. А. Старостина, Н. С.
12. Фаронов, В.В. Система программирования Delphi / В.В. Фаронов. – СПб.: БХВ-Петербург, 2003. – 912 с.
13. Фаулер, М. UML в кратком изложении. Применение стандартного языка объектного моделирования.: пер. с англ. / М. Фаулер, К.Скотт – М. : Мир, 1999. – 165 с.
