44871 (663903), страница 3

Файл №663903 44871 (Курсовик по FoxPro) 3 страница44871 (663903) страница 32016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Рисунок 4.7.1 – Таблица данных для помощи.

Для вызова процедуры помощи применена команда ON KEY LABEL. В процедуру Helper передается один параметр – имя поля исходной таблицы товаров, которое требуется пояснить. Функция VARREAD() возвращает имя переменной памяти, элемента массива или поля (прописными буквами), использованного для создания текущего элемента управления.

В процедуре осуществляется поиск по этому полю, и, если таковое найдено, соответствующее MEMO-поле выводится с помощью процедуры MESSAGEBOX.

Полный текст программы приведен в приложении Е, а пример экрана помощи, выдаваемого пользователю при нажатии клавиши F1 в тот момент, когда курсор находится в поле “Дата поступления” исходной таблицы, приведен на рисунке 4.7.2.

Рисунок 4.7.2 – Пример экрана помощи.

    1. Создание новых таблиц и арифметические действия

При копировании открытого файла 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.

Рисунок 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_WORKS\TRANSF~1\MYPROJ~1\Table_goods

* Выполняем фильтрацию по полю 'Поставщик'

SET FILTER to supplier='Россия'

BROWSE

* Выполняем индексирование по полю 'Количество' (только по возрастанию)

INDEX on amount to C:\MY_WORKS\TRANSF~1\MYPROJ~1\indtab

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

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:\MY_WORKS\TRANSF~1\MYPROJ~1\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:\MY_WORKS\TRANSF~1\MYPROJ~1\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:\MY_WORKS\TRANSF~1\MYPROJ~1\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:\MY_WORKS\TRANSF~1\MYPROJ~1\norm.mem')

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

RESTORE FROM('C:\MY_WORKS\TRANSF~1\MYPROJ~1\norm.mem')

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

IF normz

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

!COPY C:\MY_WORKS\TRANSF~1\MYPROJ~1\*.dbf C:\MY_WORKS\TRANSF~1\MYPROJ~1\Insure\*.dbf>NUL

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

ELSE

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

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

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

IF LASTKEY()=13

!COPY C:\MY_WORKS\TRANSF~1\MYPROJ~1\Insure\*.dbf C:\MY_WORKS\TRANSF~1\MYPROJ~1\*.dbf>NUL

ENDIF

ENDIF

ENDIF

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

normz= .T.

normd=DTOC( DATE( ))

SAVE ALL LIKE norm? TO C:\MY_WORKS\TRANSF~1\MYPROJ~1\norm

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

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

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

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

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

USE C:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

ON KEY LABEL F1 DO Helper WITH VARREAD()

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

DO WHILE .T.

Характеристики

Тип файла
Документ
Размер
832,5 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7027
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее