Система управления базами данных Visual FoxPro5.0 - от начальных навыков к профессиональной работе. Крушель Е.Г - 25 стр.

UptoLike

Составители: 

71
<последовательность команд> будет выполнена, только если (IF) выражение <exprL>
истинно. Если нет - программа будет выполняться с команды, следующей за операторной
скобкой ENDIF.
DO WHILE <exprL><последовательность команд>ENDDO конструкция «цикл»:
<последовательность команд> будет выполняться до тех пор (WHILE), пока остается
истинным логическое выражение <exprL>.
DELETE - логическое удаление записей
SET DELETED
ON/OFFвключение/отключение режима «невидимости» удаленных записей
RECALL - восстановление логически удаленных записей.
При наборе программы не обязательно вставлять примечания, но обязательно читать и понимать
их.
Можно (и рекомендуется!) набирать четыре первых буквы команд.
Текст программы stud01. prg:
* Иллюстрация к приему удали лишнее
* Отбор студентов – «отличников»
USE students && в рабочей области A открывается файл students.dbf
BROWSE && просмотр файла с неудаленными записями
y1=«Балл_сес01» && присваивание переменным y1,y2,y3,y4 значений,
y2=«Балл_сес02» && соответствующих именам полей
y3=«Балл_сес03» && со средними баллами.
y4=«Балл_сес04»
n=1 && переменная для размещения указателя.
* циклически: переход к записи с номером n;
* затем: проверка - (IF, если) год =1998, то помечается к удалению запись с этим номером
*при условии, что в и первой (&y1),и во второй (&y2)сессии оценки не равны 5.
* Здесь, как и выше, макроподстановка & позволяет вставить в команду
присвоенное
*переменной при &, в частности, &y1 равносильно Балл_сес01, т.к. выше переменной y1
*было присвоено значение Балл_сес01. Проверка на год поступления нужна для того,
*чтобы не вычеркнуть из списка «отличников» студентов-1998 (у них в полях
*Балл_сес03, Балл_сес04 нули). Затем: удаление из списка студентов
-1997, у которых
*оценки во всех сессиях не равны 5. Цикл будет выполняться, пока номер записи n не
*станет равным числу записей reccount( )
* ___________________________________________________________________________
DO WHILE n<=reccount( ) && reccount( )=числу записей в файле.
GO n && переход к записи с номером n
IF year_start=1998 && проверка условия: год поступл. = 1998.
DELETE FOR &y1#5.and
.&y2#5 && если не «5» - удалить!
ENDIF && конец действия условия.
IF year_start=1997 && проверка условия: год пост=1997.
DELETE FOR &y1#5.and.&y2#5.and.&y3#5.and.&y4#5
&& если не все «5» - удалить!
ENDIF
n=n+1 && наращивание номера записи.
END DO && конец цикла.
SET DELETED ON && режим, когда удаленные не видны.
BROWSE && просмотр «отличников».
SET DELETED OFF &&
возврат к режиму видны все.
RECALL && восстановление логически удаленных.
BROWSE && просмотр всех записей.
* ____________________________________________________________________________
После набора программы запустите ее на выполнение командой
                                             71

    <последовательность команд> будет выполнена, только если (IF) выражение 
    истинно. Если нет - программа будет выполняться с команды, следующей за операторной
    скобкой ENDIF.
DO    WHILE      <последовательность     команд>ENDDO        конструкция    «цикл»:
    <последовательность команд> будет выполняться до тех пор (WHILE), пока         остается
    истинным логическое выражение .
DELETE - логическое удаление записей
SET DELETED ON/OFF – включение/отключение режима «невидимости» удаленных записей
RECALL - восстановление логически удаленных записей.
При наборе программы не обязательно вставлять примечания, но обязательно читать и понимать
    их.
Можно (и рекомендуется!) набирать четыре первых буквы команд.

                                Текст программы stud01. prg:
* Иллюстрация к приему удали лишнее
* Отбор студентов – «отличников»
USE students     && в рабочей области A открывается файл students.dbf
BROWSE           && просмотр файла с неудаленными записями
y1=«Балл_сес01» && присваивание переменным y1,y2,y3,y4 значений,
y2=«Балл_сес02» && соответствующих именам полей
y3=«Балл_сес03» && со средними баллами.
y4=«Балл_сес04»
n=1              && переменная для размещения указателя.
* циклически: переход к записи с номером n;
* затем: проверка - (IF, если) год =1998, то помечается к удалению запись с этим номером
*при условии, что в и первой (&y1),и во второй (&y2)сессии оценки не равны 5.
* Здесь, как и выше, макроподстановка & позволяет вставить в команду присвоенное
*переменной при &, в частности, &y1 равносильно Балл_сес01, т.к. выше переменной y1
*было присвоено значение Балл_сес01. Проверка на год поступления нужна для того,
*чтобы не вычеркнуть из списка «отличников» студентов-1998 (у них в полях
*Балл_сес03, Балл_сес04 нули). Затем: удаление из списка студентов-1997, у которых
*оценки во всех сессиях не равны 5. Цикл будет выполняться, пока номер записи n не
*станет равным числу записей reccount( )
* ___________________________________________________________________________
DO WHILE n<=reccount( ) && reccount( )=числу записей в файле.
  GO n                       && переход к записи с номером n

 IF year_start=1998 && проверка условия: год поступл. = 1998.
   DELETE FOR &y1#5.and.&y2#5         && если не «5» - удалить!
 ENDIF              && конец действия условия.

  IF year_start=1997  && проверка условия: год пост=1997.
    DELETE FOR &y1#5.and.&y2#5.and.&y3#5.and.&y4#5
                      && если не все «5» - удалить!
  ENDIF
  n=n+1                && наращивание номера записи.
END DO                 && конец цикла.
SET DELETED ON         && режим, когда удаленные не видны.
BROWSE                 && просмотр «отличников».
SET DELETED OFF && возврат к режиму видны все.
RECALL                 && восстановление логически удаленных.
BROWSE                 && просмотр всех записей.
* ____________________________________________________________________________
       После набора программы запустите ее на выполнение командой