База данный Хозяйственный учет футбольного клуба
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
‹‹Курский государственный технический университет››
Кафедра программного обеспечения вычислительной техники
КУРСОВАЯ РАБОТА
по дисциплине ‹‹Базы данных››
на тему ‹‹Хозяйственный учет футбольного клуба››
Специальность 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 ;
Риунок 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)
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
Нравится материал? Поддержи автора!
Ещё документы из категории информатика:
Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.
После чего кнопка «СКАЧАТЬ» станет доступной!
Кнопочки находятся чуть ниже. Спасибо!
Кнопки:
Скачать документ