Лекция 2. Циклы в FoxPro
] ENDFOR Цикл сканирования БД: SCAN [] [ FOR / WHILE ] ENDSCAN " width="640"
Циклы с условием: DO WHILE
ENDDO
В цикле могут быть использованы операторы LOOPEXIT .
LOOP -обеспечивает внеочередную проверку условия цикла и передает
управление на оператор следующий за ENDDO, если условие не
выполняется. Второй оператор обеспечивает безусловный выход из
цикла.
Цикл с параметром:
FOR = TO [ STEP выражение N 3]
ENDFOR
Цикл сканирования БД:
SCAN [] [ FOR / WHILE ]
ENDSCAN
Пример 7.3. Y = X 100
STORE 0 TO i
STORE 1 TO Y
DO WHILE i
Y = Y * X
i = i + 1
Y = Y * X
I = i + 1
ENDDO
? Y
Рис. 7.7. Блок-схема вычисления Y = X 100
Построение экранных форм
Допустим необходимо построить карту ввода
Программа карты ввода будет иметь следующий вид
SET TALK OFF
CLEAR
USE SOTR
P = l
V = 'Y'
DO WHILE P = l
@ 5,5 TO 1 2,60 DOUBLE
@ 6,7 SAY " КАРТА ВВОДА "
APPEND BLANK
@ 8,7 SAY " Фамилия " GET FIO
@ 10,7 SAY " Должность " GET DOLGN
READ
КАРТА ВВОДА
КАРТА ВВОДА
Фамилия
Доложность
Фамилия
Доложность
@ 14,8 SAY "Ещё добавить? Y/N" GET V
READ
IF V 'Y'
EXIT
ENDIF
CLEAR
ENDDO
CLEAR ALL
Пример экранной формы ввода
КАРТА ВВОДА
Фамилия студента
Группа Год рождения
Адрес Телефон
SET TALK OFF
USE STUD
P = l
DO WHILE P = l
CLEAR
@ 5,5 TO 12,60 DOUBLE
@ 6,20 SAY " КАРТА ВВОДА "
APPEND BLANK
PFAM = FAM
PGRUP = GRUP
PDTR = DTR
PADRES = ADRES
PTLF = TLF
@ 8,7 SAY "Фамилия студента" GET PFAM
@ 9,7 SAY " Группа " GET PGRUP
@ 9,20 SAY "Дата рождения" GET PDTR
@ 10,7 SAY " Адрес " GET PADRES
@ 10,40 SAY " Телефон " GET PTLF
READ
REPLASE FAM WITH PFAM
REPLASE GRUP WITH PGRUP
REPLASE DTR WITH PDTR
REPLASE TLF WITH PTLF
@ 15,10 SAY " Будете продолжать ввод?"
@ 15, col () PROMPT " Да "
@ 15, col () PROMPT " Нет "
MENU TO P
DO CASE
CASE P = l
LOOP
CASE P=2
EXIT
ENDCASE
ENDDO
RETURN
Работа с массивами
1) Работа с одномерными массивами (рис. 7.9):
SCATTER [ FIELDS ] ТО
2) Обратная операция (заполнение полей из массива) производится командой:
GATHER FROM [FIELDS ]
2) Работа с двумерным массивом:
COPY TO ARRAY [FIELDS ] [FOR / WHILE ]
APPEND FROM ARRAY [FOR ] [FIELDS
Пример 7.5 . Записать в массив результаты сдачи экзамена учениками ивычислить средний балл.
SET TALK OFF
DIME A(10)
FOR i = 1 TO 10
INPUT A( i )
ENDFOR
C = 0
FOR i = 1 TO 10
C = C + A( i )
ENDFOR
Построение меню
В Fox-меню для поддержания постоянного возврата в меню, оно или команда активации меню, помещается в цикл вида DO WHILE . T . ... ENDDO . В Fox-меню различают:
1. LIGHTBAR-меню - меню с подсветкой и произвольным расположением элементов.
2. POPUP- меню вертикальное, всплывающее меню.
3.PULLDOWN-меню двухуровневое меню.
Пример 7.6. Меню с подсветкой.
LIGHBAR-меню:
Используются команды :
@ Y , X PROMPT , MENU
@ Y , X PROMPT [ MASSAGE ]
MENU n
Двухуровневое PULLDOWN- меню . Такое меню состоит из главного
горизонтального меню (меню заголовков) и нескольких вложенных в него вспо
могательных вертикальных меню.
Структура двухуровневого меню реализуется двумя командами: MENU BAR ,
MENU и командой активации:
READ MENU BAR TO
Главное меню определяется командой:
MENU BAR ,
Здесь общее число пунктов меню;
двумерный символьный массив вида М (К,2). Первый столбец массива М ( i , 1) содержит собственно пункты меню, второй столбец М ( i , 2) комментарии к позициям меню, располагаемые в строке по команде
SET MESSAGE TO
Команда
MENU , , , [, ]
Здесь:
номер элемента главного меню;
одномерный символьный массив, содержащий пункты меню; число пунктов меню, обычно равно размерности массива; - число одновременно показываемых пунктов меню.
Меню активирует команда:
READ MENU BAR ТО , [ SAVE ]
номер пункта главного меню;
номер пункта вспомогательного меню.
Имеются два типа меню: горизонтальное, вертикальное.
Функции выбора из меню: BAR () - возвращается номер ВАR-пункта, POPUP ( ) возвращается имя POPUP-меню, PROMPT ( ) - возвращает строку приглашение.
Двухуровневое PULLDOWN-меню.
Создается с помощью уже указанных команд. Командами DEFINE MENU и DEFINE PAD описывается главное горизонтальное меню. Командой
ON SELECTION PAD обычно описываются реакции тех пунктов, которые вызывают процедуры. Командой ON PAD с опцией ACTIVATE POPUP устанавливается связь горизонтального меню с вертикальным POPUP-меню, т. е. выход на второй уровень меню .
Командами DEFINE POPUP FIELD или DEFINE POPUP с командами
DEFINE BAR описываются сами POPUP-меню, а их реакции –
Командой. ON SELECTION POPUP. Активация всей конструкции меню
осуществляется командой ACTIVATE MENU .
Организация взаимодействия компонентов меню
Модульное программирование
Вызов подпрограмм (модулей, процедур) осуществляется командой
DO [ WITH ]
Оператор RETURN подпрограммы возвращает управление вновь в основную программу на команду , следующую за оператором DO .
а) б)
G
---
---
DO A
---
DO B
---
DO C
---
---
DO B
---
---
DO E
Рис.7.13. а - схема взаимодействия модулей
В FoxPro такой обмен возможен через параметры или через общие данные. Пример: DO ZARPLATA WITH "Иванов", "01/12/89"
Команда DO вызовет подпрограмму ZARPLATA . PRG и передаст ей два параметра: фамилию и дату, на которую производится начисление. Для получения этих параметров в подпрограмме нужно указать оператор:
PARAMETERS
Пример вызова процедур.
Имеется файл сотрудников: SOTR ( FIO , DOLG , ZARP , OTD ). Необходимо начислить налоги и получить документ (налоги -13% от зарплаты).
SET PROCEDURE TO PFILE
CLEAR
USE SOTR
INDEX ON FIO TO OTR.NDX
GO TOP
STR=1
N =1
DO WHILE .NOT. EOF()
@ STR,1 SAY N pict '99'
@ STR,4 SAY FIO
@ STR,25 SAY DOLG
@ STR,35 SAY ZARP
DO NACH WITH ZARP,NAL
@ STR,40 SAY NAL
SKIP
STR = STR + 1
N = N+1
ENDDO
* Файл процедуры PFILE
PROCEDURE NACH
PARAMETERS Z,Y
Y = Z * 13/100 * Файл процедуры PFILE
PROCEDURE NACH
PARAMETERS Z,Y
Y = Z * 13/100
RETURN
RETURN
[, ] Элементы букв изображаются средствами псевдографики. Они генерируются одновременным нажатием: ALT + КОДЫ (213-223, 254) " width="640"
Изобразительные средства СУБД
FoxPro содержит средства создания изображений, например:
@ BOX
Некоторые изображения можно задавать вручную. Например, название прикладных систем - крупными буквами. Каждая строка такого заголовка формируется командой.
? или @... SAY или TEXT ... ENDTEXT
@ TO [DOUBLE / PANEL / ]
Эта команда формирует рамку, а также определяет ее цвет и форму
С помощью COLOR можно установить цвет рамки, не изменяя цветов по умолчанию.
SET BORDER TO [SINGLE/DOUBLE/PANEL/NONE] Окантовка 1
[, ]
Элементы букв изображаются средствами псевдографики. Они генерируются одновременным нажатием:
ALT + КОДЫ (213-223, 254)
Управление цветом. SET COLOR ТО a / b, c / d, e
Цвета:
N - чёрный U - подчёркивание
W - белый I - вывод текста в инверсном виде
G - зелёный GR + - жёлтый
В - синий BG - бирюзовый
R - красный RB - лиловый
* - мерцание GR - коричневый
Управление звуком . SET BELL ON/OFF
SET BELL TO ,
Частота контролируется от 19 до 10.000 герц, длительность звукового сигнала - от 1 до 19 секунд.
Пример :
SET BELL ON
FOR i = 1 TO 5
SET BELL TO i * 80, i * 3
?? CHR(7)
ENDFOR
Управление печатью. SET DEVICE TO SCREEN/PRINT
Эта команда назначает устройство для вывода команд @.. . SAY . Если PRINT , то все команды @.. . SAY выводят информацию на принтер, а части GET ... этих команд игнорируются.
Команда SET PRINT ON / OF обеспечивает печать всей изображаемой на экране информации, кроме вывода команд @... и команд полного экрана