База данный Хозяйственный учет футбольного клуба

Федеральное агентство по образованию

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

‹‹Курский государственный технический университет››

	Кафедра программного обеспечения вычислительной техники



КУРСОВАЯ РАБОТА

по дисциплине ‹‹Базы данных››

на тему ‹‹Хозяйственный учет футбольного клуба››



Специальность 230105 Программное обеспечение вычислительной техники и автоматизированных систем 

Авторы работы _______________________

            (инициалы, фамилия) (подпись, дата)

Группа ПО - 71

Руководитель работы В. Г. Белов ______________________

                                        (инициалы, фамилия) (подпись, дата)

Работа защищена __________________

                                         (дата)

Оценка____________________

Председатель комиссии

______________________ ______________________

      (инициалы, фамилия)              (подпись, дата)

Члены комиссии

________________________ _________________________

        (инициалы, фамилия)            (подпись, дата)





Курск, 2010 г.




Федеральное агентство по образованию

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

‹‹Курский государственный технический университет››

Кафедра программного обеспечения вычислительной техники



ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ



Студент шифр 347011 группа ПО - 71



1. Тема Хозяйственный учет футбольного клуба

2. Срок предоставления работы (проекта) к защите ‹‹ ›› 2010 г

3. Исходные данные

Неформальное описание предметной области и документы, которые в ней используются

4. Содержание пояснительно записки курсовой работы






Введение



1 Техническое задание

1.1 Основание для разработки

1.2 Назначение разработки

1.3 Стандарты

1.4 Требования к программе или программному изделию

1.4.2 Носители информации

1.4.3 Требования к составу и параметрам технических средств

2 Технический проект

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

2.2 Словарь понятий и терминов

2.3 Определение функциональных зависимостей

2.4 Синтез схемы базы данных на основании функциональных зависимостей

2.4.1 Построение неизбыточного покрытия

2.4.2 Построение леворедуцированного покрытия

2.4.3 Построение праворедуцированного покрытия

2.4.4 Построение классов эквивалентности

2.4.5 Построение редуцированного минимального кольцевого покрытия

2.5 ER-схема базы данных

2.6 Построение запросов на SQL

2.6.1 Построение первого запроса	

3 Рабочий проект

3.1 Связи таблиц

3.2 Внешний вид формы

3.3 Функциональные тесты

3.3.1 Тест 1

Заключение

Список использованных источников

Приложение А

Приложение Б






Реферат



Объем данного курсового проекта равен 56 страницам. В курсовом проекте содержится два приложения, в которых приведены ER-схемы базы данных, код программы. Также в КП содержится постановка задачи.

Ключевые слова:

База данных, ER-схема, сущность, атрибут, ключ, связь, функциональная зависимость, система функциональных зависимостей.

Объект разработки:

Объектом исследования в данной работе является проектирование базы данных в соответствии с заданным вариантом.

Цель работы:

Спроектировать базу данных «Хозяйственный учет футбольного клуба».

Метод проведения работы:

Использование ER-диаграмм, минимизация зависимостей, построение запросов.




Summary



This termpaper contains 56 pages. It contains two enclosures, which contain ER-diagrams. Also it contains target setting.

Object of development is design of the database according to specified variant.

The aim of work is design of the database, describing « the Economic account of football club ».

It is necessary to make ER-diagram, to minimize functional dependences, to write and minimize SQL queries.






Определения



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

база данных: Файлы, снабженные описанием хранимых в них данных и находящиеся под управлением СУБД.

er-диаграмма: Схема базы данных, спроектированная с помощью программы ERWin.

сущность: Любой различимый объект (объект, который мы можем отличить от другого), информацию о котором необходимо хранить в базе данных.

атрибут: Поименованная характеристика сущности.

ключ: Минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности.

связь: Ассоциирование двух или более сущностей.

Обозначения и сокращения

В данной работе применены следующие сокращения:

БД: База данных

СУБД: Система управления базами данных

ФЗ: Функциональная зависимость






Введение



Необходимо спроектировать базу данных «Хозяйственный учет футбольного клуба». Также целью данной работы является ознакомление с основными принципами построения, использования и оптимизации реляционных баз данных.

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

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

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

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




Техническое задание



	Основание для разработки



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



	Назначение разработки



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



Стандарты



Данная работа оформлена в соответствии со стандартом СТУ 04.02.030.-2008.



	Требования к программе или программному изделию

				

				Спроектировать базу данных для спортивной базы футбольного клуба. Описать предметную область, разработать словарь понятий и терминов, построить систему функциональных зависимостей. Синтезировать схему базы данных на основании функциональных зависимостей (построение неизбыточного покрытия, построение леворедуцированного неизбыточного покрытия, построение праворедуцированного неизбыточного покрытия, построение классов эквивалентностей, построение минимального покрытия). Построить уточненную концептуальную модель в виде ER-диаграммы, запросы предметной области. Записать минимизированные запросы на языке SQL.



Результирующие компоненты изделия

База данных в визуальной среде разработки систем управления реляционными базами данных Microsoft Visual FoxPro и все сопровождающие файлы.



Носители информации

Продукт должен размещаться в виде файлов на CD дисках. В процессе работы могут использоваться Flash, CD-R/-RW, DVD-R/RW или другие носители информации.



Требования к составу и параметрам технических средств

Программный комплекс должен корректно работать на компьютере со следующими техническими характеристиками:

		процессор Pentium V 2200 МГц;

		оперативная память объемом 1024 Мб;

		жесткий диск Seagate Barracuda, объемом 120 Гб;

		видеоадаптер SVGA;

		клавиатура;

		манипулятор типа “мышь”;

устройство удаленного доступа к сети: модем или сетевая карта.

	




 Технический проект



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



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

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

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

Для инвентаря и техники хранится информация о фирме-изготовителе и модели товара. Для мебели должна быть отражена информация о фирме-производителе, цвете, габаритных размерах (длина, ширина, высота).

Каждой единице в поступившей партии объектов присваивается инвентарный номер, который ее однозначно определяет.

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

Инвентарь, техника и мебель могут быть списаны, при этом хранится дата списания.



 Словарь понятий и терминов



Словарь понятий и терминов приведен в таблицах 2.1 – 2.12.

Таблица 2.1 - Общая информация

Атрибут

Смысл

Пример 

sp

Серия паспорта

3569

np

Номер паспорта

 0123654

fam

Фамилия

Иванов

im

Имя

Иван

otch

Отчество

Иванович

pol

Пол

мужской

dateborn

Дата рождения

12.05.1960

datevidachi

Дата выдачи паспорта

12.24.2000

kemvidan

Кем выдан паспорт

Отделом милиции №3 УВД г.Москва

country

Страна

Россия

city

Город

Москва

street

Улица

Первомайская

numstreet

Номер улицы

45

numflat

Номер квартиры

12

dolgnost

Должность

главный врач



Таблица 2.2 – Игроки

Атрибут

Смысл

Пример 

sp

Серия паспорта

3569

np

Номер паспорта

 0123654

date

Дата

12.12.2004

rost

Рост

180

ves

Вес

79

staff

Состав

основной

number

Номер

12

status

Статус

нападающий



Таблица 2.3 – Помещение

Атрибут

Смысл

Пример

num_p

Номер помещения

15

square

Площадь

123

naznachenie

Назначение

столовая






Таблица 2.4 - Комната

Атрибут

Смысл

Пример

num_p

Номер помещения

15

room

Номер комнаты

3



Таблица 2.5 – Спортивный зал

Атрибут

Смысл

Пример

num_p

Номер помещения

15

type_zal

Тип зала

Тренажерный зал

sp

Серия паспорта

1226

np

Номер паспорта

456987



Таблица 2.6 – Поступление объектов

Атрибут

Смысл

Пример

code_obj

Код объекта

15

Kol

Количество

40

date

Дата поступления

04.24.2008

balance

Балансовая стоимость

450



Таблица 2.7 – Спортивный инвентарь

Атрибут

Смысл

Пример

code_obj

Код объекта

15

firm_inv

Фирма-изготовитель

Mizuno 

model_inv

Модель

GIM12 



Таблица 2.8 – Техника

Атрибут

Смысл

Пример значения

code_obj

Код объекта

15

firm_tec

Фирма-изготовитель

Samsung

model_tec

Модель

SG-125 



Таблица 2.9 – Мебель

Атрибут

Смысл

Пример значения

code_obj

Код объекта

115

firm_meb

Фирма-изготовитель

«Мир мебели»

dlina

Длина

125

width

Ширина

50

height

Высота

70

material_meb

Материал

Дуб

Цвет

color_meb 

Орех



Таблица 2.10– Мяч

Атрибут

Смысл

Пример значения

code_obj

Код объекта

15

material_ball

Материал

кожа



Таблица 2.11 – Футбольные ворота

Атрибут

Смысл

Пример значения

code_obj

Код объекта

24

kind

Вид ворот

стандартные

height

Высота

123

shirina

Ширина

365



Таблица 2.12 – Тренажер

Атрибут

Смысл

Пример значения

code_obj

Код объекта

65

type_tren

Тип тренажера

беговая дорожка



Таблица 2.13 – Телевизор

Атрибут

Смысл

Пример значения

code_obj

Код объекта

65

diagonal

Диагональ экрана

54

screen

Тип экрана





Таблица 2.14 – Холодильник

Атрибут

Смысл

Пример значения

code_obj

Код объекта

668

height

Высота

125

width

Ширина

105

depth

Глубина

90

sum_sq_polok

Площадь полок

126

com_volume

Общий объем

368

userful_volume

Используемый объем

360

Таблица 2.15 – Пылесос

Атрибут

Смысл

Пример значения

code_obj

Код объекта

268

moshnost

Мощность

54



Таблица 2.16 – Кровать

Атрибут

Смысл

Пример значения

code_obj

Код объекта

45

Type_bed

Тип кровати

односпальная



Таблица 2.17 – Шкаф

Атрибут

Смысл

Пример значения

code_obj

Код объекта

123

type_shkaf

Тип шкафа

плательный



Таблица 2.18 – Стол

Атрибут

Смысл

Пример значения

code_obj 

Код объекта

569

type_table

Тип стола

письменный



Таблица 2.19 – Размещение спортивного инвентаря по залам

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

123654

date

Дата

05.15.2010

num_p

Номер зала

56



Таблица 2.20 – Расселение людей по комнатам

Атрибут

Смысл

Пример значения

Inv_number

Номер помещения

123654

sp

Серия паспорта

1236

np

Номер паспорта

566002



Таблица 2.21 – Инвентарные номера спортивного инвентаря

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

123654

code_obj

Код объекта

165

Таблица 2.22 – Инвентарные номера техники

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

333488

code_obj

Код объекта

456



Таблица 2.23 – Инвентарные номера мебели

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

5699888

code_obj

Код объекта

158



Таблица 2.24 – Списанный спортивный инвентарь

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

123654

date

Дата списания

11.10.2007



Таблица 2.25 – Списанная техника

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

123654

date

Дата списания

04.05.2007



Таблица 2.26 – Списанная мебель

Атрибут

Смысл

Пример значения

Inv_number

Инвентарный номер

123654

date

Дата списания

12.03.2004



Определение функциональных зависимостей



У двух и более людей серия и номер паспорта не могут быть одинаковыми.

Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost -> sp, np.

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

	sp_pl, np_pl -> sp, np -> date, rost, ves, staff, number, status -> Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat.

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

	 sp_pl, np_pl -> date, staff, number, status.

В определенном составе под одним номером не могут играть два футболиста. 

sp_pl, np_pl -> staff, number, status.

	Один человек не может одновременно жить в двух комнатах. 

	num_room -> sp, np.

Помещение не может иметь разные площади и назначения.

square, naznachenie -> num_p.

	Номер помещения однозначно определяет номер комнаты. 

	room -> num_room.

	Спортивный зал не может одновременно относиться к разным типам. type_zal -> num_zal.

	Объект в одно и то же время поступает в определенном количестве по определенной цене. kol, date, balance -> code_obj.

	Инвентарь производится определенной фирмой и относится к определенной модели. firm_inv, model_inv -> code_inv.

	Техника производится определенной фирмой и относится к определенной модели, потребляет определенную мощность. firm_tec, model_tec -> code_tec.

	Мебель изготавливается из определенного материала, определенной длины, ширины, высоты, цвета. firm_meb, dlina, width, height, color -> code_meb.

	Единица спортивного инвентаря не может относиться к двум объектам. code_inv-> inv_number_INV .

	Единица техники не может относиться к двум объектам. code_tec -> . inv_number_TEC.

	Единица мебели не может относиться к двум объектам. code_meb -> inv_number_MEB.

	Единица спортивного инвентаря не может быть списана дважды. date_out_inv -> inv_number_INV_out.

	Единица техники не может быть списана дважды. date_out_tec -> inv_number_TEC_out.

	Единица мебели не может быть списана дважды date_out_meb -> . inv_number_MEB_out.

	Единица спортивного инвентаря не может одновременно находиться в нескольких спортивных залах. num_zal -> inv_number_INV, date_IinZal.

	Единица техники не может одновременно находиться в нескольких помещениях. num_р -> inv_number_TEC, date_TecInP.

	Единица мебели не может одновременно находиться в нескольких помещениях. num_р -> inv_number_MEB, date_MebInP.

	Мяч не может иметь разные характеристики. material -> code_balls.

	Одни и те же ворота не могут иметь разные характеристики. height_gate, shirina, kind -> code_gate.

	Тренажер не может быть одновременно двух видов. type -> code_trenager.

	Телевизор не может иметь разные характеристики. diagonal, screen -> code_TV.

	Холодильник не может иметь разные характеристики. height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume -> code_refreg.

	Пылесос не может иметь разные характеристики. moshnost_v -> code_vacuum.

	Кровать не может иметь разные характеристики. type_bed -> code_bed.

	Стол не может иметь разные характеристики. type_table, material_table > code_table.

	Шкаф не может иметь разные характеристики. type_shkaf -> code_shkaf.

Исходные функциональные зависимости представлены на рисунке 2.1








	sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost

	Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, np

	sp_pl, np_pl -> date, rost, ves, staff, number, status

	date, staff, number, status -> sp_pl, np_pl

	sp, np -> num_room

	num_p -> square, naznachenie

	num_room -> room

	num_zal -> type_zal

	code_obj -> kol, date, balance

	code_inv -> firm_inv, model_inv

	code_tec -> firm_tec, model_tec

	code_meb -> firm_meb, dlina, width, height, color

	inv_number_INV -> code_inv

	inv_number_TEC -> code_tec

	inv_number_MEB -> code_meb

	inv_number_INV_out -> date_out_inv

	inv_number_TEC_out -> date_out_tec

	inv_number_MEB_out -> date_out_meb

	inv_number_INV, date_IinZal -> num_zal

	inv_number_TEC, date_TecInP -> num_р

	inv_number_MEB, date_MebInP -> num_р

	code_balls -> material

	code_gate -> height_gate, shirina, kind

	code_trenager -> type

	code_TV -> diagonal, screen

	code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume

	code_vacuum -> moshnost_v

	code_bed -> type_bed

	code_table -> type_table, material_table

	code_shkaf -> type_shkaf

Рисунок 2.1 – Исходные функциональные зависимости



2.3.2 Функциональные зависимости сохраняющие иерархию

В данном множестве есть следующие зависимости, которые сохраняют иерархию:

	Спортивным залом не может быть несуществующее помещение. num_zal -> num_p.

	Не поступавшая партия объектов не может быть зарегистрирована как инвентарь. code_inv -> code_obj.

	Не поступавшая партия объектов не может быть зарегистрирована как техника. code_tec -> code_obj.

	Не поступавшая партия объектов не может быть зарегистрирована как мебель. code_meb -> code_obj.

	Незарегистрированная единица инвентаря не может быть списана. inv_number_INV_out -> inv_number_INV.

	Незарегистрированная единица техники не может быть списана.

	inv_number_TEC _out -> inv_number_TEC.

	Незарегистрированная единица мебели не может быть списана. inv_number_MEB_out -> inv_number_MEB.

	Незарегистрированная партия инвентаря инвентаря не может быть партией мячей.

	code_balls -> code_inv.

	Одна и та же партия ворот не может поступить дважды. 

	code_gate -> code_inv.

	Одна и та же партия тренажеров не может поступить дважды. 

	code_trenager -> type.

	Одна и та же партия телевизоров не может поступить дважды. 

	code_TV -> diagonal, screen.

Одна и та же партия холодильников не может поступить дважды. 

code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume.

Функциональные зависимости сохраняющие иерархию представлены на рисунке 2.2.








	num_zal -> num_p

	code_inv -> code_obj

	code_tec -> code_obj

	code_meb -> code_obj

	inv_number_INV_out -> inv_number_INV

	inv_number_TEC _out -> inv_number_TEC

	inv_number_MEB_out -> inv_number_MEB

	code_balls -> code_inv

	code_gate -> code_inv

	code_trenager -> type

	code_TV -> diagonal, screen

	code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume

	code_vacuum -> moshnost_v

	code_bed -> type_bed

	code_table -> type_table, material_table

	code_shkaf -> type_shkaf

Рисунок 2.2 - Функциональные зависимости, сохраняющие иерархию



Синтез схемы базы данных на основании функциональных зависимостей

	

	Построение неизбыточного покрытия

Исходное множество функциональных зависимостей представлено на рисунке 2.3.



sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country,   city, street, numstreet, numflat, dolgnost

    Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, np

    sp_pl, np_pl -> date, rost, ves, staff, number, status

    date, staff, number, status -> sp_pl, np_pl

    sp, np -> num_room

    num_p -> square, naznachenie

    num_room -> room

    num_zal -> type_zal

    num_zal -> num_p

    code_obj -> kol, date, balance

    code_inv -> firm_inv, model_inv

    code_inv -> code_obj

    code_tec -> firm_tec, model_tec

    code_tec -> code_obj

    code_meb -> firm_meb, dlina, width, height, color

    code_meb -> code_obj

    inv_number_INV -> code_inv

    inv_number_TEC -> code_tec

    inv_number_MEB -> code_meb

    inv_number_INV_out -> inv_number_INV

    inv_number_TEC_out -> inv_number_TEC

    inv_number_MEB_out -> inv_number_MEB

    inv_number_INV_out -> date_out_inv

    inv_number_TEC_out -> date_out_tec

    inv_number_MEB_out -> date_out_meb

    inv_number_INV, date_IinZal -> num_zal

    inv_number_TEC, date_TecInP -> num_р

    inv_number_MEB, date_MebInP -> num_р

    code_balls -> material

    code_balls -> code_inv

code_gate -> height_gate, shirina, kind

    code_gate -> code_inv

      code_trenager -> type

    code_trenager -> code_inv

    code_TV -> diagonal, screen

    code_TV -> code_tec

    code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume

    code_refreg -> code_tec

    code_vacuum -> moshnost_v

    code_vacuum -> code_tec

    code_bed -> type_bed

    code_bed -> code_meb

    code_table -> type_table, material_table

    code_table -> code_meb

    code_shkaf -> type_shkaf

    code_shkaf -> code_meb

Рисунок 2.3 - Исходное множество функционаьных зависимостей



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



Построение леворедуцированного покрытия

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



Построение праворедуцированного покрытия



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






Построение классов эквивалентности

Этапы построения классов эквивалентности представлены на рисунке 2.8.



1. Ef( sp, np ): 

 sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost

 Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, np

 sp, np -> num_room

2. Ef( sp_pl, np_pl ): 

 sp_pl, np_pl -> date, rost, ves, staff, number, status

 date, staff, number, status -> sp_pl, np_pl

3. Ef( num_p ): 

 num_p -> square, naznachenie

4. Ef( num_room ): 

 num_room -> room

5. Ef( num_zal ): 

 num_zal -> type_zal

 num_zal -> num_p

6. Ef( code_obj ): 

 code_obj -> kol, date, balance

7. Ef( code_inv ): 

 code_inv -> firm_inv, model_inv; code_inv -> code_obj

8. Ef( code_tec ): 

 code_tec -> firm_tec, model_tec; code_tec -> code_obj

9. Ef( code_meb ): 

 code_meb -> firm_meb, dlina, width, height, color; code_meb -> code_obj

10. Ef( inv_number_INV ): 

 inv_number_INV -> code_inv

11. Ef( inv_number_TEC ):

15. Ef( inv_number_MEB_out ): 

    inv_number_MEB_out -> inv_number_MEB

    inv_number_MEB_out -> date_out_meb

16. Ef( inv_number_INV, date_IinZal ): 

    inv_number_INV, date_IinZal -> num_zal

17. Ef( inv_number_TEC, date_TecInP ): 

    inv_number_TEC, date_TecInP -> num_р

18. Ef( inv_number_MEB, date_MebInP ): 

    inv_number_MEB, date_MebInP -> num_р

19. Ef( code_balls ): 

    code_balls -> material

    code_balls -> code_inv

20. Ef( code_gate ): 

    code_gate -> height_gate, shirina, kind

    code_gate -> code_inv

21. Ef( code_trenager ): 

    code_trenager -> type

    code_trenager -> code_inv

22. Ef( code_TV ): 

    code_TV -> diagonal, screen

    code_TV -> code_tec

23. Ef( code_refreg ): 

    code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume

    code_refreg -> code_tec

24. Ef( code_vacuum ): 

    code_vacuum -> moshnost_v

    code_vacuum -> code_tec

25. Ef( code_bed ): 

    code_bed -> type_bed

    code_bed -> code_meb

26. Ef( code_table ): 

    code_table -> type_table, material_table

    code_table -> code_meb

27. Ef( code_shkaf ): 

    code_shkaf -> type_shkaf

    code_shkaf -> code_meb

Рисунок 2.4 - Этапы построения классов эквивалентности



Построение минимального покрытия на основе прямой функциональной определяемости

Этапы построения минимального покрытия на основе прямой функциональной определяемости представлены на рисунке 2.5.



2. Проверка: f \ Ef(sp, np) |= sp, np -> sp, np?

Да => заменяем sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, 

kemvidan, country, city, street, numstreet, numflat, dolgnost и sp, np -> 

num_room на sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, 

kemvidan, country, city, street, numstreet, numflat, dolgnost, num_room.

5. Проверка: f \ Ef(num_zal) |= num_zal -> num_zal?

Да => заменяем num_zal -> type_zal и num_zal -> num_p на num_zal -> 

type_zal, num_p.

6. Проверка: f \ Ef(code_inv) |= code_inv -> code_inv?

Да => заменяем code_inv -> firm_inv, model_inv и code_inv -> code_obj 

на code_inv -> firm_inv, model_inv, code_obj.

7. Проверка: f \ Ef(code_tec) |= code_tec -> code_tec?

Да => заменяем code_tec -> firm_tec, model_tec и code_tec -> 

code_obj на code_tec -> firm_tec, model_tec, code_obj.

8. Проверка: f \ Ef(code_meb) |= code_meb -> code_meb?

Да => заменяем code_meb -> firm_meb, dlina, width, height, color и 

code_meb -> code_obj на code_meb -> firm_meb, dlina, width, height, 

color, code_obj.

9. Проверка: f \ Ef(inv_number_INV_out) |= inv_number_INV_out -> 

inv_number_INV_out?

Да => заменяем inv_number_INV_out -> inv_number_INV и 

inv_number_INV_out -> date_out_inv на inv_number_INV_out -> 

inv_number_INV, date_out_inv.

10. Проверка: f \ Ef(inv_number_TEC_out) |= inv_number_TEC_out -> 

inv_number_TEC_out?

Да => заменяем inv_number_TEC_out -> inv_number_TEC и 

inv_number_TEC_out -> date_out_tec на inv_number_TEC_out -> 

inv_number_TEC, date_out_tec.

11. Проверка: f \ Ef(inv_number_MEB_out) |= inv_number_MEB_out -> 

inv_number_MEB_out?

Да => заменяем inv_number_MEB_out -> inv_number_MEB и 

inv_number_MEB_out -> date_out_meb на inv_number_MEB_out -> 

inv_number_MEB, date_out_meb.

12. Проверка: f \ Ef(code_balls) |= code_balls -> code_balls?

Да => заменяем code_balls -> material и code_balls -> code_inv на 

code_balls -> material, code_inv.

13. Проверка: f \ Ef(code_gate) |= code_gate -> code_gate?

Да => заменяем code_gate -> height_gate, shirina, kind и code_gate -> 

code_inv на code_gate -> height_gate, shirina, kind, code_inv.

Рисунок 2.5 - Этапы построения минимального покрытия на основе прямой функциональной определяемости



Редуцированное минимальное покрытие представлено на рисунке 2.6

Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat 

> sp, np

    sp_pl, np_pl 

> date, rost, ves, staff, number, status

    date, staff, number, status 

> sp_pl, np_pl

    num_p 

> square, naznachenie

    num_room 

> room

    code_obj 

> kol, date, balance

    inv_number_INV 

> code_inv

    inv_number_TEC 

> code_tec

    inv_number_MEB 

> code_meb

    inv_number_INV, date_IinZal 

> num_zal

    inv_number_TEC, date_TecInP 

> num_р

    inv_number_MEB, date_MebInP 

> num_р

    sp, np 

> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost, num_room

    num_zal 

> type_zal, num_p

    code_inv 

> firm_inv, model_inv, code_obj

    code_tec 

> firm_tec, model_tec, code_obj

    code_meb 

> firm_meb, dlina, width, height, color, code_obj

    inv_number_INV_out 

> inv_number_INV, date_out_inv

    inv_number_TEC_out 

> inv_number_TEC, date_out_tec

 inv_number_MEB_out 

> inv_number_MEB, date_out_meb

 code_balls 

> material, code_inv

 code_gate 

> height_gate, shirina, kind, code_inv

 code_trenager 

> type, code_inv

 code_TV 

> diagonal, screen, code_tec

 code_refreg 

> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume, code_tec

 code_vacuum 

> moshnost_v, code_tec

 code_bed 

> type_bed, code_meb

 code_table 

> type_table, material_table, code_meb

 code_shkaf 

> type_shkaf, code_meb

Рисунок 2.6 - Редуцированное минимальное покрытие 



Построение редуцированного минимального кольцевого покрытия

Определение CF-зависимостей по классам эквивалентности. Построение кольцевого покрытия

Минимальное кольцевое покрытие представлено на рисунке 2.7



( sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat; ) 

-> pol, datevidachi, kemvidan, dolgnost, num_room

( sp_pl, np_pl; date, staff, number, status; ) -> rost, ves

( num_p; ) -> square, naznachenie

( num_room; ) -> room

( num_zal; ) -> type_zal, num_p

( code_obj; ) -> kol, date, balance

( code_inv; ) -> firm_inv, model_inv, code_obj

( code_tec; ) -> firm_tec, model_tec, code_obj

( code_meb; ) -> firm_meb, dlina, width, height, color, code_obj

( inv_number_INV; ) -> code_inv

( inv_number_TEC; ) -> code_tec

( inv_number_MEB; ) -> code_meb

( inv_number_INV_out; ) -> inv_number_INV, date_out_inv

( inv_number_TEC, _out; )

( inv_number_MEB_out; ) -> inv_number_MEB, date_out_meb

( inv_number_TEC_out; ) -> date_out_tec

( inv_number_INV, date_IinZal; ) -> num_zal

( inv_number_TEC, date_TecInP; ) -> num_р

( inv_number_MEB, date_MebInP; ) -> num_р

( code_balls; ) -> material, code_inv

( code_gate; ) -> height_gate, shirina, kind, code_inv

( code_trenager; ) -> type, code_inv

( code_TV; ) -> diagonal, screen, code_tec

( code_refreg; ) -> height_ref, widht_ref, depht_ref, sum_sq_polok, 

com_volume, user_volume, code_tec

( code_vacuum; ) -> moshnost_v, code_tec

( code_bed; ) -> type_bed, code_meb

( code_table; ) -> type_table, material_table, code_meb

( code_shkaf; ) -> type_shkaf, code_meb

Рисунок 2.7 - Минимальное кольцевое покрытие



Получение кольцевого минимального редуцированного покрытия

Естественное характеристическое множество для кольцевого покрытия представлено на рисунке 2.8.



f(C): 

 sp, np -> Fam, Im, Otch, dateborn, country, city, street, numstreet, 

numflat

 Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, 

np

 Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> pol, 

datevidachi, kemvidan, dolgnost, num_room

 sp_pl, np_pl -> date, staff, number, status

 date, staff, number, status -> sp_pl, np_pl

 date, staff, number, status -> rost, ves

code_tec -> firm_tec, model_tec, code_obj

code_meb -> firm_meb, dlina, width, height, color, code_obj

    inv_number_INV -> code_inv

    inv_number_TEC -> code_tec

    inv_number_MEB -> code_meb

    inv_number_INV_out -> inv_number_INV, date_out_inv

    inv_number_MEB_out -> inv_number_MEB, date_out_meb

    inv_number_TEC_out -> date_out_tec

    inv_number_INV, date_IinZal -> num_zal

    inv_number_TEC, date_TecInP -> num_р

    inv_number_MEB, date_MebInP -> num_р

    code_balls -> material, code_inv

    code_gate -> height_gate, shirina, kind, code_inv

    code_trenager -> type, code_inv

    code_TV -> diagonal, screen, code_tec

    code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, 

com_volume, user_volume, code_tec

    code_vacuum -> moshnost_v, code_tec

    code_bed -> type_bed, code_meb

    code_table -> type_table, material_table, code_meb

 code_shkaf -> type_shkaf, code_meb

Рисунок 2.8 - Естественное характеристическое множество для кольцевого покрытия



Минимальное редуцированное кольцевое покрытие представлено на рисунке 2.9.



( sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, 

numflat; ) -> pol, datevidachi, kemvidan, dolgnost, num_room

 ( sp_pl, np_pl; date, staff, number, status; ) -> rost, ves

 ( num_p; ) -> square, naznachenie

 ( num_room; ) -> room

 ( num_zal; ) -> type_zal, num_p

 ( code_obj; ) -> kol, date, balance

 ( code_inv; ) -> firm_inv, model_inv, code_obj

 ( code_tec; ) -> firm_tec, model_tec, code_obj

 ( code_meb; ) -> firm_meb, dlina, width, height, color, code_obj

 ( inv_number_INV; ) -> code_inv

    ( inv_number_TEC; ) -> code_tec

    ( inv_number_MEB; ) -> code_meb

    ( inv_number_INV_out; ) -> inv_number_INV, date_out_inv

    ( inv_number_TEC, _out; )

    ( inv_number_MEB_out; ) -> inv_number_MEB, date_out_meb

    ( inv_number_TEC_out; ) -> date_out_tec

    ( inv_number_INV, date_IinZal; ) -> num_zal

    ( inv_number_TEC, date_TecInP; ) -> num_р

    ( inv_number_MEB, date_MebInP; ) -> num_р

    ( code_balls; ) -> material, code_inv

    ( code_gate; ) -> height_gate, shirina, kind, code_inv

    ( code_trenager; ) -> type, code_inv

    ( code_TV; ) -> diagonal, screen, code_tec

    ( code_refreg; ) -> height_ref, widht_ref, depht_ref, sum_sq_polok, 

com_volume, user_volume, code_tec

    ( code_vacuum; ) -> moshnost_v, code_tec

    ( code_bed; ) -> type_bed, code_meb

    ( code_table; ) -> type_table, material_table, code_meb

    ( code_shkaf; ) -> type_shkaf, code_meb

Рисунок 2.9 - Минимальное редуцированное кольцевое покрытие



Естественное характеристическое множество представлено на рисунке 2.10.



R0 = ( sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, 

numflat, pol, datevidachi, kemvidan, dolgnost, num_room ) K0 = { sp, np; Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat }

R1 = ( sp_pl, np_pl; date, staff, number, status, rost, ves ) K1 = { sp_pl, np_pl; date, staff, number, status }

R2 = ( num_p, square, naznachenie ) K2 = { num_p }

R3 = ( num_room, room ) K3 = { num_room }

R4 = ( num_zal, type_zal, num_p ) K4 = { num_zal }

R5 = ( code_obj, kol, date, balance ) K5 = { code_obj }

R6 = ( code_inv, firm_inv, model_inv, code_obj ) K6 = { code_inv }

R7 = ( code_tec, firm_tec, model_tec, code_obj ) K7 = { code_tec }

R8 = ( code_meb, firm_meb, dlina, width, height, color, code_obj ) K8 = { code_meb }

R9 = ( inv_number_INV, code_inv ) K9 = { inv_number_INV }

R10 = ( inv_number_TEC, code_tec ) K10 = { inv_number_TEC }

R11 = ( inv_number_MEB, code_meb )   K11 = { inv_number_MEB }

R12 = ( inv_number_INV_out, inv_number_INV, date_out_inv )   K12 = { inv_number_INV_out }

R13 = ( inv_number_TEC, _out )   K13 = { inv_number_TEC, _out }

R14 = ( inv_number_MEB_out, inv_number_MEB, date_out_meb ) K14 = {inv_number_MEB_out }

R15 = ( inv_number_TEC_out, date_out_tec )   K15 = { inv_number_TEC_out }

R16 = ( inv_number_INV, date_IinZal, num_zal )   K16 = { inv_number_INV, date_IinZal }

R17 = ( inv_number_TEC, date_TecInP, num_р )   K17 = { inv_number_TEC, date_TecInP }

R18 = ( inv_number_MEB, date_MebInP, num_р )   K18 = { inv_number_MEB, date_MebInP }

R19 = ( code_balls, material, code_inv )   K19 = { code_balls }

R20 = ( code_gate, height_gate, shirina, kind, code_inv )   K20 = { code_gate }

R21 = ( code_trenager, type, code_inv )   K21 = { code_trenager }

R22 = ( code_TV, diagonal, screen, code_tec )   K22 = { code_TV }

R23 = ( code_refreg, height_ref, widht_ref, depht_ref, sum_sq_polok, 

com_volume, user_volume, code_tec )   K23 = { code_refreg }

R24 = ( code_vacuum, moshnost_v, code_tec )   K24 = { code_vacuum }

R25 = ( code_bed, type_bed, code_meb )   K25 = { code_bed }

R26 = ( code_table, type_table, material_table, code_meb )   K26 = { code_table }

R27 = ( code_shkaf, type_shkaf, code_meb )   K27 = { code_shkaf }

Рисунок 2.10 - Естественное характеристическое множество



Концептуальная модель



Исходная концептуальная модель базы данных представлена на рисунке 2.15.








Рисунок 2.15 - Концептуальная модель (ER-диаграмма) базы данных



После проведения всех этапов минимизации концептуальная модель не изменилась.






2.6 Построение запросов



2.6.1 Построение первого запроса



2.6.1.1 Исходный запрос

Первый запрос формулируется следующим образом: «Вывести коды партий футбольных ворот типа «юниорские», которые производятся фирмой Star, относятся к модели K325, поступили не раньше 2007 года и находятся в спортивных залах «Общей физической подготовки» ».



SELECT *;

FROM((((gate INNER JOIN inventar ON     

                     ALLTRIM(inventar.code_obj)==ALLTRIM(gate.code_obj));  

INNER JOIN arrival_object ON  

         ALLTRIM(arrival_object.code_obj)==ALLTRIM(gate.code_obj));

INNER JOIN invnum_inv ON   

                  ALLTRIM(invnum_inv.code_obj)==ALLTRIM(gate.code_obj));

INNER JOIN inv_in_zal ON   ALLTRIM(inv_in_zal.inv_number)==ALLTRIM(invnum_inv.inv_number))

INNER JOIN zal ON zal.num_p==inv_in_zal.num_p;

WHERE   ALLTRIM(gate.kind)="Стандартные";

              AND (ALLTRIM(inventar.firm)="Mizuno");

             AND (ALLTRIM(inventar.model)="K235");

             AND ((arrival_object.date)>={^2007-01-01});

             AND (ALLTRIM(zal.type_zal)="Общей физической  подготовки")

              INTO CURSOR cur       

SELECT  DISTINCT code_obj_a FROM  cur ;Текст первого запроса на языке SQL представлен на рисунке 2.16.

Риунок 2.16 - Текст первого запроса на языке SQL



Исходное операционное дерево для первого запроса представлено на рисунке 2.17.








π code_obj



(Gate.kind =”Стандартные”)AND (Arrival_object.date>={^01.01.07})AND

(Inventar.firm=”Mizuno”)AND

(Inventar.model=”K325”)

(Zal.type_zal=”Общей физической подготовки”)

(6)

(7)

Zal

Invnum_inv

Inv_in_zal

(1)

(2)

(3)

(4)

Arrival_object

Inventar

Gate

(5)

δ

Рисунок 2.17 - Исходное операционное дерево для первого запроса





,

,

,

,

,

,

,

,

,

,

,

,

Оценка стоимости исходного запроса представлена на рисунке 2.18.








,

,

.



        





        





        





        





        

,           

;  ;  ;    ;          ;    ;     ;         



        



        

Оценка: 525613610      Рисунок 2.18 – Оценка стоимости исходного запроса



2.6.1.2 Минимизированный запрос

Текст минимизированного первого запроса на SQL представлен на рисунке 2.19.

SELECT code_obj from gate WHERE gate.kind="Стандартные" 

              INTO  CURSOR C1

SELECT code_obj FROM inventar WHERE  

                        (ALLTRIM(inventar.firm)="Mizuno" AND     

                        ALLTRIM(inventar.model)="K235") INTO CURSOR C2          

SELECT code_obj from arrival_object WHERE 

                           ((arrival_object.date)>={^2007-01-01}) INTO CURSOR d5

SELECT * FROM c1 INNER JOIN c2 ON c1.code_obj=c2.code_obj

                             INTO CURSOR C3

SELECT * FROM c3 INNER JOIN d5 ON d5.code_obj=c3.code_obj_a 

                            INTO CURSOR C6

SELECT code_obj_a,inv_number from  invnum_inv INNER JOIN C6 

      ON ALLTRIM(code_obj_a)==ALLTRIM(invnum_inv.code_obj) 

                INTO CURSOR C7

SELECT code_obj_a,num_p from  inv_in_zal INNER JOIN C7 ON   inv_in_zal.inv_number=c7.inv_number INTO CURSOR C9

SELECT num_p from zal WHERE 

             ALLTRIM(zal.type_zal)="Общей физической подготовки" 

                        INTO CURSOR C10

SELECT DISTINCT code_obj_a from C9 INNER JOIN C10 

                       ON C9.num_p=C10.num_p

Рисунок 2.19 – Текст минимизированного первого запроса



Минимизированное операционное дерево для первого запроса представлено на рисунке 2.20.








(18)

(1)

Gate

π(code_obj)

(Gate.kind =

”Стандартные”)

Inventarn

(Inventar.firm=”Mizuno”)AND

(Inventar.Model=”K235”)

(3)

(4)

(6)

δ

δ

π(code_obj)

(2)

π(code_obj)

δ

(Arrival_object.date>={^01.01.07})

Arrival_object

π(code_obj)

Invnum_inv

π(inv_number,num_p)

Inv_in_zal

π(code_obj, num_p)

π(code_obj, num_p)

π(num_p)

δ

(Zal.type_zal=”Общей

физической подготовки”)



zal

(5)

(7)

π(code_obj)

(8)

(9)

(10)

(11)

(12)

(13)

(14)

(15)

(16)

(17)

Рисунок 2.20 - Операционное дерево для минимизированного первого запроса

	

	Оценка стоимости минимизированного запроса представлена на рисунке 2.21.

	






,

,

,

,

,

,

,

,

 ,

,

,

,

,

,

.

,     ;    

               

,          

,    

,           

,         



              

	 ,         

;           ,     

,           


























































	

 ,            

,              



        

,             



        

 ,            



        

,            

,     ,          

        

,            



        



Оценка:59271026



	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	Рисунок 2.21- Оценка стоимости минимизированного первого запроса

	




2.6.2 Построение второго запроса

Словесная формулировка запроса следующая: «Вывести номера спортивных залов, в которых хранится инвентарь, принадлежащий обеим партиям: 522715, 413998».

Текст запроса на языке SQL представлен на рисунке 2.22.



SELECT num_p FROM  zal  WHERE ALLTRIM(zal.type_zal)=''

    INTO  CURSOR CR1

 SELECT num_p,code_del FROM del,CR1 INTO  CURSOR CR4  

SELECT CR1.num_p,inv_number FROM CR1 INNER JOIN inv_in_zal 

             ON CR1.num_p==inv_in_zal.num_p INTO CURSOR CR2

SELECT num_p,code_obj FROM CR2 INNER JOIN invnum_inv 

        ON (invnum_inv.inv_number==CR2.inv_number) DISTINCT 

  INTO CURSOR CR3 

SELECT DISTINCT num_p from CR4 WHERE NOT EXISTS 

         (SELECT CR3.num_p FROM CR3 WHERE (CR4.num_p==CR3.num_p        

         AND CR4.code_del==CR3.code_obj))into CURSOR CR5

SELECT  CR1.num_p,CR5.num_p FROM CR1 LEFT JOIN CR5 ON 

        CR1.num_p=CR5.num_p INTO CURSOR CR6

SELECT DISTINCT num_p FROM CR1 WHERE NOT EXISTS (Select CR6.num_p_b from CR6 WHERE CR1.num_p=CR6.num_p_b)

	Рисунок 2.22 - Текст запроса на языке SQL	

	

Операционное дерево для второго запроса представлено на рисунке 2.23.

	




	

Zal

СR6

(2)

(3)

(5)

(6)

(4)

π(num_p)

Del

(1)

Zal

π(num_p)

π(num_p)

Рисунок 2.23 - Операционное дерево для второго запроса

	




	3 Рабочий проект

	

	3.1 Структура проекта

	

	3.1.1 Связь таблиц

	Схема связей таблиц представлена на рисунке 3.1

	

	

Рисунок 3.1– Схема связей таблиц



3.1.2 Перечень форм

Формы, входящие в состав проекта приведенны в таблице 3.1.






Таблица 3.1 – Перечень форм

Название формы

Окружение данных

Инвентарные номера спортивного инвентаря

Invnum_inv, Inventar

Спортивный инвентарь

Inventar

Универсальный запрос

Arrival_object,Gate, Inventar,Invnum_inv

Запросы

-

	

	3.2 Описание формы 

	

	На рисунке 3.2. изображена форма «Инвентарные номера инвентаря»

	

		Command

		

TextBox

Grid

	Рисунок 3.2 – Форма «Инвентарные номера инвентаря»

	

	При создании формы использовались компоненты: TextBox, Command, Grid Каждая кнопка Command имеет событие Сlick. Обработчики событий Click для кнопок представлены в Приложении А.

	




Заключение



В ходе выполнения курсовой работы была достигнута цель работы – проектирование базы данных хозяйственного учета футбольного клуба.

Для достижения цели был решен ряд задач: составление описания предметной области; составление словаря понятий и терминов; построение исходной модели (ER-диаграммы) базы данных; определение функциональных зависимостей; синтез схемы базы данных на основании функциональных зависимостей; построение оптимизированной концептуальной модели; построение запросов на выборку.






Список использованных источников



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

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

		Гарсия-Молина, Гектор, Ульман, Джеффри, Д., Уидом, Дженнифер Системы баз данных. Полный курс. : Пер. с англ. – М. : Издательский дом “Вильямс”, 2003. – 188 с. : ил.

		Дейт, К., Руководство по реляционной СУБД DB2. / [Текст] : Дейт, К. – М.: Финансы и статистика, 1988. – 320 с.

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

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

		Мартин, Дж., Планирование развития автоматизированных систем. / [Текст] : Мартин, Дж., – М.: Финансы и статистика, 1984. – 196 с.

		Мейер, М., Теория реляционных баз данных. / [Текст] : Мейер, М.,– М.: Мир, 1987. – 608 с.

		Тиори, Т., Проектирование структур баз данных. / [Текст] : Тиори, Т., Фрай, Дж., В 2 кн., – М.: Мир, 1985. Кн. 1. – 287 с.: Кн. 2. – 320 с.

		Ульман, Дж., Базы данных на Паскале. / [Текст] : Ульман, Дж., – М.: Машиностроение, 1990. – 386 с.

		 Хаббард, Дж., Автоматизированное проектирование баз данных. / [Текст] : Хаббард, Дж., – М.: Мир, 1984. – 294 с.

		 Цикритизис, Д., Модели данных. / [Текст] : Цикритизис, Д., Лоховски, Ф., – М.: Финансы и статистика, 1985. – 344 с.






Приложение А



Текст обработчиков событий, связанных с компонентами формы «Инвентарные номера инвентаря»



Код, связанный с событием Click кнопок «След.» и «Пред.» 



* Next IF NOT EOF() 

SKIP 

IF EOF()

GO BOTTOM

ЕNDIF 

		ENDIF

THISFORM.Refresh 

THISFORM.Buttons 

* Previous IF NOT BOF() 

		SKIP - 1

IF BОF()

G0 TOP 

EHDIF

ЕNDIF

THISFORM.Refresh: 

THISFORM.Buttons 



Код, связанный с событием Click кнопки «Найти»



	IF NOT USED([Invnum_inv])

	 USE Invnum_inv IN 0

	ENDIF

	IF thisform.container1.text1.Value=" "

	ELSE 

	SELECT Invnum_inv

	SET ORDER TO inv_number

	LOCATE FOR 

	(ALLTRIM(inv_number))=ALLTRIM(thisform.container1.text1.value)

	IF FOUND() 

	SEEK inv_number

	ENDIF

	thisform.refresh

	ENDIF

	

		Код, связанный с событием Click кнопки «Новая запись»



	IF NOT USED([inventar])

	USE inventar IN 0

	ENDIF

	IF NOT USED([Invnum_inv])

	USE Invnum_inv IN 0

	ENDIF

	IF NOT USED([Arrival_object])

	USE Arrival_object IN 0

	ENDIF

	thisform.Visible= .F.

	SET RELATION TO

	SET SKIP TO

	SELECT Inventar

	SET ORDER TO code_obj

	SELECT Invnum_inv

	SET RELATION TO code_obj INTO Inventar

	SET SKIP TO Inventar

	DO FORM "c:\documents and settings\yla\мои документы\visual foxpro projects\my_football_new\f_inventar.scx"

	

		Код, связанный с событием Click кнопки «Сохранить»



	thisform.container2.command1.Enabled=.T.

	SELECT invnum_inv

	GO RECCOUNT()

	IF (invnum_inv.inv_number!=' ')

	thisform.Command1.Enabled=.T.

	ELSE 

	MESSAGEBOX("Введите все данные!!!",16, "Ошибка")

	ENDIF

	

		Код, связанный с событием Click кнопки «Отмена»



	thisform.Height= 260

	thisform.container1.command3.Enabled=.t. 

	thisform.container2.command1.Enabled=.t. 

	thisform.container2.command2.Enabled=.t. 

	thisform.container2.command5.Enabled=.t. 

	thisform.container3.command4.Enabled=.t.

	thisform.container3.command3.Enabled=.t. 

	thisform.container3.command6.Enabled=.f. 

	

		Код, связанный с событием Click кнопки «Удалить»



IF MESSAGEBOX ("Удалить эту запись", 4 + 32 + 256 ) = 6

DELETE NEXT 1

BLANK 

SET DELETED ON

GO TOP

THISFORM.Refresh 

ENDIF 

	

		Код, связанный с событием Click кнопки «Просмотр»

	

	IF NOT USED([Arrival_object])

	USE Arrival_object IN 0

	ENDIF

	IF NOT USED([inventar])

	USE inventar IN 0

	ENDIF

	IF NOT USED([Invnum_inv])

	USE Invnum_inv IN 0

	ENDIF

	thisform.Height= 454

	thisform.container3.command6.Enabled=.t. 

	thisform.container1.command3.Enabled=.f. 

	thisform.container2.command1.Enabled=.f. 

	thisform.container2.command2.Enabled=.f. 

	thisform.container2.command5.Enabled=.f. 

	thisform.container3.command4.Enabled=.f.

	thisform.container3.command3.Enabled=.f. 

	

	
Приложение Б

	

	Текст программы обработчика событий «Запрос» на форме «Универсальный запрос»

	

	IF NOT USED([arrival_object])

	USE arrival_object IN 0

	ENDIF

	IF NOT USED([inventar])

	USE inventar IN 0

	ENDIF

	IF NOT USED([invnum_inv])

	USE invnum_inv IN 0

	ENDIF

	IF NOT USED([gate])

	USE gate IN 0

	ENDIF

	IF thisform.container2.txt_height_gate.Value=" "

	thisform.container2.txt_height_gate.Value=""

	ENDIF

	str="(2<>1)"

	out_fields="gate.code_obj"

	IF thisform.ch_code.Value = 1

	 out_fields ="gate.code_obj"

	ENDIF

	IF thisform.ch_date_arrival.Value= 1

	out_fields = out_fields +", arrival_object.date" 

	ENDIF

	IF thisform.ch_balance.Value = 1

	out_fields = out_fields +", arrival_object.balance" 

	ENDIF

	IF thisform.ch_kol.Value = 1

	 out_fields = out_fields +", arrival_object.kol" 

	ENDIF

	IF thisform.ch_firm.Value = 1

	out_fields = out_fields +", inventar.firm" 

	ENDIF

	IF thisform.ch_model.Value = 1

	 out_fields = out_fields +", inventar.model" 

	ENDIF

	IF thisform.ch_inv_number.Value = 1

	out_fields = out_fields +", invnum_inv.inv_number" 

	ENDIF

	IF thisform.container2.ch_height_gate.Value = 1

	out_fields = out_fields +", gate.height_gate" 

	ENDIF

	IF thisform.container2.ch_kind_gate.Value = 1

	out_fields = out_fields +", gate.kind" 

	ENDIF

	IF thisform.container2.Ch_shirina_gate.Value = 1

	out_fields = out_fields +", gate.shirina" 

	ENDIF

	IF ALLTRIM(thisform.txt_code_obj.Value) == ""

	ELSE 

	str = str +" AND "+ 

	"((ALLTRIM(gate.code_obj))=ALLTRIM(thisform.txt_code_obj.Value))"

	ENDIF

	IF ALLTRIM(thisform.txt_date_arrival.Value) == ""

	ELSE 

	str = str +" AND "+ 

	"((ALLTRIM(DTOC(arrival_object.date)))=ALLTRIM(thisform.txt_date_arrival.Value))"

	ENDIF

	IF ALLTRIM(thisform.txt_balance.Value) == ""

	ELSE 

	str = str +" AND "+ 

	"((ALLTRIM(STR(arrival_object.balance)))=ALLTRIM(thisform.txt_balance.Value))"

	ENDIF

	IF ALLTRIM(thisform.txt_kol.Value) == ""

	ELSE 

	str = str +" AND "+ 

	((ALLTRIM(STR(arrival_object.kol)))=ALLTRIM(thisform.txt_kol.Value))

	ENDIF

	IF ALLTRIM(thisform.txt_firm.Value )== ""

	ELSE 

	str = str +" AND "+ 

	((ALLTRIM(inventar.firm))=ALLTRIM(thisform.txt_firm.Value))

	ENDIF

	IF ALLTRIM(thisform.txt_model.Value) == ""

	ELSE 

	str = str +" AND "+ 

	"((ALLTRIM(inventar.model))=ALLTRIM(thisform.txt_model.Value))"

	ENDIF

	IF ALLTRIM(thisform.container2.txt_kind_gate.Value) == ""

	 ELSE 

	 str = str +" AND "+ 

	"((ALLTRIM(gate.kind))=ALLTRIM(thisform.container2.txt_kind_gate.Value))"

	ENDIF

	IF ALLTRIM(thisform.container2.txt_height_gate.Value) == ""

	ELSE 

	str = str +" AND "+ "((ALLTRIM(STR(gate.height_gate)))

	=thisform.container2.txt_height_gate.Value)"

	ENDIF

	IF ALLTRIM(thisform.container2.txt_shirina_gate.Value)== ""

	ELSE 

	 str = str +" AND "+ "((ALLTRIM(STR(gate.shirina)))=

	=ALLTRIM(thisform.container2.txt_shirina_gate.Value))"

	ENDIF

	IF out_fields="NULL" 

	out_fields ="*"

	ENDIF

	SELECT &out_fields;

	FROM(((gate INNER JOIN inventar ON 

	ALLTRIM(inventar.code_obj)==ALLTRIM(gate.code_obj));

	INNER JOIN arrival_object ON 

	ALLTRIM(arrival_object.code_obj)==ALLTRIM(gate.code_obj));

	INNER JOIN invnum_inv ON 

	ALLTRIM(invnum_inv.code_obj)==ALLTRIM(gate.code_obj)); 

	WHERE &str INTO TABLE My_tab

	objExcel=CreateObject("Excel.Application")

	objExcel.Visible=.T. 

	objExcel.Workbooks.add

	nstol = 0

	IF thisform.ch_code.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Код партии"

	objExcel.Columns[nstol].ColumnWidth = 12

	ENDIF

	IF thisform.ch_date_arrival.Value= 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Дата поступления"

	objExcel.Columns[nstol].ColumnWidth = 18

	ENDIF

	IF thisform.ch_balance.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Балансовая стоимость"

	objExcel.Columns[nstol].ColumnWidth = 25

	ENDIF

	IF thisform.ch_kol.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Количество"

	objExcel.Columns[nstol].ColumnWidth = 12

	ENDIF

	IF thisform.ch_firm.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Фирма-производитель"

	objExcel.Columns[nstol].ColumnWidth = 25

	ENDIF

	IF thisform.ch_model.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Модель"

	objExcel.Columns[nstol].ColumnWidth = 10 

	ENDIF

	IF thisform.ch_inv_number.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Инвентарный номер"

	objExcel.Columns[nstol].ColumnWidth = 25

	ENDIF

	IF thisform.container2.ch_height_gate.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Высота ворот"

	objExcel.Columns[nstol].ColumnWidth = 15

	ENDIF

	IF thisform.container2.ch_kind_gate.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Вид ворот"

	objExcel.Columns[nstol].ColumnWidth = 20

	ENDIF

	IF thisform.container2.Ch_shirina_gate.Value = 1

	nstol = nstol+1

	objExcel.Cells(3,nstol).select

	objExcel.Cells(3,nstol).Font.Bold=.T.

	objExcel.Cells(3,nstol).Value="Ширина ворот"

	objExcel.Columns[nstol].ColumnWidth = 15

	ENDIF

	IF nstol>0

	tt1 = ""+CHRTRAN(objExcel.Cells(1,1).Address,"$","")

	tt2 = ""+CHRTRAN(objExcel.Cells(1,nstol).Address,"$","")

	WITH objExcel&&cel

	WITH .Range(tt1+":"+tt2)

	WITH .Font

	Name = "Arial Cyr"

	FontStyle = "полужирный"

	Size = 14

	ENDWITH

	HorizontalAlignment = 3

	VerticalAlignment = 1

	WrapText = .F.

	Orientation = 0

	AddIndent = .F.

	IndentLevel = 0

	ShrinkToFit = .F.

	MergeCells = .F.

	Merge

	ENDWITH

	Range("A1").Value = "Данные о партиях футбольных ворот"

	ENDWITH

	ENDIF

	stroka=3

	stolbic=1

	SELECT my_tab

	SCAN

	stroka=stroka+1

	temp_j = stolbic

	IF thisform.ch_code.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = my_tab.code_obj

	temp_j = temp_j +1

	ENDIF

	IF thisform.ch_date_arrival.Value= 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = my_tab.date

	temp_j = temp_j +1

	ENDIF

	IF thisform.ch_balance.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = my_tab.balance

	temp_j = temp_j +1

	ENDIF

	IF thisform.ch_kol.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value =my_tab.kol

	temp_j = temp_j +1

	ENDIF

	IF thisform.ch_firm.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = my_tab.firm

	temp_j = temp_j +1

	ENDIF

	IF thisform.ch_model.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = my_tab.model

	temp_j = temp_j +1

	ENDIF

	IF thisform.ch_inv_number.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = my_tab.inv_number

	temp_j = temp_j +1

	ENDIF

	IF thisform.container2.ch_height_gate.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value = STR(my_tab.height_gate)

		temp_j = temp_j +1

	ENDIF

	IF thisform.container2.ch_kind_gate.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value =my_tab.kind

	temp_j = temp_j +1

	ENDIF

	IF thisform.container2.Ch_shirina_gate.Value = 1

	objExcel.Cells(stroka,temp_j ).select

	objExcel.Cells(stroka,temp_j ).Value =STR(my_tab.shirina)

	temp_j = temp_j +1

	ENDIF

	ENDSCAN

	IF nstol>0

	tt1 = ""+CHRTRAN(objExcel.Cells(3,1).Address,"$","")

	tt2 = ""+CHRTRAN(objExcel.Cells(stroka,nstol).Address,"$","")

	WITH objExcel

	WITH .Range(tt1+":"+tt2)

	WITH .Font

	.Name = "Arial Cyr"

	Size = 10

	ENDWITH

	HorizontalAlignment = 3

	ENDWITH

	ENDWITH

	ENDIF

	With objExcel.Range(tt1+":"+tt2) 

	Borders(1).LineStyle = 0 

	Borders(2).LineStyle = 0

	With .Borders(1) 

	LineStyle = 1

	Weight = 2

	ENDWITH

	With .Borders(2)

	Weight = 2

	ENDWITH

	With .Borders(3) 

	LineStyle = 1

	Weight = 2

	ENDWITH

	With .Borders(4)

	LineStyle = 1

	Weight = 2

	ENDWITH

	ENDWITH

	

	
Приложение В

	

	Текст программы для заполнения таблиц записями

	

	IF NOT USED([Arrival_object])

	USE Arrival_object IN 0

	ENDIF

	IF NOT USED([inventar])

	USE inventar IN 0

	ENDIF

	IF NOT USED([out_inventar])

	USE out_inventar IN 0

	ENDIF

	IF NOT USED([techno])

	USE techno IN 0

	ENDIF

	IF NOT USED([firm_techno])

	 USE firm_techno IN 0

	ENDIF

	IF NOT USED([firm_inv])

	USE firm_inv IN 0

	ENDIF

	IF NOT USED([techno_model])

	USE techno_model IN 0

	ENDIF

	IF NOT USED([Mebel])

	USE Mebel IN 0

	ENDIF

	IF NOT USED([invnum_inv])

	USE invnum_inv IN 0

	ENDIF

	IF NOT USED([invnum_tec])

	USE invnum_tec IN 0

	ENDIF

	IF NOT USED([invnum_meb])

	USE invnum_meb IN 0

	ENDIF

	IF NOT USED([datevidachi_table])

	USE datevidachi_table IN 0

	ENDIF

	IF NOT USED([balls])

	USE balls IN 0

	ENDIF

	IF NOT USED([gate])

	USE gate IN 0

	ENDIF

	IF NOT USED([kind_gate])

	USE kind_gate IN 0

	ENDIF

	IF NOT USED([shir_and_height_gate])

	USE shir_and_height_gate IN 0

	ENDIF

	IF NOT USED([trenager])

	USE trenager IN 0

	ENDIF

	IF NOT USED([TV])

	USE TV IN 0

	ENDIF

	IF NOT USED([refrigerator])

	USE refrigerator IN 0

	ENDIF

	IF NOT USED([vacuum_cleaner])

	USE vacuum_cleaner IN 0

	ENDIF

	IF NOT USED([bed])

	USE bed IN 0

	ENDIF

	IF NOT USED([shkaf])

	USE shkaf IN 0

	ENDIF

	IF NOT USED([table])

	USE table IN 0

	ENDIF

	IF NOT USED([tumbochka])

	USE tumbochka IN 0

	ENDIF

	j=0

	k=0

	SELECT arrival_object

	FOR i=1 TO 1200000

	APPEND BLANK

	replace code_obj WITH ALLTRIM(STR(i))

	k=k+1

	IF(k<10)

	k = k+1

	ELSE 

	k =5

	ENDIF 

	replace kol WITH k

	replace balance WITH k*5.8

	SELECT datevidachi_table

	IF NOT EOF()

	replace arrival_object.date WITH date_v

	SKIP

	ELSE

	SKIP -(RECNO())

	replace arrival_object.date WITH date_v

	SKIP

	ENDIF

	SELECT arrival_object

	ENDFOR

	**************************************

	kol=0

	j=1

	SELECT arrival_object

	GO 1

	DO WHILE NOT EOF()

	SELECT inventar

	APPEND BLANK

	replace code_obj WITH arrival_object.code_obj

	kol = arrival_object.kol

	SELECT invnum_inv

	DO WHILE (kol!=0)

	APPEND BLANK

	replace inv_number WITH STR(j)

	replace code_obj WITH arrival_object.code_obj

	j=j+1

	kol=kol-1

	ENDDO

	SELECT firm_inv

	IF NOT EOF()

	replace inventar.firm WITH firm_inv

	SKIP

	ELSE 

	GO 1

	replace inventar.firm WITH firm_inv

	SKIP

	ENDIF 

	SELECT techno_model

	IF NOT EOF()

	replace inventar.model WITH model

	SKIP

	ELSE 

	GO 1

	replace inventar.model WITH model

	SKIP

	ENDIF 

	******** 

	SELECT Arrival_object

	SKIP

	IF NOT EOF()

	SELECT Techno

	APPEND BLANK

	replace code_obj WITH arrival_object.code_obj

	SELECT firm_techno

	IF NOT EOF()

	replace Techno.firm_marka WITH firm_marka

	SKIP

	ELSE 

	GO 1

	replace Techno.firm_marka WITH firm_marka

	SKIP

	ENDIF 

	SELECT techno_model

	IF NOT EOF()

	replace Techno.model WITH model

	SKIP

	ELSE 

	GO 1

	replace Techno.model WITH model

	SKIP

	ENDIF 

	********* 

	SELECT Arrival_object

	SKIP

	IF NOT EOF()

	SELECT Mebel

	APPEND BLANK

	replace code_obj WITH arrival_object.code_obj

	********

	SELECT Arrival_object

	SKIP

	ENDIF

	ENDIF

	ENDDO

	&&заполнение таблиц "Спортивный инвентарь"

	SELECT inventar

	GO 1

	DO WHILE NOT EOF()

	SELECT balls

	APPEND BLANK

	replace code_obj WITH inventar.code_obj

	******** 

	SELECT inventar

	SKIP

	IF NOT EOF()

	SELECT gate

	APPEND BLANK

	replace code_obj WITH inventar.code_obj

	SELECT kind_gate

	IF NOT EOF()

	replace gate.kind WITH kind_gate

	SKIP

	ELSE 

	GO 1

	replace gate.kind WITH kind_gate

	SKIP

	ENDIF 

	SELECT shir_and_height_gate

	IF NOT EOF()

	replace gate.height_gate WITH height

	replace gate.shirina WITH shirina 

	SKIP

	ELSE 

	GO 1

	replace gate.height_gate WITH height

	replace gate.shirina WITH shirina 

	SKIP

	ENDIF 

	********* 

	SELECT inventar

	SKIP

	IF NOT EOF()

	SELECT trenager

	APPEND BLANK

	replace code_obj WITH inventar.code_obj 

	SELECT inventar

	SKIP

	ENDIF 

	ENDIF

	ENDDO

	&&заполнение таблиц "Техника"

	SELECT techno

	GO 1

	DO WHILE NOT EOF()

	SELECT TV

	APPEND BLANK

	replace code_obj WITH techno.code_obj

	******** 

	SELECT techno

	SKIP

	IF NOT EOF()

	SELECT refrigerator

	APPEND BLANK

	replace code_obj WITH techno.code_obj

	********* 

	SELECT Techno

	SKIP

	IF NOT EOF()

	SELECT vacuum_cleaner

	APPEND BLANK

	replace code_obj WITH techno.code_obj

	********

	SELECT techno

	SKIP

	ENDIF

	ENDIF

	ENDDO

	&&заполнение таблиц "Мебель"

	SELECT Mebel

	GO 1

	DO WHILE NOT EOF()

	SELECT bed

	APPEND BLANK

	replace code_obj WITH Mebel.code_obj

	******** 

	SELECT Mebel

	SKIP

	IF NOT EOF()

	SELECT shkaf

	APPEND BLANK

	replace code_obj WITH mebel.code_obj

	********* 

	SELECT Mebel

	SKIP

	IF NOT EOF()

	SELECT table

	APPEND BLANK

	replace code_obj WITH mebel.code_obj

	********

	SELECT Mebel

	SKIP

	IF NOT EOF()

	SELECT tumbochka

	APPEND BLANK

	replace code_obj WITH mebel.code_obj

	SELECT Mebel

	SKIP

	ENDIF 

	ENDIF

	ENDIF

	ENDDO

	&&Заполнение таблиц "инвентарный номер"

	kol=0

	SELECT inventar 

	GO 1

	SELECT invnum_inv 

	GO 1

	SELECT techno 

	GO 1

	SELECT mebel 

	GO 1

	SELECT arrival_object

	GO 1

	&&Заполнение таблиц списанных "объектов"

	SELECT invnum_inv 

	DO WHILE NOT EOF()

	SELECT out_inventar

	APPEND BLANK

	replace inv_number WITH invnum_inv.inv_number

	SELECT invnum_inv 

	SKIP 10

	ENDDO 

	IF NOT USED([invnum_inv])

	USE invnum_inv IN 0

	ENDIF

	IF NOT USED([inv_in_zal])

	USE inv_in_zal IN 0

	ENDIF

	IF NOT USED([type_zal])

	USE type_zal IN 0

	ENDIF

	IF NOT USED([pomeshenie])

	USE pomeshenie IN 0

	ENDIF

	IF NOT USED([zal])

	USE zal IN 0

	ENDIF

	IF NOT USED([pomeshenie_naznach])

	USE pomeshenie_naznach IN 0

	ENDIF

	IF NOT USED([datevidachi_table])

	USE datevidachi_table IN 0

	ENDIF

	SELECT pomeshenie

	DELETE ALL

	PACK 

	SELECT zal

	DELETE ALL

	PACK 

	SELECT inv_in_zal

	DELETE ALL

	PACK 

	SELECT pomeshenie_naznach

	GO 1

	SELECT pomeshenie

	FOR i=1 TO 2000

	APPEND BLANK

	replace pomeshenie.num_p WITH i

	SELECT pomeshenie_naznach

	IF NOT EOF()

	replace pomeshenie.naznach WITH naznach

	SKIP

	ELSE

	SKIP -(RECNO())

	replace pomeshenie.naznach WITH naznach

	SKIP

	ENDIF 

	******************* 

	IF ALLTRIM(pomeshenie.naznach)="Спортивный зал" 

	SELECT zal

	APPEND BLANK

	replace num_p WITH pomeshenie.num_p

	SELECT type_zal

	IF NOT EOF()

	replace zal.type_zal WITH type_zal

	SKIP

	ELSE 

	SKIP -(RECNO())

	replace zal.type_zal WITH type_zal

	SKIP

	ENDIF 

	ENDIF 

	**************

	SELECT pomeshenie

	ENDFOR 

	SELECT invnum_inv

	GO 1

	DO WHILE NOT EOF()

	SELECT inv_in_zal

	APPEND blank

	replace inv_number WITH invnum_inv.inv_number

	SELECT invnum_inv

	SKIP

	SELECT zal

	IF NOT EOF()

	replace inv_in_zal.num_p WITH num_p

	SKIP

	ELSE

	SKIP -(RECNO())

	replace inv_in_zal.num_p WITH num_p

	SKIP

	ENDIF

	SELECT datevidachi_table

	IF NOT EOF()

	replace inv_in_zal.date WITH date_v

	SKIP

	ELSE 

	SKIP -(RECNO())

	replace inv_in_zal.date WITH date_v

	SKIP

	ENDIF

	SELECT invnum _ inv

	ENDDO 

	В3. Заполнение таблиц «Общая информация и игроки»

	IF NOT USED([Person])

	USE Person IN 0

	ENDIF

	IF NOT USED([fam_table])

	USE fam_table IN 0

	ENDIF

	IF NOT USED([im_table])

	USE im_table IN 0

	ENDIF

	IF NOT USED([otch_table])

	USE otch_table IN 0

	ENDIF

	IF NOT USED([datevidachi_table])

	USE datevidachi_table IN 0

	ENDIF

	IF NOT USED([dateborn])

	USE dateborn IN 0

	ENDIF

	IF NOT USED([Country])

	USE Country IN 0

	ENDIF

	IF NOT used([street])

	USE street IN 0

	ENDIF

	SELECT Person 

	*GO 1

	FOR i=1000 TO 1010

	FOR j=100000 TO 100010

	APPEND BLANK 

	replace sp WITH i 

	replace np WITH j 

	replace numstreet WITH i-990 

	replace numflat WITH j-99990

	SELECT Fam_table 

	IF EOF() 

	SKIP -(RECNO()) 

	replace Person.fam WITH fam

	SKIP 

	ELSE

	replace Person.fam WITH fam

	SKIP 

	ENDIF

	SELECT Im_table

	IF EOF()

	SKIP -(RECNO())

	replace Person.im WITH im

	skip

	ELSE

	replace Person.im WITH im

	SKIP 

	ENDIF

	SELECT Otch_table

	IF EOF()

	SKIP -(RECNO())

	replace Person.otch WITH otch

	skip

	ELSE

	replace Person.otch WITH otch

	SKIP 

	ENDIF

	SELECT Datevidachi_table

	IF EOF()

	SKIP -(RECNO())

	replace Person.datevidachi WITH date_v

	skip

	ELSE

	replace Person.datevidachi WITH date_v

	SKIP 

	ENDIF

	SELECT Country

	IF EOF()

	SKIP -(RECNO())

	replace Person.country WITH country

	replace Person.city WITH city

	ELSE

	replace Person.country WITH country

	replace Person.city WITH city

	SKIP 

	ENDIF

	SELECT Street

	IF EOF()

	SKIP -(RECNO())

	replace Person.Street WITH Street

	ELSE

	replace Person.Street WITH Street

	SKIP 

	ENDIF 

	SELECT Dateborn

	IF EOF()

	SKIP -(RECNO())

	replace Person.dateborn WITH date_b

	skip

	ELSE

	replace Person.dateborn WITH date_b

	SKIP 

	ENDIF

	SELECT Person

	ENDFOR

	ENDFOR

	browse