Министерство образования и культуры

Российской Федерации

НГТУ

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

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

«Системы управления базами данных»

Вариант 16

База данных «ИГРУШКИ»

Выполнила:

студентка гр. АМ-110

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

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

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

Задание

Основная база данных “Игрушки”. Предусмотреть: меню, печать на экран, ввод данных, редактирование, просмотр данных. Реализовать следующие типы запросов:

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

n  Для каждого вида игрушек выдать список, отсортированный:

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

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

n  по весу,

n  по стоимости,

n  по дате продажи.

n  Найти самый дорогой вид игрушек, самый дешевый, среднюю стоимость по каждому виду и в целом.

n  Найти игрушки с ценой в заданных пределах (предусмотреть ввод цены с клавиатуры) по каждому виду и в целом.

n  Найти все игрушки заданного производителя (выбор).

n  Найти долю дешевых игрушек (меньше заданного, ввод ограничения) от общего числа игрушек (для каждого возраста (ввод) и в целом).

n  Найти все игрушки с заданной датой выпуска (ввод даты).

n  Найти все игрушки, чей вес находится в заданных пределах (ввод интервала) для заданного производителя (выбор) и в целом.

n  Найти долю игрушек, проданных за определенный период (ввод периода) от общего времени продажи.

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

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

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

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

n  Найти среднюю стоимость игрушек, проданных за определенный промежуток времени (ввод интервала).

n  Найти все игрушки, чья стоимость выше, чем средняя стоимость игрушек заданного производителя.

n  Найти игрушку, которую лучше всего раскупают, указать параметры (стоимость, производитель, возраст и т. д.).

Описание программы в целом

Данная РГР программа выполнена на основе меню. Это облегчает работу с базой данных, так как все основные команды просмотра, сортировки базы данных, а также реализация запросов выполняются прямо из команд меню. Ввод и редактирование данных выполняется в формах либо самих таблицах.

Основой программы является база данных «Игрушки». Она состоит из трех таблиц, в которых содержатся необходимые данные об основных характеристиках товара магазина игрушек.

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

Данная РГР программа выполнена на основе меню. Это облегчает работу с базой данных, так как все основные команды просмотра, сортировки базы данных, а также реализация запросов выполняются прямо из команд меню. Ввод и редактирование данных выполняется в формах либо самих таблицах.

Рис. 1. Внешний вид меню пользователя.

На Рис.1 приведено меню, которое появляется сразу после запуска программы.

4. Описание работы меню

1) Первый пункт называется «Редактирование» и позволяет вызывать формы для просмотра, сортировки, редактирования и удаления данных либо таблицы.

Рис.2 Подменю пункта «Редактирование»

2) Второй пункт называется «Запросы». Он позволяет осуществлять различные запросы в базе данных в соответствии с различными критериями.

Рис.3 Подменю пункта «Запросы»

3) Третий пункт меню «Просмотр» предназначен для просмотра таблиц базы с занесенными данными.

Рис.3 Подменю пункта «Просмотр»

3) Последний пункт меню Exit(Выход) осуществляет закрытие меню при помощи команды set sysmenu to default.

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

Основной методикой при работе с программой является использование команд меню и наблюдение за результатами работы той или иной команды при вводе тех или иных данных. Подробное описание пунктов меню и работа с ним приведены в соответствующем пункте отчёта. Для того, чтобы вызвать меню, нужно в оболочке Visual FoxPro 6.0 (или любой другой с номером версии выше 6.0) в меню “Program” выбрать пункт “Do”, после чего указать путь к файлу menu. mpr и нажать кнопку «Do». Второй способ запуска меню: в менеджере проекта выбрать вкладку «Other», далее на которой выбрать меню «menu» и нажать кнопку Run(Выполнить). Стандартное меню Visual FoxPro заменится меню данной программы. Теперь можно выбирать команды меню и осуществлять необходимые действия.

6. Графическое представление работы меню

При выборе пункта «Игрушки» появится форма, представленная на Рис.4.

Рис. 4. Форма для просмотра игрушек.

При выборе пункта «Поставщики» появится форма, представленная на Рис.5.

Рис. 5. Форма для просмотра поставщиков

При выборе пункта «Тип» появится форма, представленная на Рис.5.

Рис. 5. Форма для просмотра видов

При выборе пункта «Сортировка» появится форма, представленная на Рис.7.

Рис. 7. Форма для сортировки товаров

Рис. 7. Поиск самого дорого вида игрушек, дешевого, среднюю стоимость.


Рис. 7. Поиск игрушек с ценой в заданных пределах.

Рис. 7. Игрушки заданного производителя.

Рис. 7. Доля дешевых игрушек.

Рис. 7. Игрушки с заданной датой выпуска.

Рис. 7. Игрушки с заданным весом для заданного производителя.

Рис. 7. Доля игрушек , проданных за определенный промежуток времени.

Рис. 7. Самый популярный вид игрушек для заданного возраста.

Рис. 7. Игрушки, поступившие от заданного поставщика, чья стоимость больше стоимости другой выбранной игрушки.

Рис. 7. Доля дешевых игрушек, поступивших от заданного поставщика.

Рис. 7. Средняя стоимость игрушек, проданных за определенны период.


Рис. 7. Игрушки со стоимостью выше чем средняя стоимость игрушек заданного производителя.

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

Рис.3 Связи в БД

8. Файлы базы данных

Рис. 20. Таблица «Igrushki» базы данных


Рис. 21. Таблица «Postavshik» базы даных.

.

Рис. 21. Таблица «Tip» базы данных.

9. Структуры файлов баз данных

Для решения задачи в среде Visual FoxPro 6.0 были созданы следующие таблицы:

Таблица «Игрушки», внутренне имя – igrushki. dbf

Поле

Тип поля

Описание

Id

Integer(4)

Уникальный идентификатор

Nazvanie

Character(25)

Наименование игрушки

Tip

Integer(4) (Regular )

Идентификатор типа игрушки

Postavshik

Integer(4) (Regular )

Идентификатор поставщика

Data_prodagi

Date(8)

Дата продажи

Data_vipuska

Date(8)

Дата выпуска

Ves

Numeric(5,2)

Вес

Koll_prod

Numeric(2,0)

Количество проданных игрушек

Stoimost

Float(5,1)

Цена

Age_low

Integer(4)

Нижняя граница возраста

Age_high

Integer(4)

Верхняя граница возраста

Таблица «Типы», внутреннее имя – tip. dbf

Поле

Тип поля

Описание

Id

Integer(4) (primary)

Уникальный идентификатор

Avg_cost

Float(5,3)

Средняя стоимость по каждому типу

Name_tip

Character(25)

Имя типа

Таблица «Поставщики», внутренне имя – postavshik. dbf

Поле

Тип поля

Описание

Id

Integer(4) (primary)

Уникальный идентификатор

Name_postavshik

Character(25)

Имя поставщика

10. Тексты программ

Все запросы выполнены с помощью языка запросов SQL (Structured Query Language).

Сортировка по дате выпуска:

select DISTINCT igrushki. nazvanie as Название,;

igrushki. data_vipuska as Дата_выпуска;

from igrushki;

full join tip on igrushki. tip=tip. id;

full join postavshik on igrushki. postavshik=postavshik. id;

where tip. name_tip=bo1.Value;

order by igrushki. data_vipuska

Сортировка по поставщику:

select DISTINCT igrushki. nazvanie as Название,;

postavshik. name_postavshik as Поставщик;

from prodagi;

full join igrushki on prodagi. id=igrushki. id;

full join tip on igrushki. tip=tip. id;

full join postavshik on igrushki. postavshik=postavshik. id;

where tip. name_tip=bo1.Value;

order by postavshik. name_postavshik;

Сортировка по весу:

select DISTINCT igrushki. nazvanie as Название, igrushki. ves as Вес;

from igrushki;

full join tip on igrushki. tip=tip. id;

full join postavshik on igrushki. postavshik=postavshik. id;

where tip. name_tip=bo1.Value;

group by igrushki. nazvanie;

order by igrushki. ves;

Сортировка по стоимости:

select DISTINCT igrushki. nazvanie as Название, max(igrushki. stoimost) as Цена;

from igrushki;

full join tip on igrushki. tip=tip. id;

full join postavshik on igrushki. postavshik=postavshik. id;

where tip. name_tip=bo1.Value;

group by igrushki. nazvanie;

order by igrushki. stoimost

Сортировка по дате продажи:

select DISTINCT igrushki. nazvanie as Название,;

igrushki. data_prodagi as Дата_продажи;

from igrushki;

full join tip on igrushki. tip=tip. id;

where tip. name_tip=bo1.Value;

order by igrushki. data_prodagi;

Самый дорогой вид игрушек

LOCAL cntpost(5)

LOCAL temp

use igrushki in 2

use tip in 1

select 1

do while (!EOF())

temp=tip. id

cntpost=0

select 2

SELECT avg(igrushki. stoimost);

FROM my! igrushki;

WHERE igrushki. tip=temp;

INTO ARRAY cntpost

Update tip;

Set avg_cost=cntpost;

Where tip. id=temp

select 1

skip 1

enddo

close databases

SELECT tip. name_tip as Тип_товара, tip. avg_cost as MAX_средняя_стоимость;

FROM my! tip;

WHERE tip. avg_cost == (select max(tip. avg_cost) FROM my! tip)

Самый дешевый вид игрушек:

LOCAL cntpost(5)

LOCAL temp

use igrushki in 2

use tip in 1

select 1

do while (!EOF())

temp=tip. id

cntpost=0

select 2

SELECT avg(igrushki. stoimost);

FROM my! igrushki;

WHERE igrushki. tip=temp;

INTO ARRAY cntpost

Update tip;

Set avg_cost=cntpost;

Where tip. id=temp

select 1

skip 1

enddo

close databases

SELECT tip. name_tip as Тип_товара, tip. avg_cost as MIN_средняя_стоимость;

FROM my! tip;

WHERE tip. avg_cost == (select min(tip. avg_cost) FROM my! tip)

Средняя стоимость(в целом):

select avg(igruhki. stoimost) as Средняя_стоимость from igruhki;

Средняя стоимость по типу «Куклы»:

select avg(igrushki. stoimost) as Средняя_стоимость_по_куклам;

from igrushki;

where tip=1

Средняя стоимость по типу «Машинки»:

select avg(igrushki. stoimost) as Средняя_стоимость_по_машинкам;

from igrushki;

where tip=2

Средняя стоимость по типу «Погремушки»:

select avg(igrushki. stoimost) as Средняя_стоимость_по_погремушкам;

from igrushki;

where tip=3

Средняя стоимость по типу «Транспорт»:

select avg(igrushki. stoimost) as Средняя_стоимость_по_куклам;

from igrushki;

where tip=4

Средняя стоимость по типу «Электронные игрушки»:

select avg(igrushki. stoimost) as Средняя_стоимость_по_куклам;

from igrushki;

where tip=5

Поиск игрушек с ценой в заданных пределах:

if ThisForm. optiongroup1.option1.value=1

bo1.enabled=1

Endif

if ThisForm. optiongroup1.option2.value=1

bo1.enabled=0

Endif

if thisform. optiongroup1.option1.value=1

select igrushki. nazvanie as Игрушки, igrushki. stoimost as Цена;

from my! igrushki inner join my! tip;

on igrushki. tip==tip. id;

where igrushki. stoimost between ThisForm. Text1.Value and ThisForm. Text2.Value AND;

igrushki. tip=(select tip. id FROM my! tip WHERE tip. name_tip=bo1.value);

ORDER BY igrushki. stoimost

else

select igrushki. nazvanie as Игрушки, igrushki. stoimost as Цена;

from my! igrushki;

where igrushki. stoimost between ThisForm. Text1.Value and ThisForm. Text2.Value;

ORDER BY igrushki. stoimost

endif

Игрушки заданного производителя:

select igrushki. nazvanie as название,;

postavshik. name_postavshik as производитель;

from igrushki;

full join postavshik on igrushki. postavshik=postavshik. id;

where postavshik. name_postavshik=bo1.Value;

Доля дешевых игрушек от общего числа:

LOCAL temp1(1)

LOCAL temp2(1)

use my! igrushki

temp=RECCOUNT()

if thisform. optiongroup1.option1.value == 1

SELECT count(igrushki. nazvanie);

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value AND;

thisform. Text2.value >= igrushki. Age_low AND thisform. Text2.value <= igrushki. Age_high;

INTO ARRAY temp1

SELECT count(igrushki. nazvanie);

FROM my! igrushki;

WHERE thisform. Text2.value >= igrushki. Age_low AND thisform. Text2.value <= igrushki. Age_high;

INTO ARRAY temp2

SELECT igrushki. nazvanie, igrushki. age_low as Нижний_предел_возраста,;

igrushki. age_high as Верхний_предел_возраста, igrushki. stoimost as Цена;

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value AND;

thisform. Text2.value >= igrushki. Age_low AND thisform. Text2.value <= igrushki. Age_high;

ORDER BY igrushki. stoimost

result=temp1/temp2*100

MessageBox("Доля дешевых игрушек: " + alltrim(str(result))+" %")

else

SELECT count(igrushki. nazvanie);

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value;

INTO ARRAY temp1;

SELECT igrushki. nazvanie as Название, igrushki. stoimost as Цена;

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value;

ORDER BY igrushki. stoimost

result=temp1/temp*100

MessageBox("Доля дешевых игрушек: " + alltrim(str(result))+" %")

endif

close database

Игрушки с заданной датой выпуска:

select igrushki. nazvanie as Название_игрушки,;

TTOD(igrushki. data_vipuska) as Дата_выпуска from igrushki;

where TTOD(igrushki. data_vipuska)=CTOD(ThisForm. Text1.Value);

group by igrushki. nazvanie;

Игрушки с заданным весом для заданного производителя:

if thisform. optiongroup1.option1.value=1

select igrushki. nazvanie as Игрушки, igrushki. ves as Вес,;

postavshik. name_postavshik as Поставщик;

from my! igrushki inner join my! postavshik;

on igrushki. postavshik==postavshik. id;

where igrushki. ves between ThisForm. Text1.Value and ThisForm. Text2.Value AND;

igrushki. postavshik==(select postavshik. id FROM my! postavshik WHERE postavshik. name_postavshik=bo1.value);

ORDER BY igrushki. ves

else

select igrushki. nazvanie as Игрушки, igrushki. ves as Вес,;

postavshik. name_postavshik as Поставщик;

from my! igrushki inner join my! postavshik;

on igrushki. postavshik==postavshik. id;

where igrushki. ves between ThisForm. Text1.Value and ThisForm. Text2.Value;

ORDER BY igrushki. ves

Endif

Доля игрушек, проданных за определенный промежуток времени:

LOCAL temp1(1)

fmin = thisform. Text1.value

fmax = thisform. Text2.value

use my! igrushki

temp=RECCOUNT()

SELECT count(igrushki. nazvanie);

FROM my! igrushki;

WHERE igrushki. data_prodagi between fmin AND fmax;

INTO ARRAY temp1

result=temp1/temp*100

MessageBox("Доля игрушек за данный период " + alltrim(str(result))+"%")

close databases

Самый популярный вид игрушек для заданного возраста:

LOCAL cntprod(5)

LOCAL temp

close database

use igrushki in 2

use tip in 1

select 1

do while (!EOF())

temp=tip. id

cntprod=0

select 2

select sum(igrushki. koll_prod);

from my! igrushki;

where igrushki. age_low<=THISFORM. Text1.value AND igrushki. age_high>=THISFORM. Text1.value AND;

igrushki. tip==temp;

into array cntprod

Update tip;

Set avg_cost=cntprod;

Where tip. id=temp

select 1

skip 1

enddo

close databases

select tip. name_tip, tip. avg_cost;

from my! tip;

where tip. avg_cost=(select max(tip. avg_cost) FROM my! tip)

Самый популярный вид игрушек в целом:

LOCAL cntprod(5)

LOCAL temp

use igrushki in 2

use tip in 1

select 1

do while (!EOF())

temp=tip. id

cntprod=0

select 2

select sum(igrushki. koll_prod);

from my! igrushki;

where igrushki. tip==temp;

into array cntprod

Update tip;

Set avg_cost=cntprod;

Where tip. id=temp

select 1

skip 1

enddo

select tip. name_tip, tip. avg_cost;

from my! tip;

where tip. avg_cost=(select max(tip. avg_cost) FROM my! tip)

close databases

Игрушки, поступившие от заданного поставщика, чья стоимость больше стоимости другой выбранной игрушки:

LOCAL temp(1)

LOCAL temp1(2)

select Distinct(igrushki. postavshik);

from my! igrushki;

where igrushki. postavshik == (select postavshik. id FROM my! postavshik WHERE postavshik. name_postavshik=bo3.value);

Into array temp

select igrushki. stoimost FROM my! igrushki;

WHERE igrushki. postavshik==temp AND igrushki. nazvanie = bo2.value;

INTO ARRAY temp1

num = alen(temp1)

if num==2

num=0

else

num=temp1

endif

MessageBox("Цена выбранной игрушки: " + alltrim(str(num)))

select igrushki. nazvanie as Игрушки, igrushki. stoimost as Цена,;

postavshik. name_postavshik as Поставщик;

from my! igrushki inner join my! postavshik;

on igrushki. postavshik==postavshik. id;

where igrushki. postavshik == (select postavshik. id FROM my! postavshik WHERE postavshik. name_postavshik=bo1.value) AND;

igrushki. stoimost > num;

ORDER BY igrushki. stoimost

Доля дешевых игрушек, поступивших от заданного поставщика

LOCAL temp1(1)

use my! igrushki

temp=RECCOUNT()

if thisform. optiongroup1.option1.value == 1

SELECT count(igrushki. nazvanie);

FROM my! igrushki inner join my! postavshik;

on igrushki. postavshik==postavshik. id;

WHERE igrushki. stoimost <= thisform. text1.value AND;

igrushki. postavshik==(select postavshik. id FROM my! postavshik WHERE postavshik. name_postavshik=bo1.value);

INTO ARRAY temp1

SELECT igrushki. nazvanie, igrushki. stoimost as Цена;

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value AND;

igrushki. postavshik==(select postavshik. id FROM my! postavshik WHERE postavshik. name_postavshik=bo1.value);

ORDER BY igrushki. stoimost

result=temp1/temp*100

MessageBox("Доля дешевых игрушек: " + alltrim(str(result))+" %")

else

SELECT count(igrushki. nazvanie);

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value;

INTO ARRAY temp1;

SELECT igrushki. nazvanie as Название, igrushki. stoimost as Цена;

FROM my! igrushki;

WHERE igrushki. stoimost <= thisform. text1.value;

ORDER BY igrushki. stoimost

result=temp1/temp*100

MessageBox("Доля дешевых игрушек: " + alltrim(str(result))+" %")

endif

close database

Доля игрушек, проданных за определенный промежуток времени

LOCAL temp(1)

select 1

num1 = RECCOUNT()

date1=thisform. text1.value

IF thisform. check1.value == 1

date2=date()

else

date2=thisform. text2.value

endif

SELECT avg(igrushki. stoimost);

FROM my! igrushki;

WHERE igrushki. data_prodagi between date1 AND date2;

INTO ARRAY temp

SELECT igrushki. nazvanie as Название, igrushki. data_vipuska as Дата_выпуска,;

igrushki. data_prodagi as Дата_продажи, igrushki. stoimost as Стоимость, igrushki. koll_prod as Количество_проданных_игрушек;

FROM my! igrushki;

WHERE igrushki. data_prodagi between date1 AND date2;

ORDER BY igrushki. data_prodagi

MessageBox("Средняя стоимость: "+ alltrim(str(temp))+" р.")

Игрушки со стоимостью выше чем средняя стоимость игрушек заданного производителя

LOCAL temp(1)

LOCAL temp1(1)

select Distinct(igrushki. postavshik);

from my! igrushki;

where igrushki. postavshik == (select postavshik. id FROM my! postavshik WHERE postavshik. name_postavshik=bo1.value);

Into array temp

select avg(igrushki. stoimost);

FROM my! igrushki WHERE igrushki. postavshik=temp;

INTO ARRAY temp1

MessageBox("Средняя стоимость игрушки: " + alltrim(str(temp1)))

select igrushki. nazvanie as Игрушки, igrushki. stoimost as Цена,;

postavshik. name_postavshik as Поставщик;

from my! igrushki inner join my! postavshik;

on igrushki. postavshik==postavshik. id;

where igrushki. stoimost >= temp1;

ORDER BY igrushki. stoimost

Игрушка, которую лучше всего раскупают:

select igrushki. nazvanie as название, igrushki. stoimost as Цена, igrushki. koll_prod as Количество_проданных,;

igrushki. data_vipuska as Дата_выпуска, igrushki. data_prodagi as Дата_продажи,;

postavshik. name_postavshik as производитель;

from my! igrushki;

full join postavshik on igrushki. postavshik=postavshik. id;

where igrushki. koll_prod=(select max(igrushki. koll_prod) FROM my! igrushki)

Заключение

Была освоена в достаточном объеме система управления базами данных Microsoft Visual FoxPro 6.0, получены навыки по созданию баз данных и приложений.