Таблица 3.1 – Поля таблицы “Table_Goods”
Значение поля | Имя поля | Тип | Длина |
Наименование | Name_unit | Character | 20 |
Цена за единицу товара | Price_unit | Currency | |
Количество | Amount | Integer | |
Единица измерения | Unit_measure | Character | 5 |
Дата поступления | Date_recep | Date | |
Качество товара | Quality_goods | Character | 7 |
Поставщик | Supplier | Character | 20 |
Общая сумма ( вы- числяемое поле) | Sum=Amount*Price_unit | Numeric |
Составление программных запросов к базе данных
Приступим к программной реализации базы данных. Вообще следует отметить, что в Visual FoxPro существуют 2 пути реализации почти любой задачи: визуальный и программный. В первом случае необходимые действия выполняются с помощью команд меню самого FoxPro и специализированных мастеров. Во втором – с помощью встроенного языка программирования, унаследованного еще от ранних версий. Во всех случаях мы будем пользоваться вторым способом, кроме самого создания базы данных. Дело в том, что на первом этапе необходимо создать так называемый проект Visual FoxPro, в состав которого в дальнейшем будут входить все без исключения используемые нами компоненты. Для большей наглядности желательно создавать проект “вручную”. Кроме того, существуют 2 вида таблиц FoxPro: свободные и связанные, т.е. входящие в состав баз данных. Наша таблица относится ко второму типу, в то время как команда CREATE TABLE создает свободную таблицу. С учетом этого, создание базы данных проведем визуально, а все остальные манипуляции – программно.
Создание базы данных
База данных создается с помощью Диспетчера проектов Visual FoxPro. Сначала создадим новый проект. Назовем его Kurs и разместим его в папке MyProject.
Рисунок 4.1.1 – Окно диспетчера проектов
Все компоненты, которые мы сможем создать, можно связать с проектом, при этоим они будут храниться в “родном” каталоге проекта.
Теперь можно создавать базу данных. Щелкнув правой кнопкой мыши на подраздел “Базы данных” раздела “Данные”. Необходимо ввести имя будущей базы данных. Новую базу данных сохраняем в папке проекта. После этого появляется окно Дизайнера баз данных. С его помощью можно добавлять в базу данных новые компоненты: таблицы, запросы, локальные и удаленные представления, соединения и внедренные процедуры.
Рисунок 4.1.2 – Окно Дизайнера баз данных
С помощью Дизайнера баз добавим в проект таблицу.
После присвоения имени новой таблице создаем ее структуру в соответствии с заданием. Структура таблицы представляет собой список полей и их характеристику: тип данных, размер, длину символьного представления (для типа Character) и др. В поле “Caption” можно указать надпись-заголовок столбца для каждого поля, которая будет высвечиваться при отображении таблицы.
Рисунок 4.1.5 – Создание структуры таблицы
После завершения ввода можно просмотреть полученную структуру пустой таблицы, выбрав в меню команду Browse.
Заполнить таблицу можно при помощи той же команды, если выбрать в меню “Edit” пункт “Append mode” (“Режим добавления”). Результат заполнения таблицы данными показан на рисунке 4.1.6.
Рисунок 4.1.6 – Записи таблицы Table_Goods.
Выполнение фильтрации, индексации, поиск записей
В FoxPro есть команда
SET FILTER TO <условие>,
которая позволяет установить FOR-условие для всех без исключения команд обработки данных. Здесь <условие> указывает на то, какие именно записи могут быть доступны для обработки.
Выполним фильтрацию по полю “Поставщик”. Если после этого, например, написать команду BROWSE, то это будет эквивалентно BROWSE FOR supplier=’Россия’.
Рисунок 4.2.1 – Результат фильтрации по полю supplier.
Создание индексных файлов в базах данных преследует цель ускорения поиска записей и для упорядочения записей в таблицах. Вообще в FoxPro существуют 2 типа индексных файлов: *.idx (обычный индексный файл) и *.cdx (составной индексный файл, содержащий несколько индексов). В нашем случае требуется произвести индексацию по одному полю – полю “Количество товара”, поэтому создаем обычный индексный файл indtab.idx в папке проекта с помощью команды:
INDEX on amount to C:\MY_WORKS\TRANSF~1\MYPROJ~1\indtab
Следует отметить, что такое индексирование проводится только по возрастанию. Отобразим полученный результат с помощью команды LIST
LIST amount, name_unit, price_unit
Полученный результат отображен на рисунке 4.2.1
Рисунок 4.2.1 – Результат индексирования.
Отобразим все записи о товарах низкого качества
BROWSE FOR quality_goods='низкое'
Рисунок 4.2.2 – Записи о товарах низкого качества.
Найдем номер первой из записей о товаре в количестве 10.
LOCATE FOR amount=10
Найдя запись, FoxPro установит внутренний указатель на требуемую запись, не выводя никаких сообщений. То, что запись была найдена, можно увидеть в строке состояния главного окна FoxPro.
Рисунок 4.2.3 – Строка состояния FoxPro.
Полный текст программы приведен в приложении А.
Поиск записей с помощью циклов WHILE и SCAN
Для последовательного поиска самой первой записи базы данных, удовлетворяющей заданному FOR-условию и до тех пор, пока соблюдается WHILE-условие (если есть), применяется команда LOCATE. Для продолжения поиска, начатого командой LOCATE, применяется команда CONTINUE.
Реализация итерационных циклов, т. е. циклов с заранее известным условием их окончания и неизвестным числом повторов, выполняется следующей инструкцией:
DO WHILE <условие>
<команды>
ENDDO
Для последовательного просмотра базы данных, поиска всех записей, удовлетворяющих условиям и выполнения над найденными записями каких-либо операций, служит команда SCAN.
SCAN[<границы>] [FOR <условие>]
<команды>
ENDSCAN
По заданию необходимо найти все товары, поставленные из России, а также общую стоимость всех товаров, поступивших на склад в период с 15.01.2001 по 15.03.2001. Каждый из этих запросов, в свою очередь, реализован в 2-х вариантах: с использованием цикла WHILE и с использованием цикла SCAN. Полный текст программы приведен в приложении Б, а результат работы – на рисунке 4.3.1.
Рисунок 4.3.1 – Результаты работы программы.
Построение меню и выдача сообщений
Для организации в программах POPUP-меню необходимо сначала определить параметры будущего меню с помощью команды
DEFINE POPUP <POPUP- меню>,
куда входит еще довольно много параметров. Выдача меню производится по команде
ACTIVATE POPUP <POPUP-меню>.
Для выполнения какого-либо действия при нажатии клавиши или сочетания клавиш, используется следующая команда:
ON KEY [LABEL< имя клавиши>] [команда].
По заданию требуется вывести POPUP-меню с полями Name_unit, Quality_goods, Supplier, если в таблице БД есть товары с ценой < 100 р. Кроме того, при нажатии Alt+ F1 необходимо вывести сообщение ‘Ошибка памяти’. Полный текст программы приведен в приложении В, а результат работы – на рисунках 4.4.1 и 4.4.2.
Рисунок 4.4.1 – POPUP-меню.
Рисунок 4.4.2 – Сообщение, выдаваемое по Alt+F1.
Изучение графических возможностей
FOX PRO содержит средства создания изображений из элементов псевдографики:
@ <Y1,Х1,Y2, Х2> BOX <вырC>.
Команда формирует в заданных координатах рамку фон прямоугольника из любых символов, которые включены в <вырC>. Это символьное выражение может содержать до 9 символов (по 4 символа для углов и сторон прямоугольника, начиная с левого верхнего угла по часовой стрелке).
@ <Y1,Х1> TO <Y2,X2>[DOUBLE/PANEL/<окантовка>] –
команда формирует рамку с координатами X1, Y1 и X2, Y2.
@ <Y,Х> SAY <текст> –
команда выводит текст, начиная с координат X,Y.
Для задания цвета во всех вышеприведенных командах используется опция COLOR с указанием необходимой цветовой схемы. Причем при описании цвета необходимо указать не только цвет элемента, которого мы хотим нарисовать, но и цвет фона, на котором производится рисование (в нашем случае – белый).
В задании необходимо построить диаграмму количества товаров. Из-за недостатка места выведены не названия, а номера товаров. При этом столбец, относящийся к самому дорогому товару, нарисован красным цветом, а к самому дешевому – зеленым, о чем сказано в легенде.
Полный текст программы приведен в приложении Г, а результат работы – на рисунке 4.5.1.
Рисунок 4.5.1 – Диаграмма количества товаров.
Использование модулей (подпрограмм)
В языке FoxPro могут использоваться внешние и внутренние процедуры.
Внешняя процедура – это совокупность команд, осуществляющих обычно какие-то законченные действия по обработке данных и образующих отдельный командный файл, т. е. отдельно программу (модуль).
Обращение к процедуре выполняется командой DO:
DO <имя командного файла>
[WITH <список параметров>][IN <файл>]
В процедуру могут быть переданы и из нее получены некоторые величины, указанные в списке параметров после слова WITH. Этими величинами могут быть не только переменные и константы, но любые разрешенные выражения. В таком случае первой командой в вызываемой процедуре должна быть команда, воспринимающая их: