Рис. 2.15.10. Создание формы для связанных таблиц при помощи мастера форм
Форма откроется в окне конструктора форм, в котором изменим надписи, для чего выделим нужную надпись и в окне свойств Properties - auditoriums.scx изменим свойство Caption. Также изменим названия столбцов и ширину полей объекта формы grid1, для чего выберем этот объект и в окне свойств в верхнем выпадающем списке выберем для первого столбца Column1 и изменим ширину поля, указав нужное число в значении свойства Width (Ширина). Для указания текста заголовка этого поля выберем в том же выпадающем списке окна свойств Header1 и введём название в свойство Caption. Сохраним изменения, выбрав File – Save.
Рис. 2.15.11. Изменение свойств столбца объекта grid1
Рис. 2.15.12. Форма «Аудитории и корпуса»
Для создания отчётов нужно в окне Диспетчера проектов перейти на вкладку Documents, где выбрать пункт Reports(Отчёты) и нажать кнопку New. После этого откроется диалоговое окно NewReport (Новый отчёт) Выберем NewReport. Появится окно конструктора отчётов ReportDesigner. Определим среду данных для отчёта, для чего выберем из контекстного меню пункт DataEnvironment (Среда данных). Щёлкнем правой кнопкой мыши в окне среды данных и выберем в появившемся контекстном меню пункт Add…(Добавить). Добавим таблицы Auditoriums и Buildings и установим связи между ними. Разместим надписи столбцов в области PageHeader (Верхний колонтитул) окне конструктора отчётов, а в поле Detail разместим поля из таблиц. Для добавления поля выберем его из окна среды данных отчёта или поместим объект Field (Поле) из элементов управления отчётом ReportControls. При этом появится диалоговое окно ReportExpression (Выражение для отчёта), затем введём в поле Expression наименование требуемого поля. В области PageFooter поместим значение, указывающее общее количество строк в отчёте и выведем текущую дату. Для того чтобы вывести значение числа строк, поместим в полосу PageFooter объект Field (Поле). В окне ReportExpression нажжём кнопку Calculations (Вычисления), после чего появится диалоговое окно CalculateField (Вычисляемое поле), в котором выберем операцию Count (Количество), а в поле Expression укажем наименование первого поля – Name_build. Для того, чтобы вывести текущую дату необходимо поместить объект Field (Поле) и в окне ReportExpression ввести в поле Expression выражение DATE() – функцию по вычислению текущей даты. Рядом добавим соответствующие надписи, поместив на макет формы объекты Label (Надпись) и введя требуемые надписи. Сохраним отчёт.
Рис. 2.15.13. Макет отчёта в окне конструктора форм.
Для создания меню нужно в окне Диспетчера проектов перейти на вкладку Other (Другое), где выбрать пункт Menus (Меню) и нажать кнопку New. После этого откроется диалоговое окно NewMenu (Новое меню) Выберем Menu. Появится окно конструктора меню MenuDesigner. Введём названия пунктов меню в поле Prompt (Наименование), а в раскрывающемся списке Result (Результат) определим действия, происходящие при выборе пункта меню. Введём подменю «Таблицы», для чего в поле Prompt введём название пункта меню «Таблицы», а в списке Result укажем Submenu (Подменю), затем нажмём на кнопку Create (Создать) после чего в раскрывающемся списке MenuLevel (Уровень меню) появится название созданного подменю. Все остальные пункты, созданные на этом уровне, будут пунктами подменю для пункта меню «Таблицы». Создадим пункт «Аудитории». Для этого в списке Result укажем Command (Команда) и введём «DO FORM «c:\бд auditoriums\формы\auditoriums.scx»«, что значит открыть форму auditoriums.scx. Аналогично создадим пункты для открытия трёх других форм.
Рис. 2.15.14. Создание меню
Затем в списке MenuLevel (Уровень меню) выберем верхний уровень – MenuBar и введём ещё одно подменю «БД», в котором укажем два пункта «Отчёт» и «Выход». В поле ввода команды для пункта «Отчёт» введём «REPORT FORM «c:\бд auditoriums\отчёты\report1.frx» PREVIEW», т. е открытие файла отчёта. Для пункта «Выход» укажем команду QUIT.
Чтобы меню можно было использовать в приложении, сначала его нужно сгенерировать. Для этого используется пункт системного меню Menu (Меню) и диалоговое окно GenerateMenu (Генерация меню). В этом окне укажем файл, в котором будет сохранено меню, после чего нажмём кнопку Generate (Генерация).
Созданное меню необходимо запустить на экранной форме. Если просто в Диспетчере проекта выделить меню и нажать Run (Выполнить), то меню будет запущено в главном окне VisualFoxPro. Для того чтобы меню запускалось в форме приложения баз данных, необходимо установить флажок Top-LevelForm (Форма верхнего уровня) в диалоговом окне GeneralOptions (Основные опции) и снова запустить процесс генерации меню.
Теперь создадим главную форму приложения, из которой будут открываться все остальные. Назовём её Main_form. На эту форму поместим четыре кнопки, и зададим команды на запуск соответствующих форм при нажатии на эти кнопки. Поместим на макет формы компонент CommandButton (Командная кнопка), у которого в свойстве Caption напишем текст надписи на кнопке, например, для кнопки вызова формы Аудитории так и напишем Аудитории. Затем перейдём на вкладку Methods (Методы) окна Properties (Свойства) формы и выбираем метод ClickEvent (Событие щелчок). Щёлкнем два раза на названии события, после чего появится окно Command1.Click, в котором введём
DO FORM «c:\бд auditoriums\формы\auditoriums.scx»
Окно ввода команды, выполняющейся при нажатии на кнопку окно Command1.Click, можно вызвать и двойным щелчком на макете кнопки.
Аналогично создадим кнопки вызова других форм и отчёта.
Теперь поместим на эту форму созданное ранее меню. Для этого сначала установим свойство формы ShowWindow равным 2 – Astoplevelform (Как форма верхнего уровня), затем в методе InitEvent пропишем
DO «C:\БД Auditoriums\MENU1.MPR» WITH THIS, .T..
Создадим файл основной программы. Для этого в окне Диспетчера проекта перейдём на вкладку Code, где выберем пункт Programs (Программы) и нажмём кнопку New….Появится окно Program1, в котором напишем
DO FORM «c:\бд auditoriums\формы\main_form.scx»
_SCREEN.Visible = .T.
READ EVENTS
Сначала откроется окно главной формы, затем значение свойства Visible (Видимость) окна проставим в Истина. Затем зададим точку останова командой READ EVENTS, то есть после выполнения этой команды программа будет ожидать действий пользователя, и все следующие за ней команды не будут выполнятся до тех пор, пока не будет выполнена команда CLEAR EVENTS. Поместим эту команду в обработчик события Destroy Event (Закрытие формы) главной формы Main_form.
Сохраним файл программы как Program1.prg и сделаем этот файл основной в приложении, для чего выделим его в Диспетчере проекта и в контекстном меню выберем пункт SetMain (Сделать основным). Файл при этом станет выделенным жирным шрифтом.
Рис. 2.15.15. Окно главной формы
Для того чтобы сделать исполняемый файл с расширением .exe, необходимо выбрать опцию BuildExecutable (Построить исполняемый файл) в диалоговом окне BuildOptions (Опции построения), которое вызывается при нажатии кнопки Build (Построить) в окне диспетчера проекта. Потом нажать ОК и указать куда следует поместить исполняемый файл.
Чтобы в готовом файле .exe в процессе ввода часть русских букв автоматически не заменялись латинскими буквами из-за несовпадения кодовых страниц, необходимо в директорию, где находится .exe файл поместить файл конфигурации CONFIG.FPW, в котором указать
CODEPAGE=1251
Также можно поместить этот файл внутрь исполняемого файла. Для этого нужно добавить файл конфигурации в проект на закладке Other в раздел TextFiles. Слева от имени файла не должно быть значка перечеркнутого кружка. Однако следует понимать, что такой файл невозможно будет изменить у клиента, поэтому оставим его рядом с .exe файлом, не помещая внутрь.
По умолчанию, в момент запуска файла .exe, если файл конфигурации не включен внутрь файла .exe, то файл конфигурации будет подхвачен из той же директории, в которой находится файл .exe.
1. У каждой студенческой группы только один куратор.
2. Название группы уникально.
3. Имя куратора не уникально.
4. Каждый преподаватель может быть куратором в нескольких группах.
5. У каждого куратора может быть только одна должность.
6. Одну и ту же должность могут иметь несколько преподавателей.
7. Несколько должностей могут иметь один и тот же оклад.
8. Преподаватель имеет ФИО, год рождения, ученую степень, адрес.
а.Постройте функциональную модель для заданной предметной области с помощью методологии DFD:
· идентифицировать систему
· определить сущности
· определить потоки данных между сущностями и системой
б.Спроектируйте структуру базы данных методом «Сущность - Связь» для разработанной функциональной модели.
в.Структуру спроектированной базы данных реализуйте с помощью любой СУБД. Приложение должно содержать следующие объекты: формы, отчеты и меню.
Систему назовём «Система учёта студенческих групп». Определим сущности предметной области:
· группы
· преподаватели
Данная система хранит информацию о студенческих группах и их кураторах. Пользователь этой системы может найти информацию о преподавателе, являющемся куратором в искомой группе. При вводе данных о группе указываются также сведения о преподавателе, являющемся в данной группе куратором. Данные о группе будут только тогда занесены в базу данных, когда в ней будут найдены сведения об этом преподавателе в таблице «Преподаватели». Сведения о преподавателях вводятся отдельно.
Функциональная модель представлена при помощи диаграмм потоков данных (DFD).