Разработка программы "Организация перевозок"

Автор работы: Пользователь скрыл имя, 08 Апреля 2011 в 09:11, дипломная работа

Краткое описание

Транспортная задача является классической задачей исследования операций. Множество задач распределения ресурсов сводится именно к этой задаче. Распределительные задачи связаны с распределением ресурсов по работам, которые необходимо выполнить. Задачи этого класса возникают тогда, когда имеющихся в наличии ресурсов не хватает для выполнения каждой работы наиболее эффективным образом. Поэтому целью решения задачи, является отыскания такого распределения ресурсов по работам, при котором либо минимизируются общие затраты, связанные с выполнением работ, либо максимизируется получаемый в результате общий доход

Содержание работы

Введение 4
1 Исследовательская часть 5
1.1 Описание и анализ предметной области 5
1.2 Обзор используемых элементов языка и среды программирования 11
2 Технологическая часть 16
2.1 Постановка задачи 16
2.2 Реализация модели математическим методом 17
2.3 Выбор архитектуры приложения 28
2.4 Структурные и функциональные схемы 29
2.5 Проектирование интерфейса пользователя 30
3 Специальная часть 32
3.1 Описание разрабатываемых процедур и функций 32
3.2 Таблица идентификаторов 34
3.3 Выбор стратегии тестирования и разработка тестов 35

4 Мероприятия по охране труда и технике безопасности 39
4.1 Освещение 40
4.2 Микроклимат 40
4.3 Эргономичность 42
4.4 Техника безопасности 47
5 Экономическая часть 49
5.1 Расчет стоимости разработки 49
5.2 Расчет экономического эффекта от внедрения программного обеспечения 58
Заключение 60
Список используемых источников 62
Приложение

Содержимое работы - 9 файлов

Cодержаниe.doc

— 75.50 Кб (Открыть файл, Скачать файл)

Cодержаниe2.doc

— 76.00 Кб (Открыть файл, Скачать файл)

~$адание.doc

— 162 байт (Скачать файл)

Математическая модель.cdr

— 66.37 Кб (Скачать файл)

Пояснительная записка 2.doc

— 831.00 Кб (Скачать файл)

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

     Рисунок Б.1  – Графический интерфейс приложения

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

     ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ Б

     Рисунок Б.2  – Реакция программы на ввод некорректных данных

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

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

     ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ Б

     Рисунок Б.3  – Результат работы программы

     Для получения справочной информации о  программе предназначена кнопка «Справка». Окно с инструкцией по использованию выводится в не модальном режиме, что не мешает одновременно использовать основное окно программы и читать руководство пользователя.

     Получить  сведения о разработчике приложения можно с помощью кнопки «О программе». 
 
 
 
 
 
 
 
 
 
 
 
 
 

     ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ Б

   

     Рисунок Б.4  – Диалоговое окно «Справочная информация»

     

     Рисунок Б.5  – Диалоговое окно «О программе»

     Выход из программы осуществляется с помощью  кнопки «Выход». Если при выходе в  таблицу вводились какие-либо данные, программа выдаст предупреждение, что  после закрытия все введённые  или полученные в результате работы параметры будут утеряны. Аналогичное сообщение выводится при нажатии на кнопку «Новый расчёт» при внесённых в таблицу данных.

     Рисунок Б.6  – Предупреждение об утере данных при закрытии программы 

 

     ПРИЛОЖЕНИЕ  В

     ЛИСТИНГ ПРОГРАММЫ 
 

       Transport.dpr

     program Transport; 

     uses

       Forms,

       TR_MainForm in 'TR_MainForm.pas' {fMain},

       TR_AlignEdit in 'TR_AlignEdit.pas',

       TR_Decision in 'TR_Decision.pas',

       TR_AboutForm in 'TR_AboutForm.pas' {fAbout},

       TR_HelpForm in 'TR_HelpForm.pas' {fHelp}; 

     {$R *.res}

     {$R help.res} 

     begin

       Application.Initialize;

       Application.MainFormOnTaskbar := True;

       Application.Title := 'Решение транспортной задачи';

       Application.CreateForm(TfMain, fMain);

       Application.CreateForm(TfAbout, fAbout);

       Application.CreateForm(TfHelp, fHelp);

       Application.Run;

     end. 
 

      TR_AlignEdit.pas

     unit TR_AlignEdit; 

     interface 

     uses

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

       StdCtrls; 

     type

       TAlign = (eaLeft, eaCenter, eaRight);

       TAlignEdit = class(TEdit)

       private

         FAlign: TAlign;

         procedure SetAlign(const Value: TAlign);

       protected

         property Alignment: TAlign read FAlign write SetAlign default eaLeft;

       end; 

     procedure Register; 

     implementation 

     constructor TAlignEdit.Create(Aowner: TComponent);

     begin

     ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В

       inherited Create(AOwner);

       FAlign := eaLeft;

     end; 

     procedure TAlignEdit.SetAlign(const Value: TAlign);

     begin

       if FAlign <> Value then

       begin

         FAlign := Value;

         RecreateWnd;

       end;

     end; 

     procedure TAlignEdit.CreateParams(var Params: TCreateParams);

     begin

       inherited;

       case FAlign of

         eaLeft: Params.Style   := Params.Style or ES_LEFT;

         eaCenter: Params.Style := Params.Style or ES_CENTER;

         eaRight: Params.Style  := Params.Style or ES_RIGHT;

       end;

     end; 

     procedure Register;

     begin

       RegisterComponents('SwissDelphiCenter', [TAlignEdit]);

     end; 

     end. 
 

      TR_Decision.pas 

     unit TR_Decision; 

     interface 

     uses

       Windows, Math, Contnrs, SysUtils; 

     type

       TMatrix = array of array of Double;

       TVector = array of Double;

       TTransportTaskType = (tttClosed, // Закрытая задача

                             tttSurplus, // Открытая задача, избыток запасов

                             tttShortage); // Открытая задача, дефицит запасов

       TTransportTask = class

       private

         FNeedSumm: Double;

         FStockSumm: Double;

         DF: Double;

         FTaskType: TTransportTaskType;

         FCalculated: Boolean; 

         CC, SC: Longword;

         C, X: TMatrix;

         Need, Stock: TVector;

     ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В

         function VectorSumm(V: TVector): Double;

       public

         constructor Create(SuppliersCount, ConsumersCount: Longword);

         destructor Destroy; 

         procedure SetInputData(APrices: TMatrix; ANeed, AStock: TVector);

         procedure Calculate;

         procedure GetOutputData(out XValues: TMatrix); 

         property NeedSumm: Double read FNeedSumm;

         property StockSumm: Double read FStockSumm;

         property TaskType: TTransportTaskType read FTaskType;

         property SuppliersCount: Longword read SC;

         property ConsumersCount: Longword read CC;

         property DestFunction: Double read DF;

       end; 

     implementation 

     uses TR_MainForm; 

     type

       TTRCoord = class

       public

         I, J: Longword;

         constructor Create(I, J: Longword);

       end; 

     const

       HighDouble = 1.7E308; 

     { TTransportTask } 

     procedure TTransportTask.Calculate;

     var

       D: TMatrix;

       U, V: TVector;

       I, J: Longword;

       L: TObjectList;

       MinD, F: Double;

       MinP: TTRCoord;

       B: array of array of Boolean; 

       function PlanIsOptimal: Boolean;

       var

         I, J: Longword;

       begin

         Result := True;

         for I := 0 to CC - 1 do

           for J := 0 to SC - 1 do

             if D[I, J] < 0 then

             begin

               Result := False;

               Exit;

             end;

       end; 

       function ValueAtPoint(P: TTRCoord): Double;

       begin

        ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ В

       Result := X[P.I, P.J];

       end; 

       procedure SetValueAtPoint(P: TTRCoord; Value: Double);

       begin

         X[P.I, P.J] := Value;

       end; 

       function GetCycle(P: TTRCoord; O: Boolean = True): Boolean;

       var

         I: Longword;

         AP: TTRCoord;

       begin

         Result := False;

         AP := TTRCoord.Create(0, 0);

         if O then

           for I := 0 to SC - 1 do

           begin

             if I = P.J then

               Continue;

             if (P.I = MinP.I) and (I = MinP.J) and (P.J <> MinP.J) then

             begin

               Result := True;

               L.Add(TTRCoord.Create(P.I, P.J));

               Exit;

             end;

             if B[P.I, I] then

             begin

               Result := True;

               AP.I := P.I;

               AP.J := I;

               if GetCycle(AP, not O) then

               begin

                 L.Add(TTRCoord.Create(P.I, P.J));

                 Break;

               end;

             end;

           end

         else

           for I := 0 to CC - 1 do

           begin

             if I = P.I then

               Continue;

             if (I = MinP.I) and (P.J = MinP.J) and (P.I <> MinP.I) then

Пояснительная записка.doc

— 635.00 Кб (Открыть файл, Скачать файл)

Титульный лист.doc

— 31.50 Кб (Открыть файл, Скачать файл)

Функциональная схема.cdr

— 39.75 Кб (Скачать файл)

Задание.doc

— 41.50 Кб (Открыть файл, Скачать файл)

Информация о работе Разработка программы "Организация перевозок"