Реферати

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

Військово-політичне співробітництво країн Близькими Схід із країнами Західної Європи і США. Обґрунтування важливості Близькосхідного регіону для НАТО і Заходу, що обумовлюється його істотним геополітичним, економічним і воєнно-стратегічним значенням. Аналіз зовнішньої політики США і ЄС у відношенні Бахрейну, Катару, Кувейту, Іраку.

Аналіз теоретичного аспекту системи обов'язкового пенсійного страхування Росії. Поняття обов'язкового і добровільного пенсійного страхування в Російській Федерації. Структура Пенсійного фонду Російської Федерації. Структура, результати роботи, рівень пенсійного забезпечення в ГУ УПФР по Корочанскому районі Білгородської області.

Державне регулювання кризи. Розвиток фінансової кризи. Негативні наслідки кризи. Тенденція до зменшення попиту. Проблеми високих процентних ставок, збільшення числа банкрутств і зростаючої соціальної напруженості. Положення на фондових ринках у країнах Латинської Америки.

Метод простої ітерації для рішення систем лінійних алгебраїчних рівнянь. Аналіз методу простої ітерації для рішення систем лінійних алгебраїчних рівнянь і реалізація його у виді двох програм, кожна з який використовує свій власний спосіб переходу від системи одного виду до іншого. Програмні і технічні засоби.

Людина в інформаційному світі. Однієї з бурхливо розвиваються областей прикладних досліджень у сучасній соціальній психології є дослідження особливостей комунікації за умови її протікання за допомогою нових інформаційних технологій.

Міністерство освіти Російської Федерації Кубанський державний технологічний університет

Кафедра? ? ПОЯСНЮВАЛЬНА ЗАПИСКА

до курсової роботи по предмету

передача даних в інформаційно керованих системах

тема курсової роботи:

«Створення і управління базою даних в СУБД FoxPro».

Виконав: студент гр.?? -??-??????

номер залікової книжки? ?-??-???

Керівник: ??????????

2001

Державний комітет Російської Федерації за вищою освітою Кубанський державний технологічний університет

ЗАВДАННЯ

На курсову роботу

Студенту гр.

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

Тема курсової роботи

Початкові дані

1 Виконати завдання:

1.1

1.2

1.3

1.4

1.5

1.6

1.7

1.8

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

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

Завдання видано

Термін здачі роботи

Завдання прийняв

Керівник

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

З оцінкою

ЧЛЕНИ КОМІСІЇ:

РЕФЕРАТ

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

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

Курсова робота містить 34 сторінки, 1 таблицю, 17 малюнків, 4 джерела.

ЗМІСТ

Введення. ..5

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

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

Опис предметної області у вигляді діаграми...6

2Составление словники даних...7

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

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

Створення бази даних. ..8

Виконання фільтрації, індексації, пошук записів. ..12

Пошук записів за допомогою циклів WHILE і SCAN...13

Побудова меню і видача повідомлень. ..14

Вивчення графічних можливостей. ..15

Використання модулів (підпрограм). ..16

Страхове копіювання даних і реалізація довідки. ..17

Створення нових таблиць і арифметичні дії. ..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, то наш вибір стає обгрунтованим.

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

Опис предметної області

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

Предмет складання бази даних - надходження товарів на склад. Складемо концептуальну модель представлення реальності в базі даних. Згідно з умовою, єдиною об'єктною безліччю є об'єктна безліч "товари". У його склад входить незліченна кількість об'єктів - "степлери", "дискети", "олівці" і інш. Кожний з цих об'єктів володіє однаковою по структурі безліччю атрибутів (ознак). Кожний з атрибутів характеризує конкретний об'єкт з якої-небудь сторони: кількість, якість, ціна і т. д.

Приклад: об'єкт "клавіатури" входить до складу об'єктної безлічі "товари" і володіє наступними атрибутами: найменування (клавіатури), ціна за одиницю товару (150 р), кількість одиниць товару (3), одиниця вимірювання товару (штука), дата надходження (01.04.2001), якість товару (середнє), постачальник (Тайвань).

Опис предметної області у вигляді діаграми

На основі попереднього пункту складемо концептуальну модель майбутньої бази даних у вигляді діаграми "об'єктів-зв'язку".

Малюнок 1.1.1 - Діаграма "об'єкти - зв'язки".

Складання словника даних

На основі моделі даних складемо словник даних. Словник даних - це система, в якій зберігаються відомості про об'єкти, їх атрибути, про значення і формати представлення даних. Опишемо призначення і властивості полів реляційної таблиці "товари".

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

Ціна одиниці товару. Зберігає ціну певного вигляду товарів. Тип даних - грошовий (Currency) точністю до 4 знаків після коми. Ширина поля - 8 символів. Можливі значення обмежені шириною поля.

Кількість одиниць товару. Зберігає число одиниць товару, що знаходяться в даний момент на складі. Тип даних - цілий (Integer). Ширина поля - 4 символи. Можливі значення обмежені шириною поля.

Одиниця вимірювання. Зберігає назву одиниці вимірювання товару. Тип даних - рядковий (Character), довжина - 15 символів. Ширина поля - 15 символів. Можливі значення - відповідно до першого поля таблиці.

Дата надходження. Зберігає число, місяць і рік надходження товару. Тип даних - вираження дати (Date). Ширина поля - 8 символів. Можливі значення записуються в форматі: мм/дд/гггг, де мм - номер місяця (01..12), дд - день (01..31), гггг - номер року.

Якість товару. Зберігає умовну оцінку якості товару, що поступив. Тип даних - рядковий (Character), довжина - 7 символів. Ширина поля - 7 символів. Можливі значення - ' високі', ' середні', ' низькі'.

Постачальник. Зберігає назву країни - виробника даного товару. Тип даних - рядковий (Character), довжина - 20 символів. Ширина поля - 20 символів. Можливі значення обмежені коректними назвами країн.

Складання структури бази даних

На основі діаграми і словника даних складемо структуру бази даних "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

Складання програмних запитів до бази даних

Приступимо до програмної реалізації бази даних. Взагалі потрібно відмітити, що в Visual FoxPro існують 2 шляхи реалізації майже будь-якої задачі: візуальний і програмний. У першому випадку необхідні дії виконуються за допомогою команд меню самого FoxPro і спеціалізованих майстрів. У другому - за допомогою вбудованої мови програмування, успадкованої ще від ранніх версій. У всіх випадках ми будемо користуватися другим способом, крім самого створення бази даних. Справа в тому, що на першому етапі необхідно створити так званий проект Visual FoxPro, до складу якого надалі будуть входити всі без виключення компоненти, що використовуються нами. Для більшої наглядності бажано створювати проект "вручну". Крім того, існують 2 види таблиць FoxPro: вільні і пов'язані, т. е. вхідні до складу баз даних. Наша таблиця відноситься до другого типу, в той час як команда CREATE table створює вільну таблицю. З урахуванням цього, створення бази даних проведемо візуально, а всі інші маніпуляції - програмно.

Створення бази даних

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

Малюнок 4.1.1 - Вікно диспетчера проектів

Всі компоненти, які ми зможемо створити, можна зв'язати з проектом, при етоим вони будуть зберігатися в "рідному" каталозі проекту.

Тепер можна створювати базу даних. Клацнувши правою кнопкою миші на підрозділ "Бази даних" розділу "Дані". Необхідно ввести ім'я майбутньої бази даних. Нову базу даних зберігаємо в папці проекту. Після цього з'являється вікно Дизайнера баз даних. З його допомогою можна додавати в базу даних нові компоненти: таблиці, запити, локальні і видалені уявлення, з'єднання і впроваджені процедури.

Малюнок 4.1.2 - Вікно Дизайнера баз даних

За допомогою Дизайнера баз додамо в проект таблицю.

Після привласнення імені новій таблиці створюємо її структуру відповідно до завдання. Структура таблиці являє собою список полів і їх характеристику: тип даних, розмір, довжину символьного уявлення (для типу Character) і інш. У полі "Caption" можна указати напис-заголовок стовпця для кожного поля, яка буде висвічуватися при відображенні таблиці.

Малюнок 4.1.5 - Створення структури таблиці

Після завершення введення можна переглянути отриману структуру пустої таблиці, вибравши в меню команду Browse.

Заповнити таблицю можна за допомогою тієї ж команди, якщо вибрати в меню "Edit" пункт "Append mode" ( "Режим додавання"). Результат заповнення таблиці даними показаний на малюнку 4.1.6.

Малюнок 4.1.6 - Записи таблиці Table_Goods.

Виконання фільтрації, індексації, пошук записів

В 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 FOR amount=10

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

Малюнок 4.2.3 - Рядок стану FoxPro.

Повний текст програми приведений в додатку Для продовження пошуку, початого командою LOCATE, застосовується команда CONTINUE.

Реалізація ітераційних циклів, т. е. циклів із зазделегідь відомою умовою їх закінчення і невідомим числом повторів, виконується наступною інструкцією:

DO WHILE < умова >

< команди >

ENDDO

Для послідовного перегляду бази даних, пошуку всіх записів, що задовольняє умовам і виконання над знайденими записами яких-небудь операцій, служить команда SCAN.

SCAN[ < межі > ] [FOR < умова > ]

< команди >

ENDSCAN

По завданню необхідно знайти всі товари, поставлені з Росії, а також загальну вартість всіх товарів, що поступили на склад в період з 15.01.2001 по 15.03.2001. Кожний з цих запитів, в свою чергу, реалізований в 2-х варіантах: з використанням циклу WHILE і з використанням циклу SCAN. Повний текст програми приведений в додатку Би, а результат роботи - на малюнку 4.3.1.

Малюнок 4.3.1 - Результати роботи програми.

Побудова меню і видача повідомлень

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

Вивчення графічних можливостей

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 - Діаграма кількості товарів.

Використання модулів (підпрограм)

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

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

Звернення до процедури виконується командою DO:

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

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

У процедуру можуть бути передані і з неї отримані деякі величини, вказані в списку параметрів після слова WITH. Цими величинами можуть бути не тільки змінні і константи, але будь-які дозволені вирази. У такому випадку першою командою в процедурі, що викликається повинна бути команда, що сприймає їх:

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

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

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

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

По завданню потрібно, використовуючи модулі, вивести відомості про товари, що поступили пізніше за 15.02.2001, а також вивести відомості про товари, у яких одиниця вимірювання - шт.

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

Малюнок 4.6.1 - Результати роботи програми.

Страхове копіювання даних і реалізація довідки

Збій/відключення комп'ютера в момент виконання операцій в прикладній системі викликати важкі наслідки для даних. Щоб уникнути цього, можна зробити страхове копіювання всіх або більшості даних на самому початку роботи в спеціального директорія, а в самій програмі передбачити можливість їх повернення в основного директорія.

Зручним представляється підтримка в програмі спеціальної змінної (наприклад, з ім'ям NORMZ), фіксуючій нормальне /ненормальне завершення програми, а також змінної (NORMD) - дати поточного сеансу і збереження їх в спеціальному МЕМ-файлі (NORM.MEM). Змінна NORMZ повинна мати значення ' істина', якщо останній сеанс роботи завершився нормально, і ' брехня' в іншому випадку. Тоді першим кроком прикладної системи повинні бути лічення цього файла з диска і аналіз змінної.

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

* - Використання страхового копіювання даних

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

Здесь спочатку з'ясовується, чи є файл 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 - Приклад екрана допомоги.

Створення нових таблиць і арифметичні дії

При копіюванні відкритого файла DBF в новий файл, який цією командою створюється, використовується команда

COPY TO < ім'я нового файла >

[ < межі > ] [FIELDS < поля > ]

[FOR < умова > ] [WHILE < умова > ]

[TYPE < тип файла > ] [WITH CDX]

В новий файл можуть копіюватися як всі поля бази даних, так і тільки перераховані в списку FIELDS. Поля, що Копіюються можуть знаходитися не тільки в файлі з робочої активної області, але і в будь-якому іншому файлі БД з інших робочих областей. У цьому випадку імена полів - складові (ім'я бази і ім'я поля).

Існує команда, що виконує фізичне упорядкування файла:

SORT TO < ім'я нового файла >

[ASCENDING/DESСENDING]

ON < поле > [/А] [/D] [/З] [, < поле > [/А] [/D] [/З]...]

[ < межі > ] [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.

СПИСОК ЛІТЕРАТУРИ

Попів А. А. Созданіє додатків для FoxPro 2.5/2.6 в DOS і WINDOWS.- М. : Видавництво "Калашников і До", 1997. - 660 з.: илл.

FoxPro. Language Refrence. - Microsoft Corp., 1994.

Пинтер Ліс. Розробка прикладних застосувань в Microsoft FoxPro 2.5. - М.: ТОО Едель, 1995.

Дейт К. Руководство по реляційній СУБД 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 <01/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 <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 <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 В+/W*

@4,10 SAY _Max_col_height COLOR В+/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/В*

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.

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

* Відображаємо таблицю

BROWSE

* Якщо натиснена клавіша Esc...

IF LASTKEY()=27

*. .. те на вихід.

EXIT

ENDIF

ENDDO

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

PROCEDURE Helper

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

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

* Відкриваємо таблицю з бази даних

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

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

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

* Звертаємося до нової таблиці

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

* Переглядаємо її

BROWSE

* Створюємо новий файл, відсортований відповідно до завдання

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

SORT TO C:\MY_WORKS\TRANSF~1\MYPROJ~1\Sort_Goods ON price_unit/А, name_unit/А

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

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

LIST OFF price_unit, name_unit

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

* Виводимо кількість товарів на букву 'С'

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

'В початковій таблиці міститься'+STR(_Count)+' товару (-ов) на букву 'С''

* Виводимо загальну вартість всіх товарів?

'Загальна вартість всіх товарів рівна'

SUM price_unit*amount

* Виводимо середнє арифметичне цін всіх товарів?

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

AVERAGE price_unit