Реферат: Курсовик по FoxPro

Министерство образования РоссийскойФедерацииКубанский государственныйтехнологический университетКафедра ??ПОЯСНИТЕЛЬНАЯЗАПИСКА

к курсовой работе по предмету

передача данных в информационно управляемых системах

 

тема курсовой работы:

«Создание и управление базой данных в СУБД FoxPro».

                                               

                                                                  Выполнил:студент гр. ??–??–??

                                                                                      ????

                                                                                       номерзачётной книжки  ??–??–???

 

                                                                  Руководитель: ???

                                                                                         ????            

???

2001

Государственный комитет РоссийскойФедерации по высшему образованиюКубанский государственныйтехнологический университет

ЗАДАНИЕ

/>Накурсовую работу

/>Студентугр.

По дисциплине

/> /> /> /> <td/> /> /> /> />

Тема курсовой работы

/> /> /> /> /> <td/> /> /> /> />

Исходные данные

/> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> />

/>


1 Выполнить задания:

  1.1

/>


  1.2

/>


/> 1.3

/> 1.4


/>  1.5

/>  1.6

/>  1.7

/>  1.8

/>


2 Оформитьрасчётно-пояснительную записку

3 Основная литература

/> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> />

Задание выдано

/>


Срок сдачи работы

/>


Задание принял

/>


Руководитель

/>


Работа защищена

/>


С оценкой

/>


ЧЛЕНЫ КОМИССИИ :


РЕФЕРАТ

РЕЛЯЦИОННАЯБАЗА ДАННЫХ, РЕЛЯЦИОННАЯ ТАБЛИЦА, ПЕРВИЧНЫЙ КЛЮЧ, ВТОРИЧНЫЙ ИНДЕКС,ИНФОРМАЦИОННЫЙ ЗАПРОС.

Вданной курсовой работе рассмотрен вопрос реализации реляционной базы данных,содержащей одну таблицу. Поставлена задача реализации самой базы данных, атакже информационных запросов к ней в СУБД FoxPro. База данных и таблица были созданы с помощьювнутренних визуальных средств выбранной СУБД, а информационные запросыоформлены в виде отдельных программ, входящих в проект Visual FoxPro.

Курсоваяработа содержит 34 страницы, 1 таблицу, 17 рисунков, 4 источника.

СОДЕРЖАНИЕВведение .........................................................................5

1   Описание предметной области .........................................6

1.1  Словесное описание предметной области ..........................6

1.2  Описание предметной области в виде диаграммы................6

2   Составление словаря данных............................................7

3   Составление структуры базы данных.................................7

4   Составление программных запросов к базе данных ..............8

4.1  Создание базы данных ...................................................8

4.2  Выполнение фильтрации, индексации, поиск записей ..........12

4.3  Поиск записей с помощью циклов WHILEи SCAN..............13

4.4  Построение меню и выдача сообщений .............................14

4.5  Изучение графических возможностей ...............................15

4.6  Использование модулей (подпрограмм) ............................16

4.7  Страховое копирование данных и реализация справки .........17

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

Заключение.....................................................................23

Списоклитературы ...........................................................24

ПриложениеА ..................................................................25

ПриложениеБ ..................................................................26

ПриложениеВ ..................................................................28

ПриложениеГ ..................................................................29

ПриложениеД ..................................................................31

ПриложениеЕ ..................................................................32

ПриложениеЖ .................................................................34

ВВЕДЕНИЕ

Современное производство немыслимо без управляющихсистем разной степени сложности. Но любой управляющей системе необходимосоответствующее информационное и программное обеспечение, иначе она не сможетпродуктивно работать. Если рассматривать информационное обеспечение (базыданных), то современный рынок программного обеспечения может предложитьдовольно большой выбор систем управления базами данных (СУБД), ориентированныхна различных пользователей: от мелких предпринимателей до крупных предприятий икорпораций. Наш выбор FoxPro обусловлен прежде всегоразносторонностью этой СУБД, удобством как для разработчика приложений, так идля обычного пользователя. Наличие в ней языка программирования позволяетсоздавать сложные системы обработки данных, ориентированные на конкретныезадачи и даже под конкретного пользователя. С другой стороны, в ней отражены ив разной мере используются многие современные технологии программирования: ActiveX, COM, SQL, ODBC, OLE, DCOM, API и  ISAPI,и многое другое. При всем этом она сохранила совместимость со старыми версиямипод DOS, созданными еще фирмой Fox Software. Еслиеще добавить, что FoxPro реализован также в средах Macintoch и Unix, то наш выборстановится обоснованным.

Задачей данной курсовой работы является построениебазы данных и выполнение над ней заданных операций. База данных и таблица былисозданы с помощью диалоговых окон, а операции с базой данных выполнены спомощью программ.

1    Описаниепредметной области

1.1   Словесноеописание предметной области

Предмет составления базы данных – поступлениетоваров на склад. Составим концептуальную модель представления реальности вбазе данных. Согласно условию, единственным объектным множеством являетсяобъектное множество “товары”. В его состав входит бесчисленноеколичество объектов – “степлеры”, “дискеты”, “карандаши” и др. Каждый изэтих объектов обладает одинаковым по структуре множеством атрибутов(признаков). Каждый из атрибутов характеризует конкретный объект с какой-либостороны: количество, качество, цена и т.д.

Пример: объект “клавиатуры” входитв состав объектного множества “товары” и обладаетследующими атрибутами: наименование (клавиатуры), цена за единицу товара (150р), количество единиц товара (3), единица измерения товара (штука), датапоступления (01.04.2001), качество товара (среднее), поставщик (Тайвань).

1.2   Описаниепредметной области в виде диаграммы

На основании предыдущего пункта составим концептуальную модель будущей базы данных в виде диаграммы “объекты-связи”.

/>


Рисунок 1.1.1 – Диаграмма “объекты — связи”.

2    Составлениесловаря данных

На основании модели данных составим словарь данных.Словарь данных – это система, в которой хранятся сведения об объектах, ихатрибутах, о значениях и форматах представления данных. Опишем назначение исвойства полей реляционной таблицы “товары”.

–   Наименование товара. Служит первичным ключом, по которому можнополучить доступ к любой строке таблицы. Тип данных – строковый (Character), длина – 20 символов. Ширина поля – 20 символов.Возможные значения – названия товаров, имеющих отношение к офису.

–   Цена единицы товара. Хранит ценуопределенного вида товаров. Тип данных – денежный (Currency) точностьюдо 4 знаков после запятой. Ширина поля – 8 символов. Возможные значенияограничены шириной поля.

–   Количество единиц товара. Хранит число едиництовара, находящихся в данный момент на складе. Тип данных – целый (Integer).Ширина поля – 4 символа. Возможные значения ограничены шириной поля.

–   Единица измерения. Хранит название единицы измерения товара. Типданных — строковый (Character), длина – 15 символов.Ширина поля – 15 символов. Возможные значения – в соответствии с первым полемтаблицы.

–   Дата поступления. Хранит число, месяц и годпоступления товара. Тип данных – выражение даты (Date). Ширина поля – 8символов. Возможные значения записываются в формате: мм/дд/гггг, где мм – номермесяца (01..12), дд – день (01..31), гггг – номер года.

–   Качество товара. Хранит условную оценку качества поступившеготовара. Тип данных – строковый (Character), длина – 7символов. Ширина поля – 7 символов. Возможные значения – ‘высокое’, ’среднее’, ’низкое’.

–   Поставщик. Хранит название страны –производителя данного товара. Тип данных – строковый (Character),длина – 20 символов. Ширина поля – 20 символов. Возможные значения ограниченыкорректными названиями стран.

3    Составлениеструктуры базы данных

На основании диаграммы и словаря данных составимструктуру базы данных “Goods”. Поскольку на диаграммеизображено только одно объектное множество, то, следовательно, в базу данныхбудет входить только одна реляционная таблица.  Перечислим и дадим названияполям таблицы “Table_Goods” в соответствии сдиаграммой:

Таблица 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

4    Составлениепрограммных запросов к базе данных

Приступим к программной реализации базы данных.Вообще следует отметить, что в Visual FoxPro существуют2 пути реализации почти любой задачи: визуальный и программный. В первом случаенеобходимые действия выполняются с помощью команд меню самого FoxProи специализированных мастеров. Во втором – с помощью встроенного языкапрограммирования, унаследованного еще от ранних версий. Во всех случаях мыбудем пользоваться вторым способом, кроме самого создания базы данных. Дело втом, что на первом этапе необходимо создать так называемый проект Visual FoxPro, в состав которого в дальнейшем будут входитьвсе без исключения используемые нами компоненты. Для большей наглядностижелательно создавать проект “вручную”.Кроме того, существуют 2 вида таблиц FoxPro: свободные и связанные, т.е.входящие в состав баз данных. Наша таблица относится ко второму типу, в товремя как команда CREATE TABLE создает свободнуютаблицу. С учетом этого, создание базы данных проведем визуально, а всеостальные манипуляции – программно.

4.1   Создание базыданных

База данных создается с помощью Диспетчера проектов Visual FoxPro. Сначала создадим новый проект. Назовем его Kurs и разместим его в папке MyProject.

/>

Рисунок 4.1.1 – Окно диспетчера проектов

Все компоненты, которые мы сможем создать, можносвязать с проектом, при этоим они будут храниться в “родном” каталоге проекта.

Теперь можно создавать базу данных.Щелкнув правой кнопкой мыши на подраздел “Базы данных”раздела “Данные”. Необходимо ввести имя будущей базыданных. Новую базу данных сохраняем в папке проекта. После этого появляетсяокно Дизайнера баз данных. С его помощью можно добавлять в базу данных новыекомпоненты: таблицы, запросы, локальные и удаленные представления, соединения ивнедренные процедуры.

/>

Рисунок 4.1.2 – Окно Дизайнера баз данных

С помощью Дизайнера баз добавим впроект таблицу.

После присвоения имени новойтаблице создаем ее структуру в соответствии с заданием. Структура таблицыпредставляет собой список полей и их характеристику: тип данных, размер, длинусимвольного представления (для типа Character) и др. В поле “Caption” можно указать надпись-заголовок столбца для каждогополя, которая будет высвечиваться при отображении таблицы.

/>

Рисунок 4.1.5 – Создание структуры таблицы

После завершения ввода можно просмотреть полученнуюструктуру пустой таблицы, выбрав в меню команду Browse.

Заполнить таблицу можно при помощи той же команды,если выбрать в меню “Edit” пункт “Appendmode” (“Режим добавления”). Результат заполнениятаблицы данными показан на рисунке 4.1.6.

/>

Рисунок 4.1.6 – Записи таблицы Table_Goods.

4.2   Выполнениефильтрации, индексации, поиск записей

В 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 FORamount=10

Найдя запись, FoxPro установитвнутренний указатель на требуемую запись, не выводя никаких сообщений. То, чтозапись была найдена, можно увидеть в строке состояния главного окна FoxPro.

/>

Рисунок 4.2.3 – Строка состояния FoxPro.

Полный текст программы приведен вприложении А.

4.3   Поиск записей спомощью циклов 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 – Результаты работы программы.

4.4   Построение менюи выдача сообщений

Для организации в программах 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.

4.5   Изучениеграфических возможностей

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 – Диаграмма количества товаров.

4.6   Использованиемодулей (подпрограмм)

В языке FoxPro могутиспользоваться внешние и внутренние процедуры.

Внешняя процедура– это совокупность команд, осуществляющихобычно какие-то законченные действия по обработке данных и образующих отдельныйкомандный файл, т. е. отдельно программу (модуль).

Обращение к процедуре выполняется командой DO:

DO <имякомандного файла>

[WITH <список параметров>][IN<файл>]

В процедуру могут быть переданы и из нееполучены некоторые величины, указанные в списке параметров после слова WITH. Этими величинами могут быть не только переменные иконстанты, но любые разрешенные выражения. В таком случае первой командой ввызываемой процедуре должна быть команда, воспринимающая их:

         

          PARAMETERS <списокпараметров>

Совокупность команд, составляющих внутреннююпроцедуру, должна начинаться командой

PROCEDURE <имя процедуры>

Для обозначения конца процедуры свозратом в вызывающий модуль может использоваться команда RETURN, хотяона и не обязательна.

По заданию требуется, используя модули, вывестисведения о товарах, поступивших позже 15.02.2001, а также вывести сведения отоварах, у которых единица измерения – шт.

Полный текст программы приведен в приложении Д, арезультат работы – на рисунке 4.6.1.

/>

Рисунок 4.6.1 – Результаты работы программы.

4.7   Страховоекопирование данных и реализация справки

Сбой/отключение компьютера в момент исполнения операций вприкладной системе вызвать тяжёлые последствия для данных. Дабы избежать этого,можно сделать страховое копирование всех или большинства данных в самом началеработы в специальную директорию, а в самой программе предусмотреть возможностьих возврата в основную директорию.

Удобным представляется поддержка в программеспециальной переменной ( например, с именем  NORMZ), фиксирующей нормальное /ненормальноезавершение программы, а также переменной (NORMD) – датытекущего сеанса и сохранение их в специальном МЕМ-файле(NORM.MEM). Переменная NORMZ должна иметьзначение `истина`, еслипоследний сеанс работы завершился нормально, и `ложь` в противном случае. Тогда первым шагом прикладной системыдолжны быть считывание этого файла с диска и анализ переменной.

Фрагментпрограммы, реализующей страховое копирование данных, приведен ниже.

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

SET CLEAR OFF

SET SAFETY OFF

* Если файл NORM.MEM  есть...

IF FILE('C:\MY_WORKS\TRANSF~1\MYPROJ~1\norm.mem')

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

  RESTOREFROM('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

        !COPYC:\MY_WORKS\TRANSF~1\MYPROJ~1\Insure\*.dbfC:\MY_WORKS\TRANSF~1\MYPROJ~1\*.dbf>NUL

      ENDIF

   ENDIF

ENDIF

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

normz= .T.

normd=DTOC( DATE( ))

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

Здесь сначала выясняется, есть ли файл NORM.MEM втекущей директории. Если есть, файл загружается и выясняется значениепеременной NORM. При NORMZ=.T. все файлы таблиц копируются в страховуюподдиректорию внутри рабочей директории.

Поскольку файлов в системе обычно довольно много,проще использовать не собственные команды копирования FoxPro, а выполнить(через знак !) соответствующие команды DOS, для которых можно указать маску.Чтобы системные сообщения команд не выводились на экран, они переадресованы напустое устройство ДОС — NUL. Если NORMZ=.F., значит, предыдущий сеанс работызавершился аварийно. На экран выдаются сообщение и запрос о необходимостивосстановления данных из страховой директории (нажатием клавиши Enter). Такойзапрос нужен для того, чтобы отказаться от копирования данных, если завершениепрограммы было ненормальным, но данные, как знает пользователь, не пострадали.После завершения анализа переменной NORMZ она получает значение .F. изапоминается в файле NORM.MEM вместе с переменной NORMD. Далее идет телособственно прикладной системы. Если при этом произойдет сбой, переменная NORMZсохранит свое значение. При нормальном завершении программы этой переменнойприсваивается значение.Т. и она сохраняется в файле.

Кроме того, необходимо организовать системуконтекстно-зависимой справки, вызываемой по F1. Текстпомощи предварительно заносится в файл Table_Help.dbf,структура которого показана ниже.

/>

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

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

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

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

/>

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

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

/>

Рисунок 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. LanguageRefrence. – Microsoft Corp.,  1994.

3.  Пинтер Лес. Разработка приложенийв Microsoft FoxPro 2.5. – М.: ТОО Эдель,  1995.

4.   Дейт К. Руководство по реляционной СУБД DB2. – М.: Финансы и статистика, 1988.

ПРИЛОЖЕНИЕ А

Текстпрограммы фильтрации, индексации и поиска

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

CLEAR

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

SETFILTER to supplier='Россия'

BROWSE

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

INDEXon amount to C:\MY_WORKS\TRANSF~1\MYPROJ~1\indtab

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

LISTamount,name_unit,price_unit

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

BROWSEFOR quality_goods='низкое'

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

LOCATEFOR amount=10

ПРИЛОЖЕНИЕ Б

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

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

CLEAR

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

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

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

LOCATEFOR supplier='Россия'

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

IFFOUND()

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

 ?name_unit

ENDIF

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

DOWHILE .NOT. EOF()

 CONTINUE

 IF FOUND()

   ?name_unit

 ENDIF 

ENDDO

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

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

SCANFOR supplier='Россия'

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

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

ENDSCAN

*С помощью WHILE находим общую цену товаров, поступивших

*в период с 15.01.2001 по 15.03.2001

*_SUM — переменная суммирования

_SUM=0

*Находим первую запись

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

IFFOUND()

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

 _SUM=_SUM+NTOM(price_unit)*amount

ENDIF

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

DOWHILE .NOT. EOF()

 CONTINUE

 IF FOUND()

   _SUM=_SUM+NTOM(price_unit)*amount

 ENDIF 

ENDDO

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

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

_SUM=0

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

 _SUM=_SUM+NTOM(price_unit)*amount

ENDSCAN

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

ПРИЛОЖЕНИЕ В

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

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

CLEAR

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

DEFINEPOPUP _Menu FROM 1,10 TO 15,70;

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

SCROLL;

PROMPTFIELD name_unit+'                 '+quality_goods+'                     '+supplier

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

LOCATEFOR price_unit<100

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

IFFOUND()

 IF price_unit<>0

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

   ACTIVATE POPUP _Menu

 ENDIF

ENDIF

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

ONKEY LABEL ALT+F1 MESSAGEBOX(«Ошибка памяти!»)

ПРИЛОЖЕНИЕ Г

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

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

CLEAR

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

_Number_records=RECCOUNT()

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

DIMENSION_Names (_Number_records)

DIMENSION_Amounts (_Number_records)

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

_Max_col_height=0

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

GOTO1

*Ищем самый дорогой и самый дешевый товары (_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

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

FORI=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,20TO 25,20

@25,20TO 25,120

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

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

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

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

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

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

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

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

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

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

_Diagram_step_size=2

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

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

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

_Scale_factor=20/_Max_col_height

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

FORI=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

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

DOShow_units_for_date

?''

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

DOShow_units_for_measure

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

PROCEDUREShow_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

PROCEDUREShow_units_for_measure

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

 ?''

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

 SCAN FOR unit_measure='Штука'

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

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

 ENDSCAN

ENDPROC

ПРИЛОЖЕНИЕ Е

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

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

SETCLEAR OFF

SETSAFETY OFF

*Если файл NORM.MEM  есть...

IFFILE('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\*.dbfC:\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\*.dbfC:\MY_WORKS\TRANSF~1\MYPROJ~1\*.dbf>NUL

     ENDIF

  ENDIF

ENDIF

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

normz=.T.

normd=DTOC(DATE( ))

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

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

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

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

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

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

ONKEY LABEL F1 DO Helper WITH VARREAD()

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

DOWHILE .T.

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

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

 BROWSE

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

 IF LASTKEY()=27

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

   EXIT

 ENDIF

ENDDO

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

PROCEDUREHelper

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

 PARAMETERS _Item

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

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

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

 LOCATE FOR index_help=_Item

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

 IF FOUND()

   _Out_text=text_help

   MESSAGEBOX(_Out_text)

 ELSE

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

 ENDIF

RETURN

ПРИЛОЖЕНИЕ Ж

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

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

CLEAR

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

COPYTO C:\MY_WORKS\TRANSF~1\MYPROJ~1\New_Goods FIELDSname_unit,price_unit,amount,unit_measure FOR price_unit>50

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\New_Goods

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

BROWSE

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

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

SORTTO C:\MY_WORKS\TRANSF~1\MYPROJ~1\Sort_Goods ON price_unit/A,name_unit/A

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Sort_Goods

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

LISTOFF price_unit,name_unit

USEC:\MY_WORKS\TRANSF~1\MYPROJ~1\Table_goods

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

COUNTFOR (LEFT(name_unit,1)='С') TO _Count

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

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

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

SUMprice_unit*amount

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

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

AVERAGEprice_unit

еще рефераты
Еще работы по информатике, программированию