Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

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

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

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

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

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

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

Группа: АМ-209

Студент:

Преподаватель: Трошина ГВ.

Вариант: 9

Тема: Пресса

Новосибирск 2005

Оглавление:

1. Задание. 3

2. Описание программы.. 5

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

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

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

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

7. Тексты программ с комментариями. 10

8. Выводы: 27

9. Список литературы: 28


1. Задание

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

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

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

1. В алфавитном порядке по наименованию

2. По тиражу

3. По стоимости

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

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

·  Найти все издания, чей тираж попадает в заданные пределы (ввод интервала)

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

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

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

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

·  Найти долю прессы, проданной за определенный период (ввод)

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

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

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

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

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

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

2.  Описание программы

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

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

Для решения поставленной задачи были созданы три таблицы:

Таблица «press.dbf».

В ней хранится информация о прессе.

Поле

Тип поля

Описание

Id

integer

Идентификатор

Id_type

integer

Идентификатор, для связи с таблицей «Typ»

Name_press

Character

Название издания

Id_publisher

Integer

Идентификатор, для связи с таблицей «Publisher»

City

Character

Город

Date_of_publ

Date

Дата выпуска издания

Price

Numeric

Цена издания

Circulation

Numeric

Тираж издания

Date_of_sale

Date

Дата продажи

Sold_press

Numeric

Количество проданных экземпляров

Таблица «typ.dbf».

В ней хранится информация о виде издания.

Поле

Тип поля

Описание

Id_type

integer

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

Type_

character

Вид издания


Таблица «publisher.dbf».

В ней хранится информация о виде издания.

Поле

Тип поля

Описание

Id_publisher

integer

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

Publisher_

character

Название издательства

Данные, хранящиеся в таблицах, приведены на рис.1 – рис.3

Рис.1. Таблица ‘press’

Рис.2. Таблица ‘typ’

Рис.3. Таблица ‘publisher’

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

Структура связей между таблицами представлена на рис.4

Рис.4. Связи между таблицами базы данных ‘pressa’

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

Как уже было сказано выше, данная программа выполнена на основе меню. На рис.5 представлено меню, которое появляется сразу же после запуска программы

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

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

Первый пункт меню называется ‘Edit’(редактирование). Редактирование возможно как в таблице, так и в форме

Рис.6. Подменю пункта ‘edit’ (редактирование)


Второй пункт называется ‘view’(просмотр). Он предназначен для просмотра таблиц данных

Рис.7. Подменю пункта ‘view’(просмотр)

3.Третий пункт называется ‘queries’(запросы). Он позводяет осуществлять различные запросы в базе данных и выводить на экран их результат

Рис.8. Подменю пункта ‘queries’(запросы)

4.Четвертый пункт называется ‘About’. В нем сдержтся информация о программе и о ее разработчике

Рис.9. Пункт меню “About”

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

При запуске меню активируется меню, которое предоставляет доступ к основным формам для работы с базой данных. Все запросы выполнены по «шаблону» - каждый запрос имеет примерно одинаковый вид. Это заголовок, в котором детально описан запрос, поля для выбора и ввода данных (combo box, text box). Для того, чтобы вызвать меню нужно в менеджере проекта, выбрав вкладку ‘menu’, нажать копку ‘run’. Либо в оболочке Visual FoxPro 6.0 (или другой с номером выше 6.0.) в меню ‘Program’ выбрать пункт ‘Do’, после чего указать путь к файлу menu. mpr. Стандартное меню исчезнет, и появится меню данной программы. После этого можно выбирать нужные команды меню и осуществлять необходимые действия.

7. Тексты программ с комментариями

По заданию необходимо было реализовать 18 запросов. Ниже приведен текст каждого из них и результат выполнения этого запроса.

Form_01.scx

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

1. В алфавитном порядке по наименованию

2. По тиражу

3. По стоимости

Рис.10. Форма “form_01.scx”

Обработка кнопки «Сортировка в алфавитном порядке»:

SELECT Press. name_press, typ. Type_ as Type_of_press, Press. price;

FROM pressa! press INNER JOIN pressa! typ;

ON Press. id_type = Typ. id_type;

WHERE press. id_type=(SELECT typ. id_type FROM pressa! typ WHERE typ. Type_=bo1.value);

ORDER BY Press. name_press

Обработка кнопки «Сортировка по тиражу»:

SELECT Press. name_press, Press. circulation, typ. Type_ as Type_of_press;

FROM pressa! press FULL JOIN pressa! typ;

FULL JOIN pressa! publisher ;

ON Press. id_publisher = Publisher. id_publisher ;

ON Press. id_type = Typ. id_type;

WHERE press. id_type=(SELECT typ. id_type FROM pressa! typ WHERE typ. Type_=bo1.value);

ORDER BY Press. circulation

Обработка кнопки «Сортировка по стоимости»:

SELECT Press. name_press, Press. price, typ. Type_ as Type_of_press;

FROM pressa! press FULL JOIN pressa! typ;

FULL JOIN pressa! publisher ;

ON Press. id_publisher = Publisher. id_publisher ;

ON Press. id_type = Typ. id_type;

WHERE press. id_type=(SELECT typ. id_type FROM pressa! typ WHERE typ. Type_=bo1.value);

ORDER BY Press. price, Press. name_press

Результаты работы запроса:

Рис.11.Результаты работы формы “form_01.scx”

Form_02.scx

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

Рис.12. Форма “form_02.scx”

Обработка кнопки «Самое дорогое издание»:

LOCAL kol(1)

SELECT count(typ. type_);

FROM pressa! typ;

INTO ARRAY kol

LOCAL cntpost(kol,2)

SELECT typ. type_, avg(press. price);

FROM pressa! press inner join pressa! typ;

ON press. id_type=typ. id_type;

group by typ. id_type;

INTO ARRAY cntpost

LOCAL maxi

maxi=cntpost(2)

FOR gnCount=1 TO kol STEP 1

IF (cntpost(gnCount*2)>maxi)

maxi=cntpost(gnCount*2)

ENDIF

ENDFOR

LOCAL sentence

sentence="Самый дорогой вид продукции: "

FOR gnCount = 1 TO kol STEP 1

IF (cntpost(gnCount*2)=maxi)

sentence=sentence+cntpost(gnCount*2-1)

ENDIF

ENDFOR

MessageBox(alltrim(sentence))

Обработка кнопки «Самое дешевое издание»:

LOCAL kol(1)

SELECT count(typ. type_);

FROM pressa! typ;

INTO ARRAY kol

LOCAL cntpost(kol,2)

SELECT typ. type_, avg(press. price);

FROM pressa! press inner join pressa! typ;

ON press. id_type=typ. id_type;

group by typ. id_type;

INTO ARRAY cntpost

LOCAL minn

minn=cntpost(2)

FOR gnCount=1 TO kol STEP 1

IF (cntpost(gnCount*2)<minn)

minn=cntpost(gnCount*2)

ENDIF

ENDFOR

LOCAL sentence

sentence="Самый дешевый вид продукции: "

FOR gnCount = 1 TO kol STEP 1

IF (cntpost(gnCount*2)=minn)

sentence=sentence+cntpost(gnCount*2-1)

ENDIF

ENDFOR

MessageBox(alltrim(sentence))

Обработка кнопки «Средняя стоимость в целом»:

SELECT typ. type_, AVG(press. price);

FROM pressa! press INNER JOIN pressa! typ;

ON press. id_type==typ. id_type;

group by typ. id_type

Обработка кнопки «Средняя стоимость с учетом вида прессы»:

SELECT typ. type_ as Type_of_press, AVG(press. price) as Average_price;

FROM pressa! press inner join pressa! typ;

ON press. id_type=typ. id_type;

WHERE press. id_type=(SELECT typ. id_type FROM pressa! typ WHERE typ. Type_=bo1.value)

Результаты работы запроса:

Рис.13.Результаты работы формы “form_02.scx”

Form_03.scx

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

Рис.14. Форма “form_03.scx”

Обработка кнопки «Найти в целом»:

select press. name_press, press. price;

from pressa! press;

where press. price > ThisForm. Text1.Value;

ORDER BY press. price

Обработка кнопки «Найти по виду»:

SELECT press. name_press, press. price;

FROM pressa! press INNER JOIN pressa! typ;

ON press. id_type==typ. id_type;

WHERE press. price > Thisform. Text1.value;

AND press. id_type=(select typ. id_type FROM pressa! typ WHERE typ. type_=bo1.value)

Результаты работы запроса:

Рис.15.Результаты работы формы “form_03.scx”

Form_04.scx

Найти все издания, чей тираж попадает в заданные пределы (ввод интервала)

Рис.16. Форма “form_04.scx”

Обработка кнопки «Найти»:

select press. name_press, press. circulation;

FROM pressa! press;

where press. circulation between ThisForm. Text1.Value and ThisForm. Text2.Value;

ORDER BY press. circulation

Результаты работы запроса:

Рис.17.Результаты работы формы “form_04.scx”

Form_05.scx

Для заданного издательства (выбор) найти все виды газетной продукции

Рис.18. Форма “form_05.scx”

Обработка кнопки «Найти»:

SELECT Press. name_press, Publisher. publisher_, Typ. type_ ;

FROM pressa! publisher FULL JOIN pressa! press;

FULL JOIN pressa! typ ;

ON Typ. id_type = Press. id_type ;

ON Publisher. id_publisher = Press. id_publisher;

where publisher. id_publisher=(SELECT publisher. id_publisher FROM pressa! publisher WHERE publisher. publisher_=bo1.Value)

Результат работы запроса:

Рис.19.Результаты работы формы “form_05.scx”

Form_06.scx

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

Рис.20. Форма “form_06.scx”

Обработка кнопки «Найти»:

select press. name_press, press. price, publisher. publisher_ as publisher;

from pressa! press inner join pressa! typ;

on press. id_type==typ. id_type;

where press. price between ThisForm. Text1.Value and ThisForm. Text2.Value AND;

press. id_publisher=(select publisher. id_publisher FROM pressa! publisher WHERE publisher. publisher_=bo1.value);

ORDER BY press. price

Результаты работы запроса:

Рис.21.Результаты работы формы “form_06.scx”

Form_07.scx

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

Рис.22. Форма “form_07.scx”

Обработка кнопки «Найти»:

LOCAL tmp1(1)

LOCAL tmp(1)

SELECT count(press. name_press);

FROM pressa! press;

INTO ARRAY tmp;

SELECT count(press. name_press);

FROM pressa! press;

WHERE press. price <= thisform. text1.value;

INTO ARRAY tmp1;

result=tmp1/tmp*100

MessageBox("Доля дешевой прессы: " + alltrim(str(result))+" %")

Результат работы запроса:

Рис.23.Результаты работы формы “form_07.scx”

Form_08.scx

Найти долю прессы, проданной за определенный период (ввод)

Рис.24. Форма “form_08.scx”

Обработка кнопки «Найти»:

LOCAL tmp(1)

LOCAL tmp1(1)

date_1=thisform. text1.value

date_2=thisform. text2.value

SELECT count(press. name_press);

FROM pressa! press;

INTO ARRAY tmp;

SELECT count(press. name_press);

FROM pressa! press;

WHERE press. date_of_sale between date_1 AND date_2;

INTO ARRAY tmp1

result=tmp1/tmp*100

MessageBox("Доля прессы, проданной за данный период: " + alltrim(str(result))+"%")

Результаты работы запроса:

Рис.25.Результаты работы формы “form_08.scx”

Form_09.scx

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

Рис.26. Форма “form_09.scx”

Обработка кнопки «Найти»:

select press. name_press, press. price;

from pressa! press inner join pressa! typ;

on press. id_type==typ. id_type;

where press. price > ThisForm. Text1.Value AND;

press. id_publisher=(select publisher. id_publisher FROM pressa! publisher WHERE publisher. publisher_=bo1.value);

ORDER BY press. price

Результаты работы запроса:

Рис.27.Результаты работы формы “form_09.scx”

Form_10.scx

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

Рис.28. Форма “form_10.scx”

Обработка кнопки «Найти»:

LOCAL tmp1(2)

select press. price FROM pressa! press;

WHERE press. city==bo3.value AND press. name_press = bo2.value;

INTO ARRAY tmp1

numer = alen(tmp1)

if numer==2

numer=0

else

numer=tmp1

endif

MessageBox("Цена выбранной продукции: " + alltrim(str(numer)))

select press. name_press, press. price, publisher. publisher_ as publisher;

from pressa! press inner join pressa! publisher on press. id_publisher==publisher. id_publisher;

where press. id_publisher == (select publisher. id_publisher FROM pressa! publisher WHERE publisher. publisher_=bo1.value) AND press. price > numer;

ORDER BY press. price

Результат работы запроса:

Рис.29.Результаты работы формы “form_10.scx”

Form_11.scx

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

Рис.30. Форма “form_11.scx”

Найти(в целом):

LOCAL tmp1(1)

LOCAL tmp(1)

SELECT count(press. name_press);

FROM pressa! press;

INTO ARRAY tmp;

SELECT count(press. name_press);

FROM pressa! press;

WHERE press. price <=thisform. text1.value;

INTO ARRAY tmp1;

result=tmp1/tmp*100

MessageBox("Доля дешевой прессы: " + alltrim(str(result))+" %")

Найти(с учетом издательства):

LOCAL tmp1(1)

LOCAL tmp(1)

SELECT count(press. name_press);

FROM pressa! press;

INTO ARRAY tmp;

SELECT count(press. name_press);

FROM pressa! press;

WHERE press. price <=thisform. text1.value;

AND press. id_publisher==(select publisher. id_publisher FROM pressa! publisher WHERE publisher. publisher_=bo1.value);

INTO ARRAY tmp1;

result=tmp1/tmp*100

MessageBox("Доля дешевой прессы: " + alltrim(str(result))+" %")

Результат работы запросов:

Рис.31.Результаты работы формы “form_11.scx”

Form_12.scx

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

Рис.32. Форма “form_12.scx”

Обработка кнопки «Найти»:

LOCAL tmp(1)

date_1=thisform. text1.value

date_2=thisform. text2.value

SELECT avg(press. price);

FROM pressa! press;

WHERE press. date_of_sale between date_1 AND date_2;

INTO ARRAY tmp

MessageBox("Средняя стоимость прессы, проданной за данный период: " + alltrim(str(tmp)))

SELECT press. name_press, press. price, press. date_of_sale;

FROM pressa! press;

WHERE press. date_of_sale between date_1 AND date_2;

Рис.33.Результаты работы формы “form_12.scx”

Form_13.scx

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

Рис.34. Форма “form_13.scx”

Обработка кнопки «Найти»:

LOCAL tmp(1)

LOCAL tmp1(1)

SELECT DISTINCT(press. id_publisher);

FROM pressa! press;

WHERE press. id_publisher==(SELECT publisher. id_publisher FROM pressa! publisher WHERE publisher. publisher_=bo1.value);

INTO ARRAY tmp

SELECT AVG(press. price) FROM pressa! press WHERE press. id_publisher=tmp;

INTO ARRAY tmp1

MessageBox("Средняя стоимость прессы заданного издательства: " +alltrim(str(tmp1)))

SELECT press. name_press, press. price, publisher. publisher FROM pressa! press inner join pressa! publisher on press. id_publisher==publisher. id_publisher WHERE press. price>=(SELECT AVG(press. price);

FROM pressa! press WHERE press. id_publisher=tmp);

ORDER BY press. price

Результат работы запроса:

Рис.35.Результаты работы формы “form_13.scx”

Form_14.scx

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

Рис.36. Форма “form_14.scx”

Обработка кнопки «Самая популярная пресса»:

SELECT Press. name_press, Publisher. publisher_, Press. price, Press. sold_press;

FROM pressa! press INNER JOIN pressa! publisher;

ON Press. id_publisher = Publisher. id_publisher;

WHERE Press. sold_press = (SELECT Max(press. sold_press);

FROM pressa! press )

Результат работы запроса:

Рис.37.Результаты работы формы “form_14.scx”

8. Выводы:

В ходе выполнения расчетно-графической работы были закреплены (и приобретены новые) навыки работы в среде Visual FoxPro 6.0. Получен опыт проектирования баз данных, работы с ними посредством запросов на языке SQL, а также приобретен опыт в управлении базами данных. Также были закреплены навыки работы с меню (Command, Submenu, Procedure) и с формами (CommandButton, Combo Box, Text Box, Edit Box, Container и др.)

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

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

2. Visual FoxPro 6.0 Help System (пакет MSDN)