Разработка базы данных учета материально-технического оснащения кабинета специальной технологи

Московский Инженерно-Физический Институт

(Государственный университет)







Пояснительная записка к курсовому проекту

По теме:”Разработка базы данных учета материально-технического оснащения кабинета специальной технологии колледжа №32 г.Москвы”



                 

Научный руководитель: Кудрявцев К.Я.



















Выполнила 

Студентка группы К7-361

Панова Юлия





Москва, 2005 год


ОГЛАВЛЕНИЕ

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

	Литература	- 4 -

	Отзыв о работе студента	- 4 -

	Теоретическая часть	- 5 -

	Реляционные базы данных	- 6 -

	Visual FoxPro.	- 6 -

	Объекты Visual FoxPro	- 8 -

	Что должна содержать база данных, чтобы сделать ее макс. эффективной?	- 10 -

	Почему СУБД FoxPro?	- 11 -

	Практическое выполнение учебно-исследовательской работы.	- 12 -

	Техническое задание на курсовой проект.	- 13 -

	Реляционная  модель базы данных.	- 14 -

	Создание таблиц	- 17 -

	Создание форм	- 19 -

	Форма “Главная форма”	- 19 -

	Форма “Уроки”	- 20 -

	Форма “Уроки (добавить новый)”	- 21 -

	Форма “Информация по курсу”	- 22 -

	Форма “Раздаточные материалы”	- 23 -

	Форма “Кассеты”	- 25 -

	Запросы	- 26 -

	Создание отчетов	- 28 -

	Листинги обработчиков	- 30 -

	Заключение по работе	- 39 -






        



 

         МОСКОВСКИЙ  ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ  ИНСТИТУТ                                                                                                                           

                                   (ГОСУДАРСТВЕННЫЙ  УНИВЕРСИТЕТ)

      



Кафедра   ИНФОРМАЦИОННЫЕ  ТЕХНОЛОГИИ









ТЕХНИЧЕСКОЕ  ЗАДАНИЕ

на  учебно-исследовательскую  работу  и  курсовое

проектирование





Студентки  группы К7-361_Пановой Юлии



                                                      

                                                                                                   

Тема:



Разработка базы данных учета материально-технического оснащения кабинета специальной технологии колледжа №32 г.Москвы в среде Visual FoxPro



Содержание  технического  задания:



Изучение литературы о возможностях и перспективах дальнейшего развития СУБД Visual FoxPro 8.0., о языке программирования FoxPro.

Изучение структурированного языка запросов SQL.

Изучение особенностей предметной области.

Проектирование базы данных (создание реляционной модели)

Создание основных элементов базы данных: таблиц, форм, отчетов, запросов.

Разработка обработчиков событий на языке FoxPro.























Приборы  для  эксперимента:



СУБД VisualFoxPro8.0







                                               









ЛИТЕРАТУРА





Microsoft Visual FoxPro О. В. Бартеньев Диалог-МИФИ Москва 2005г.

Visual FoxPro С. Каратыгин А. Тихонов Л. Тихонова Издательство БИНОМ Москва 1999 

http://www.firststeps.ru/foxpro/fx/fx1.html

http://omck.info/1subd.php

http://www.computerbooks.ru/books/Programming/Book-FoxPro-7/index.html

http://www.compdoc.ru/bd/foxpro/

http://www.linksoft.ru/working.html  

                     

Место  выполнения  УИР  и  КП_____каф.36__________________________



Руководитель________________________(Кудрявцев К. Я.)



Дата  выдачи  задания  ”____”__________________200__ г.









ОТЗЫВ  О  РАБОТЕ  СТУДЕНТА



__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

__________________________________________________________________________________________________________________________________________________________





















Руководитель__________________________”______”__________________200_г.









Теоретическая часть


Реляционные базы данных

В 1970 году статья научного сотрудника компании IBM доктора Е. Ф. Коддао реляционной модели данных произвела революцию в подходе к хранению и обработке информации. На основе этой модели в семидесятые годы были разработаны первые реляционные базы данных, а в настоящее время они рассматриваются как стандарт для современных коммерческих СУБД. 

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

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

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

Visual FoxPro.

        Visual FoxPro - не просто следующая версия одной из наиболее быстрых СУБД для персональных компьютеров. Это совершенно новая программа, которая легко позволяет сделать то, что в предыдущих версиях давалось с величайшим трудом или было просто недоступно. 
        Интерфейс Visual FoxPro отвечает представлениям о современной графической среде, напоминая интерфейс иных программ Microsoft. Здесь основная работа с данными выполняется с помощью различных инструментальных средств, поэтому команды меню часто имеют вспомогательный характер и их состав гибко меняется в зависимости от того, какое средство активно в данный момент.
        Отличительные черты Visual FoxPro можно описать следующим образом:

1. Обеспечение возможности быстрой разработки прикладной программы базируется на включении средств, которые позволяют повысить скорость работы программиста. В первую очередь это средства объективно-ориентировочного программирования, позволяющие пользователю формировать компоненты своего проекта (объекта), которые затем могут многократно использоваться. Кроме того, объекты могут быть созданы с помощью визуальных средств и визуально использоваться в любое время.

2. Обеспечение полного набора средств для управления событиями. 

3. Обеспечение мощного набора инструментальных средств для программиста.
Разработчики систем автоматизации обработки данных, кроме мощного набора визуальных средств проектирования могут использовать широкие возможности по интеграции систем хранения данных и доступа к серверам данных с помощью технологии ODBC. Основные новшества - это расширение встроенного языка SQL, возможность обновления данных на сервере через редактирование курсоров, встроенный механизм обеспечения транзакций, возможность обращения к серверу на том диалекте SQL, который поддерживает сервер. Наличие словаря данных делает более быстрой разработку структуры баз данных и облегчает ее дальнейшую эксплуатацию и поддержку.

4. Обеспечение полной интеграции Visual FoxPro  в семейство прикладных программ Micrpоsoft. Единый интерфейс с наиболее популярными прикладными программами Microsoft делает работу в интерактивном режиме интуитивно понятной. Поддержка правой кнопки мыши позволяет избежать долгих путешествий по системе меню и значительно облегчает изучение новых возможностей СУБД. Просто выберите курсором объект и нажмите правую кнопку мыши. На некоторых диалоговых окнах, которые часто используются в работе на полосе заголовка, появился переключатель в виде анимационной пиктограммы (push pin), позволяющий легко включить режим, при котором это окно будет всегда расположено на переднем плане. Visual FoxPro обеспечивает полную поддержку OLE 2.0, что облегчает взаимодействие с другим программным обеспечением в среде WINDOWS. Помимо оставшейся возможности загрузки внешних функций посредством команды SET LIBRARY появилась возможность обращения к функциям динамических DLL библиотек WINDOWS посредством команды DECLARE.

5. Совместимость с ранее разработанным обеспечением в среде FoxPro.



Основные преимущества

Основное назначение

Visual FoxPro

Высокий уровень объектной модели. Высокая скорость обработки данных. Интеграция объектно-ориентированного языка программирования с Xbase и SQL. Многоплатформенность.

Создание приложений масштаба предприятия. Создание приложений для работы на различных платформах (Windows 3.x, Windows 95, Macintosh и т. д.)













Объекты Visual FoxPro 

Visual FoxPro состоит из отдельных компонентов, которые используются для хранения информации, ее отображения и редактирования. В Visual FoxPro вся информация хранится в базе данных, которая состоит из таблиц, отношений между таблицами, индексов, триггеров и хранимых процедур. Каждая таблица имеет уникальное имя и хранится в отдельном файле, наименование которого совпадает с именем таблицы. Созданный файл имеет расширение DBF. 

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

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

Для отображения и редактирования данных используются формы, отчеты, запросы и программы. При создании форм, отчетов и запросов применяются конструкторы. Поэтому эти компоненты часто называют конструкторскими объектами. Формы и отчеты являются составными объектами, т. к. они состоят из более мелких объектов (таких как поля, кнопки, диаграммы, рамки, OLE - компоненты и т. п.), которые называются объектами интерфейса. 

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

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

Запросы являются средством выборки данных из одной или нескольких таблиц. В Visual FoxPro для создания запроса вы можете использовать как конструктор запросов, так и специализированный язык Structured Query Language (SQL). Результаты выполнения запроса могут отображаться в форме, выводиться в виде отчетов и диаграмм или сохраняться в указанной вами таблице. 

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

Для создания форм в Visual FoxPro можно использовать не только базовые классы, но и создавать собственные. Например, вы можете определить класс форм, в котором задан определенный цвет фона и стандартный набор кнопок для управления данными. Чтобы стандартизировать разработку, полезно иметь один или несколько пользовательских классов для каждого базового класса. Классы, созданные в Visual FoxPro, хранятся в библиотеках классов. 

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

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

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

















Таблица 1. Расширения имен файлов объектов Visual FoxPro 

Наименование объекта 

Расширения 

Проект 

PRJ, FPC, CAT, PJX, PJT 

База данных 

DBC 

Таблица Visual FoxPro 

DBF 

Составной индексный файл 

CDX 

Memo-поле и поле типа General 

FRT 

Форма 

sex 

Запрос 

QPR 

Отчет 

FRX, FRM 

Почтовая наклейка 

LBX, LBL 

Меню 

MNX 

Библиотека класса 

VCX 

Программа, библиотека программ,текст меню, текст запроса 

PRG, FXP, MPR, QPR 

Рисунок 

BMP, JPG, GIF, ICO, DIB, CUR, ANI 

Звукозапись 

WAV 



Что должна содержать база данных, чтобы сделать ее максимально эффективной?

Существует очень простое понятие БД как большого по объему хранилища, в которое организация помещает все используемые ею данные и из которого различные пользователи могут их получать, используя различные приложения. Такая единая база данных представляется идеальным вариантом, хотя на практике это решение по различным причинам труднодостижимо. Поэтому чаще всего под базой данных понимают любой набор хранящихся в компьютере взаимосвязанных данных.
        В основу проектирования БД должны быть положены представления конечных пользователей конкретной организации - концептуальные требования к системе. Именно конечный пользователь в своей работе принимает решения с учетом получаемой в результате доступа к базе данных информации. От оперативности и качества этой информации будет зависеть эффективность работы организации. Данные, помещаемые в базу данных, также предоставляет конечный пользователь. 
        При рассмотрении требований конечных пользователей необходимо принимать во внимание следующее:

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



Почему СУБД FoxPro?

FoxPro - одна из наиболее эффективных настольных СУБД. Данный продукт принадлежит компании Microsoft и тесно интегрирован с другими его продуктами. Единый интерфейс с наиболее популярными прикладными программами Microsoft делает работу в интерактивном режиме интуитивно понятной.

FoxPro обладает  собственным внутренним механизмом управления реляционной БД, тесной взаимосвязью между языком и данными, полноценными возможностями объектно-ориентированного программирования и широким спектром функций VFP 8.0 позволяет создавать производительные, масштабируемые БД-ориентированные решения с поддержкой баз данных с таблицами объемом до 2 Гб. При этом VFP 8.0 выгодно отличается от других инструментов Microsoft умеренными системными требованиями и высокой эффективностью разрабатываемых приложений (производительность, размеры БД и программного кода).

Прежде всего VFP остается эффективным инструментом создания универсальных настольных баз данных. Хотя возможности создания баз данных в последних версиях существенно расширены использование VFP для создания мощных систем представляется весьма проблематичным. В качестве таких ограничений можно назвать отсутствие встроенных средств защиты информации (несанкционированный доступ, шифрование данных), обеспечения целостности данных в условиях сбоев, поддержки многопроцессорной обработки и пр. 

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
















Практическое выполнение учебно-исследовательской работы.


Техническое задание на курсовой проект.



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

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

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

Данная задача определена преподавателем специальной технологии колледжа №32 города Москвы Пановой Е.В.(учебный курс предназначен  для поваров-кондитеров)





База данных должна отвечать следующим требованиям:

Ввод информации об уроках по специальной технологии (курс, месяц, номер урока, тема урока).

Ввод информации  о материально-техническом оснащении кабинета:

Кассеты (название кассеты; длительность; номера уроков, к которым относится кассета)

Раздаточные материалы (название раздаточного материалы; вид; номера уроков, к которым относится раздаточный материал)

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

Ввод информации по курсу (курс; количество часов, читаемых по курсу; количество групп, относящихся к курсу)

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

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

Возможность просмотра списка уроков преподаваемых на 1, 2 и 3 курсах (информация должна содержаться в виде отчета). 

Возможность просмотра списка уроков, относящегося к кассете и раздаточному материалу.

Возможность поиска урока по названию его темы.

Возможность сортировки уроков по курсу и номеру урока.

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

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

База данных создается с помощью СУБД FoxPro, необходимые обработчики создаются с использованием языка FoxPro


Реляционная  модель базы данных.







































Рис. 1.Реляционная модель базы данных.



Реляционная модель базы данных представляет собой совокупность таблиц, представляющих объектные множества, поля (строки) которых представляют собой их атрибуты. Для задания связей между таблицами, необходимо определить дополнительные поля, содержащие коды элементов связанных таблиц. Для связи объектных множеств “Уроки” и ”Кассета”, а также “Уроки” и “Раздаточные материалы” вводится дополнительные таблицы связей “ Уроки-Кассеты” и ”Уроки-Раздаточные материалы”типа многие ко многим, содержащие ключевые поля связанных элементов. 



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



Объектное множество “Уроки”

ID урока

Курс

Месяц

Номер урока

Тема урока



Служит для описания уроков предмета спец. технологии.



Объектное множество “Кассеты” 

ID кассеты

Название кассеты

Длительность кассеты



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



Объектное множество “Раздаточные материалы” 

ID раздаточного материала

Название раздаточного материала

Вид раздаточного материала



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



Объектное множество “Уроки-Кассеты”

ID кассеты

ID урока



Служит для связи двух объектных множеств “Уроки” и ”Кассеты” (реализация связи многие ко многим).



Объектное множество “Уроки-Раздаточные материалы” 

ID раздаточного материала

ID урока



Служит для связи двух объектных множеств “Уроки” и ”Раздаточные материалы” (реализация связи многие ко многим).



Объектное множество “Курс”

Курс

Количество часов

Количество групп



Служит для описания дополнительной информации, относящейся курсу.





Между объектными множествами установлены отношения:



Объектное множество “Уроки” связано с объектным множеством “Уроки-Кассеты” отношением один ко многим, так как для каждого урока может существовать несколько кассет, относящихся к данному уроку. 



Объектное множество “Кассеты” связано с объектным множеством “Уроки-Кассеты” отношением один ко многим, так как каждая кассета может относиться к нескольким урокам.



Объектное множество “Уроки” связано с объектным множеством “Уроки-Раздаточные материалы” отношением один ко многим, так как для каждого урока может существовать несколько раздаточных материалов, относящихся к данному уроку. 



Объектное множество “Раздаточные материалы” связано с объектным множеством “Уроки-Раздаточные материалы” отношением один ко многим, так как каждый раздаточный материал может относиться к нескольким урокам.



Объектное множество “Курс” связано с объектным множеством “Уроки” отношением один ко многим, так как к каждому курсу относится несколько уроков, тогда как каждый урок однозначно принадлежит определенному курсу.




Создание таблиц.

Все таблицы создаются в режиме конструктора. 

Основные параметры, используемые в таблицах БД:

Название поля

Тип поля

Ширина поля

Наличие индексации поля

Основная особенность данной БД заключается в том, что все таблицы являются свободными.





























	     Рис. № 2 Вид таблицы “Уроки” в режиме конструктора

	

	





	     Рис. №3 Вид таблицы “Кассеты” в режиме конструктора

	

	

	 Рис. № 4 Вид таблицы “Раздаточные материалы” в режиме конструктора



	Рис. №5  Вид таблицы “Курс ” в режиме конструктора

	

	



	Рис. № 6 Вид таблицы “Уроки-кассеты ” в режиме конструктора







Рис. №7 Вид таблицы “Уроки-Раздаточные материалы ” в режиме конструктора


Создание форм



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

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







Форма “Главная форма”











































Рис. №8 Форма “Главная форма”



	При запуске программы перед пользователем появляется “Основная форма”, показывающая ссылки (кнопки) на основные компоненты БД и позволяющая быстро переместится в интересующую его область.

	Кнопки формы:

	Кнопка “Уроки” закрывает данную форму и открывает форму “Уроки”

	Кнопка “Метод. материалы” закрывает данную форму и открывает форму “Методические материалы”

	Кнопка “Кассеты” закрывает данную форму и открывает форму “Кассеты”

	Кнопка “Выход” завершает работу программы.


Форма “Уроки”



























































Рис. №9 Форма “Уроки”





	Форма “Уроки” является простой однотабличной формой (основанной на таблице “Уроки”), созданной в режиме конструктора. Служит для удобного просмотра необходимой информации по урокам. Требование к виду и типу информации приведены ранее в техническом задании к учебно-исследовательской работе.

	Форма позволяет:

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

	удалять записи

	обновлять записи

	изменять любые данные, кроме идентифицирующего номера

	сортировать уроки по курсу или по его номеру

	осуществить поиск нужного урока по названию его темы

	выбрать и распечатать на экран необходимые данные к уроку

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

	Кнопки формы:

	Кнопка “Поиск” осуществляет поиск нужного урока по названию его темы (или по введенным первым символам темы). Если данное поле найдено в списке, для продолжения поиска, необходимо нажать кнопку “Далее”.

	Кнопка “Далее” продолжает поиск нужного урока в списке.

	Кнопка “Обновить”  позволяет обновить данные в форме.

	Кнопка “Выход”  закрывает данную форму и открывает “Основную”.

	Кнопка “Просмотреть информацию по курсу” открывает новую форму “Курс”

	Кнопка “Добавить” открывает новую форму “Уроки (добавить новый)”

	Кнопка “Удалить” удалят запись по идентифицирующему номеру урока

	Кнопка “Изменить” позволяет изменять любые данные, кроме идентифицирующего номера урока

	Кнопка “Показать” выводит на экран список необходимой информации по урокам

	Кнопка “Сохранить” сохраняет измененные данные (кнопка невидима до тех пор, пока пользователь не нажал кнопку “Изменить”)

	по кассетам: выводит список кассет, относящихся к данному уроку.

	по раздаточным материалам: выводит список раздаточных материалов,         относящихся к уроку

	список уроков за месяц: выводит список уроков, проведенных за месяц.

	                

	

	Форма “Уроки (добавить новый)”































	

Рис. №10 Форма “Уроки (добавить новый)”

	

	Форма “Уроки (добавить новый)”  является простой однотабличной формой (основанной на таблице “Уроки”), созданной в режиме конструктора.

	Форма позволяет:

	Вносить новые данные по урокам

	Поля формы:

	поле курс: содержит перечень курсов (1,2,3)

	поле месяц: содержит список учебных месяцев (сентябрь-май)

	поле номер урока: определяет номер урока

	поле количество внесенных уроков: заполняется автоматически согласно выбору курса

	поле тема урока: определяет название темы урока

	Кнопки формы:

Кнопка “Сохранить” сохраняет внесенные в форму данные.

Кнопка “Выход” закрывает данную форму.

	
Форма “Информация по курсу”























	

Рис. №11 Форма “Информация по курсу”

			

	Форма “ Информация по курсу”  является простой однотабличной формой (основанной на таблице “Курс”), созданной в режиме конструктора.

	Форма позволяет:

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

	изменять данные

	формирует список проведенных уроков за курс

	Кнопки формы:

	Кнопка “Изменить” позволяет изменять любые данные, кроме курса

Кнопка “Сохранить” сохраняет внесенные изменения.

Кнопка “Выход” закрывает данную форму.

	Кнопка “Отчет по курсу” формирует список проведенных уроков за курс























































Форма “Раздаточные материалы”





























































Рис. №12 Форма “Раздаточные материалы”





Данная конструкция основана на понятии набора форм (FormSet). Использование набора необходимо для синхронизации форм “Раздаточные материалы” и “Таблица уроков” .

	В конструкции используются три таблицы “Уроки”, “Раздаточные материалы” и “Уроки-Раздаточные материалы”. Набор создается в режиме конструктора. Требование к виду и типу информации приведены ранее в техническом задании к учебно-исследовательской работе.

	Форма “Раздаточные материалы” позволяет:

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

	добавить новый раздаточный материал

	удалить раздаточный материал

	прикрепить данный раздаточный материал к определенному уроку.

	открепить  данный раздаточный материал от урока.

	сохранить данные

	просмотреть список, относящихся к материалу, уроков

	Поля формы

	поле ID материала: идентификационный номер материала, при добавлении нового генерируется автоматически

	поле название материала: определяет название раздаточного материала

	поле вид материала: определяет вид раздаточного материала 

	поле список уроков, относящихся к уроку: выводит соответствующий список

	Кнопки формы:

	Кнопка ”Первая” возвращает указатель на первый элемент из списка

	Кнопка ”Последняя” возвращает указатель на последний элемент из списка 

	Кнопка ”Следующая” переводит указатель на следующий элемент по списку

	Кнопка ”Предыдущая” возвращает указатель на предыдущий элемент из списка значений.

	Кнопка ”Добавить” очищает поля ввода, причем после нажатие этой кнопки остальные кнопки становятся недоступными, за исключением кнопок   ”Удалить” и ”Сохранить”. Если после нажатия кнопки ”Добавить”, пользователь передумал вносить новые данные, для выхода из этого режима необходимо нажать кнопку ”Удалить”, если запись все же нужно внести, после заполнения полей необходимо нажать кнопку “Сохранить”, тогда данные будут сохранены в таблице. 

	Кнопка “Удалить” удаляет разд. материал, разрывая все существующие связи с уроками.

	Кнопка “Сохранить” сохраняет измененные данные

	Кнопка “Выход” закрывает набор форм и возвращается к основной форме

	Кнопка “Показать таблицу уроков” делает видимой форму “Таблица уроков”, данная форма необходима, для определение идентификационного номера урока, к которому пользователь желает отнести урок или, наоборот, открепить от урока.

	Кнопка “Открепить от урока” открепляет данный раздаточный материал от урока

	Кнопка “Прикрепить к уроку” прикрепляет данный раздаточный материал к уроку

	

	Форма “Таблица уроков” позволяет:

	Показать таблицу уроков

	Кнопки формы:

	Кнопка “Скрыть таблицу” делает форму невидимой

































Форма “Кассеты”





























































	Рис. №13 Форма “Кассеты”

	

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

	используются три таблицы “Уроки”, “Кассеты” и “Уроки-Кассеты”.

	























Запросы















Рис. №14 запрос“Поиск”



Рис. №15 запрос “Удаление урока”



		











Рис. №16 запрос  “Список уроков за месяц”







		







Рис. №17 запрос“Прикрепление и открепления урока от материала”

















	Рис. №18 запрос “Список уроков за курс”

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

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

Для поиска урока в соответствующие поле вводиться тема урока или ее начальные символы.

	
Создание отчетов.

	

	Все отчеты создавались в режиме конструктора. Данные отчета отвечают требованиям запросов. Каждый отчет дополнительно содержит номера страниц. Отчет “Количество уроков проведенных за месяц” содержит вычисляемое поле “Количество уроков”

	

	

	

	Рис. №19 Отчет “Список кассет, относящихся к данному уроку”

	

	

	Рис. №20 Отчет “Список раздаточных материалов, относящихся к данному уроку”

	

	

	Рис. №21 Отчет “Количество уроков проведенных за месяц”

	

	

	Рис. №22 Отчет “Список уроков за курс”

	

	

	
Листинги обработчиков.

	Обработчик кнопки “Выход” основной формы.

	

	IF MESSAGEBOX('Выйти из программы?', 4 + 32 + 256, 'Выход')=6

	_screen.ActiveForm.Release() 

	

	CLEAR EVENTS

	QUIT 

	ELSE 

	

	_screen.ActiveForm.Refresh() 

	

	ENDIF

	

	Обработчик события сортировки данных таблицы формы “Уроки”.

	

	IF this.Value=1 then

	thisform.DataEnvironment.cursor1.order='kurs_id' 

	

	ELSE

	thisform.DataEnvironment.cursor1.order='num_lesson'

	

	ENDIF

	thisform.grid1.Refresh

	

	Обработчик события кнопки “Поиск” формы “Уроки”.

	

	PUBLIC found_lesson

	

	with thisform

	found_lesson =INPUTBOX('Введите тему урока или ее начало','Поиcк')

	

	IF NOT EMPTY(found_lesson)

	

	&&Задает правила, согласно которым Visual FoxPro сравнивает две строки разной длины

	&&OFF(По умолчанию) Указывает, что выражения будут эквивалентны, если они совпадают посимвольно вплоть до конца выражения, расположенного справа.

	SET EXACT OFF

	s=RECNO()

	LOCATE FOR Uir_tab_lesson.nam_lesson= found_lesson

	

	IF NOT FOUND() THEN && все хорошо и запись (и) найдены

	messagebox('Поиск не дал результатов',48)

	&& Возврат к записи с которой был начат поиск

	GO s

	.Command7.Enabled=.f.

	ELSE

	.command7.Enabled=.t.

	ENDIF 

	ENDIF

	.grid1.setfocus

	ENDWITH

	Обработчик события кнопки “Далее” формы “Уроки”.

	

	

	SET EXACT OFF

	s=RECNO()

	&& Поиск следующей, отвеч. строке поиска записи

	CONTINUE

	IF NOT FOUND() 

	GO s

	This.Enabled= .F.

	ENDIF

	ThisForm.Grid1.SetFocus

	

	Обработчик события кнопки “Обновить” формы “Уроки”.

	

	_screen.ActiveForm. refresh()

	IF thisform.Optiongroup1.Value=1 then

	thisform.DataEnvironment.cursor1.order='kurs_id' 

	

	ELSE

	thisform.DataEnvironment.cursor1.order='num_lesson'

	

	ENDIF

	thisform.grid1.Refresh

	

	Обработчик события кнопки “Показать” формы “Уроки”.

	

	

	IF Thisform.Optiongroup2.Option1.Value=1

	uuu=INPUTBOX('Введите ID урока','Заявка')

	t=val(uuu)

	

	IF EMPTY(uuu)=.f. then

	    SELECT Uir_tab_kasseta.name_kas, Uir_tab_kasseta.time_kas;

	    FROM ;

	    uir_tab_lk INNER JOIN uir_tab_kasseta ;

	    ON  Uir_tab_lk.kass_id = Uir_tab_kasseta.kass_id;

	    WHERE  Uir_tab_lk.lesson_id = t;

	    INTO TABLE time_tab7

	 

	

	    REPORT FORM uir_report7 preview

	

	    SELECT time_tab7

	    DELETE ALL

	    PACK

	 

	ELSE thisform.Refresh

	endif 

	

	ENDIF 

	

	IF Thisform.Optiongroup2.Option2.Value=1

	uuu=INPUTBOX('Введите ID урока','Заявка')

	t=val(uuu)

	

	IF EMPTY(uuu)=.f. then

	    SELECT Uir_tab_mat.name_mat,Uir_tab_mat.vid_mat;

	    FROM uir_tab_lm INNER JOIN uir_tab_mat ;

	    ON  Uir_tab_lm.mat_id = Uir_tab_mat.mat_id;

	    WHERE  Uir_tab_lesson.lesson_id = t;

	     INTO TABLE time_tab8

	

	    REPORT FORM uir_report8 preview

	    SELECT time_tab8

	    DELETE ALL

	    Pack

	

	ELSE thisform.Refresh

	Endif

	

	ENDIF

	

	IF Thisform.Optiongroup2.Option3.Value=1

	PUBLIC uuu_mes

	uuu_mes=INPUTBOX('Введите месяц','Заявка')

	IF EMPTY(uuu_mes)=.f. then

	    SELECT Uir_tab_lesson.kurs_id, Uir_tab_lesson.num_lesson,;

	    Uir_tab_lesson.nam_lesson;

	    FROM uir_tab_lesson;

	    WHERE  Uir_tab_lesson.mes_id = uuu_mes;

	    INTO TABLE time_tab1

	 

	    REPORT FORM uir_report4 preview

	    SELECT time_tab1

	    DELETE ALL

	    PACK

	

	ELSE thisform.Refresh

	Endif

	

	ENDIF

	

	Обработчик события кнопки “Удалить” формы “Уроки”.

	

	uuuz=INPUTBOX('Введите ID урока, который желаете удалить','Удаление записи из таблицы')

	

	IF EMPTY(uuuz)=.f. then

	DO WHILE Type(uuuz)!='N' 

	MESSAGEBOX('Вы ввели некорректное значение (ID числовое значение)')

	uuuz=INPUTBOX('Введите ID урока, который желаете удалить','Удаление записи из таблицы')

	

	ENDDO

	tu=val(uuuz)

	LOCAL ARRAY ss1(20)

	

	SELECT Uir_tab_lesson.nam_lesson;

	FROM uir_tab_lesson;

	WHERE  Uir_tab_lesson.lesson_id =tu;

	INTO ARRAY ss1

	If EMPTY(ss1)

	MESSAGEBOX('Такого значения ID нет в списке данных')

	else

	

	SELECT Uir_tab_lesson

	DELETE;

	FROM Uir_tab_lesson;

	WHERE uir_tab_lesson.lesson_id = tu

	PACK

	 

	SELECT Uir_tab_lm

	DELETE;

	FROM Uir_tab_lm;

	WHERE uir_tab_lm.lesson_id = tu

	PACK

	

	SELECT Uir_tab_lk

	DELETE;

	FROM Uir_tab_lk;

	WHERE uir_tab_lk.lesson_id = tu

	PACK

	

	_screen.ActiveForm.Release() 

	DO FORM uir_les_form8

	

	ENDIF

	

	ELSE Thisform.Refresh

	ENDIF

	

	Обработчик события кнопки “Первая” формы “Раздаточные материалы”.

	

	IF !BOF() 

	GO TOP 

	ENDIF 

	

	_screen.ActiveForm.Refresh() 

	

	ee1=thisform.Text1.Value

	SELECT Uir_tab_lesson.nam_lesson;

	FROM uir_tab_mat INNER JOIN uir_tab_lm ;

	ON  Uir_tab_mat.mat_id = Uir_tab_lm.mat_id ;

	INNER JOIN uir_tab_lesson ;

	ON  Uir_tab_lm.lesson_id = Uir_tab_lesson.lesson_id;

	 WHERE  Uir_tab_mat.mat_id =ee1;

	 INTO ARRAY  less1

	  

	IF ISNULL(less1)

	less1[1]=' '

	ENDIF

	thisform.List1.Refresh

	

	Обработчик события кнопки “Следущая” формы “Раздаточные материалы”.

	

	IF !EOF() 

	SKIP 

	ENDIF 

	

	_screen.ActiveForm.Refresh() 

	

	ee1=thisform.Text1.Value

	SELECT Uir_tab_lesson.nam_lesson;

	FROM uir_tab_mat INNER JOIN uir_tab_lm ;

	ON  Uir_tab_mat.mat_id = Uir_tab_lm.mat_id ;

	INNER JOIN uir_tab_lesson ;

	ON  Uir_tab_lm.lesson_id = Uir_tab_lesson.lesson_id;

	WHERE  Uir_tab_mat.mat_id =ee1;

	 INTO ARRAY  less1

	 

	 IF ISNULL(less1)

	 less1[1]=' '

	 ENDIF

	 thisform.List1.Refresh

	

	Обработчик события кнопки “Предыдущая” формы “Раздаточные материалы”.

	

	IF !BOF ( ) 

	SKIP - 1 

	ENDIF 

	

	_screen. ActiveForm. Refresh () 

	

	

	ee1=thisform.Text1.Value

	

	SELECT Uir_tab_lesson.nam_lesson;

	FROM uir_tab_mat INNER JOIN uir_tab_lm ;

	ON  Uir_tab_mat.mat_id = Uir_tab_lm.mat_id ;

	INNER JOIN uir_tab_lesson ;

	ON  Uir_tab_lm.lesson_id = Uir_tab_lesson.lesson_id;

	WHERE  Uir_tab_mat.mat_id =ee1;

	INTO ARRAY  less1

	 

	 IF ISNULL(less1)

	 less1[1]=' '

	 ENDIF

	thisform.List1.Refresh

	

	Обработчик события кнопки “Последняя ” формы “Раздаточные материалы”.

	

	IF !EOF() 

	GO BOTTOM 

	ENDIF 

	

	_screen.ActiveForm.Refresh( ) 

	

	ee1=thisform.Text1.Value

	SELECT Uir_tab_lesson.nam_lesson;

	FROM uir_tab_mat INNER JOIN uir_tab_lm ;

	ON  Uir_tab_mat.mat_id = Uir_tab_lm.mat_id ;

	INNER JOIN uir_tab_lesson ;

	ON  Uir_tab_lm.lesson_id = Uir_tab_lesson.lesson_id;

	WHERE  Uir_tab_mat.mat_id =ee1;

	INTO ARRAY  less1

	  

	IF ISNULL(less1)

	less1[1]=' '

	ENDIF

	thisform.List1.Refresh

	

	Обработчик события кнопки “Добавить ” формы “Раздаточные материалы”.

	

	PUBLIC new_mat_id as Integer

	SET ORDER TO mat_id

	

	CALCULATE MAX(mat_id) TO new_mat_id

	new_mat_id=new_mat_id+1

	

	CLEAR

	SELECT uir_tab_mat

	APPEND BLANK 

	ThisForm.Text1.Value=new_mat_id

		

	ee=thisform.Text1.Value

	RELEASE less1

	DIMENSION less1(20)

	thisform.List1.Refresh

	_screen.ActiveForm.Refresh( )

	thisform.Command4.Visible= .T.

	thisform.Command2.Enabled= .f.

	

	thisform.Commandgroup1.Command1.Enabled= .F.

	thisform.Commandgroup1.Command2.Enabled= .F.

	thisform.Commandgroup1.Command3.Enabled= .F.

	thisform.Commandgroup1.Command4.Enabled= .F.

	thisform.Commandgroup1.Command5.Enabled= .F.

	thisform.Commandgroup1.Command8.Enabled= .F.

	

	Обработчик события кнопки “Удалить” формы “Раздаточные материалы”.

	

	tu=thisform.Text1.value

	IF MESSAGEBOX('Вы уверены, что хотите стереть запись?', 4 + 32 + 256, 'Выход')=6

	

	SELECT uir_tab_mat

	SET EXCLUSIVE ON

	DELETE

	pack

	

	SELECT uir_tab_lm

	SET EXCLUSIVE ON

	

	DELETE;

	FROM Uir_tab_lm;

	WHERE Uir_tab_lm.mat_id = tu

	

	PACK

	_screen.ActiveForm.Release() 

	DO FORM uir_form21

	MESSAGEBOX('Данные удалены из таблицы!')

	

	ELSE

	

	_screen.ActiveForm.Refresh() 

	Endif

	

	Обработчик события кнопки “Открепить от урока” формы “Раздаточные материалы”.

	

	tu=thisform.Text1.value

	

	uuu=INPUTBOX('Введите ID урока','Заявка')

	IF EMPTY(uuu)=.f. then

	DO WHILE Type(uuu)!='N'

	MESSAGEBOX('Вы ввели некорректное значение (ID числовое значение)')

	uuu=INPUTBOX('Введите ID урока','Заявка')

	

	ENDDO

	ttz=val(uuu)

	LOCAL ARRAY ss7(20)

	SELECT Uir_tab_lm.mat_id;

	FROM uir_tab_lm;

	WHERE  Uir_tab_lm.mat_id = ttz;

	INTO ARRAY ss7

	If EMPTY(ss7)

	MESSAGEBOX('Данная кассета не содержится в списке')

	ELSE

	

	SELECT uir_tab_lm

	DELETE;

	FROM Uir_tab_lm;

	WHERE Uir_tab_lm.lesson_id =ttz and Uir_tab_lm.mat_id=tu

	

	PACK

	THISFORMset.forms(2).visible=.f. 

	_screen.ActiveForm.Release() 

	DO FORM uir_form20

	MESSAGEBOX('Связь разорвана!')

	endif

	ELSE thisform.Refresh

	endif

	

	Обработчик события кнопки “Прикрепить к уроку” формы “Раздаточные материалы”.

	

	

	SELECT uir_tab_lm

	uuu=INPUTBOX('Введите ID урока','Заявка')

	IF EMPTY(uuu)=.f. then

	DO WHILE Type(uuu)!='N'

	MESSAGEBOX('Вы ввели некорректное значение (ID числовое значение)')

	uuu=INPUTBOX('Введите ID урока','Заявка')

	

	ENDDO

	tz=val(uuu)

	

	LOCAL ARRAY ss6(20)

	SELECT Uir_tab_lesson.nam_lesson;

	FROM uir_tab_lesson;

	WHERE  Uir_tab_lesson.lesson_id =tz;

	INTO ARRAY ss6

	If EMPTY(ss6)

	MESSAGEBOX('Такого значения ID нет в списке данных')

	ELSE

	LOCAL ARRAY ss5(20)

	SELECT Uir_tab_lm.mat_id;

	 FROM uir_tab_lm;

	 WHERE  Uir_tab_lm.lesson_id = tz;

	INTO ARRAY ss5

	If EMPTY(ss5)=.f.

	MESSAGEBOX('Такая кассета уже есть в списке')

	else

	y=thisform.Text1.Value

	INSERT INTO uir_tab_lm VALUES (tz,y)

	

	THISFORMset.forms(2).visible=.f. 

	_screen.ActiveForm.release

	

	DO FORM uir_form21

	endif

	endif

	ELSE thisform.Refresh

	endif

	

	

	Обработчик события кнопки “Сохранить” формы “Уроки (добавить новый)”.

	

	LOCAL qt as Character; 

	yy as Integer;

	rt as Integer;

	

	wu=ThisForm.Text5.Value

	yy=ThisForm.Text4.Value

	qt=ThisForm.Combo2.Value

	rt=ThisForm.Combo1.Value

	wt=VAL(yy)

	t=new_lesson_id

	

	IF EMPTY(wu)

	   IF EMPTY(yy)

	      IF EMPTY (qt)

	         IF EMPTY(rt)

	         MESSAGEBOX('Данные не были введены!')

	         ELSE

	         INSERT INTO uir_tab_lesson VALUES (t,rt,qt,wt,wu)

	         MESSAGEBOX('Данные добавлены в таблицу!')

	

	         Thisform.Command1.Enabled= .f.

	         _screen.ActiveForm.Release() 

	         DO FORM uir_form12 

	         ENDIF

	      ELSE

	      INSERT INTO uir_tab_lesson VALUES (t,rt,qt,wt,wu)

	      MESSAGEBOX('Данные добавлены в таблицу!')

	

	      Thisform.Command1.Enabled= .f.

	      _screen.ActiveForm.Release() 

	      DO FORM uir_form12    

	      ENDIF

	   ELSE

	   INSERT INTO uir_tab_lesson VALUES (t,rt,qt,wt,wu)

	   MESSAGEBOX('Данные добавлены в таблицу!')

	

	   Thisform.Command1.Enabled= .f.

	   _screen.ActiveForm.Release() 

	   DO FORM uir_form12    

	   ENDIF

	ELSE

	INSERT INTO uir_tab_lesson VALUES (t,rt,qt,wt,wu)

	MESSAGEBOX('Данные добавлены в таблицу!')

	

	Thisform.Command1.Enabled= .f.

	_screen.ActiveForm.Release() 

	DO FORM uir_form12    

	ENDIF

	

	

	Заключение по работе.

	

	Целью учебно-исследовательской работы являлось:

	Изучение СУБД Visual FoxPro 8.0.и языка программирования FoxPro.

Изучение структурированного языка запросов SQL.

Изучение особенностей предметной области.

Проектирование базы данных (создание реляционной модели)

Создание основных элементов базы данных: таблиц, форм, отчетов, запросов.

Разработка обработчиков событий на языке FoxPro.

	Приобретение навыков работы с СУБД Visual FoxPro 8.0

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

	В ходе УИР и КП создана база данных, отвечающая техническому заданию на курсовой проект, с использованием средств  FoxPro 8.0.

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

	

	

ЛИТЕРАТУРА





Microsoft Visual FoxPro О. В. Бартеньев Диалог-МИФИ Москва 2005г.

Visual FoxPro С. Каратыгин А. Тихонов Л. Тихонова Издательство БИНОМ Москва 1999 

http://www.firststeps.ru/foxpro/fx/fx1.html

http://omck.info/1subd.php

http://www.computerbooks.ru/books/Programming/Book-FoxPro-7/index.html

http://www.compdoc.ru/bd/foxpro/

http://www.linksoft.ru/working.html  

	

	

	

	

- 1 -