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

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

Кафедра вычислительной техники

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

по дисциплине «Базы данных»

База данных «Кондитерские изделия»

Факультет: АВТ Преподаватель:

Группа: АМ-610

Вариант: 38

Студентка:

.

Новосибирск, 2009

1.  Задание

Сформировать основную базу данных (БД) - "Кондитерские изделия". Сформировать несколько БД: "Поставщик", "Клиент" и др.

Предусмотреть: меню, вывод на экран, вывод данных, редактирование, просмотр данных. Реализовать с использованием нескольких таблиц следующие типы запросов:

·  Для каждого вида кондитерского изделия указать сведения о нем (наименование, дата выпуска, место изготовления, цена, вес и т. п.);

·  Для каждого вида товара указать сведения о поставщике (наименование, регулярность поставок, процент бракованной продукции и т. д.);

·  Для каждого вида товара выдать список, отсортированный: по дате выпуска, в алфавитном порядке, по весу, по стоимости;

·  Найти самое дорогое кондитерское изделие, самое дешевое, среднюю стоимость;

·  Найти товар с ценой выше 5р(и любая другая сумма, т. е. предусмотреть ввод цены с клавиатуры);

·  Найти количество товара, проданного за определенный период (месяц, 3 месяца, 6 мес.), среднюю стоимость, за этот же период - самое дорогое кондитерское изделие и самое дешевое, вес;

·  Найти долю товара, поступившего от заданного поставщика (ввод поставщика) от общего числа поставщиков

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

·  Найти все кондитерские изделия с заданной датой выпуска (ввод даты);

·  Найти все кондитерские изделия с заданным весом (ввод), чья стоимость находится в заданных пределах;

·  Найти все кондитерские изделия, поступившие от заданного поставщика (ввод поставщика), чья стоимость больше заданной (ввод стоимости);

·  Найти все кондитерские изделия заданного производителя (выбор);

·  Найти долю дешевого товара (меньше заданного, ввод ограничения) от общего числа товара;

·  При заданной (ввод) температуре определить, какие виды продукции как портятся, как быстро;

·  Для каждого клиента составить список продукции, которая закупается, указать цену, кол-во, качество;

·  Для стоимости в заданных (ввод интервалов) пределах составить список товара, которые можно закупить, указав кол-во, качество.

2.  Ход работы

В базе данных Konditer_izd создано 5 таблиц:

·  Izdeliya – таблица (рис.1), в которой хранятся основные данные об изготовляемых изделиях (id изделия, название изделия, производитель, вес, цена, срок хранения, температура хранения);

Рис. 1. Таблица с данными об изделиях

·  klient - таблица (рис.2), в которой хранятся данные о клиенте (id клиента, «имя клиента»);

Рис. 2. Таблица с данными о клиенте

·  postavki – таблица (рис.3), в которой хранятся данные о поставках (id поставки, номер поставляемого изделия, дата производства изделия);

Рис. 3. Таблица с данными о поставках

·  postavshik – таблица (рис.4), в которой хранятся данные о поставщиках (id поставщика, имя поставщика);

Рис.4. таблица с данными о поствщиках

·  Prodazhi – таблица (рис.5), в которой хранятся данные о продажах (id продажи, id клиента, id изделия, количество изделий, дата продажи);

Рис. 5. Таблица с данными о продажах

Структура взаимосвязей таблиц (рис.6).

Рис. 6. Структура взаимосвязей между таблицами

Управление БД осуществляется с помощью меню «кондитер» (рис.7), которое позволяет производить ввод/вывод данных на экран и выполнять различные запросы, используя специально созданный интерфейс (рис.8-10).

Рис.7. Меню «кондитер»

При использовании любого пункта меню (кроме «выход») появляется новое подменю для выбора дальнейших действий. Рассмотрим меню и результаты каждого из запросов.

Рис. 8. Подменю «Редактирование данных»

Рис. 9. Подменю «Просмотр данных»

Рис. 10. Подменю «Запросы»

·  Для каждого вида кондитерского изделия указать сведения о нем (наименование, дата выпуска, место изготовления, цена, вес и т. п.);

·  Для каждого вида товара указать сведения о поставщике (наименование, регулярность поставок, процент бракованной продукции и т. д.);

·  Для каждого вида товара выдать список, отсортированный: по дате выпуска, в алфавитном порядке, по весу, по стоимости;

Задание №1: Найти самое дорогое кондитерское изделие, самое дешевое, среднюю стоимость.

Вид меню:

Рис. 11. Меню запроса №1

Запросы:

Самое дешевое изделие

SELECT TOP 1 Izdeliya. name;

FROM ;

izdeliya;

ORDER BY Izdeliya. cena

Самое дорогое изделие

SELECT TOP 1 Izdeliya. name;

FROM ;

izdeliya;

ORDER BY Izdeliya. cena DESC

Средняя стоимость

SELECT AVG(Izdeliya. cena);

FROM ;

Izdeliya

Результат выполнения запроса:

Рис. 12. Результат выполнения запроса №1 (Самое дорогое изделие)

Рис. 13. Результат выполнения запроса №1 (Самое дешевое изделие)

Рис. 14. Результат выполнения запроса №2 (Средняя стоимость)

Задание №2: Найти товар с ценой выше 5р (и любая другая сумма, т. е. предусмотреть ввод цены с клавиатуры).

Вид меню:

Рис. 15. Меню запроса №1

Запрос:

SELECT Izdeliya. name, Izdeliya. cena;

FROM ;

izdeliya;

WHERE ( cena ) > pr

Результат выполнения запроса:

Рис. 16. Результат выполнения запроса №2

Задание №3: Найти количество товара, проданного за определенный период (месяц, 3 месяца, 6 мес.), среднюю стоимость, за этот же период - самое дорогое кондитерское изделие и самое дешевое, вес;

Вид меню:

Рис. 17. Меню запроса №3

Запросы:

Количество товара за определенный период

SELECT SUM(kol) FROM prodazhi WHERE date>GOMONTH(DATE(),k)

Средняя стоимость

SELECT SUM(cena*kol)/SUM(kol);

FROM prodazhi JOIN izdeliya ON izdeliya. id=prodazhi. izdelie;

WHERE date>GOMONTH(DATE(),k)

Самое дорогое

SELECT MAX(cena) FROM prodazhi JOIN izdeliya ON;

izdeliya. id=prodazhi. izdelie WHERE date>GOMONTH(DATE(),k)

Самое дешевое

SELECT MIN(cena) FROM prodazhi JOIN izdeliya ON;

izdeliya. id=prodazhi. izdelie WHERE date>GOMONTH(DATE(),k)

Вес проданных товаров

SELECT SUM(ves) FROM prodazhi JOIN izdeliya ON; izdeliya. id=prodazhi. izdelie WHERE date>GOMONTH(DATE(),k)

Результат выполнения запроса:

Рис. 18. Результат выполнения запроса №3 (Количество товара за определенный период)

Рис. 19. Результат выполнения запроса №3 (средняя стоимость)

Рис. 20. Результат выполнения запроса №3 (самое дорогое)

Рис. 21. Результат выполнения запроса №3 (самое дешевое)

Рис. 22. Результат выполнения запроса №3 (вес проданных товаров)

Задание №4: Найти долю товара, поступившего от заданного поставщика (ввод поставщика) от общего числа поставщиков

Вид меню:

Рис. 22. Меню запроса №4

Запрос:

SELECT X. C/Y. C FROM (SELECT COUNT(*) AS C;

FROM izdeliya JOIN postavshik ON izdeliya. postavshik=postavshik. id;

WHERE postavshik. name=pt) AS X, (SELECT COUNT(*) AS C FROM izdeliya) AS Y

Результат выполнения запроса:

Рис. 23. Результат выполнения запроса №4

Задание №5: Найти все кондитерские изделия с заданной датой выпуска (ввод даты).

Вид меню:

Рис. 24. Меню запроса №5

Запрос:

SELECT Izdeliya. name;

FROM ;

postavki ;

RIGHT OUTER JOIN izdeliya ;

ON Izdeliya. id = Postavki. izdelie;

WHERE Postavki. proizv_dt = DATE(yy, mm, dd)

Результат выполнения запроса:

Рис. 25. Результат выполнения запроса №5

Задание №6: Найти все кондитерские изделия с заданным весом (ввод), чья стоимость находится в заданных пределах.

Вид меню:

Рис. 26. Меню запроса №6

Запрос:

SELECT name FROM izdeliya WHERE ves=v AND cena BETWEEN x AND y

Результат выполнения запроса:

Рис. 27. Результат выполнения запроса №6

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

Вид меню:

Рис. 28. Меню запроса №7

Запрос:

SELECT izdeliya. name;

FROM ;

izdeliya ;

JOIN postavshik ;

ON izdeliya. postavshik = postavshik. id;

WHERE ( postavshik. name ) = p ;

AND ( izdeliya. cena ) > ( c )

Результат выполнения запроса:

Рис. 29. Результат выполнения запроса №7

Задание №8: Найти все кондитерские изделия заданного производителя (выбор).

Вид меню:

Рис. 30. Меню запроса №8

Запрос:

SELECT Izdeliya. name, Izdeliya. cena, Izdeliya. ves;

FROM ;

izdeliya;

WHERE ( proizvod ) = ( pt)

Результат выполнения запроса:

Рис. 31. Результат выполнения запроса №8

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

Вид меню:

Рис. 32. Меню запроса №9

Запрос:

SELECT X. C/Y. C FROM (SELECT COUNT(*) AS C;

FROM izdeliya WHERE cena<pt) AS X,(SELECT COUNT(*) AS C;

FROM izdeliya) AS Y

Результат выполнения запроса:

Рис. 33. Результат выполнения запроса №9

Задание №10: При заданной (ввод) температуре определить, какие виды продукции как портятся, как быстро.

Вид меню:

Рис. 34. Меню запроса №10

Запрос:

SELECT name AS имя,;

srok_hran AS обычный_срок_хранения,;

temp_hran AS рекомендуемая_температура,;

FLOOR(P3) AS срок_хранения_при_указанной_T;

FROM (;

SELECT *,srok_hran*(1-IIF(P2<0,0,P2)) AS P3 FROM (;

SELECT *,IIF(P1>1,1,P1) AS P2 FROM (;

SELECT *,(k-temp_hran)/30 AS P1 FROM izdeliya;

) AS T1;

) AS T2;

) AS T3

Результат выполнения запроса:

Рис. 35. Результат выполнения запроса №10

Задание №11: Для каждого клиента составить список продукции, которая закупается, указать цену, кол-во, качество.

Вид меню:

Рис. 36. Меню запроса №11

Запрос:

SELECT izdeliya. name, prodazhi. kol, izdeliya. cena, prodazhi. kol*izdeliya. cena;

AS stoimost, date FROM prodazhi;

JOIN klient ON klient. id=prodazhi. izdelie;

JOIN izdeliya ON izdeliya. id=prodazhi. izdelie;

WHERE klient. name=kl

Результат выполнения запроса:

Рис. 37. Результат выполнения запроса №11

Задание №12: Для стоимости в заданных (ввод интервалов) пределах составить список товара, которые можно закупить, указав кол-во, качество.

Вид меню:

Рис. 38. Меню запроса №12

Запрос:

SELECT name, FLOOR(k/cena) AS kolichestvo FROM izdeliya

Результат выполнения запроса:

Рис. 39. Результат выполнения запроса №12

Задание №13: Для каждого вида кондитерского изделия указать сведения о нем (наименование, дата выпуска, место изготовления, цена, вес и т. п.);

Запрос:

SELECT *;

FROM kond! izdeliya

Результат выполнения запроса:

Рис. 40. Результат выполнения запроса №13

Задание №14: Для каждого вида товара указать сведения о поставщике (наименование, регулярность поставок, процент бракованной продукции и т. д.).

Запрос:

SELECT Izdeliya. name, Izdeliya. ves, Izdeliya. cena, Postavshik. name,;

Postavshik. brak_percent AS процент_брака,;

Postavshik. regular AS регулярность_поставок_дней;

FROM ;

kond! izdeliya ;

INNER JOIN kond! postavshik ;

ON Postavshik. id = Izdeliya. postavshik

Результат выполнения запроса:

Рис. 41. Результат выполнения запроса №14

Задание №15: Для каждого вида товара выдать список, отсортированный: по дате выпуска, в алфавитном порядке, по весу, по стоимости.

Запрос:

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

SELECT Izdeliya. name, Izdeliya. proizvod, Izdeliya. ves, Izdeliya. cena,;

Postavki. proizv_dt AS дата_выпуска;

FROM ;

kond! izdeliya ;

INNER JOIN kond! postavki ;

ON Izdeliya. id = Postavki. izdelie;

ORDER BY Postavki. proizv_dt

в алфавитном порядке

SELECT Izdeliya. name, Izdeliya. proizvod, Izdeliya. ves, Izdeliya. cena,;

Postavki. proizv_dt AS дата_выпуска;

FROM ;

kond! izdeliya ;

INNER JOIN kond! postavki ;

ON Izdeliya. id = Postavki. izdelie;

ORDER BY Izdeliya. name

по весу

SELECT Izdeliya. name, Izdeliya. proizvod, Izdeliya. ves, Izdeliya. cena,;

Postavki. proizv_dt AS дата_выпуска;

FROM ;

kond! izdeliya ;

INNER JOIN kond! postavki ;

ON Izdeliya. id = Postavki. izdelie;

ORDER BY Izdeliya. ves

по стоимости

SELECT Izdeliya. name, Izdeliya. proizvod, Izdeliya. ves, Izdeliya. cena,;

Postavki. proizv_dt AS дата_выпуска;

FROM ;

kond! izdeliya ;

INNER JOIN kond! postavki ;

ON Izdeliya. id = Postavki. izdelie;

ORDER BY Izdeliya. cena

Результат выполнения запроса:

Рис. 42. Результат выполнения запроса №15 (по дате выпуска)

Рис. 43. Результат выполнения запроса №15 (в алфавитном порядке)

Рис. 44. Результат выполнения запроса №15 (по весу)

Рис. 45. Результат выполнения запроса №15 (по стоимости)

Пример функциональности формы редактирования данных таблиц (рис.46).

Рис. 46. Форма редактирования таблицы кондитерских изделий

Вывод отчета с данными об изделиях (рис.47)

Рис.47. Отчет «Изделия»

3.  Выводы:

В ходе выполнения работы были получены навыки работы с проектами пакета Microsoft Visual FoxPro 9.0, закреплены знания, полученные в ходе выполнения лабораторных работ по дисциплине «Базы данных». В процессе создания БД были укреплены знания по следующим пунктам:

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

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

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

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

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

Документация по Microsoft Visual FoxPro 9.0