Министерство Образования и Науки Российской Федерации

Федеральное Агентство по Образованию

Государственное образовательное учреждение

Высшего профессионального образования

Новосибирский Государственный Технический Университет

Кафедра ВТ

Расчетно-графическая работа по дисциплине

«Базы Данных»

Программирование в среде Visual Fox Pro

Факультет: АВТ

Группа: АМ-411

Студент:

Преподаватель:

Вариант: 13

Новосибирск, 2007 г.

Содержание:

1.

Задание

3

2.

Структура базы данных и таблиц

4

2.1.

Графическое представление связей между файлами

4

2.2.

Структура таблиц

4

3.

Содержание таблиц БД

5

4.

Интерфейс пользователя

6

5.

Формы и запросы

7

5.1.

Формы для редактирования данных

7

5.2.

Запросы к базе данных для просмотра информации

9

5.3.

Запросы к базе данных, требуемые заданием, с соответствующими формами

9

6.

Руководство пользователя

19

7.

Выводы и анализ результатов

21

8.

Использованная литература

22



2.Структура базы данных и таблиц

2.1. Графическое представление связей между файлами

База данных «Мебель» была реализована следующим образом:

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

База данных состоит из 4 таблиц (рис.1.):

-  product – содержит сведения о всех товарах;

-  vid – содержит виды бакалеи;

-  postav – содержит сведения о поставщиках;

НЕ нашли? Не то? Что вы ищете?

-  strana – содержит сведения о странах-производителях.

Рис.1. Структура базы данных «Мебель».

2.2. Структура таблиц

Таблица mebel содержит следующие поля:

    id (int) – номер товара; наименован (char) – название товара; цена (int) – стоимость товара; вес (int) – вес товара; дата_выпус (Date) – дата выпуска товара; дата_прода (Date) – дата продажи товара; количество (int) – количество проданного товара; id_vid(int, Regular) – идентификатор вида; id_postav (int, Regular) – идентификатор поставщика; id_strana (int, Regular) – идентификатор производителя.

Таблица vid состоит из следующих полей:

§  id (int, Primary) – идентификатор вида;

§  вид_мебели (char) – название вида.

Таблица postav состоит из следующих полей:

§  id (int, Primary) – идентификатор поставщика;

§  поставщик (char) - поставщик.

Таблица strana состоит из следующих полей:

§  id (int, Primary) – идентификатор производителя;

§  страна (char) – страна-производитель.

3. Содержание таблиц БД

Для демонстрации работы базы данных, в неё были внесены следующие данные

(рис. 2-5):

Рис.2. Содержимое таблицы “product”.

Рис.3. Содержимое таблицы “Postav”.

Рис.4. Содержимое таблицы “strana”.

Рис.5. Содержимое таблицы “vid”.

4. Интерфейс пользователя

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

Рис.6. Основная форма базы данных.

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

5. Формы и запросы

В данном разделе рассматриваются используемые формы и программные коды, реализующие соответствующие функции:

5.1. Формы для редактирования данных

Добавление поставщика:

public tmp(2)

if reccount("postav") > 0

SELECT MAX(id) FROM postav INTO ARRAY tmp

else

tmp[1] = -1

endif

INSERT INTO postav VALUES (tmp[1]+1, thisform. text1.value)

thisform. text1.value=""

bo1.refresh

Удаление поставщика:

if val(bo1.value) >= 0

RECALL ALL

DELETE FROM postav WHERE id=val(bo1.value)

PACK

bo1.refresh

endif

Рис.10. Форма добавления и удаления поставщика.

Добавление производителя:

public tmp(2)

if reccount("strana") > 0

SELECT MAX(id) FROM strana INTO ARRAY tmp

else

tmp[1] = -1

endif

INSERT INTO strana VALUES (tmp[1]+1, thisform. text1.value)

thisform. text1.value=""

bo1.refresh

Удаление производителя:

if val(bo1.value) >= 0

RECALL ALL

DELETE FROM strana WHERE id=val(bo1.value)

pack

bo1.refresh

endif

Рис.11. Форма добавления и удаления производителя.

Добавление вида:

public tmp(2)

if reccount("vid") > 0

SELECT MAX(id) FROM vid INTO ARRAY tmp

tmp[1] = tmp[1] + 1

else

tmp[1] = -1

endif

INSERT INTO vid VALUES (thisform. text1.value, tmp[1])

thisform. text1.value=""

bo1.refresh

Удаление вида:

if val(bo1.value) >= 0

RECALL ALL

DELETE FROM vid WHERE id=val(bo1.value)

browse last

pack

bo1.refresh

endif

Рис.12. Форма добавления и удаления вида.

5.2. Запрос к базе данных для просмотра информации

Просмотр всех записей базы данных:

SELECT Product. наименован, Vid. вид_мебели, Postav. поставщик,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! vid INNER JOIN mebel! product;

INNER JOIN mebel! postav;

INNER JOIN mebel! strana ;

ON Strana. id = Product. id_strana ;

ON Postav. id = Product. id_postav ;

ON Vid. id = Product. id_vid;

ORDER BY Product. наименован

5.3. Запросы к базе данных, требуемые заданием, с соответствующими формами

Для каждого вида мебели выдать список, отсортированный (рис.13-14):

• по дате выпуска,

• по дате продажи,

• в алфавитном порядке по поставщику,

• по весу.

• по стоимости.

Код метода Click кнопки «Показать»:

do case

case thisform. optiongroup1.option1.value = 1

SELECT Product. наименован, Vid. вид_мебели, Postav. поставщик,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! postav INNER JOIN mebel! product;

INNER JOIN mebel! vid ;

ON Vid. id = Product. id_vid ;

ON Postav. id = Product. id_postav;

where (vid. id = val(bo1.value));

ORDER BY Product. дата_выпус

case thisform. optiongroup1.option2.value = 1

SELECT Product. наименован, Vid. вид_мебели, Postav. поставщик,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! postav INNER JOIN mebel! product;

INNER JOIN mebel! vid ;

ON Vid. id = Product. id_vid ;

ON Postav. id = Product. id_postav;

where (vid. id = val(bo1.value));

ORDER BY Product. дата_прода

case thisform. optiongroup1.option3.value = 1

SELECT Product. наименован, Vid. вид_мебели, Postav. поставщик,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! postav INNER JOIN mebel! product;

INNER JOIN mebel! vid ;

ON Vid. id = Product. id_vid ;

ON Postav. id = Product. id_postav;

where (vid. id = val(bo1.value));

ORDER BY Postav. поставщик

case thisform. optiongroup1.option4.value = 1

SELECT Product. наименован, Vid. вид_мебели, Postav. поставщик,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! postav INNER JOIN mebel! product;

INNER JOIN mebel! vid ;

ON Vid. id = Product. id_vid ;

ON Postav. id = Product. id_postav;

where (vid. id = val(bo1.value));

ORDER BY Product. вес

case thisform. optiongroup1.option5.value = 1

SELECT Product. наименован, Vid. вид_мебели, Postav. поставщик,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! postav INNER JOIN mebel! product;

INNER JOIN mebel! vid ;

ON Vid. id = Product. id_vid ;

ON Postav. id = Product. id_postav;

where (vid. id = val(bo1.value));

ORDER BY Product. цена

endcase

Рис.13. Форма для вывода отсортированного списка.

Рис.14. Результат выполнения запроса (вид: кухня, сортировка по цене).

Найти самый дорогой вид мебели, самый дешевый, среднюю стоимость по каждому виду и в целом (рис. 15-16):

Рис.15. Форма для запроса.

Код метода Click кнопки «Показать» в целом:

do case

case thisform. optiongroup1.option1.value = 1

select vid. вид_мебели as "ВИД", max (product. цена);

from mebel! product;

inner join mebel! vid on product. id_vid = vid. id;

where (product. цена = (select max (product. цена) from mebel! product))

case thisform. optiongroup1.option2.value = 1

select vid. вид_мебели as "ВИД", min (product. цена);

from mebel! product;

inner join mebel! vid on product. id_vid = vid. id;

where (product. цена = (select min (product. цена) from mebel! product))

case thisform. optiongroup1.option3.value = 1

select avg(product. цена);

from mebel! product

endcase

Код метода Click кнопки «Показать» по виду:

select vid. вид_мебели, avg(product. цена);

from mebel! product;

inner join mebel! vid on vid. id = product. id_vid;

where (vid. id = val(bo1.value))

Рис.16. Средняя стоимость в целом. Рис.17. Самый дорогой вид.

Рис.18. Самый дешевый вид. Рис.19. Средняя стоимость по виду столы.

Найти мебель с ценой в заданных пределах (рис.20, 21):

Код метода Click кнопки «Показать»:

SELECT product. наименован AS "Наименование", product. цена, vid. вид_мебели;

FROM mebel! product;

INNER JOIN mebel! vid ON product. id_vid = vid. id;

WHERE product. цена >= thisform. text1.value;

AND product. цена <= thisform. text2.value;

ORDER BY product. цена

Рис.20. Форма для поиска изделий с ценой выше заданной.

Рис.21. Вывод изделий с ценой отр дор.

Найти всю мебель заданного производителя (рис.24, 25):

Код запроса:

SELECT Product. наименован, Vid. вид_мебели, Strana. страна,;

Product. дата_выпус, Product. дата_прода, Product. цена, Product. вес,;

Product. количество;

FROM mebel! strana INNER JOIN mebel! product;

INNER JOIN mebel! vid ;

ON Vid. id = Product. id_vid ;

ON Strana. id = Product. id_strana;

where (Strana. id = val(bo1.value));

ORDER BY Product. наименован

Рис.22. Форма для поиска изделий заданного производителя.

Рис.23. Результаты (для России).

Найти всю мебель с заданной датой выпуска (рис.24):

Код метода Click кнопки «Показать»:

SELECT product. наименован AS "Наименование",vid. вид_мебели, product. дата_выпус;

FROM mebel! product;

INNER JOIN mebel! vid ON product. id_vid = vid. id;

WHERE product. дата_выпус = thisform. text1.value;

ORDER BY product. наименован

Рис.24. Форма для запроса и результат.

Найти всю мебель, чей вес находится в заданных пределах (ввод интервала) для заданного производителя (выбор) и в целом (рис.25-27):

Рис.25.Форма для запроса.

Код метода Click кнопки «ALL»:

Select product. наименован, product. цена, product. вес, vid. вид_мебели;

from mebel! product;

Inner join mebel! vid on product. id_vid = vid. id;

where product. вес between thisform. text1.value and thisform. text2.value

Код метода Click кнопки «Показать»:

Select product. наименован, product. цена, product. вес, vid. вид_мебели, strana. страна;

from mebel! product;

Inner join mebel! vid on product. id_vid = vid. id;

Inner join mebel! strana on product. id_strana = strana. id;

where (product. вес between thisform. text1.value and thisform. text2.value) and strana. id = val(bo1.value)

Рис.26. Результат (вес от 100 до 200).

Рис.27. Результат (вес от 100 до 200, Германия).

Найти долю мебели, проданных за определенный период (ввод периода) от общего времени продажи (рис.28):

Код метода Click кнопки «Показать»:

SELECT (max(product. дата_прода)- min(product. дата_прода)) FROM mebel! product into array tmp

SELECT COUNT(product. id)*100/tmp[1] as "Доля", max(product. дата_прода), min(product. дата_прода);

FROM mebel! product ;

WHERE product. дата_прода between thisform. Text1.value and thisform. Text2.value

Рис.28. Форма и результат для вывода доли изделий.

Найти всю мебель, поступившую от заданного поставщика, чья стоимость больше, чем стоимость заданного изделия (ввод наименования), поступившего из заданной страны (ввод наименования страны) (рис.29, 30):

Рис.29. Форма и результат для вывода изделий. Рис.30.Подзапрос

Код метода Click кнопки «Показать»:

select product. цена ;

from mebel! product;

inner join mebel! strana on product. id_strana = strana. id;

where product. наименован = (thisform. Text1.value) and strana. id = val(bo1.value) and (postav. id = val(bo2.value))

select product. наименован, product. цена, postav. поставщик;

from mebel! product;

inner join mebel! postav on product. id_postav = postav. id;

inner join mebel! strana on product. id_strana = strana. id;

where (product. цена > (select product. цена ;

from mebel! product;

inner join mebel! strana on product. id_strana = strana. id;

where product. наименован = thisform. Text1.value and;

strana. id = val(bo1.value)) and postav. id = val(bo2.value))

Найти долю дешевой мебели (ввод стоимости), поступивших от заданного поставщика и в целом (рис.31, 32):

Код метода Click кнопки «В целом»:

zn = thisform. Text1.value

select * from product into cursor cur

n_all = reccount()

select * from product into cursor cur where цена < zn

n_old = reccount()

res = (n_old / n_all)*100

MessageBox("Доля дешевых изделий: " + str (res) + "%")

Код метода Click кнопки «По поставщику»:

zn = thisform. Text1.value

select * from product into cursor cur

n_all = reccount()

select * from product into cursor cur where (цена < zn) and (id_postav = val(bo1.value))

n_old = reccount()

res = (n_old / n_all)*100

MessageBox("Доля дешевых изделий: " + str (res) + "%")

Рис.31.Форма для вывода доли дешевых изделий.

Рис.32. Результат запроса (цена дор) для заданного поставщика – Ikea (справа) и в целом (слева).

Найти среднюю стоимость мебели, проданной за определенный промежуток времени (ввод интервала) (рис.33):

Код запроса:

select avg(product. цена);

from mebel! product;

where (product. дата_прода between thisform. Text1.value and thisform. Text2.value)

Рис.33. Средняя стоимость мебели, проданной за определенный промежуток времени.

Найти все изделия, чья стоимость выше, чем средняя стоимость изделий заданного производителя (рис.34, 35):

Код запроса:

select avg (product. цена) as "Среднее" ;

from mebel! product;

where product. id_strana = val(bo1.value)

select product. наименован, product. цена, product. количество;

from mebel! product;

where (product. цена > (select avg (product. цена)as "Среднее" from mebel! product;

where product. id_strana = val(bo1.value) ))

Рис.34. Подзапрос.

Рис.35. Результат (страна Германия)

Найти самый популярный вид мебели (продано наибольшее количество) (рис.36):

Код запроса:

Select product. наименован, product. цена, vid. вид_мебели, max(product. количество);

from mebel! product;

inner join mebel! vid on product. id_vid = vid. id;

where (product. количество = (select max(product. количество) from mebel! product))

Рис.36.Форма для запроса и результат.

Найти долю дешевой мебели (меньше заданного) от общего числа мебели (рис.37):

Код запроса:

SELECT COUNT(product. id) FROM mebel! product into array tmp

SELECT COUNT(product. id)*100/tmp[1] as "Доля";

FROM mebel! product ;

WHERE product. цена < thisform. Text1.value

Рис.37.Форма для запроса и результат.

6.Руководство пользователя

Разработана справочная система для созданной базы данных. В результате проделанной работы были реализованы следующие возможности:

    Темы справочной системы Ключи для поиска тем Перекрёстные ссылки Пояснения к терминам

Результаты работы проиллюстрированы на приведённых ниже рисунках:

Рис.38. Содержание

Рис.39. Пояснения к терминам.

Рис.40. Перекрестные ссылки.

Рис.41.Предметный указатель

7.Выводы и анализ результатов

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

В процессе выполнения данной расчётно-графической работы были закреплены знания и навыки, полученные в ходе сдачи лабораторных работ, включающие в себя:

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

При реализации запросов был использован язык программирования Visual FoxPro 6.0 для определения переменных, массивов, создание циклов и условий. Все эти возможности значительно увеличивают потенциал использования языка SQL.

8. Использованная литература

1)  Базы данных. Методические указания к лабораторному практикуму.- Новосибирск: Издательство НГТУ, 2004. – 56с.

2)  Иллюстрированный самоучитель по Visual FoxPro 8 (электронный вариант)