Министерство образования и науки Российской Федерации
Новосибирский государственный технический университет
Кафедра вычислительной техники
Расчетно-графическая работа
по дисциплине «Базы данных»
База данных «Кондитерские изделия»
Факультет: АВТ Преподаватель:
Группа: АМ-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


