Смекни!
smekni.com

Курсовик по FoxPro (стр. 4 из 4)

* Выводим записи

LIST amount,name_unit,price_unit

* Выбираем из таблицы все записи о товарах низкого качества

BROWSE FOR quality_goods='низкое'

* Выбираем из таблицы первую запись о товаре в количестве 10

LOCATE FOR amount=10

ПРИЛОЖЕНИЕ Б

Текст программы поиска с помощью циклов WHILE и SCAN

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

CLEAR

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

USE C:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_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/03/15}

IF FOUND()

* Если нашли - суммируем

_SUM=_SUM+NTOM(price_unit)*amount

ENDIF

* Продолжаем поиск

DO WHILE .NOT. EOF()

CONTINUE

IF FOUND()

_SUM=_SUM+NTOM(price_unit)*amount

ENDIF

ENDDO

?'Общая стоимость искомых товаров равна (цикл WHILE) :'+STR(_SUM)

* Вычисляем то же самое с помощью SCAN-цикла

_SUM=0

SCAN FOR date_recep>={^2001/01/15} .AND. date_recep<={^2001/03/15}

_SUM=_SUM+NTOM(price_unit)*amount

ENDSCAN

?'Общая стоимость искомых товаров равна (цикл SCAN) :'+STR(_SUM)

ПРИЛОЖЕНИЕ В

Текст программы построения меню и выдачи сообщений

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

CLEAR

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

* Определяем параметры POPUP-меню:

DEFINE POPUP _Menu FROM 1,10 TO 15,70;

TITLE 'Наименование Качество Поставщик';

SCROLL;

PROMPT FIELD name_unit+' '+quality_goods+' '+supplier

* Определяем, нужно ли активизировать POPUP-меню

LOCATE FOR price_unit<100

* Если нашли хоть один требуемый товар...

IF FOUND()

IF price_unit<>0

* и если это не нулевая строка, то

ACTIVATE POPUP _Menu

ENDIF

ENDIF

* Отслеживаем нажатие сочетания клавиш Alt+F1

ON KEY LABEL ALT+F1 MESSAGEBOX("Ошибка памяти!")

ПРИЛОЖЕНИЕ Г

Текст программы построения диаграммы

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

CLEAR

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

* Определяем количество записей в текущей таблице

_Number_records=RECCOUNT()

* Заносим в соответствующие массивы наименования и количества товаров

DIMENSION _Names (_Number_records)

DIMENSION _Amounts (_Number_records)

* Переменная - max высота столбца

_Max_col_height=0

* Устанавливаемся на первую запись

GOTO 1

* Ищем самый дорогой и самый дешевый товары (_Max_price и _Min_price),

* а также их порядковые номера (_Number_max_price и _Number_min_price)

_Names(1)=name_unit

_Amounts(1)=amount

_Min_price=price_unit

_Max_price=0

_Number_min_price=1

_Number_max_price=1

* Цикл по всем записям

FOR I=2 TO _Number_records

* Устанавливаемся на I-ю запись

GOTO I

* Заносим имя и количество в массивы

_Names(I)=name_unit

_Amounts(I)=amount

* Если текущая цена>максимальной...

IF price_unit>_Max_price

* то делаем текущую максимальной

_Max_price=price_unit

* и запоминаем ее номер

_Number_max_price=I

ENDIF

* Если текущая цена<минимальной...

IF price_unit<_Min_price

* то делаем текущую минимальной

_Min_price=price_unit

* и запоминаем ее номер

_Number_min_price=I

ENDIF

IF amount>_Max_col_height

* Ищем max количество товара

_Max_col_height=amount

ENDIF

ENDFOR

* ==============Построение диаграммы=============

* Рисуем оси

@3,20 TO 25,20

@25,20 TO 25,120

* Надписываем оси

@13,1 SAY 'Количество товара' COLOR B+/W*

@4,10 SAY _Max_col_height COLOR B+/W*

@28,60 SAY 'Номер товара'

* Рисуем легенду

@1,80 FILL TO 2,83 COLOR W/G*

@3,80 FILL TO 4,83 COLOR W/R*

@1,84 SAY 'Самый дешевый товар'

@3,84 SAY 'Самый дорогой товар'

* Расстояние между столбцами диаграммы

_Diagram_step_size=2

* Ширина одного столбца диаграммы

_Diagram_col_width=(100-_Diagram_step_size*(_Number_records+1))/_Number_records

* Масштабный множитель

_Scale_factor=20/_Max_col_height

* Рисуем столбцы

FOR I=1 TO _Number_records

* Вычисляем координаты вершин для текущего столбца

_Y1=ROUND(25-_Amounts(I)*_Scale_factor,0)

_X1=ROUND(20+_Diagram_step_size*I+_Diagram_col_width*(I-1),0)

_Y2=25

_X2=ROUND(20+(_Diagram_step_size+_Diagram_col_width)*I,0)

* Если высота нулевая...(из-за округления)

IF _Y1=25

* то делаем высоту = 1

_Y1=24

ENDIF

* Если рисуем столбец, соответствующий самому дешевому товару...

IF I=_Number_min_price

* то закрашиваем его зеленым цветом

@_Y1,_X1 FILL TO _Y2,_X2 COLOR W/G*

* Иначе если рисуем столбец, соответствующий самому дорогому товару...

ELSE

IF I=_Number_max_price

* то закрашиваем его красным цветом

@_Y1,_X1 FILL TO _Y2,_X2 COLOR W/R*

ELSE

* Иначе закрашиваем синим цветом

@_Y1,_X1 FILL TO _Y2,_X2 COLOR W/B*

ENDIF

ENDIF

* Ставим по оси X номера товаров

@26,_X1-ROUND(_Diagram_col_width/2,0) SAY I

ENDFOR

ПРИЛОЖЕНИЕ Д

Текст программы, использующей модули

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

CLEAR

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

* Вызов процедуры, выводящей сведения об искомых товарах

DO Show_units_for_date

?''

* Вызов процедуры, показывающей товары с единицей измерения 'шт.'

DO Show_units_for_measure

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

PROCEDURE Show_units_for_date

?'Товары, поступившие позже 15.02.2001.'

?''

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

SCAN FOR date_recep>{^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:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;norm.mem')

* ...он загружается в память.

RESTORE FROM('C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;norm.mem')

* Если переменная завершения истинна...

IF normz

* ...копируем все файлы таблиц в страховую директорию

!COPY C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;*.dbf C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Insure&bsol;*.dbf>NUL

* иначе сообщение.

ELSE

WAIT normd+' было аварийное завершение .'+;

'Восстановить (ENTER) данные?' WINDOW

* В случае нажатия Enter файлы восстанавливаются из страховой директории.

IF LASTKEY()=13

!COPY C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Insure&bsol;*.dbf C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;*.dbf>NUL

ENDIF

ENDIF

ENDIF

* Устанавливается переменная завершения, переменная текущей даты и обе запоминаются в файл.

normz= .T.

normd=DTOC( DATE( ))

SAVE ALL LIKE norm? TO C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;norm

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

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

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

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

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

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

ON KEY LABEL F1 DO Helper WITH VARREAD()

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

DO WHILE .T.

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

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

BROWSE

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

IF LASTKEY()=27

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

EXIT

ENDIF

ENDDO

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

PROCEDURE Helper

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

PARAMETERS _Item

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_Help

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

LOCATE FOR index_help=_Item

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

IF FOUND()

_Out_text=text_help

MESSAGEBOX(_Out_text)

ELSE

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

ENDIF

RETURN

ПРИЛОЖЕНИЕ Ж

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

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

CLEAR

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

* Создаем новую таблицу, вкоторую входят все товары с ценой>50

COPY TO C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;New_Goods FIELDS name_unit,price_unit,amount,unit_measure FOR price_unit>50

* Обращаемся к новой таблице

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;New_Goods

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

BROWSE

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

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

SORT TO C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Sort_Goods ON price_unit/A,name_unit/A

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Sort_Goods

* Выводим отсортированную таблицу

LIST OFF price_unit,name_unit

USE C:&bsol;MY_WORKS&bsol;TRANSF~1&bsol;MYPROJ~1&bsol;Table_goods

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

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

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

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

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

SUM price_unit*amount

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

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

AVERAGE price_unit