Рисунок 4.7.1 – Таблица данных для помощи.
Для вызова процедуры помощи применена команда ON KEY LABEL. В процедуру Helper передается один параметр – имя поля исходной таблицы товаров, которое требуется пояснить. Функция VARREAD() возвращает имя переменной памяти, элемента массива или поля (прописными буквами), использованного для создания текущего элемента управления.
В процедуре осуществляется поиск по этому полю, и, если таковое найдено, соответствующее MEMO-поле выводится с помощью процедуры MESSAGEBOX.
Полный текст программы приведен в приложении Е, а пример экрана помощи, выдаваемого пользователю при нажатии клавиши F1 в тот момент, когда курсор находится в поле “Дата поступления” исходной таблицы, приведен на рисунке 4.7.2.
[pic]
Рисунок 4.7.2 – Пример экрана помощи.
8. Создание новых таблиц и арифметические действия
При копировании открытого файла DBF в новый файл, который этой командой создаётся, используется команда
COPY TO
[] [FIELDS ]
[FOR < условие>] [WHILE ]
[TYPE ] [WITH CDX]
В новый файл могут копироваться как все поля базы данных, так и только перечисленные в списке FIELDS. Копируемые поля могут находиться не только в файле из рабочей активной области, но и в любом другом файле БД из других рабочих областей. В этом случае имена полей – составные (имя базы и имя поля).
Существует команда, выполняющая физическое упорядочение файла:
SORT TO
[ASCENDING/DESСENDING]
ON [/A] [/D] [/C] [, [/A] [/D] [/C]...]
[] [FOR ] [WHILE ]
[FIELDS ]
Команда создает из активной БД новый файл , в котором записи расположены в возрастающем (/А) или убывающем (/D) порядке относительно указанного поля /полей. Если параметр сортировки не указан, по умолчанию подразумевается /А - возрастание. Ключ /С означает, что при сортировке будет игнорироваться регистр букв (строчные /заглавные). Допускается соединение ключа С с другими ключами, например /DC.
Для выполнения арифметических операций с базой данных можно использовать следующие команды:
COUNT [][WHILE ]
[FOR ][TO ]
По команде COUNT подсчитывается число записей в заданных границах, удовлетворяющих условиям, которое заносится в указанную .
SUM [][WHILE ]
[FOR ]
[ТО /ТО ARRAY ]
По команде SUM суммируются значения перечисленных числовых полей указанные или . В списке выражений разрешается указывать не только имена числовых полей, но и функции от них и функции от нескольких полей одновременно. Это значит, что можно воспользоваться функцией STR() и просуммировать символьные поля с цифровыми данными. Можно просуммировать квадратные корни величин и т.д. Если не было к моменту исполнения команды, то они будут созданы, однако должен уже существовать.
AVERAGE [][WHILE ]
[TO /TO ARRAY ]
По этой команде подсчитывается среднее арифметическое при тех же допущениях, что и для предыдущей команды.
По условию требуется:
- Создать файл New_goods с полями Name_unit, Price_unit, Amount,
Unit_measure для всех товаров с ценой > 50;
- Создать файл Sort_goods с полями Name_unit, Price_unit, Amount,
Quality_goods. Файл отсортировать по полям: Price_unit – по возрастанию, Name_unit – по алфавиту;
- Подсчитать число товаров на ’С…’, общую сумму всех товаров и среднее арифметическое цены товаров.
Следует отметить, что сложная сортировка в данном задании отличается от индексации во втором задании. При упорядочении первое указанное поле является основным. В нашем случае это цена. Если же в таблице встретятся несколько строк, в которых будет совпадать цена, то в силу вступает второй параметр – а именно, товары с одинаковой ценой будут отсортированы по алфавиту. В таблице Table_Goods записи с одинаковой ценой отсутствуют, поэтому продемонстрировать сортировку по алфавиту одновременно с сортировкой по цене не представляется возможным.
Полный текст программы приведен в приложении Ж, а результаты работы программы – на рисунках 4.8.1 – 4.8.3.
Рисунок 4.8.1 – Структура таблицы New_Goods.
Рисунок 4.8.2 – Структура таблицы Sort_Goods.
Рисунок 4.8.3 – Результаты работы программы.
ЗАКЛЮЧЕНИЕ
В курсовой работе были рассмотрены приемы проектирования и реализации реляционных баз данных и таблиц в СУБД Visual FoxPro 6.0. Была спроектирована структура реляционной таблицы, в нее были внесены данные с помощью специальных запросов. Операции над данными таблицы были выполнены программным путем с помощью создания автономных модулей *.prg, входящих в состав проекта Visual FoxPro.
СПИСОК ЛИТЕРАТУРЫ
1. Попов А.А. Создание приложений для FoxPro 2.5/2.6 в DOS и
WINDOWS.– М .: Издательство ”Калашников и К”, 1997. – 660 с.: илл.
2. FoxPro. Language Refrence. – Microsoft Corp., 1994.
3. Пинтер Лес. Разработка приложений в Microsoft FoxPro 2.5. – М.:
ТОО Эдель, 1995.
4. Дейт К. Руководство по реляционной СУБД DB2. – М.: Финансы и статистика, 1988.
ПРИЛОЖЕНИЕ А
Текст программы фильтрации, индексации и поиска
* Очищаем экран
CLEAR
* Открываем таблицу из базы данных
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods
* Выполняем фильтрацию по полю 'Поставщик'
SET FILTER to supplier='Россия'
BROWSE
* Выполняем индексирование по полю 'Количество' (только по возрастанию)
INDEX on amount to C:MY_WORKSTRANSF~1MYPROJ~1indtab
* Выводим записи
LIST amount,name_unit,price_unit
* Выбираем из таблицы все записи о товарах низкого качества
BROWSE FOR quality_goods='низкое'
* Выбираем из таблицы первую запись о товаре в количестве 10
LOCATE FOR amount=10
ПРИЛОЖЕНИЕ Б
Текст программы поиска с помощью циклов WHILE и SCAN
* Ищем все товары, поставленные из России, с помощью цикла WHILE
?'Товары из России (цикл WHILE) :'
* Ищем первый товар
LOCATE FOR supplier='Россия'
* Если нашли...
IF FOUND()
* Печатаем название
?name_unit
ENDIF
* Продолжаем поиск до исчерпания записей
DO WHILE .NOT. EOF()
CONTINUE
ENDDO
* Ищем все товары из России с помощью SCAN-цикла
?'Товары из России (цикл SCAN) :'
SCAN FOR supplier='Россия'
* Выводим наименование, цену и количество товара
? name_unit+' '+STR(price_unit)+' '+STR(amount)
ENDSCAN
* С помощью WHILE находим общую цену товаров, поступивших
* в период с 15.01.2001 по 15.03.2001
* _SUM - переменная суммирования
_SUM=0
* Находим первую запись
LOCATE FOR date_recep>={^2001/01/15} .AND. date_recep={^2001/01/15} .AND. date_recep_Max_price
* то делаем текущую максимальной
_Max_price=price_unit
* и запоминаем ее номер
_Number_max_price=I
* Если текущая цена{^2001/02/15}
ENDPROC
* Описание процедуры Show_units_for_measure
PROCEDURE Show_units_for_measure
?'Товары, у которых единица измерения - шт.'
?''
?'Наименование цена количество'
SCAN FOR unit_measure='Штука'
ПРИЛОЖЕНИЕ Е
Текст программы страхового копирования и контекстной справки
* ----Использование страхового копирования данных
SET CLEAR OFF
SET SAFETY OFF
* Если файл NORM.MEM есть...
IF FILE('C:MY_WORKSTRANSF~1MYPROJ~1norm.mem')
* ...он загружается в память.
RESTORE FROM('C:MY_WORKSTRANSF~1MYPROJ~1norm.mem')
* Если переменная завершения истинна...
IF normz
* ...копируем все файлы таблиц в страховую директорию
!COPY C:MY_WORKSTRANSF~1MYPROJ~1*.dbf C:MY_WORKSTRANSF~1MYPROJ~1Insure*.dbf>NUL
* иначе сообщение.
ELSE
WAIT normd+' было аварийное завершение .'+;
'Восстановить (ENTER) данные?' WINDOW
* В случае нажатия Enter файлы восстанавливаются из страховой директории.
IF LASTKEY()=13
!COPY C:MY_WORKSTRANSF~1MYPROJ~1Insure*.dbf C:MY_WORKSTRANSF~1MYPROJ~1*.dbf>NUL
* Устанавливается переменная завершения, переменная текущей даты и обе запоминаются в файл. normz= .T. normd=DTOC( DATE( ))
SAVE ALL LIKE norm? TO C:MY_WORKSTRANSF~1MYPROJ~1norm
*===============================================================
* ----Вызов контекстно-зависимой экранной подсказки по нажатию F1.
* ----Esc - выход из программы.
* ----Справка выдается по названию поля таблицы.
* По нажатию F1 вызываем процедуру Helper
ON KEY LABEL F1 DO Helper WITH VARREAD()
* Бесконечный цикл BROWSE
DO WHILE .T.
* Отображаем таблицу
* Если нажата клавиша Esc...
IF LASTKEY()=27
* ... то на выход.
EXIT
* Описание процедуры Helper
PROCEDURE Helper
* Параметр процедуры - имя поля, которое требуется пояснить
PARAMETERS _Item
* Открываем базу помощи
USE C:MY_WORKSTRANSF~1MYPROJ~1Table_Help
* Ищем нужное поле
LOCATE FOR index_help=_Item
* Если нашли нужное поле (оно одно) - выводим
_Out_text=text_help
MESSAGEBOX(_Out_text)
MESSAGEBOX('Справка по данному разделу не предусмотрена. Извините.')
RETURN
ПРИЛОЖЕНИЕ Ж
Текст программы создания новых таблиц и арифметических действий
* Создаем новую таблицу, вкоторую входят все товары с ценой>50
COPY TO C:MY_WORKSTRANSF~1MYPROJ~1New_Goods FIELDS name_unit,price_unit,amount,unit_measure FOR price_unit>50
* Обращаемся к новой таблице
USE C:MY_WORKSTRANSF~1MYPROJ~1New_Goods
* Просматриваем ее
* Создаем новый файл, отсортированный в соответствии с заданием
SORT TO C:MY_WORKSTRANSF~1MYPROJ~1Sort_Goods ON price_unit/A,name_unit/A
USE C:MY_WORKSTRANSF~1MYPROJ~1Sort_Goods
* Выводим отсортированную таблицу
LIST OFF price_unit,name_unit
* Выводим количество товаров на букву 'С'
COUNT FOR (LEFT(name_unit,1)='С') TO _Count
?'В исходной таблице содержится'+STR(_Count)+' товара(-ов) на букву `С`'
* Выводим общую стоимость всех товаров
?'Общая стоимость всех товаров равна'
SUM price_unit*amount
* Выводим среднее арифметическое цен всех товаров
?'Среднее арифметическое цен всех товаров равно'
AVERAGE price_unit -----------------------
“Товары”
“Клавиатуры”
наименование
цена
количество
единица измерения
дата поступления
качество
поставщик
Страницы: 1, 2, 3