Разработка информационной системы учета нефтепродуктов
Проектирование автоматизированного рабочего места менеджера по закупкам нефтепродуктов сети АЗС. Анализ информационных потребностей менеджера, информационных потоков и бизнес-процессов. Пути совершенствования информационной системы учета нефтепродуктов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Повышение эффективности и точности учета нефтепродуктов на сети нефтебаз ОАО "РН-Няганьнефтегаз" за счет разработки современной АИС учета, приемки и сбыта нефтепродуктов, производящей регистрацию и документирование товарных операций, учет потребностей.
дипломная работа [2,2 M], добавлен 15.02.2017Разработка программного продукта для автоматизации рабочего места менеджера в агентстве недвижимости. Проектирование информационной системы для отдела работы с клиентами с возможностью обработки данных о квартирах, услугах, учете заказов и учете сделок.
курсовая работа [3,1 M], добавлен 13.02.2012Анализ деятельности складского учета, внедрение информационных технологий в процесс работы склада. Создание информационной системы учета движения материалов на складе. Моделирование бизнес-процессов. Проектирование физической структуры базы данных.
курсовая работа [4,1 M], добавлен 22.06.2014Исследование программных продуктов на туристическом рынке. Разработка информационной системы для менеджера туристической фирмы, отвечающей современному стандарту. Проектирование и структурирование базы данных. Моделирование бизнес-процессов в турфирме.
дипломная работа [4,0 M], добавлен 23.09.2013Проектирование информационных систем. Разработка информационной системы в 1С. Создание справочников и документов, регистров накопления и регистров сведений. Пропускная способность системы. Автоматизация рабочего места оператора телефонной компании.
курсовая работа [1,6 M], добавлен 29.07.2013Развитие автоматизированных информационных технологий. Реализация автоматизированного рабочего места, позволяющего осуществить учет продукции на складе. Концептуальная и логическая модели данных. Оценка экономической эффективности информационной системы.
дипломная работа [1,9 M], добавлен 30.11.2010Разработка автоматизированной информационной системы учета заказов на выполнение работ и формированию отчетной документации Бюро технической инвентаризации (БТИ). Системный анализ и схема документооборота. Разработка инфологической модели данных.
дипломная работа [603,9 K], добавлен 29.08.2014Характеристика объектов автоматизации информационных систем. Требования к документированию. Порядок контроля и приемки системы. Описание потоков данных и бизнес процессов. Структура информационной системы, состав функциональных и обеспечивающих подсистем.
курсовая работа [1,9 M], добавлен 18.09.2013Разработка информационной подсистемы автоматизации рабочего места менеджера салона по ремонту мобильных телефонов. Проблемы CRM-систем, необходимость их использования. Система управления базой данных как способ реализации информационной системы.
дипломная работа [1,4 M], добавлен 28.11.2012Сфера применения автоматизированного рабочего места менеджера системы Клиент-Банк, выполнение финансовых операций и перевод денежных средств между счетами клиента, использование сертифицированных программных средств, их высокая производительность.
курсовая работа [1,1 M], добавлен 28.08.2012