Создание и заполнение базы данных "Напитки", страница 6

   if sale_period_num = 0

      thisform.pageframe1.page3.text6.value = 0

      Messagebox("В указанный период ничего не проданно!")

   else

      thisform.pageframe1.page3.text6.value = sale_period_sum/sale_period_num

   endif

endif;

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

SELECT drinks_view.cost;

FROM  DRINK_DATABASE!DRINKS_VIEW DRINKS_VIEW;

WHERE drinks_view.diller = thisform.pageframe1.page4.text4.value into array avg_cost

SELECT SELECT drinks_view.kind AS "Тип",;

       drinks_view.name AS "Наименование",;

       YEAR(drinks_view.made_date) AS "Год_выпуска",;

       drinks_view.country AS "Страна_изготовитель",;

       drinks_view.cap AS "Емкость",;

       drinks_view.diller AS "Поставщик",;

       drinks_view.cost AS "Цена",;

       avg_cost AS "Средняя_цена";

FROM  DRINK_DATABASE!DRINKS_VIEW DRINKS_VIEW;

WHERE drinks_view.cost > avg_cost

Найти напитки, которые лучше всего раскупают.  

*Подсчет количества записей в таблице продаж

SELECT COUNT(drink_sale.name);

FROM  DRINK_DATABASE!DRINK_SALE into array zap_num

*Запись имен в массив

SELECT drink_sale.name;

FROM  DRINK_DATABASE!DRINK_SALE into array name_all

*Поиск напитка с максимальным количеством продаж

max_tek = 0

dimension sum_all(zap_num)

FOR i = 1 TO zap_num STEP 1

    SELECT SUM(drink_sale.number);

    FROM  DRINK_DATABASE!DRINK_SALE;

    WHERE drink_sale.name = name_all(i) into array sum_tek

    IF sum_tek > max_tek

       max_tek = sum_tek

    ENDIF

    *Для каждого напитка запишем сумму его общих продаж

    sum_all(i) = sum_tek

ENDFOR

*Стераем из массива имена напитков общие продажи, которых меньше *максимума

FOR i = 1 TO zap_num STEP 1

    IF sum_all(i) < max_tek

       STORE 'Ne_to' TO name_all(i)

    ENDIF

ENDFOR

*Вывод информации о найденных напитках

SELECT drinks_view.kind AS "Тип",;

       drinks_view.name AS "Наименование",;

       YEAR(drinks_view.made_date) AS "Год_выпуска",;

       drinks_view.country AS "Страна_изготовитель",;

       drinks_view.cap AS "Емкость",;

       drinks_view.weight AS "Вес",;

       drinks_view.cost AS "Цена",;

       max_tek AS "Продажи";

FROM   drink_database!drinks_view;

WHERE ascan(name_all,drinks_view.name) != 0

ENDPROC

Выводы

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

При закупки новых напитков происходит кропотливая работа по заполнению таблицы Drink_info – тип напитка, наименование, производитель, дата производства, цена, емкость и т. д. После того, как вся информация о имеющихся напитков заполнена по мере продажи того или иного напитка происходит заполнение таблицы продаж Drink_Sale -  наименование, дата продажи и количество проданных единиц. Таким образом, в процессе продаж нет необходимости повторно заполнять большие объемы информации. А за счет созданных связей всегда можно узнать общие показатели продаж: по емкости, цене и т. д.

Для работы с данными создана форма, в которой имеется средства для редактирования базы и формирования различных запросов к ней.

Использование SQL – процедур позволяет создавать сложные многоуровневые запросы к базе данных, и организовывать вывод найденных записей в форме, удобной для пользователя. Также в работе использовалось средство виртуального объединения таблиц базы в единое целое, предоставленное средой FoxPro – Local_View (локальное представление). Его использование облегчает вывод данных из разных связанных таблиц в Grid_Table и существенно сокращает тексты процедур запросов.      

Список используемой литературы

1.  Трошина Г.В. Методические указания к лабораторному практикуму. – НГТУ 2004.

2.  Электронный учебник по Visual FoxPro.