При построении проекта Visual FoxPro просматривает все компоненты, перечисленные в проекте и формирует проект. Если какие-либо компоненты вызывают в свою очередь другие, то они также должны быть включены в проект (например, в проект включаются все программы, которые вызываются пунктами меню).
Для создания проекта необходимо нажать кнопку Build в окне проекта. На экране появится диалоговое окно «Build Options» которое содержит флажки:
· Display Errors – после завершения построения в отдельном окне отображаются все ошибки;
· Recompile All Files – обновление всех компонентов проекта (по умолчанию обновляются только измененные компоненты);
· Run After Build – запуск на выполнение приложения сразу после создания;
· Regenerate Component IDs - установка и регистрация Automation серверов.
Рис. 10.2 Диалоговое окно Build Options
Для построения проекта необходимо выбрать опцию Rebuild Project и нажать OK . При появлении запроса о сохранении проекта, подтвердить его нажатием кнопки Yes.
Если в процессе построения проекта диспетчер обнаружит компонент, не описанный в проекте, то на экране появится диалоговое окно Locate File, с помощью которого можно указать недостающие компоненты.
Когда все необходимые компоненты включены в проект, то необходимо выбрать одну из двух опций:
Application (app) – создается файл .app, который запускается из Visual FoxPro командой главного меню Program – Do;
Win 32 executable/COM Server (exe) – создается файл с расширением .exe, который может выполняться автономно.
Практическая работа №10.
Цель работы:учиться создавать приложение на основе разработанного проекта, анализировать состав приложения, исправлять ошибки, допущенные при работе над проектом.
Задача работы:
Задать параметры проекта, указав свои данные в качестве сведений о разработчике.
Выбрать в качестве основной программы меню, созданное во время предыдущей практической работы.
Создать проект типа . app и запустить его на выполнение.
Контрольные задания по проектированию и созданию базы данных:
Вариант 1.
Создать базу данных «Конференция». В базе данных хранятся сведения об участниках конференции (номер паспорта, фио, дата рождения, организация, адрес, телефон, ученое звание, ученая степень), о комитетах (название комитета, фио руководителя, описание помещения, телефон), об оплате (номер квитанции, дата оплаты, сумма, способ оплаты). Участник конференции может входить только в один комитет, в одном комитете присутствует несколько участников. Участник может оплачивать частями несколько раз. В одной квитанции об оплате может быть оплачено участие в конференции нескольких участников.
Реализовать запросы к базе данных:
1) Вывести сведения об участниках конкретного комитета.
2) Вывести сведения об оплате конкретного участника.
3) Вывести сведения обо всех участниках, прибывших из указанной организации.
Создать базу данных «Продажа недвижимости». В базе данных хранятся сведения о квартирах (район, улица, номер дома, номер квартиры, тип дома, этаж, общая площадь, жилая площадь, коэффициент комфортности), о покупателях (номер паспорта, фио, телефон, место работы, должность), о продавцах (номер паспорта, фио, телефон), о сделках (номер договора, дата, стоимость продажи). Один покупатель может совершить покупку нескольких квартир, один продавец может продавать жилье неоднократно.
Реализовать запросы к базе данных:
1) Вывести сведения обо всех проданных квартирах в доме с указанным номером.
2) Вывести сведения обо всех продавцах, продающих квартиры в указанном районе.
3) Вывести сведения обо всех сделках, выполненных в указанную дату.
Создать базу данных «Начисление зарплаты». В базе данных хранятся сведения о работниках (фио, номер паспорта, разряд, должность, надбавка, льгота на налоги), о штатном расписании (должность, количество должностей, оклад), о налогах (вид налога, величина налога), о зарплате ( дата, сумма). Каждый работник получает зарплату с учетом оклада по штатному расписанию, надбавок, налогов.
Реализовать запросы к базе данных:
1) Вывести сведения о зарплате на указанную дату всех работников предприятия.
2) Вывести сведения об окладе для указанного сотрудника.
3) Вывести сведения о зарплате конкретного сотрудника за последний год с указанием оклада, надбавок, налогов.
Создать базу данных «Поликлиника». В базе данных хранятся сведения о врачах ( фио, дата рождения, специальность, стаж по специальности), о днях приема врачей (день приема, время начала, время окончания приёма), о посетителях ( фио, номер полиса, адрес, пол, дата рождения), о посещениях пациентов врачей (дата, время, диагноз). Один врач может принять нескольких пациентов, один пациент посетить несколько врачей.
Реализовать запросы к базе данных:
1) Вывести сведения о пациентах, посетивших в указанную дату конкретного врача.
2) Вывести сведения обо всех врачах, работающих в поликлинике в указанный день.
3) Вывести сведения о больных с указанным диагнозом.
Создать базу данных «Путевки». В базе данных хранится информация о путевках (код путевки, место отдыха, начало, окончание, количество, стоимость, льготы), о заявлениях (фио, дата подачи, дата рассмотрения, место работы, должность, стаж, результат рассмотрения ), о получателе ( фио, код путевки, количество). Получатель может взять несколько путевок, на одну путевку может быть несколько заявлений. В заявлении указывается только одна путевка.
Реализовать запросы к базе данных:
1) Вывести сведения об удовлетворенных заявлениях на путевки в указанный период.
2) Вывести сведения обо всех путевках, выданных конкретному получателю.
3) Вывести сведения о заявлениях, поданных до указанной даты.
Создать базу данных «Рецепты приготовления блюд». В базе данных хранятся сведения о рецептах ( название рецепта, описание, тип пищи, время приготовления, количество порций, калорийность), о компонентах рецепта ( название компонента, количество, цена, единица измерения, калорийность). Один компонент может входить в несколько рецептов, в одном рецепте может быть несколько компонент.
Реализовать запросы к базе данных:
1) Вывести сведения о компонентах для данного рецепта.
2) Вывести сведения о рецептах для данного типа пищи.
3) Вывести сведения о времени приготовления и калорийности блюд, в которых содержатся указанный компонент.
Создать базу данных «Склад». В базе данных хранятся сведения о поставщиках товаров на склад ( номер поставщика, банковские реквизиты, адрес, телефон), о получателях товаров на склад ( номер получателя, банковские реквизиты, адрес, телефон), о приходе на склад товара ( номер накладной прихода, наименование товара, описание, ед. измерения, количество, цена, дата поступления), о расходе со склада (номер накладной расхода, наименование товара, о количестве, дате расхода). Поставщик может поставлять несколько видов товаров, товар может получать несколько получателей.
Реализовать запросы к базе данных:
1) Вывести сведения о поставщиках конкретного вида товара.
2) Вывести сведения обо всех расходах с указанием характеристик товаров, произведенных в указанную дату.
3) Вывести сведения обо всех поступлениях на склад в течение конкретного месяца с указанием характеристик поставщиков.
Создать базу данных «Спорт». В базе данных хранятся сведения о сотрудниках спортивного комплекса ( фио, адрес, телефон, дата рождения, должность, стаж работы, образование, оклад), о клиентах (фио, адрес, дата рождения, пол, место работы, количество занятий, телефон), о занятиях (вид занятий, дата начала занятий, количество занятий, цена), о спорткомплексе (название адрес, телефон, фио директора). Один клиент может заниматься по разным видам спорта, причем занятия одного вида могут проводиться различными преподавателями.
Реализовать запросы к базе данных:
1) Вывести сведения о клиентах, занимающихся по конкретному виду спорта.
2) Вывести сведения обо всех клиентах, занимающихся в указанный период.
3) Вывести сведения обо всех клиентах, которые занимаются у данного сотрудника по данному виду спорта с указанием характеристик занятия.
Создать базу данных « Телефонные переговоры». В базе данных хранятся сведения об абонентах (номер телефона абонента, фио, адрес, льготы), о переговорах ( код города, дата, время, количество минут, дата оплаты), о кодах города и тарифах ( код города, город, тариф за одну минуту), о тарифных коэффициентах ( начало периода, конец периода, коэффициент). Один абонент может звонить неоднократно. Стоимость переговоров учитывает город и период времени звонка, так как стоимость звонка зависит от времени суток звонка.
Реализовать запросы к базе данных:
1) Вывести сведения об абоненте и размере оплаты за переговоры в указанную дату.
2) Вывести сведения об абонентах, не заплативших за переговоры.
3) Вывести сведения об абонентах, звонивших в указанный город в течении данного периода.
Создать базу данных «Товары». В базе данных хранятся сведения о товарах (код товара, наименование, цена, количество, скидка, дата поступления), о магазинах (наименование, адрес, телефон, фио директора), о фирмах, привозящих товар ( наименование, адрес, телефон, фио директора). Фирма может поставлять несколько товаров в различные магазины.
Реализовать запросы к базе данных:
1) Вывести сведения о фирмах, поставивших товар в конкретный магазин.
2) Вывести сведения о товарах, поступивших в указанный магазин данного числа.
3) Вывести сведения о магазинах, в которых имеется в наличии товар указанного наименования.
Создать базу данных «Фототека». В базе данных хранятся сведения о пленках ( код пленки, цена, чувствительность, тип пленки (цветная, негативная), количество кадров, дата начала съемки, дата проявления, место проявления, место хранения), о кадрах (дата съёмки, место съемки, тема, участники), о фотографиях (размер, бумага, количество, фио изготовителя, цена, место нахождения). В фототеке ведется учет изготовленных фотографий с учетом пленки и кадра. Из одной пленки может быть напечатано несколько кадров и для каждого кадра несколько фотографий.
Реализовать запросы к базе данных:
1) Вывести сведения обо всех фотографиях, напечатанных по данному кадру.
2) Вывести сведения о фотографиях, изготовленных конкретным человеком.
3) Вывести сведения о стоимости фотографий, выполненных на одну тему.
Создать базу данных «Личное имущество». В базе данных хранятся сведения об имуществе(название, описание, стоимость, дата приобретения, место нахождения, принадлежность), о ремонте (вид ремонта, описание, стоимость, организация, фио мастера, дата ремонта), о категориях имущества(номер, название, описание). Категория имущества включает несколько конкретных наименований имущества, имущество может неоднократно подвергаться ремонту.
Реализовать запросы к базе данных:
1) Вывести сведения об имуществе, которое подвергалось ремонту в указанном году.
2) Вывести сведения об общей стоимости ремонта личного имущества в указанном месяце.
3) Вывести сведения об имуществе, отремонтированном указанным мастером.
Создать базу данных «Назначение стипендии». В базе данных хранятся сведения о студентах (номер зачетки, фио, дата рождения, номер группы), о сессии (год, семестр, количество зачетов, количество экзаменов, дата завершения сессии), о результатах сессии (вид отчетности (экзамен1, экзамен2, зачет1, зачет2 и т.д.), название дисциплины, результат сдачи (оценка или признак сдачи зачета, дата сдачи экзамена или зачета), о стипендии ( номер позиции в стипендиальном приказе, величина стипендии). Один студент сдает несколько сессий, одну сессию сдает несколько студентов, стипендия назначается каждому студенту, сдавшему сессию в срок.
1) Вывести сведения о студентах, не сдавших указанную сессию.
2) Вывести сведения о студентах, сдавших указанную сессию на оценки не ниже 4-х баллов.
3) Вывести сведения о наименованиях дисциплин, сдаваемых в указанную сессию.
Создать базу данных «Лекарства». В базе данных хранятся сведения о лекарстве ( название, категория, форма выпуска, упаковка, количество в упаковке, дозировка, срок годности, цена), о производителях (название фирмы, адрес, телефон, фио представителя), о поставщиках (название фирмы поставщика, адрес, телефон, фио поставщика). Один производитель выпускает много лекарственных препаратов. Одно лекарство может быть выпущено только одним производителем, иначе изменится его название. Поставщик может поставить несколько лекарственных препаратов. Одно лекарство может поставляться несколькими поставщиками, при этом факт поставки уточняется количеством и датой поступления.
1) Вывести сведения о наличии конкретного вида лекарства с указанием цены во всех аптеках города.
2) Вывести сведения о наличии лекарств заданной категории (например, противовоспалительное средство) в конкретной аптеке.
3) Вывести сведения о аптеках, работающих после восьми часов вечера.
3. Лаптева С.В., Веретенникова Л. «Практикум по изучению системы программирования Visual FoxPro 5.0» - Тольятти: ТФСГПУ, 1999г.
4. Поручиков А.Н. «Лабораторный практикум по СУБД: Методические указания к лабораторным работам» - Самара, 2000г.
Меню представляет собой список объединенных по функциональному признаку пунктов, каждый из которых обозначает команду или вложенное меню (подменю). Выбор пункта меню равносилен выполнению соответствующей команды или раскрытию подменю.
Обычно в приложении имеется главное меню и несколько контекстных (всплывающих или локальных) меню. Главное меню используется для управления работой всего приложения, каждое из контекстных меню служит для управления отдельным интерфейсным элементом.
Пункт меню представляет собой объект типа TMenuitem. Отдельный пункт меню обычно виден как текстовый заголовок, описывающий назначение пункта меню. Пункт меню может быть выделен (маркирован) для указания на включенное состояние. Класс TMenuitem используется для представления пунктов главного и контекстных меню. Основные свойства пункта меню:
Bitmap типа TBitmap — определяет изображение пиктограммы, размещаемое слева от заголовка пункта меню. По умолчанию свойство имеет значение nil, и изображение отсутствует;
Break типа TMenuBreak — задает, разделяется ли меню на колонки. Свойство Break может принимать одно из трех значений:
• mbNone — меню не разделяется (по умолчанию);
• mbBreak — пункты меню, начиная с текущего, образуют новую колонку;
• mbBreakBar — пункты меню, начиная с текущего, образуют новую колонку, которая отделена линией;
Caption типа string — содержит строку текста, отображаемую как заголовок пункта меню. Если в качестве заголовка указать символ "-",то на месте соответствующего пункта меню отображается разделительная линия. При этом, несмотря на отображение линии, свойство caption по-прежнему имеет значение "-";
checked типа Boolean — определяет, является ли пункт выделенным. Если свойству установлено значение True, то пункт выделен и в его заголовке появляется специальная отметка. По умолчанию свойство checked имеет значение False, и пункт меню не имеет отметки;
AutoCheck типа Boolean — определяет автоматическое изменение значения свойства checked на противоположное при выборе пользователем пункта меню (в Delphi 6);
count типа integer — задает количество подпунктов в данном пункте меню. Это свойство есть у каждого пункта меню. Если какой-либо пункт не содержит подпунктов, то свойство count имеет значение нуль;
Enabled типа Boolean — определяет, активен ли пункт, т. е. будет ли он реагировать на события от клавиатуры и мыши. Если свойству Enabled установлено значение False, то пункт меню неактивен и его заголовок обесцвечен. По умолчанию свойство Enabled имеет значение True, и пункт меню активен;
items типа TMenuitems — является массивом подпунктов текущего пункта меню. Каждый пункт меню, имеющий подпункты (вложенное меню), перечисляет их в свойстве items. Это свойство позволяет получить доступ к подпунктам по их позициям в массиве: items [0], items [i] и т. д.;
Radioitem типа Boolean — определяет вид отметки, появляющейся в заголовке пункта. Если свойству установлено значение False (по умолчанию), то в качестве отметки используется значок в виде галочки, в противном случае пункт отмечается жирной точкой;
shortcut типа TSortCut — определяет комбинацию клавиш для активизации пункта меню. Определить комбинации клавиш можно также с помощью свойства caption, но свойство shortcut предоставляет для этого более широкие возможности. Обозначение комбинаций клавиш, установленных через свойство shortcut, появляется справа от заголовка элемента меню. Наиболее просто задать комбинацию клавиш при конструировании через Инспектор объектов, выбрав нужную комбинацию из предлагаемого списка. Кроме того, назначить комбинации клавиш можно с помощью функции Shortcut (Key: Word; Shift: TShiftstate): TShortcut. Параметр shift определяет управляющую клавишу, удерживаемую при нажатии алфавитно-цифровой клавиши, на которую указывает параметр Key. Если в процессе выполнения программы, например, для пункта меню mnuTest требуется задать комбинацию клавиш <Alt>+<T>, то это можно выполнить следующим образом: mnuTest. Shortcut := Shortcut (Word ( "T" ), [ssAlt] ) ;
visible типа Boolean — определяет, виден ли пункт на экране. Если свойству visible установлено значение False, то пункт меню на экране не отображается. По умолчанию свойство visible имеет значение True, и пункт виден в меню.
Основным событием, связанным с пунктом меню, является событие onclick, возникающее при выборе пункта с помощью клавиатуры или мыши. В приложении для генерации события onclick или для имитации выбора пункта меню можно использовать метод click. Вызов этой процедуры эквивалентен выбору соответствующего пункта меню пользователем.
Пример. Имитация выбора пункта меню.
procedure TForml.ButtonlClick(Sender: TObject);
begin
mnuLockltem.Click;
end;
Нажатие кнопки Button1 приводит к тому же эффекту, что и выбор пункта меню mnuLockltem.
Для создания меню при разработке приложения используется Конструктор меню. Меню также можно создавать или изменять динамически — непосредственно в ходе выполнения приложения.