Разработка информационной системы учета нефтепродуктов

Проектирование автоматизированного рабочего места менеджера по закупкам нефтепродуктов сети АЗС. Анализ информационных потребностей менеджера, информационных потоков и бизнес-процессов. Пути совершенствования информационной системы учета нефтепродуктов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 16.03.2012
Размер файла 3,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Условное число команд определяется по формуле:

, (4.1)

где  - коэффициент, учитывающий условное число команд в зависимости от типа задачи, для данной задачи коэффициент принимается = 1450;

- коэффициент, учитывающий новизну и сложность программы.

Таблица 16. Структура времени на создание программного продукта

№ этапа

Обозначение времени

данного этапа

Содержание этапа

1

Tпо

Подготовка описания задачи.

2

Tо

Описание задачи.

3

Tа

Разработка алгоритма.

4

Tбс

Разработка блок-схемы алгоритма.

5

Tн

Написание программы

6

Tнп

Набивка программы.

7

Tот

Отладка и тестирование программы.

8

Tд

Оформление документации.

Таблица 17. Определение коэффициента, учитывающего условное число команд

Тип задачи

Пределы изменений коэффициента

Задачи учета

от 1400 до 1500

Задачи оперативного управления

от 1500 до 1700

Задачи планирования

от 3000 до 3500

Многовариантные задачи

от 4500 до 5000

Комплексные задачи

от 5000 до 5500

Программные продукты по степени новизны могут быть отнесены к одной из 4-х групп:

группа А -- разработка принципиально новых задач;

группа Б -- разработка оригинальных программ;

группа В -- разработка программ с использованием типовых решений;

группа Г -- разовая типовая задача.

Для данной задачи степень новизны -- Б

По степени сложности программные продукты могут быть отнесены к одной из 3-х групп:

1) 1 -- алгоритмы оптимизации и моделирования систем;

2) 2 -- задачи учета, отчетности и статистики;

3) 3 -- стандартные алгоритмы.

Данная задача может быть отнесена к 1 группе сложности.

Коэффициент определяется из табл. 3 на пересечении групп сложности и степени новизны.

Таблица 18. Определение коэффициента, учитывающего группу сложности и степень новизны

Язык

программирования

Группа сложности

Степень новизны

А

Б

В

Г

высокого

1

1,38

1,26

1,15

0,69

2

1,30

1,19

1,08

0,65

уровня

3

1,20

1,10

1,00

0,60

низкого

1

1,58

1,45

1,32

0,79

2

1,49

1,37

1,24

0,74

уровня

3

1,38

1,26

1,15

0,69

Для данной задачи коэффициент = 1,26

Теперь, исходя из формулы (4.1) можно определить условное число команд

(4.2)

Определяем время, затраченное на каждый этап создания программного продукта:

1) Tпо (время на подготовку описания задачи), берется по факту и составляет:

Tпо = (4.3)

2) Tо ( время на описание задачи ) определяется по формуле:

Tо = ,(4.4)

где -- коэффициент учета изменений задачи, коэффициент в зависимости от сложности задачи и числа изменений выбирается в интервале от 1,2 до 1,5.Для данной задачи = 1,4;

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

4.2 Расчет показателей экономической эффективности проекта

Таблица 19. Определение коэффициента, учитывающего квалификацию программиста

Стаж программиста

Значение коэффициента К

до 2-х лет

0,8

от 2 до 3 лет

1,0

от 3 до 5 лет

1,1 -- 1,2

от 5 до 10 лет

1,2 -- 1,3

свыше 10 лет

1,3 -- 1,5

Применяя формулу (4.4) подсчитаем время на описание задачи:

Tо = (4.5)

3) Tа (время на разработку алгоритма) рассчитываем по формуле:

Tа = (4.6)

Применяя формулу (4.6) подсчитываем время на разработку алгоритма.

Tа = (4.7)

4) Tбc (время на разработку блок-схемы) определяется аналогично Tа по формуле (5.6) и составляет

Tб = (4.8)

Tн (время написания программы на языке программирования) определяется по формуле:

Tн = (4.9)

Применяя формулу (4.9), подсчитываем время написания программы на языке программирования:

Tн = (4.10)

5) Tнп (время набивки программы ) определяется по формуле :

Tнп = (4.11)

Применяя формулу (4.11) подсчитываем время набивки программы:

Tнп = (4.12)

6) Tот (время отладки и тестирования программы) определяется по формуле:

Tот = (4.13)

Подставляем значения в формулу и получаем:

Tот = (4.14)

Теперь, зная время, затраченное на каждом этапе, можно подсчитать общее время на создание программного продукта:

T = Tпо + Tо +Tа +Tбс +Tн +Tнп+Tот+ Tд =30 + 51,1 + 36,5 + 36,5 + 54,8 + 36,5 + 153,4 + 40 = = 438.8 чел/ час

Расчет заработной платы исполнителя работ

Основная заработная плата определяется по формуле:

,(4.15)

где _ месячная зарплата 1-го разряда (тг.);

-- тарифный коэффициент, соответствующий разряду тарифной сетки по которому работает исполнитель;

_ общее время на создание программного продукта (чел / час);

_ число рабочих дней в месяц;

_ продолжительность рабочего дня в часах;

_ процент премии.

_ 8 часов.

21 день.

= 70000 тг.

Основой для расчета расходов на содержание и эксплуатацию ПЭВМ, относящихся к данному программному продукту, является себестоимость 1-го машино-часа работы ПЭВМ.

Сначала определим годовые затраты каждого компонента себестоимости, в число которых входят:

1) Основная заработная плата работников, обеспечивающих функционирование ПЭВМ.

К числу этих работников относятся:

1) инженер-электроник;

2) системный программист;

3) оператор.

Заработная плата основная () каждого из этих категорий работников определяется по формуле:

(4.20)

где -- месячная зарплата (тарифная ставка) 1 разряда в тг.;

-- тарифный коэффициент, соответствующий разряду работника;

-- кол-во, ПЭВМ, обслуживаемых одним работником;

-- процент премии.

Для инженеров-электронщиков = 13 ед.

Для системных программистов = 26 ед.

Для оператора = 9ед.

Для инженеров-электронщиков = 2,84

Для системных программистов =1,9

Для оператора =1,57

В себестоимость программного продукта входят следующие элементы:

1) Основная заработная плата исполнителя работ по созданию программного продукта;

2) Дополнительная заработная плата исполнителя работ по созданию программного продукта;

3) Начисления на заработную плату (единый социальный налог);

4) Расходы на содержание и эксплуатацию ПЭВМ, относящихся к данному программному продукту;

5) Прочие расходы.

Первые 4 элемента нам уже известны, а прочие расходы составляют 10% от суммы первых 4-х элементов.

Теперь, сложив все элементы, можно определить себестоимость программного продукта.

Результаты расчетов экономического раздела сведем в итоговую таблице 20.

Таблица 20. Результаты расчетов экономического раздела

Наименование показателя

Сумма(тг.)

Основная заработная плата разработчиков

683 339

Дополнительная заработная плата разработчиков

102 500

Отчисления в фонд социальной защиты

277 401

Начисления на ЗП обслуживающего персонала

182 737

Начисления на ЗП административного и вспомогательного персонала

23 611

Амортизационные отчисления

240 000

Затраты на электроэнергию

238 867

Затраты на расходные материалы

50 000

Расходы на профилактику ПЭВМ

24 000

Затраты на отопление производственных площадей

29 400

Затраты на обслуживание производственных площадей

336 000

Прочие производственные расходы

135 044

Годовые расходы на содержание и эксплуатацию 1-ой ПЭВМ

3 500 000

Себестоимость 1-го машино-часа работы ПЭВМ

2039

Расходы на содержание и эксплуатацию ПЭВМ, относящихся к данному программному продукту

458 571

Себестоимость программного продукта

3 167 992

Прибыль

950 397

НДС

875 121

Цена программного продукта

6120301

Таким образом, общее время, затраченное на разработку приложения «Автоматизированная система управления торговым предприятием», составляет .

Прибыль, которую брали в размере 30% от себестоимости, составляет 8950397 тг.

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

ЗАКЛЮЧЕНИЕ

Для реализации проекта использована среда быстрой разработки приложений Borland Delphi 7. Выбор среды разработки обусловлен, прежде всего, доступностью данного инструмента автору работы, а также высокими техническими характеристиками (быстрая компиляция, компактный код) и широкими возможностями для разработчика (широкий набор готовых компонентов, поддержка работы с базами данных различных форматов, средства отладки и автоматизации кодирования, и др.) Delphi 7.

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

Система также обеспечивает поддержку принятия решения менеджером по закупкам сети АЗС об объеме закупок нефтепродуктов путем построения прогноза объемов реализации в следующем месяце. Для прогнозирования использованы два альтернативных подхода:

- построение многочлена второй степени на основании экспоненциального сглаживания исходных данных об объемах реализации;

- построение линейного тренда с учетом сезонных колебаний.

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

Тестирование на ЭВМ показало корректность выдаваемых программой результатов. При выполнении тестовых расчетов результаты прогнозирования двумя методами в ряде случаев неплохо согласовывались между собой (для всей сети отклонение между прогнозами по дизельному топливу составляет порядка 2,7%), а в других случаях -- отличались довольно сильно (прогнозы объемов реализации того же дизельного топлива на АЗС № 3 отличаются один от другого вдвое). Это позволяет заключить, что разработанная программа представляет собой инструмент автоматизации вычислений, но в любом случае выдаваемые ею результаты должны быть подвергнуты критическому анализу.

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

Совершенствование и расширение возможностей информационной системы возможно в следующих направлениях:

- включение в систему функций отдела логистики -- это позволило бы повысить степень автоматизации учета остатков;

- регистрация возможных условий поставки для каждого поставщика и каждого поставляемого им нефтепродукта -- это дало бы возможность подсказать менеджеру по закупкам наиболее выгодный вариант осуществления поставки;

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

- регистрация в системе динамики цен на нефтепродукты -- это позволило бы прогнозировать уровень цен на будущие периоды с целью оптимизации прибыли.

Методология построения баз данных базировалась на теоретических основах их проектирования. Для понимания концепции методологии приведем основные ее идеи в виде двух последовательно реализуемых на практике этапов:

1-й этап -- обследование всех функциональных подразделений фирмы с целью:

- понять специфику и структуру ее деятельности;

- построить схему информационных потоков;

- проанализировать существующую систему документооборота;

- определить информационные объекты и соответствующий состав реквизитов (параметров, характеристик), описывающих их свойства и назначение. 2-й этап -- построение концептуальной информационно-логической модели данных для обследованной на 1-м этапе сферы деятельности. В этой модели должны быть установлены и оптимизированы все связи между объектами и их реквизитами. Информационно-логическая модель является фундаментом, на котором будет создана база данных.

В качестве СУБД была выбрана СУБД Microsoft Access. Доступ к СУБД осуществляется посредством объектов доступа к данным Microsoft ADO (ActiveX Data Object), что дает возможность унифицируемого доступа к СУБД с использованием различных типов поставщиков данных. А это означает, что имеется возможность, путем незначительного изменения кода программы, использовать другую СУБД для хранения данных.

Кроме этого, данная СУБД широко используется в приложениях Microsoft (например, Microsoft Office), и в подавляющем большинстве случаев уже установлена на компьютере пользователя, что позволяет избежать накладных расходов по установке дополнительного программного обеспечения (самой СУБД).

Так же необходимость поддержки СУБД Microsoft Access определяется необходимостью единообразия в хранении данных.

Поставлен каждому объекту ER-диаграммы в соответствие отношение, представленное в виде таблиц.

Отношение - это подмножество декартова произведения: доменов. Домен - это множество элементов.

Список имен атрибутов называется схемой отношения. Если отношение имеет имя R, а его атрибуты имеют имена A1, A2, .. . , Ak , то схема отношения записывается в виде R (A1, A2, .. . , Ak).

Если в отношении каждому значению множества атрибутов A соответствует не более чем одно значение множества атрибутов B, то между A и B существует функциональная зависимость. Функциональная зависимость обычно обозначается следующим образом: А В . Это означает, что множество атрибутов A функционально определяет множество атрибутов B, или B функционально зависит от А.

После проведенного выделения объектов и их атрибутов обобщение все эти данные и провести связи между ними. Представление это сделано в более удобной для восприятия форме - в виде так называемой ER - диаграммы (диаграммы «сущность - связь»). Данная диаграмма построена с помощью программного Case - средства Erwin 4.0, изображена в приложении Б.

Этап физического проектирования базы данных предусматривает принятие разработчиком окончательного решения о способах реализации создаваемой базы. Поэтому физическое проектирование производилось с учетом всех особенностей выбранной СУБД.

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

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

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

При вводе входной информации должен осуществляться ее контроль на допустимость вводимых значений по следующим правилам:

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

б) вводимые данные не должны противоречить законам логики.

При выполнении операций по изменению или удалению данных необходимо обеспечить целостность БД.

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

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

В третьем разделе показан сам разработанный программный продукт с пошаговым описанием работы с ним.

В четвертом разделе дано экономическое обоснование проекта.

Использование среды быстрой разработки приложений Delphi 7 позволило создать систему, обладающую дружественным пользовательским интерфейсом, предоставляющую пользователю контекстно-зависимую справку, иллюстрирующую результаты расчетов с помощью графиков. Исходные данные для прогнозирования хранятся в базе данных формата Microsoft Access, поскольку эта СУБД имеет наибольшее распространение в бизнес-сфере.

Все сказанное позволяет заключить, что поставленная задача в ходе разработки решена в полном объеме.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Теория прогнозирования и принятия решений. Учебное пособие. / Под ред. С. А. Саркисяна. -- М.: «Высшая школа», 1977. -- 351 с.

2 Чуев Ю. В., Спехова Г. П. Технические задачи исследования операций. -- М.: «Советское радио», 1971. -- 244 с.

3 Чуев Ю. В., Михайлов Ю. Б., Кузьмин В. И. Прогнозирование количественных характеристик процессов. -- М.: «Советское радио», 1975. -- 398 с.

4 Статистика. Учебник. / Под ред. проф. И. И. Елисеевой. -- М.: ВИТРЭМ, 2002. -- 448 с.

5 Сорокин А. В. Delphi. Разработка баз данных. -- СПб: Питер, 2005. -- 480 с.

6 Фаронов В. В. Delphi 2005. Разработка приложений для баз данных и Интернета. -- СПб: Питер, 2005. -- 608 с.

7 Епанешников А. М., Епанешников В. А. Delphi. Программирование СУБД. -- М.: ДИАЛОГ-МИФИ, 2001. -- 528 с.

8 Фленов М. Е. Библия Delphi. -- СПб: BHV, 2004. -- 880 с.

9 Галисеев Г. В. Программирование в среде Delphi 7. Самоучитель. -- К.: Диалектика, 2003. -- 288 с.

10 Керман М. К. Программирование и отладка в Delphi. Учебный курс. -- М.: Вильямс, 2004. -- 720 с.

11 Хансен Г., Хансен Дж. Базы данных: разработка и управление. -- М.: БИНОМ, 1999. -- 704 с.

12 Конноли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация и сопровождение. -- М.: Вильямс, 2000. -- 1120 с.

13 Праг К. Н., Ирвин М. Р. Access 2000. Библия пользователя. -- М.: Вильямс, 2000. -- 1040 с.

14 Елманова Н. Системы управления базами данных ведущих производителей. КомпьютерПресс, июль 2005.

15 ADO Сборник рецептов. Для профессионалов. Автор: Билл Гамильтон Microsoft ADO.NET Сеппа Д.

16 Паронжанов С. Объектно-ориентированные средства анализа, проектирования и реинжениринга информационных систем. - М.: Учебные материалы конференции «Индустрия программирования 2008». 2008 г. с.117-123.

17 Международные стандарты, поддерживающие жизненный цикл программных средств. М., МП «Экономика», 2007

18 Strange K. Magic Quadrant for Data Warehouse DBMSs// Gartner Research Note M-22-2154. 2008

19 Е.Ф.Кодд Реляционное представление данных в хранилищах данных.(A Relational Model of Data for Large Shared Data Banks)

20 Соломон Д. и Руссинович М. Внутреннее устройство Microsoft Windows 2000. Мастер-класс / Пер. с англ. -- СПб.: Питер; М.: Издательско-торговый дом «Русская Редакция». 2008. -- 746 стр.: ил.

21 http:// Microsoft.com/FoxPro/ - Интернет сайт СУБД Microsoft FoxPro.

22 www.Microsoft.com Интернет сайт компании Microsoft.

23 www.mysql.com Интернет сайт СУБД MySql.

24 Мишенин, А.И. Теория экономических информационных систем: Учеб. для вузов / А.И. Мишенин.- 4-е изд., доп. и перераб. -М. : Финансы и статистика, 2007. - 240 с. : ил.

25 Смирнова, Г.Н. Проектирование экономических информационных систем: Учеб. для вузов / Г.Н. Смирнова, А.А. Сорокин, Ю.Ф. Тельнов; Под ред. Ю.Ф. Тельнова. -М. : Финансы и статистика, 2006. - 512 с. : ил.

26 Каpатыгин С. Базы данных: пpостейшие сpедства обpаботки инфоpмации. Системы упpавления базами данных. М.: ABF, 2009.

27 Вендров А.М. CASEтехнологии. Современные методы и средства проектирования информационных систем. М.: Финансы и статистика, 2008

28 Дейт К. Введение в системы баз данных/Пер. с англ. М.:Наука, 2004. 463 с.

29 Архангельский А.Я. Программирование в Delphi 7 М.:Бином, 2007.

30 Оскерко В.С., Пунчик З.В. Практикум по технологиям баз данных. - Мн.: “БГЭУ”, 2007. - 170 с.

31 Ирвин М., Праг К. Access 2000. Библия пользователя. - М.: “Диалектика”, 2007. - 1040 с.

32 Microsoft Excel 2000. Издательство "Эком", 2007 г.

33 Microsoft Word 2008. Издательство "Эком", 2008 г.

34 Паронжанов С. Объектно-ориентированные средства анализа, проектирования и реинжениринга информационных систем. - М.: Учебные материалы конференции «Индустрия программирования 2006». 2006 г. с.117.

ПРИЛОЖЕНИЯ

Приложение 1

Элементы интерфейса

Приложение Б

Программный код

SELECT PProduct.ProdType, PProduct.Rest, Sum(Rests.Qty) AS SRest

FROM PProduct INNER JOIN Rests ON PProduct.ProdType = Rests.ProdType

GROUP BY PProduct.ProdType, PProduct.Rest;

П2.2. Запрос вычисления общих объемов реализации по сети

SELECT Sales.ProdType, Sales.Yr, Sales.Mon, Sum(Sales.Qty) AS SoldQty

FROM Sales

GROUP BY Sales.ProdType, Sales.Yr, Sales.Mon;

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

Программа разработана в среде Borland Delphi 7 с использованием библиотеки VCL. Ниже приводятся исходные коды всех программных модулей проекта.

П3.1. Модуль главной формы

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, ADODB, Menus;

type

TMainForm = class(TForm)

MainMenu1: TMainMenu;

ADOConn: TADOConnection;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure N2Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N12Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

uses PProd, AZS, Suppl, Sales, ExpSmooth, LinSeas, About;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);

begin

ADOConn.ConnectionString := 'FILE NAME=' + ExtractFilePath(Application.ExeName) + 'DBLink.udl';

ADOConn.Provider := ExtractFilePath(Application.ExeName) + 'DBLink.udl';

ADOConn.Open;

ClientHeight := 1;

end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ADOConn.Close;

end;

procedure TMainForm.N2Click(Sender: TObject);

begin

PProdForm.Show;

end;

procedure TMainForm.N7Click(Sender: TObject);

begin

Close;

end;

procedure TMainForm.N3Click(Sender: TObject);

begin

A3CForm.Show;

end;

procedure TMainForm.N4Click(Sender: TObject);

begin

SupplForm.Show;

end;

procedure TMainForm.N5Click(Sender: TObject);

begin

SalesForm.Show;

end;

procedure TMainForm.N9Click(Sender: TObject);

begin

ExpSmoothForm.Show;

end;

procedure TMainForm.N10Click(Sender: TObject);

begin

LinSeasForm.Show;

end;

procedure TMainForm.N13Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;

procedure TMainForm.N12Click(Sender: TObject);

begin

Application.HelpCommand(HELP_FINDER, 0);

end;

end.

П3.2. Модуль формы «Нефтепродукты»

unit PProd;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, ADODB, Grids, DBGrids,

ComCtrls;

type

TPProdForm = class(TForm)

PProdTable: TADOTable;

PProdDataSource: TDataSource;

DBEdit1: TDBEdit;

DBEdit2: TDBEdit;

Label1: TLabel;

Label2: TLabel;

DBNavigator1: TDBNavigator;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

RestsTable: TADOTable;

SalesTable: TADOTable;

PurchasesTable: TADOTable;

RestsDataSource: TDataSource;

SalesDataSource: TDataSource;

PurchasesDataSource: TDataSource;

RestsDBGrid: TDBGrid;

A3CTable: TADOTable;

RestsTableNo: TIntegerField;

RestsTableProdType: TWideStringField;

RestsTableQty: TFloatField;

RestsTableA3CNo: TIntegerField;

SalesTableNo: TIntegerField;

SalesTableProdType: TWideStringField;

SalesTableYr: TSmallintField;

SalesTableMon: TWordField;

SalesTableQty: TFloatField;

SalesTableRSum: TBCDField;

SalesTableA3CNo: TIntegerField;

DBGrid1: TDBGrid;

PurchasesTablePDate: TDateTimeField;

PurchasesTableProdType: TWideStringField;

PurchasesTableSupCode: TIntegerField;

PurchasesTablePrice: TBCDField;

PurchasesTableQty: TFloatField;

SupTable: TADOTable;

PurchasesTableSupName: TStringField;

DBGrid2: TDBGrid;

PProdTableProdType: TWideStringField;

PProdTablePrice: TBCDField;

PProdTableRest: TIntegerField;

DBEdit3: TDBEdit;

Label3: TLabel;

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

PProdForm: TPProdForm;

implementation

uses Main;

{$R *.dfm}

procedure TPProdForm.FormShow(Sender: TObject);

begin

PProdTable.Open;

RestsTable.Open;

A3CTable.Open;

SalesTable.Open;

PurchasesTable.Open;

SupTable.Open;

end;

procedure TPProdForm.FormHide(Sender: TObject);

begin

PProdTable.Close;

RestsTable.Close;

A3CTable.Close;

SalesTable.Close;

PurchasesTable.Close;

SupTable.Close;

end;

end.

П3.3. Модуль формы АЗС

unit AZS;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Mask;

type

TA3CForm = class(TForm)

AZSTable: TADOTable;

RestsTable: TADOTable;

AZSSource: TDataSource;

RestsSource: TDataSource;

SalesTable: TADOTable;

ProdTable: TADOTable;

SalesSource: TDataSource;

RestsTableNo: TIntegerField;

RestsTableProdType: TWideStringField;

RestsTableQty: TFloatField;

RestsTableProd: TStringField;

SalesTableNo: TIntegerField;

SalesTableProdType: TWideStringField;

SalesTableYr: TSmallintField;

SalesTableMon: TWordField;

SalesTableQty: TFloatField;

SalesTableRSum: TBCDField;

SalesTableProd: TStringField;

AZSNoEdit: TDBEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

DBEdit1: TDBEdit;

DBEdit2: TDBEdit;

DBEdit3: TDBEdit;

DBNavigator1: TDBNavigator;

DBGrid1: TDBGrid;

Label5: TLabel;

DBGrid2: TDBGrid;

Label6: TLabel;

AZSTableNo: TAutoIncField;

AZSTableAddress: TWideStringField;

AZSTableTel: TWideStringField;

AZSTableManager: TWideStringField;

Button1: TButton;

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

A3CForm: TA3CForm;

implementation

uses Main, TotRests;

{$R *.dfm}

procedure TA3CForm.FormShow(Sender: TObject);

begin

AZSTable.Open;

RestsTable.Open;

SalesTable.Open;

ProdTable.Open;

end;

procedure TA3CForm.FormHide(Sender: TObject);

begin

AZSTable.Close;

RestsTable.Close;

SalesTable.Close;

ProdTable.Close;

end;

procedure TA3CForm.Button1Click(Sender: TObject);

begin

TotRestsForm.Show;

end;

end.

П3.4. Модуль формы «Поставщики»

unit Suppl;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Mask;

type

TSupplForm = class(TForm)

SupplTable: TADOTable;

SupplSource: TDataSource;

PurchTable: TADOTable;

PProdTable: TADOTable;

PurchSource: TDataSource;

Label1: TLabel;

DBEdit1: TDBEdit;

DBEdit2: TDBEdit;

DBEdit3: TDBEdit;

SupplTableSupCode: TAutoIncField;

SupplTableSupName: TWideStringField;

SupplTableSupAddr: TWideStringField;

SupplTableSupPhone: TWideStringField;

DBNavigator1: TDBNavigator;

Label2: TLabel;

Label3: TLabel;

DBGrid1: TDBGrid;

Label4: TLabel;

PurchTablePDate: TDateTimeField;

PurchTableProdType: TWideStringField;

PurchTableSupCode: TIntegerField;

PurchTablePrice: TBCDField;

PurchTableQty: TFloatField;

PurchTableProd: TStringField;

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

SupplForm: TSupplForm;

implementation

uses Main;

{$R *.dfm}

procedure TSupplForm.FormShow(Sender: TObject);

begin

SupplTable.Open;

PurchTable.Open;

PProdTable.Open;

end;

procedure TSupplForm.FormHide(Sender: TObject);

begin

SupplTable.Close;

PurchTable.Close;

PProdTable.Close;

end;

end.

П3.5. Модуль формы «Реализация»

unit Sales;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, DBCtrls, ADODB, DB, Grids, DBGrids;

type

TSalesForm = class(TForm)

SalesTable: TADOTable;

TotSalesTable: TADOTable;

SalesSource: TDataSource;

TotSalesSource: TDataSource;

YearsQuery: TADOQuery;

YearsSource: TDataSource;

CurMonth: TComboBox;

Label1: TLabel;

Label2: TLabel;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

DBGrid1: TDBGrid;

DBGrid2: TDBGrid;

CYear: TComboBox;

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure UpdateFilters(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

SalesForm: TSalesForm;

implementation

uses Main, DateUtils;

{$R *.dfm}

procedure TSalesForm.FormShow(Sender: TObject);

var i: integer;

begin

YearsQuery.Open;

CYear.Items.Clear;

for i := 0 to YearsQuery.RecordCount - 1 do

begin

CYear.Items.Add(YearsQuery.FieldValues['Yr']);

YearsQuery.Next;

end;

YearsQuery.Close;

SalesTable.Open;

TotSalesTable.Open;

UpdateFilters(Sender);

end;

procedure TSalesForm.FormHide(Sender: TObject);

begin

SalesTable.Close;

TotSalesTable.Close;

end;

procedure TSalesForm.FormCreate(Sender: TObject);

var t: TDate;

m: byte;

y: integer;

begin

t := Date;

m := MonthOf(t);

y := YearOf(t);

if m = 1 then

begin

m:= 12;

dec(y);

end

else dec(m);

CYear.Text := IntToStr(y);

CurMonth.Text := IntToStr(m);

end;

procedure TSalesForm.UpdateFilters(Sender: TObject);

begin

with SalesTable do

begin

Filtered := false;

Filter := 'Yr = ' + CYear.Text + ' AND Mon = ' + CurMonth.Text;

Filtered := true;

end;

with TotSalesTable do

begin

Filtered := false;

Filter := 'Yr = ' + CYear.Text + ' AND Mon = ' + CurMonth.Text;

Filtered := true;

end;

end;

end.

П3.6. Модуль формы «Текущие остатки по сети»

unit TotRests;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, ADODB, Grids, DBGrids;

type

TTotRestsForm = class(TForm)

TRTable: TADOTable;

TRSource: TDataSource;

DBGrid1: TDBGrid;

TRTableProdType: TWideStringField;

TRTableRest: TIntegerField;

TRTableSRest: TFloatField;

TRTableTR: TFloatField;

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

procedure TRTableCalcFields(DataSet: TDataSet);

private

{ Private declarations }

public

{ Public declarations }

end;

var

TotRestsForm: TTotRestsForm;

implementation

uses Main;

{$R *.dfm}

procedure TTotRestsForm.FormShow(Sender: TObject);

begin

TRTable.Open;

end;

procedure TTotRestsForm.FormHide(Sender: TObject);

begin

TRTable.Close;

end;

procedure TTotRestsForm.TRTableCalcFields(DataSet: TDataSet);

begin

TRTableTR.Value := TRTableRest.Value + TRTableSRest.Value;

end;

end.

П3.7. Модуль формы «Экспоненциальное сглаживание»

unit ExpSmooth;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DBCtrls, DB, ADODB, ComCtrls, Grids, DBGrids, Series,

TeEngine, ExtCtrls, TeeProcs, Chart;

type

TExpSmoothForm = class(TForm)

ProdTable: TADOTable;

ProdSource: TDataSource;

CurProd: TDBLookupComboBox;

Label1: TLabel;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TotSalesTable: TADOTable;

TotSalesSource: TDataSource;

DBGrid1: TDBGrid;

TotSalesTableProdType: TWideStringField;

TotSalesTableYr: TSmallintField;

TotSalesTableMon: TWordField;

TotSalesTableSoldQty: TFloatField;

Label4: TLabel;

Chart1: TChart;

Series1: TBarSeries;

Series2: TLineSeries;

TotRestsTable: TADOTable;

TotRestsSource: TDataSource;

ProdRests: TDBLookupComboBox;

Label5: TLabel;

TotSalesPrognEdit: TEdit;

Label6: TLabel;

Label7: TLabel;

PurchPrognEdit: TEdit;

OptAl: TCheckBox;

AlphaEdit: TEdit;

Label3: TLabel;

Label2: TLabel;

A3CTable: TADOTable;

A3CSource: TDataSource;

SalesTable: TADOTable;

SalesSource: TDataSource;

CurA3C: TDBLookupComboBox;

Label8: TLabel;

DBGrid2: TDBGrid;

Label9: TLabel;

Chart2: TChart;

Series3: TBarSeries;

Series4: TLineSeries;

Label10: TLabel;

SalesPrognEdit: TEdit;

SalesTableNo: TIntegerField;

SalesTableProdType: TWideStringField;

SalesTableYr: TSmallintField;

SalesTableMon: TWordField;

SalesTableQty: TFloatField;

SalesTableRSum: TBCDField;

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

procedure UpdateFilters(Sender: TObject);

procedure AlphaEditChange(Sender: TObject);

procedure OptAlClick(Sender: TObject);

private

{ Private declarations }

y, S1, S2, S3: array of double;

n: integer;

al: double;

procedure OptimizeAlpha;

function a0(t: integer): double;

function a1(t: integer): double;

function a2(t: integer): double;

procedure Smooth;

public

{ Public declarations }

end;

var

ExpSmoothForm: TExpSmoothForm;

implementation

uses Main, Math;

{$R *.dfm}

procedure TExpSmoothForm.FormShow(Sender: TObject);

begin

ProdTable.Open;

TotSalesTable.Open;

if CurProd.KeyValue = Null then

CurProd.KeyValue := ProdTable.FieldValues['ProdType'];

TotRestsTable.Open;

A3CTable.Open;

SalesTable.Open;

if CurA3C.KeyValue = Null then

CurA3C.KeyValue := A3CTable.FieldValues['No'];

UpdateFilters(Sender);

end;

procedure TExpSmoothForm.FormHide(Sender: TObject);

begin

ProdTable.Close;

TotSalesTable.Close;

TotRestsTable.Close;

A3CTable.Close;

SalesTable.Close;

end;

procedure TExpSmoothForm.UpdateFilters(Sender: TObject);

var i: integer;

spr, ppr: double;

begin

case PageControl1.ActivePageIndex of

0:

begin

with TotSalesTable do

begin

Filtered := false;

Filter := 'ProdType = ''' + CurProd.Text + '''';

Filtered := true;

end;

ProdRests.KeyValue := CurProd.KeyValue;

n := TotSalesTable.RecordCount;

if n = 0 then

begin

MessageDlg('Нет данных для прогноза!', mtWarning, [mbOK], 111);

exit;

end;

SetLength(y, n);

SetLength(S1, n);

SetLength(S2, n);

SetLength(S3, n);

TotSalesTable.First;

for i := 1 to n do

begin

y[i - 1] := TotSalesTable.FieldValues['SoldQty'];

TotSalesTable.Next;

end;

if OptAl.Checked then OptimizeAlpha

else Smooth;

AlphaEdit.Text := FloatToStr(al);

Chart1.Series[0].Clear;

Chart1.Series[1].Clear;

Chart1.Series[0].AddArray(y);

Chart1.Series[1].AddArray(S1);

spr := a0(n - 1) + a1(n - 1) + 0.5 * a2(n - 1);

ppr := spr - StrToFloat(ProdRests.Text);

TotSalesPrognEdit.Text := FloatToStrF(spr, ffFixed, 10, 1);

PurchPrognEdit.Text := FloatToStrF(ppr, ffFixed, 10, 1);

end;

1:

begin

with SalesTable do

begin

Filtered := false;

Filter := 'ProdType = ''' + CurProd.Text + '''' +

' AND No = ' + CurA3C.Text;

Filtered := true;

end;

n := SalesTable.RecordCount;

if n = 0 then

begin

MessageDlg('Нет данных для прогноза!', mtWarning, [mbOK], 111);

exit;

end;

SetLength(y, n);

SetLength(S1, n);

SetLength(S2, n);

SetLength(S3, n);

SalesTable.First;

for i := 1 to n do

begin

y[i - 1] := SalesTable.FieldValues['Qty'];

SalesTable.Next;

end;

if OptAl.Checked then OptimizeAlpha

else Smooth;

AlphaEdit.Text := FloatToStr(al);

Chart2.Series[0].Clear;

Chart2.Series[1].Clear;

Chart2.Series[0].AddArray(y);

Chart2.Series[1].AddArray(S1);

spr := a0(n - 1) + a1(n - 1) + 0.5 * a2(n - 1);

SalesPrognEdit.Text := FloatToStrF(spr, ffFixed, 10, 1);

end;

end;

end;

procedure TExpSmoothForm.Smooth;

var i: integer;

bet: double;

begin

bet := 1 - al;

S1[0] := y[0];

S2[0] := y[0];

S3[0] := y[0];

for i := 1 to n - 1 do

begin

S1[i] := al * y[i] + bet * S1[i - 1];

S2[i] := al * S1[i] + bet * S2[i - 1];

S3[i] := al * S2[i] + bet * S3[i - 1];

end;

end;

procedure TExpSmoothForm.OptimizeAlpha;

var a, m, u: double;

i: byte;

begin

a := 0;

m := maxdouble;

for i := 1 to 9 do

begin

al := i / 10;

Smooth;

u := y[n - 1] - (a0(n - 2) + a1(n - 2) + 0.5 * a2(n - 2));

if a = 0 then

begin

a := al;

m := u;

end

else if u * m < 0 then

begin

a := al - 0.05;

break;

end

else if abs(u) < abs(m) then

begin

a := al;

m := u;

end;

end;

al := a;

Smooth;

end;

function TExpSmoothForm.a0(t: integer): double;

begin

if t > High(S1) then a0 := 0

else a0 := 3 * (S1[t] - S2[t]) + S3[t];

end;

function TExpSmoothForm.a1(t: integer): double;

var bet: double;

begin

if t > High(S1) then a1 := 0

else

begin

bet := 1 - al;

a1 := 0.5 * al / sqr(bet) * ((6 - 5 * al) * S1[t] -

2 * (5 - 4 * al) * S2[t] + (4 - 3 * al) * S3[t]);

end;

end;

function TExpSmoothForm.a2(t: integer): double;

var bet: double;

begin

if t > High(S1) then a2 := 0

else

begin

bet := 1 - al;

a2 := sqr(al / bet) * (S1[t] - 2 * S2[t] + S3[t]);

end;

end;

procedure TExpSmoothForm.AlphaEditChange(Sender: TObject);

var a: double;

begin

if AlphaEdit.Modified then

begin

a := StrToFloat(AlphaEdit.Text);

if (a > 0) and (a < 1) then

begin

al := a;

Self.UpdateFilters(Sender);

end;

end;

end;

procedure TExpSmoothForm.OptAlClick(Sender: TObject);

begin

if OptAl.Checked then

Self.UpdateFilters(Sender);

end;

end.

П3.8. Модуль формы «Линейный тренд с учетом сезонности»

unit LinSeas;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, DB, ADODB, StdCtrls, Series, TeEngine, ExtCtrls,

TeeProcs, Chart, DBGrids, ComCtrls, DBCtrls;

type

TLinSeasForm = class(TForm)

Label1: TLabel;

CurProd: TDBLookupComboBox;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

DBGrid1: TDBGrid;

Chart1: TChart;

Series1: TBarSeries;

Series2: TLineSeries;

ProdRests: TDBLookupComboBox;

TotSalesPrognEdit: TEdit;

PurchPrognEdit: TEdit;

TabSheet2: TTabSheet;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

CurA3C: TDBLookupComboBox;

DBGrid2: TDBGrid;

Chart2: TChart;

Series3: TBarSeries;

Series4: TLineSeries;

SalesPrognEdit: TEdit;

ProdTable: TADOTable;

ProdSource: TDataSource;

TotSalesTable: TADOTable;

TotSalesTableProdType: TWideStringField;

TotSalesTableYr: TSmallintField;

TotSalesTableMon: TWordField;

TotSalesTableSoldQty: TFloatField;

TotSalesSource: TDataSource;

TotRestsTable: TADOTable;

TotRestsSource: TDataSource;

AlphaEdit: TEdit;

Label2: TLabel;

A3CTable: TADOTable;

A3CSource: TDataSource;

SalesTable: TADOTable;

SalesTableNo: TIntegerField;

SalesTableProdType: TWideStringField;

SalesTableYr: TSmallintField;

SalesTableMon: TWordField;

SalesTableQty: TFloatField;

SalesTableRSum: TBCDField;

SalesSource: TDataSource;

KSEntire: TStringGrid;

Label3: TLabel;

Label11: TLabel;

KSA3C: TStringGrid;

procedure UpdateFilters(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormHide(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

ks: array [0..11] of double;

al, bet: double;

x: array of integer;

y: array of double;

n: integer;

procedure Season;

public

{ Public declarations }

end;

var

LinSeasForm: TLinSeasForm;

implementation

uses Main;

{$R *.dfm}

procedure TLinSeasForm.FormShow(Sender: TObject);

begin

ProdTable.Open;

TotSalesTable.Open;

if CurProd.KeyValue = Null then

CurProd.KeyValue := ProdTable.FieldValues['ProdType'];

TotRestsTable.Open;

A3CTable.Open;

SalesTable.Open;

if CurA3C.KeyValue = Null then

CurA3C.KeyValue := A3CTable.FieldValues['No'];

UpdateFilters(Sender);

end;

procedure TLinSeasForm.FormHide(Sender: TObject);

begin

ProdTable.Close;

TotSalesTable.Close;

TotRestsTable.Close;

A3CTable.Close;

SalesTable.Close;

end;

procedure TLinSeasForm.UpdateFilters(Sender: TObject);

var i, mp, m: integer;

spr, ppr: double;

sx, sx2, sy, sxy: double;

begin

case PageControl1.ActivePageIndex of

0:

begin

with TotSalesTable do

begin

Filtered := false;

Filter := 'ProdType = ''' + CurProd.Text + '''';

Filtered := true;

end;

ProdRests.KeyValue := CurProd.KeyValue;

n := TotSalesTable.RecordCount;

SetLength(x, n);

SetLength(y, n);

if n <= 1 then

begin

MessageDlg('Нет или недостаточно данных для прогноза!', mtWarning, [mbOK], 111);

exit;

end;

TotSalesTable.First;

x[0] := TotSalesTable.FieldValues['Mon'];

m := x[0];

y[0] := TotSalesTable.FieldValues['SoldQty'];

sx := x[0];

sx2 := sqr(x[0]);

sy := y[0];

sxy := x[0] * y[0];

for i := 2 to n do

begin

TotSalesTable.Next;

mp := m;

m := TotSalesTable.FieldValues['Mon'];

if m > mp then

x[i - 1] := x[i - 2] + (m - mp)

else

x[i - 1] := x[i - 2] + (m + 12 - mp);

y[i - 1] := TotSalesTable.FieldValues['SoldQty'];

sx := sx + x[i - 1];

sx2 := sx2 + sqr(x[i - 1]);

sy := sy + y[i - 1];

sxy := sxy + x[i - 1] * y[i - 1];

end;

al := n * sx2 - sqr(sx);

bet := (sy * sx2 - sx * sxy) / al;

al := (n * sxy - sx * sy) / al;

AlphaEdit.Text := FloatToStrF(al, ffFixed, 8, 3);

Season;

Chart1.Series[0].Clear;

Chart1.Series[1].Clear;

Chart1.Series[0].AddArray(y);

for i := 0 to n - 1 do

Chart1.Series[1].AddY(bet + al * x[i]);

spr := (bet + al * (x[n - 1] + 1)) * ks[(x[n - 1] + 1) mod 12];

ppr := spr - StrToFloat(ProdRests.Text);

TotSalesPrognEdit.Text := FloatToStrF(spr, ffFixed, 10, 1);

PurchPrognEdit.Text := FloatToStrF(ppr, ffFixed, 10, 1);

end;

1:

begin

with SalesTable do

begin

Filtered := false;

Filter := 'ProdType = ''' + CurProd.Text + '''' +

' AND No = ' + CurA3C.Text;

Filtered := true;

end;

n := SalesTable.RecordCount;

if n <= 1 then

begin

MessageDlg('Нет или недостаточно данных для прогноза!', mtWarning, [mbOK], 111);

exit;

end;

SetLength(x, n);

SetLength(y, n);

if n = 0 then

begin

MessageDlg('Нет данных для прогноза!', mtWarning, [mbOK], 0);

exit;

end;

SalesTable.First;

x[0] := SalesTable.FieldValues['Mon'];

m := x[0];

y[0] := SalesTable.FieldValues['Qty'];

sx := x[0];

sx2 := sqr(x[0]);

sy := y[0];

sxy := x[0] * y[0];

for i := 2 to n do

begin

SalesTable.Next;

mp := m;

m := SalesTable.FieldValues['Mon'];

if m > mp then

x[i - 1] := x[i - 2] + (m - mp)

else

x[i - 1] := x[i - 2] + (m + 12 - mp);

y[i - 1] := SalesTable.FieldValues['Qty'];

sx := sx + x[i - 1];

sx2 := sx2 + sqr(x[i - 1]);

sy := sy + y[i - 1];

sxy := sxy + x[i - 1] * y[i - 1];

end;

al := n * sx2 - sqr(sx);

bet := (sy * sx2 - sx * sxy) / al;

al := (n * sxy - sx * sy) / al;

AlphaEdit.Text := FloatToStrF(al, ffFixed, 8, 3);

Season;

Chart2.Series[0].Clear;

Chart2.Series[1].Clear;

Chart2.Series[0].AddArray(y);

for i := 0 to n - 1 do

Chart2.Series[1].AddY(bet + al * x[i]);

spr := (bet + al * (x[n - 1] + 1)) * ks[(x[n - 1] + 1) mod 12];

SalesPrognEdit.Text := FloatToStrF(spr, ffFixed, 10, 1);

end;

end;

end;

procedure TLinSeasForm.Season;

var i, m: integer;

cnt: array [0..11] of integer;

grid: TStringGrid;

begin

if PageControl1.ActivePageIndex = 0

then grid := KSEntire

else grid := KSA3C;

for i := 0 to 11 do

begin

cnt[i] := 0;

ks[i] := 0;

end;

for i := 0 to n - 1 do

begin

m := x[i] mod 12;

inc(cnt[m]);

ks[m] := ks[m] + y[i] / (bet + al * x[i]);

end;

for i := 0 to 11 do

begin

if cnt[i] > 0 then ks[i] := ks[i] / cnt[i]

else ks[i] := 1;

if i = 0 then grid.Cells[1, 12] := FloatToStrF(ks[0], ffFixed, 8, 3)

else grid.Cells[1, i] := FloatToStrF(ks[i], ffFixed, 8, 3);

end;

end;

procedure TLinSeasForm.FormCreate(Sender: TObject);

var i: integer;

begin

KSEntire.Cells[0, 0] := 'Месяц';

KSEntire.Cells[1, 0] := 'Ks';

KSA3C.Cells[0, 0] := 'Месяц';

KSA3C.Cells[1, 0] := 'Ks';

for i := 1 to 12 do

begin

KSEntire.Cells[0, i] := IntToStr(i);

KSA3C.Cells[0, i] := IntToStr(i);

end;

end;

end.

П3.9. Модуль формы «О программе»

unit About;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TAboutBox = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

Version: TLabel;

Copyright: TLabel;

Comments: TLabel;

OKButton: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

var

AboutBox: TAboutBox;

implementation

{$R *.dfm}

end.

Приложение В

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

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

Рис. 6. Прогнозирование объемов реализации дизельного топлива по АЗС № 1 на основе экспоненциального сглаживания

Рис. 7. Прогнозирование объемов реализации дизельного топлива по АЗС № 1 на основе линейного тренда с учетом сезонности

Рис. 8. Прогнозирование объемов реализации дизельного топлива по АЗС № 3 на основе экспоненциального сглаживания

Рис. 9. Прогнозирование объемов реализации дизельного топлива по АЗС № 3 на основе линейного тренда с учетом сезонности

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.