Рефераты. Курсовик по FoxPro p> [pic]

Рисунок 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 ]

[FOR ]

[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.

[pic]

Рисунок 4.8.1 – Структура таблицы New_Goods.

[pic]

Рисунок 4.8.2 – Структура таблицы Sort_Goods.

[pic]

Рисунок 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

* Очищаем экран

CLEAR

* Открываем таблицу из базы данных

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods

* Ищем все товары, поставленные из России, с помощью цикла WHILE

?'Товары из России (цикл WHILE) :'

* Ищем первый товар

LOCATE FOR supplier='Россия'

* Если нашли...

IF FOUND()

* Печатаем название

?name_unit

ENDIF

* Продолжаем поиск до исчерпания записей

DO WHILE .NOT. EOF()

CONTINUE

IF FOUND()

?name_unit

ENDIF

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

ENDIF

* Если текущая цена{^2001/02/15}

* Выводим наименование, цену и количество товара

? name_unit+' '+STR(price_unit)+' '+STR(amount)

ENDSCAN

ENDPROC

* Описание процедуры Show_units_for_measure

PROCEDURE Show_units_for_measure

?'Товары, у которых единица измерения - шт.'

?''

?'Наименование цена количество'

SCAN FOR unit_measure='Штука'

* Выводим наименование, цену и количество товара

? name_unit+' '+STR(price_unit)+' '+STR(amount)

ENDSCAN

ENDPROC

ПРИЛОЖЕНИЕ Е

Текст программы страхового копирования и контекстной справки

* ----Использование страхового копирования данных

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

ENDIF

ENDIF

ENDIF

* Устанавливается переменная завершения, переменная текущей даты и обе запоминаются в файл. normz= .T. normd=DTOC( DATE( ))

SAVE ALL LIKE norm? TO C:MY_WORKSTRANSF~1MYPROJ~1norm

*===============================================================

* ----Вызов контекстно-зависимой экранной подсказки по нажатию F1.

* ----Esc - выход из программы.

* ----Справка выдается по названию поля таблицы.

* Открываем таблицу из базы данных

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods

* По нажатию F1 вызываем процедуру Helper

ON KEY LABEL F1 DO Helper WITH VARREAD()

* Бесконечный цикл BROWSE

DO WHILE .T.

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods

* Отображаем таблицу

BROWSE

* Если нажата клавиша Esc...

IF LASTKEY()=27

* ... то на выход.

EXIT

ENDIF

ENDDO

* Описание процедуры Helper

PROCEDURE Helper

* Параметр процедуры - имя поля, которое требуется пояснить

PARAMETERS _Item

* Открываем базу помощи

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_Help

* Ищем нужное поле

LOCATE FOR index_help=_Item

* Если нашли нужное поле (оно одно) - выводим

IF FOUND()

_Out_text=text_help

MESSAGEBOX(_Out_text)

ELSE

MESSAGEBOX('Справка по данному разделу не предусмотрена.
Извините.')

ENDIF

RETURN

ПРИЛОЖЕНИЕ Ж

Текст программы создания новых таблиц и арифметических действий

* Очищаем экран

CLEAR

* Открываем таблицу из базы данных

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods

* Создаем новую таблицу, вкоторую входят все товары с ценой>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

* Просматриваем ее

BROWSE

* Создаем новый файл, отсортированный в соответствии с заданием

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_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

USE C:MY_WORKSTRANSF~1MYPROJ~1Table_goods

* Выводим количество товаров на букву 'С'

COUNT FOR (LEFT(name_unit,1)='С') TO _Count

?'В исходной таблице содержится'+STR(_Count)+' товара(-ов) на букву `С`'

* Выводим общую стоимость всех товаров

?'Общая стоимость всех товаров равна'

SUM price_unit*amount

* Выводим среднее арифметическое цен всех товаров

?'Среднее арифметическое цен всех товаров равно'

AVERAGE price_unit
-----------------------

“Товары”

“Клавиатуры”

наименование

цена

количество

единица измерения

дата поступления

качество

поставщик


Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.