Лабораторная работа № 3.Удаление записей из БД и файлов на диске. Цель:познакомиться с командами удаления данных, удаления файлов на диске. Команды: DELETE, RECALL, PACK, ZAP, ERASE, COPY FILE 1. Открыть БД – KOLLEK.DBF 2. Просмотреть содержимое базы данных на экране. Формат команды DELETE : DELETE [<диапазон>][WHILE<л.усл>][FOR<л.усл>] пометка к удалению записей в указанных границах и / или отвечающих указанным условиям. DELETE без параметров помечает только одну текущую запись. Пример 1. Пометить на удаление все записи, относящиеся к курсам, продолжительностью 10 дней. DELETE FOR LONG=10 2. Снять пометку с двух первых записей GO TOP RECALL NEXT 2 FOR LONG=10 3. Удалить оставшиеся помеченными записи. PACK Формат команды COPY FILE: COPY FILE <путь> <имя файла> TO < путь > < имя файла > 3. С помощью команды COPY FILE создать копию базы данных KOLLEK.DBF , дав ей имя KOLLEK1.DBF. 4. Проработать с БД KOLLEK1.DBF командой ZAP. Команда ZAP удаляет все записи в базе, оставляя структуру.Откроем базу KOLLEK1.DBF . Подадим команду : ZAP 5. Удалить файл KOLLEK1.DBF – команда ERASE <имя файла>. Выполнить самостоятельно 1. Откорректировать структуру БД , внеся еще одно поле, девятое, содержащее информацию о дате заезда (начала курсов) и имеющее тип DATE. 2. Откорректировать записи БД , заполнив поле даты.(У каждой продолжительности курсов своя дата начала их работы.) – команда редактирования записей базы – CHANGE или EDIT или BROWSE. 3.В БД “Студенческий отдел кадров” удалить записи о 3 выпускниках прошлого года. Контрольные вопросы. 1. Что такое –– расширение в имени файла ? Всегда ли оно обязательно при работе в среде FoxPro? 2.Можно ли в команде ERASE указать имя файла без расширения? Лабораторная работа № 4. Создание программных файлов.Организация цикла и разветвления в программе. Цель: дать понятие о программных файлах, о командах по их созданию и запуску, об использовании при написании текста программы команды организации цикла DO WHILE … ENDDO и команды управления IF … ENDIF. Командаы: MODIFY COMMAND, DO, DO WHILE … ENDDO, IF … ENDIF Для вызова внутреннего встроенного редактора FoxPro, с помощью которого создаётся текст программ, служит команда: MODIFIY COMMAND/FILE<имя текстового файла/маска> Вариант MODI COMM считает по умолчанию вновь создаваемый файл командным (программным )файлом и ему прсваивается расширение .PRG Повторный вызов командного файла осуществляется той же командой. Вариант MODI FILE не предусматривает каких-либо умолчаний для имён файлов.Созданная в редакторе программа должна быть сохранена ,например, нажатием сочетания клавиш Ctrl+W и может быть вызвана на выполнение командой: DO <имя командного файла> Команды управления. Команды управления являются важнейшим средством построения программ.Эти программы не могут быть опробованы и использованы в интерактивном режиме , а только в программах. Цикл с условием. Цикл с заранее известным условием его окончания и неизвестным числом повторов, выполняется следующей конструкцией: DO WHILE<условие> <команды> ENDDO Команды заключенные между DO WHILE и ENDDO, будут выполняться до тех пор, пока <условие> истинно. Если требуется покинуть цикл раньше, чем он выработается, необходимо использовать команду EXIT, которая передаст управление команде следую-щей за ENDDO. Если по какому-то условию в теле цикла необходимо передать управление на его начало (не доходя до команды ENDDO) пользуются командой LOOP. 4 Набрать текст следующих коротеньких программ, демонстрирующих использование команды организации цикла DO WHILE…ENDDO и команды управления IF … ENDIF. CLEAR {очистить экран} CLOSE DATABASE {закрыть все базы данных} USE KOLLEK {открыть БД} DO WHILE .NOT. EOF() {команда начала цикла } DISP {вывод текущей записи на экран} SKIP {шаг на следующую запись } ENDDO {команда окончания цикла} ******************************************** CLEAR CLOSE DATABASE USE KOLLEK DO WHILE .T. { начало цикла с "абстрактным" условием} DISP IF .NOT. EOF() { если не достигнут конец БД } SKIP { шаг на одну запись вниз по базе } LOOP { переход на начало цикла} ENDIF { конец условия} EXIT { выход из цикла} ENDDO CANCEL { снять программу} Выйти из редактора с сохранением набранного текста программы - < Ctrl +W > Запустить каждую из них на выполнение . DO < имя прогр >. Пример. Написать программу, выводящую на экран с помощью команды LIST, фамилию, город и продолжительность курсов из БД – KOLLEK.DBF. CLEAR CLOSE DATABASE USE KOLLEK GO TOP DO WHILE .NOT . EOF() LIST NEXT 10 FIELDS FAMIL,GOROD,LONG =INKEY(0) CLEAR ENDDO CANCEL 3. Написать программу, выводящую на экран значения полей фамилии, города и продолжительности курсов из первых десяти записей, базы данных KOLLEK.DBF при условии, что город не Москва. CLEAR 5 SET TALK OFF CLOSE DATABASE USE KOLLEK LIST NEXT 10 FIELDS FAMIL,GOROD,LONG ; FOR GOROD <>’Москва’ Выполнить самостоятельно. 1.Написать программу, выводящую на экран записи БД "порциями" ( по10 записей) с помощью команды DISPLAY. 2.Написать прграмму, выводящую с помощью команды DISPLAY последние 10 записей БД. Контрольные вопросы. 1. Какое расширение имеют имена прграммных файлов в FoxPro? 2.Чем отличаются команды MODI COMM и MODI FILE. Лабораторная работа № 5 (часть I ) Работа с переменными памяти. Цель:освоить навыки работы с переменными памяти ; изучить предназначенные для работы с перем. памяти команды; познакомиться с самой простой командой вывода –– ?,?? Команды: STORE , = , DISP MEMO , ? , ?? , RELEASE, SAVE TO … , RESTORE FROM … Работа с переменными памяти. Пример Создать переменные памяти содержащие следующие значения: числа 5 , 75 , 3586, 11 символы «Маша» , «мыла» , «раму» логические .T. , .F. Это можно сделать с помощью комад : = ,STORE: STORE 5 ,11 TO PM1, РМ2 PM3 = 75 РМ4=3586 STORE «Маша», «мыла», «раму» TO SM1,SM2,SM3 A=TRUE B=FALSE 1. Просмотреть переменные памяти на экране. DISP MEMO 2.С помощью команды ? вывести на экран надпись : Маша мыла раму ? SM1,SM2,SM3 3.Вычислить,пользуясь командой ? ,сколько будет: 3586:11 ? РМ4 / РМ2 4.Удалить переменную PM3. RELEASE PM3 5.Удалить переменные,имеюшие имена на букву S. 6 RELEASE ALL LIKE S* 6. Записать оставшиеся переменные на диск: Формат команды: SAVE TO < файл .mem> [ALL LIKE < шабл. > /EXCEPT< шабл. >] SAVE TO PERPAM ALL LIKE *.* 7.Удалить переменные , записанные на диск (п.7) из оперативной памяти: RELEASE ALL 9.Создать переменную памяти , содержащую значение: “ВЕСНА !!!” STORE “ВЕСНА!!!” TO WES 10.Считать переменные с диска , не потеряв только что созданную: RESTORE FROM PERPAM.mem ADDITIVE Выполнить самостоятельно 1.Даны символьные переменные памяти А1 и В1: А1= «На дворе трава, на траве дрова» В1= «» {пустая переменная} Переставить слова скороговорки из А1 в обратном порядке, поместив результат в В1.Для работы понадобиться функция: SUBSTR(<выр С>,<нач. позиция>,[<число символов>]) –– выделение из <выр С> подстроки, начиная с <нач. позиции> длиной в <число символов>. Контрольные вопросы: 1.Что такое –– переменная памяти ? 2.Смысл знака = в математике и в программировании ? 3.Ограничения на переменные : максимальная длина одной переменной, и максимальное число переменных? Лабораторная работа №5 (часть II ) Работа с полями БД. Цель:посмотреть использование команды ? для просмотра записей базы, познакомиться с командами математической обработки БД –– SUM и COUNT. 1. Просмотреть записи с помощью команды -? . а) вывести на экран поля , содержащие фамилию ,город , и специальность из первой записи в БД GO TOP ? FAMIL,GOROD,SPEC б ) вывести поля фамилии и возраста из 5 – ой записи GO 5 ? FAMIL,WOZR 7 Автоматический подсчет записей –– команда COUNT: С форматом команды COUNT ознакомьтесь,прочитав справочную информацию (в компьютере). 1. Подсчитать количество слушателей прибывших из Москвы. COUNT FOR GOROD=”Москва” 2. Пометить на удаление записи о слушателях десятидневных курсов. DELETE ALL FOR LONG=10 3. Подсчитать общее число слушателей курсов вместе с десятидневными (режим SET DELETED OFF) и поместить рез-ат в перем. Памяти WSE. SET DELETED OFF COUNT TO WSE 4.Подсчитать общее число слушателей курсов без учета помеченных на удаление ( режим SET DELETED ON ). SET DELETED ON COUNT TO ONDEL 5. Подсчитать количество слушателей мужского пола до 30-ти лет и занести результат в переменную памяти под именем МР30. COUNT FOR POL=”м” .AND. WOZR<=30 TO MP30 Суммирование полей записей –– SUM: Формат команды SUM посмотрите в Help на компьютере. 1. Подсчитать плату , внесённую всеми слушателями курсов и поместить её в переменную памяти. SUMMA=000000.00 SUM PLATA TO SUMMA 2. Подсчитать плату , внесённую слушателями десятидневных курсов. SUM PLATA FOR LONG=10 Выполнить самостоятельно 1. Подсчитать количество слушателей москвичей,знающих иностранный язык. 2.Подсчитать сумму, внесённую слушателями 45-ти дневных курсов, прибывших из Читы. Контрольные вопросы: 1.Чем отличаются команды ? и ?? 2.Для чего ещё служит команда ? , кроме вывода содержимого полей БД, символьных констант и переменных памяти на экран? 3. Как изменяет работу команд режим SET DELETED ON/OFF? Лабораторная работа № 6.Стандартные функции FoxPro. Цель:Познакомиться со стандартными функциями FoxPro. 8 В FoxPro создано большое количество стандартных функций, обращение к которым существенно облегчает работу прграммиста. Они используются для анализа или преобразования данных.Синтаксис функции предполагает обязательное наличие скобок, даже если отсутствует параметр. Например, функция –– EOF(),проверяет – достигнут или нет конец файла базы.Все функции можно подразделить по их работе на: Математические, Функции работы с БД, Функции работы с датой, Функции работы со строками, Функции преобразования типов данных, Функции проверки файлов и дисков, Функции позиционирования выдачи данных, Функции работы с мышью, Клавишные функции, Функция макроподстановки и некоторые другие. Ниже даны описание и примеры работы некоторых функций. Результаты выполнения приведены справа после знаков && –– комментария. Функция преобразования числового <вырN> в символьную строку, включающую знак минус (если есть) и десятичную точку, общей длиной <длина>, c заданным количеством <десятичных знаков>.Если <длина> не указана, берётся длина 10.Если не указаны <десятичные знаки>, число округляется до целого значения, и вообще в случае уменьшения длины дробной части оно округляется. STR(<вырN>,[<длина>],[<десятичные знаки>]) Пример: ? STR(278.985,8,2) && 278.99 Функция определения длины строки. Длина нулевой строки (‘’) равна нулю. LEN(<выр С>) Пример: ? LEN(‘математика’) && 10 Функция преобразования выражения типа дата в символьное . DTOC(<вырD>[,1]) Необязательный параметр “1” означает,что формируемая строка будет не символьным отображением даты в каком – либо формате даты, а сплошной строчкой из четырёх цифр года, двух цифр месяца и дня – ГГГГММДД.Такое изображение даты удобно при индексировании с составным ключом, в котором есть дата. Пример ? DTOC({05.10.91}) && 05.10.91 ? DTOC({05.10.91},1) && 19911005 Функция выдаёт ASCII - код первого символа из символьного выражения. ASC(вырC) 9 Пример: ? ASC(“Воробей”) && 66 ? ASC(“A”) && 65 Функция определения достижения начала базы данных в текущей или указанной области. BOF([<область>]) Функция принимает значение .Т., когда указатель записи пытаются перевести с первой записи за пределы базы. Выполнить самостоятельно 1.Пользуясь справочной информацией (в компьютере) в FoxPro изучить необходимые в дальнейшей работе функции преобразования типов данных, работы с датами, строковые функции, функции проверки файлов и дисков. 2. Перекодировать слово ЛЕВ в КИТ, пользуясь функциями SUBSTR(),ASC(),STR() и таблицей ASCII – кодов. Вывести исходное слово и результат перекодировки на экран. Контрольные вопросы: 1.Что является обязательным в синтаксисе функций? 2. Приведите примеры функций без параметров. Лабораторная работа № 7. Команды ввода – вывода. Цель:познакомиться с командами ввода – вывода : Команда INPUT; Форматированный ввод-вывод –– @ X,Y,SAY … GET … Команда INPUT служит для ввода данных с клавиатуры. Формат команды: INPUT<подсказка> TO <перем.пам.> . 1.Выведите сообщение - подсказку: "Введите стоим. одного академ. часа занятий алгеброй" и примите эту цифру в переменную памяти STOIM . INPUT <Введите стоим. одного академ. часа занятий алгеброй> TO STOIM При вводе данных следует набрать: 35 2. Выведите сообщение :"Ваше любимое имя" и введите ответ в переменную памяти NAME: INPUT <Ваше любимое имя> TO NAME При вводе данных следует набрать, допустим, “Люся” Работа с командой форматированного ввода – вывода: @ X,Y SAY <симв.выр.> GET <перем. пам.>, здесь X и Y –– координаты экрана. Вывести на экран сообщение :”Введите ваше имя” и принять введенное имя в переменную памяти IMYA. 10 IMYA=SPACE(8) @ 5,10 SAY “Введите Ваше имя” GET IMYA READ Переменная памяти, в которую осуществляется ввод по команде GET , должна быть ранее объявлена в программе. Для активизации ввода после GET всегда должна следовать команда READ. Пример Выведите на экран содержимое полей последней записи в БД KOLLEK.DBF, воспользовавшись командой форматированного вводавывода, и дополните БД одной записью, заполнив её данными с помощью той же команды. CLEAR USE KOLLEK GO BOTTOM @ 5,10 SAY “Фамилия” + FAMIL @ 5,30 SAY “Город” + GOROD @ 7,10 SAY “Специальность” + SPEC @ 7,30 SAY “Плата” + STR(PLATA) @ 9,10 SAY “Возраст” + STR(WOZR) @ 11,30 SAY “Пол” + POL @ 13,10 SAY “Знание ин. языка” + IIF ( INJAZ, “T”, “F”) @ 15,30 SAY “Продолжительность курсов” + STR(LONG) WAIT APPEND BLANK CLEAR @ 3,10 SAY “Введите следующие данные в запись:” @ 5,10 SAY “Фамилия” GET FAMIL @ 7,10 SAY “Город” GET GOROD @ 9,10 SAY “Специальность” GET SPEC @ 11,10 SAY “Плата за курсы” GET PLATA @ 13,10 SAY “Возраст” GET WOZR @ 15,10 SAY “Пол” GET POL @ 17,10 SAY “Знание ин. языка” GET INJAZ @ 19,10 SAY “Продолжит. Курсов в днях” GET LONG READ Выполнить самостоятельно: 1. Написать программу –– игра с компьютером в отгадывание загадок. Для этого создать базу данных, записи которой состоят из двух полей: загадка и отгадка. Используя команду форматированного вводавывода организовать диалог компьютера с играющим: компьютер знакомится с играющим, выводит загадку и просит ввести ответ. Следует пояснить играющему в каком виде вводить ответ. Ответ следует сравнить с хранящимся в базе и сообщить – правилно отгадано или нет. В случае неверного ответа предложить ещё одну попытку, и в любом 11 случае выводить для отгадывания следующую загадку. В счётчике подсчитывать количество отгаданных загадок, и выдать эту информацию на экран по окончании игры. Контрольные вопросы: 1.Каковы могут быть значения координат X и Y в команде форматированного ввода-вывода? (Сколько на экране строк и столбцов?) 2.Возможно ли употребить команду GET в виде: @ X,Y GET <имя перем. пам.> Проверьте. Лабораторная работа № 8.Сортировка и индексирование БД. Цель:научиться упорядочивать записи в БД;знакомство с командой сортировки.Понятие индекса БД. Команда SORT (сортировка ) требует для своего выполнения в три раза больше места на диске, чем занимает БД: промежуточные файлы и результат сортировки переписывается в новую базу , на новое место на диске.Формат команды сортировки: SORT TO<поле1> ON<>[/A][/C][/D] [,<поле2>[/A][/C][/D]…] [ASCENDING|DESCENDING] <сфера>[FOR<вырL1>][WHILE<вырL>[FIELDS<команды>] [NOOPTIMIZE] Команда SORT : 1. Отсортировать файл БД по полю фамилии. SORT TO FAMST ON FAMIL 2. Посмотреть результат сортировки. USE FAMST LIST 3.Отсортировать файл БД по двум полям специальность и город, в порядке убывания. SORT TO SPGORST ON SPEC,GOROD /D 4. Посмотреть результат сортировки . USE SPGORST LIST Индексирование базы – это тоже её упорядочивание по заданному полю БД, которое называют ещё ключом или индексом. Только переписывания базы на новое место не производится. Cоздаётся индекс – файл, имеющий расширение .IDX, в котором запоминаются номера записей и значение ключа в том порядке, в котором они должны быть после упорядочивания по данному полю – ключу. В дальнейшем, если созданный индексный файл открыт , команды работают с базой , считая ее упорядоченной (проиндексированной) по заданному ключу. Формат команды INDEX: 12 IINDEX ON <симв.выраж.> TO <Имя индексного файла> [UNIQUE] Где <симв.выраж.> — это ключ или конкатенация ключей, т.е. символьных полей БД. Пример индексирования БД: 1. Открыть исходную БД . USE KOLLEK 2.Проиндексировать БД по полю фамилия. INDEX ON FAMIL TO FA 3. Посмотреть результат (Вывести записи базы на экран) . LIST Посмотреть .IDX – файл во встроенном текстовом редакторе FoxPro (с помощью команды MODIFY FILE <имя IDX – файла>) Пример индексирования по полям разных типов: 1. Проиндексировать БД по полю специальность и возраст . INDEX ON SPEC + STR( WOZR ) TO SPWZ !!!Обратить внимание при подаче команды ,что тип поля WOZR - числовое. Функции преобразования полей других типов в символьные : STR() -для числовых ; DTOC() – для поля даты. Пример индексирования с FOR – условием (создание усечённого индекса) 1. Проиндексировать базу по полю фамилии при условии, что поле POL=”M”. INDEX ON FAMIL FOR POL=”M” Посмотреть результат такой индексации. При использовании БД, проиндексированной с FOR-условием мы имеем дело только с записями базы, удовлетворяющими заданному условию. Такой индекс называют неполным. Открыть существующий индексный файл можно одной из команд: USE<Имя БД> INDEX <Список индексов> Для уже открытой БД: SET INDEX TO<Список индексов> Выполнить самостоятельно. 1.Создать для БД KOLLEK.DBF неполный индекс по двум полям :FAMIL и PLATA, включив в него только москвичей. 2.Создать индекс по двум полям: FAMIL и DATEZ (дата заезда) Контрольные вопросы: 1. Чем неудобна команда сортировки SORT ? 2. Что такое индексный файл или индекс? 3. Что такое –– КЛЮЧ сортировки или индексирования? 13 Лабораторная работа № 9. Поиск в БД. Цель:научиться работать с командами поиска в БД, фильтровать данные Фильтрация данных. Поиск в неиндексированной базе данных:LOCATE…CONTINUE. Поиск в индексированной базе данных: SEEK-команда, SEEK() функция,LOOKUP() - функция. Фильтрация данных. SET FILTER TO[<условие>] Команда позволяет установить FOR - условие для всех без исключения команд обработки данных. Здесь условие указывает на то, какие именно записи могут быть доступны для обработки. Пример SET FILTER TO GOROD=’Москва’ Сделает доступными для обработки только записи о слушателях курсов, приехавших из Москвы. Команда SET FILTER TO без параметров снимает все ограничения на предьявление записей из текущей базы. Последовательный поиск. Формат команды: LOCATE[<диапазон>][FOR<логич.усл1>] [WHILE<логич.усл2>] <команды FoxPro> [CONTINUE] Пример Найти всех сотрудниц по имени Татьяна в файле Kadr USE Kadr LOCATE FOR Name=’Татьяна’ DO WHILE.NOT.EOF() ? Famil,Name CONTINUE ENDDO Команда LOCATE ищет первую запись в БД по заданному условию, остальные записи ищет команда CONTINUE (её следует поместить в цикл). Быстрый поиск в индексированной БД. SEEK<выражение> 14 Команда разыскивает только одну первую запись, в которой в индексном поле наблюдается <выражение>, т.е. когда < поле>=<выражение>, и устанавливает на неё указатель записи. Пример Найдём в БД Kadr сотрудника с табельным номером 217.Тип поля TAB –числовой. USE Kadr INDEX KadrTab SEEK 217 DISP FIELDS Tab,Famil Функция поиска LOOKUP(<поле1>,<выр>,<поле2>) Будет возвращено содержание <поле1>,условие поиска записи в БД –– вхождение <выр> в <поле2>. Пример Найти и вывести на экран фамилию сотрудника БД , начинающуюся на букву «П» и табельный номер, соответствующий этому сотруднику. ? LOOKUP(tab, ‘П’, Famil),‘ ‘, Famil Выполнить самостоятельно. 1.Вывести на экран список женщин, приехавших на курсы,продолжительностью 10 дней? 2. Найти слушателя курсов – женщину с фамилией Зуб,сменить фамилию на Фролова. Контрольные вопросы: 1.Команда LOCATE… предполагает работу с неупорядоченной базой данных, а если перед использованием команды базу проиндексировать по полю,которое фигурирует в условии поиска LOCATE…? Каков будет результат? 2.Почему команда SEEK называется командой быстрого поиска? Ваши соображения ? Лабораторная работа № 10.Создание меню. Цель: Познакомиться со всеми командами создания меню и научиться создавать dBASE –– меню. Перечислим существующие команды создания меню: 1.Простейшее меню можно создать с помощью команд: @ x,y prompt “1…” –– описывает форму и содержание. мenu to m –– помещает в переменную m номер выбранной с помощью курсора строки меню 15 Выявление выбора пользователя в программе осуществляется путём анализа переменной m, обычно в структуре: DO CASE…ENDCASE. 2.Вертикальное меню можно создать с помощью команд: @ y,x MENU<массив> <вырN1>[,<вырN2>][TITLE <вырС>] –– описывает форму и содержание. READ MENU TO <перем.> [SAVE] –– активизирует меню. Выявление выбора пользователя в программе осуществляется путём анализа <переменной>, обычно в структуре: DO CASE … ENDCASE. 3.Двухуроневое PULLDOWN –– меню: MENU BAR <массив>,<вырN> –– определение главного горизонтального меню. MENU <вырN1>,<массив>,<вырN2>[,<вырN3>] –– определение вспомогательного POPUP – меню и его привязка к соответствующему пункту главного меню. READ MENU BAR TO <перем1>,<перем2>[SAVE] –– активизация меню. Для всех трёх видов описанных меню, в случае неоднократного обращения в программе необходима организация цикла по его регенерации. Указанного недостатка лишено dBASE - меню. DBASE – меню имеет два типа элементарных меню: вертикальное (“всплывающее”, или POPUP- меню) и горизонтальное (BAR – меню). Вот схема dBASE – меню: 16 __________________________ BAR – меню _________________________ PAD - меню PAD - меню … PAD – меню I ____ POPUP – меню ___ BAR – пункт BAR – пункт … BAR – пункт ______________________ Пример dBASE – меню: Горизонтальное BAR–меню будет иметь три пункта : названия времён года –– Зима и Весна, и третий пункт - Выход.При выборе одного из пунктов, называющих время года, будет появляться вертикальное POPUP-меню, предъявляющее названия трёх месяцев этого времени года, а при выборе каждого из названий месяцев будет выполняться команда или процедура, выводящая на экран текст –– строчку из стихотворения, относящуюся к этому времени года. Такое содержание меню делает прозрачным его структуру и позволяет полностью сосредоточиться на усвоении команд, её организующих, что для начала и требуется. Текст программы: DEFINE MENU mainmenu SHADOW,COLOR,RB/W DEFINE PAD zima OF mainmenu PROMPT ‘\<Зима’ DEFINE PAD wesna OF mainmenu PROMPT ‘\<Весна’ DEFINE PAD wichod OF mainmenu PROMPT '\<Выход' *вызов вспомогательного POPUP – меню mzima к pad- пункту zima on pad zima of mainmenu activate popup mzima * вызов вспомогательного POPUP – меню mwesna к pad – пункту wesna on pad wesna of mainmenu activate popup mwesna * выход из прграммы по выборе pad – пункта wichod on selection pad wichod of mainmenu cancel * определение POPUP – меню mzima define popup mzima *описание элементов POPUP - меню define bar 1 of mzima prompt ‘Декабрь’ define bar 2 of mzima prompt ‘Январь’ define bar 3 of mzima prompt ‘Февраль’ *определение реакции меню при выборе BAR- пункта 17 on selection bar 1 of mzima ? 'Снег на крыше,на крылечке.' on selection bar 2 of mzima ?'В январе,в январе много снегу на дворе' on selection bar 3 of mzima ? 'Дуют ветры в феврале.Воют в трубах громко' *определение POPUP – меню mwesna define popup mwesna * описание элементов POPUP- меню define bar 1 of mwesna prompt 'Март' define bar 2 of mwesna prompt '\-' define bar 3 of mwesna prompt 'Апрель' define bar 4 of mwesna prompt '\-' define bar 5 of mwesna prompt 'Май' on selection bar 1 of mwesna do w1 on selection bar 3 of mwesna do w2 on selection bar 5 of mwesna do w3 ACTIVATE MENU mainmenu ON SELECTION PAD zima OF mainmenu ACTIVATE POPUP mzima ON SELECTION PAD wesna OF mainmenu ACTIVATE POPUP mwesna PROCEDURE W1 &&---------------------------------Mart PUSH KEY CLEAR DEFINE WINDOW Mart FROM 5,11 to 15,47 IN SCREEN DOUBLE ACTIVATE WINDOW Mart @ 1,2 SAY '' @ 2,2 SAY '' @ 3,2 SAY '' @ 4,2 SAY '' WAIT 'Нажмите клавишу пробела' DEACTIVATE WINDOW Mart POP KEY PROCEDURE W2 &&---------------------------------Aprel PUSH KEY CLEAR DEFINE WINDOW Aprel FROM 5,11 to 15,47 IN SCREEN DOUBLE ACTIVATE WINDOW Aprel @ 1,2 SAY '' @ 2,2 SAY '' @ 3,2 SAY '' @ 4,2 SAY '' WAIT 'Нажмите клавишу пробела' DEACTIVATE WINDOW Aprel POP KEY RETURN PROCEDURE W3 &&---------------------------------Mai 18 PUSH KEY CLEAR DEFINE WINDOW Mai FROM 5,11 to 15,47 IN SCREEN DOUBLE ACTIVATE WINDOW Mai @ 1,2 SAY 'Люблю грозу в начале мая,' @ 2,2 SAY 'Когда весенний первый гром,' @ 3,2 SAY 'Как бы резвяся и играя,' @ 4,2 SAY 'Грохочет в небе голубом.' WAIT 'Нажмите клавишу пробела' DEACTIVATE WINDOW Mai POP KEY RETURN CANCEL Выполнить самостоятельно 1. Создать dBASE-меню для задачи:"Рабочее место сотрудника отдела кадров". 2. Создать dBASE-меню для задачи: "Телефонный справочник"(телефоны частных лиц и учреждений). Контрольные вопросы. 1. В чём главное примущество dBASE-меню перед всеми остальными? 2. Назовите основные группы команд для работы с dBASE-меню. Лабораторная работа № 11. Работа с несколькими БД. Цель: Научиться работать с несколькими базами данных. В FoxPro можно обрабатывать сразу несколько баз данных. Каждый такой файл типа .DBF и все вспомагательные файлы (например, индексные) открываются в своей отдельной рабочей области.Переход из области в область осуществляется командой: SELECT <номер рабочей области/буквенное обозначение области> Псевдонимом области по умолчанию является само имя находящегося в ней файла базы данных.В качестве псевдонима можно указать и любое другое слово в команде USE. Использование псевдонима позволяет при работе с разными базами называть их одним именем (псевдонимом).Это делает программу независимой от имени конкретной базы. Область в которой мы находимся в данный момент, называется активной рабочей областью. Одновременно можно обратиться из активной рабочей области к полям других баз. В этом случае имя поля из неактивной области должно быть составным: <рабочая область>< псевдоним>< имя поля> или <рабочая область>< псевдоним>< имя поля> <Рабочая область> в составном имени может указываться буквой, 19 именем её базы данных, псевдонимом, но не номером. Номер может быть указан в команде SELEKT и в функциях. Ни одно из полей записи базы данных KOLLEK.DBF не идентифицирует слушателя курсов вполне однозначно, т.е. могут быть совпадающие фамилии, специальности и т.п. Введём в структуру записи ещё одно поле – идентификационный номер слушателя(IDENT). Рассмотрим задачу организации отъезда слушателей по окончании курсов. База данных будет со держать информацию о заказанных билетах и выполненных заказах. Структура этой БД, назовём её ZAKAZ.DBF, следующая: Содержание и имя поля 1.Идентификатор (IDENT) 2.Дата заезда (DATAZ) 3.Дата выбытия (DATAV) 4.Вид транспорта (TRANS) 5.Наличие билета (YESNO) Тип поля Размерность Numeric 5 Data 8 Data 8 Character 5 Logical 1 Длина дробной Части Установим связь между БД вида одна-запись-с-одной.Для этого файл, с которым устанавливается связь, должен быть проиндексирован по общему полю-ключу. Формат команды: SET RELATION TO <ключ> INTO <область> [,<ключ> INTO<область>…] [ADDITIV] Пример.По идентификационному номеру слушателя найти его фамилию и информацию о наличии билета. В нашем случае поле-ключ –– это идентификационный номер слушателя.В основной базе-KOLLEK.DBF ищем по номеру фамилию. База, с которой устанавливается связь –– ZAKAZ.DBF. SELE A USE KOLLEK базы в обл. А SELE B 20 && открытие старшей USE ZAKAZ && открытие младшей базы в обл. В INDEX ON IDENT TO ZAKAZ * установление связи одна-с- одной базы KOLLEK.DBF с базой ZAKAZ.DBF SELE A SET RELATION TO IDENT INTO B BROWSE FIELDS A.FAMIL:H = 'Фамилия ', A.IDENT : H = 'Номер ', B.IDENT :; H = 'Номер/Заказ ', B.YESNO : H = ' Взят билет',B.DATAV : H = 'Дата_отъезда ' SET RELATION TO && отмена всех связей В FoxPro можно устанавливать связи с несколькими базами одновременно. Если со старшим файлом, который уже связан с другим, необходимо связать некоторый третий (четвёртый и т. д.), следует во все последующие команды SET RELATION включать слово ADDITIVE , которое обеспечит сохранение связей, установленных ранее. Связь вида одна-запись-со-многими. Следующая команда устанавливает связь такого типа между двумя или несколькими базами данных: SET SKIP TO [<область1>[,<область2>]…] При этом с каждой записью из старшей базы могут быть сцеплены несколько записей из младшей базы.Связь м.б. установлена сразу с несколькими младшими базами, находящимися в указанных областях. Прежде чем использовать команду SET SKIP, необходимо выполнить начальное сцепление вида одна-запись-с-одной командой SET RELATION. Для рассмотрения организации связи одной базы с несколькими по схеме одна-запись-со-многими, создадим ещё одну базу данных, которая будет содержать результаты тестирования слушателей курсов по трем различным направлениям, и поэтому в такой БД одному и тому же идентификационному номеру будет соответствовать несколько записей. Структура базы данных, назовём её TEST.DBF, следующая Имя поля Тип поля Размерность 1.Идентификат ор IDENT 2.Рез-ат теста TEST Numeric 5 Длина дробной части –– Numeric 3 –– 21 Пример Требуется для заданного (введённого с клавиатуры) идентификационного номера и фамилии из базы данных KOLLEK.DBF предъявить результаты по всем трём тестам из базы TEST.DBF, которая проиндексирована по полю IDENT. SELE A USE KOLLEK.DBF INDEX ON IDENT TO KOLLEK SELE B USE TEST.DBF INDEX ON IDENT TO TEST SELE A SET RELATION TO IDENT INTO B && Установление связи одна-с-одной SET SKIP TO B && Установление связи одна-со-многими NOM=00000 @ 2,2 SAY "Введите нужный идентиф.номер" GET NOM READ SEEK NOM BROWSE FIELDS A.FAMIL:H='Фамилия', A.IDENT:H='Идентифик.', B.TEST:H='Рез-ат 1-го теста', B.TEST:H='Рез-ат 2-го теста'.; B.TEST:H='Рез-ат 3-го теста' SET RELATION TO && Отмена всех связей Выполнить самостоятельно 1.Использовать БД Kadr.dbf и БД Sprav.dbf для расчёта почасовой оплаты труда работника, табельный номер которого и количество отработанных часов вводятся с клавиатуры.Запись БД Sprav.dbf содержит два поля – разряд (Razr) и тариф (Tarif), всего 16 записей (по числу разрядов).На экран вывести фамилию работника, рассчитанную зарплату и тарифную ставку. 2.Написать программу поиска по введённому табельному номеру сотрудника в БД Kadr.dbf и вывода из связанной с ней БД Adress.dbf информации об адресе, по которому проживает сотрудник. Контрольные вопросы. 1. Объясните понятие –– “Рабочая область”. 2. Какие связи могут быть установлены между файлами баз данных? 22 Литература При работе над практикумом была изучена следующая литература: 23 1. Попов А.А. Создание приложений для FoxPro 2.5/2.6 в DOS и WINDOWS.– М.:Издательство “Калашников и К°”,1997. 2. Каррабис Дж.-Д. Программирование в dBASE III Plus: Пер. с англ./ – М.: Финансы и статистика, 1991. 3. Зубов В.В. CLIPPER & FOXPRO.Практикум пользователя.Издание 2-е, переработанное и дополненное.– М.: Информационно-издательский дом “Филинъ”, 1996. 4. Девис У. Операционные системы. Функциональный подход.:Пер. с англ./– М.: Издательство Мир», 1980. 5. Бемер С. FoxPro 2.5 для Windows.: Пер. с нем./ – К.:Торгово-издательское бюро BHV,1994. 24