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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать файл)

         CopyMemory(XValues[I], X[I], SizeOf(Double) * Length(XValues[I]));

       end;

     end;

     procedure TTransportTask.SetInputData;

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

     var

       I: Longword;

     begin

       FStockSumm := VectorSumm(AStock);

       FNeedSumm := VectorSumm(ANeed);

       for I := 0 to Length(APrices) - 1 do

         CopyMemory(C[I], APrices[I], SizeOf(Double) * Length(APrices[I]));

       CopyMemory(Stock, AStock, SizeOf(Double) * Length(AStock));

       CopyMemory(Need, ANeed, SizeOf(Double) * Length(ANeed));

       if FStockSumm = FNeedSumm then

         FTaskType := tttClosed

       else

         if FStockSumm > FNeedSumm then

         begin

           FTaskType := tttSurplus;

           Inc(CC);

           SetLength(Need, CC);

           Need[CC - 1] := FStockSumm - FNeedSumm;

           SetLength(C, CC);

           SetLength(C[CC - 1], SC);

           for I := 0 to SC - 1 do

             C[CC - 1, I] := 0;

         end else

         begin

           FTaskType := tttShortage;

           Inc(SC);

           SetLength(Stock, SC);

           Stock[SC - 1] := FNeedSumm - FStockSumm;

           for I := 0 to CC - 1 do

           begin

             SetLength(C[I], SC);

             C[I, SC - 1] := 0;

           end;

         end;

       FCalculated := False;

     end; 

     function TTransportTask.VectorSumm(V: TVector): Double;

     var

       I: Longword;

     begin

       Result := 0;

       for I := 0 to Length(V) - 1 do

         Result := Result + V[I];

     end; 

     { TTRPoint } 

     constructor TTRCoord.Create(I, J: Longword);

     begin

       Self.I := I;

       Self.J := J;

     end; 

     end. 
 

     TR_MainForm.pas

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

     unit TR_MainForm; 

     interface 

     uses

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

       Dialogs, StdCtrls, ComCtrls, ExtCtrls, TR_AlignEdit, Grids, Math, Buttons; 

     type

       TfMain = class(TForm)

         gbInputParams: TGroupBox;

         udSuppliersCount: TUpDown;

         udConsumersCount: TUpDown;

         eSuppliersCount: TAlignEdit;

         lSuppliersCount: TLabel;

         lConsumersCount: TLabel;

         eConsumersCount: TAlignEdit;

         gbAddititionalInfo: TGroupBox;

         pAddititionalInfo: TPanel;

         memAddititionalInfo: TMemo;

         gbManagement: TGroupBox;

         gbTable: TGroupBox;

         pTable: TPanel;

         sgTable: TStringGrid;

         bCalcAutomatic: TButton;

         bNewCalculation: TButton;

         bHelp: TButton;

         bAbout: TButton;

         bExit: TButton;

         procedure bExitClick(Sender: TObject);

         procedure bNewCalculationClick(Sender: TObject);

         procedure eSuppliersCountExit(Sender: TObject);

         procedure eConsumersCountExit(Sender: TObject);

         procedure WriteInfo(Text: string);

         procedure ClearInfo;

         function InputValues: Boolean;

         procedure sgTableDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;

           State: TGridDrawState);

         procedure sgTableSelectCell(Sender: TObject; ACol, ARow: Integer;

           var CanSelect: Boolean);

         procedure bCalcAutomaticClick(Sender: TObject);

         procedure sgTableKeyDown(Sender: TObject; var Key: Word;

           Shift: TShiftState);

         procedure FormCreate(Sender: TObject);

         procedure FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight,

           MaxWidth, MaxHeight: Integer);

         procedure FormActivate(Sender: TObject);

         procedure FormKeyPress(Sender: TObject; var Key: Char);

         procedure sgTableSetEditText(Sender: TObject; ACol, ARow: Integer;

           const Value: string);

         procedure bAboutClick(Sender: TObject);

         procedure sgTableExit(Sender: TObject);

         procedure bHelpClick(Sender: TObject);

       private

         { Private declarations }

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

       public

         { Public declarations }

       end;

     var

       fMain: TfMain; 

     implementation 

     uses TR_Decision, TR_AboutForm, TR_HelpForm; 

     {$R *.dfm} 

     var

       Prices, Answer: TMatrix;

       Need, Stock: TVector;

       DataChanged: Boolean = False;

       CCol: Longword = 1;

       CRow: Longword = 2;

       TT: TTransportTask = nil;

       CC, SC: Longword;

       Mode: Boolean = False; 

     procedure TfMain.WriteInfo(Text: string);

     begin

       memAddititionalInfo.Lines.Add(Text);

     end; 

     procedure tfMain.ClearInfo;

     begin

       memAddititionalInfo.Clear;

     end; 

     function TfMain.InputValues;

     label

       ResCheck;

     var

       I, J: Longword;

     begin

       Result := True;

       SC := udSuppliersCount.Position;

       CC := udConsumersCount.Position;

       with sgTable do

       begin

         for I := 1 to ColCount - 2 do

           for J := 2 to RowCount - 2 do

             if not TryStrToFloat(Cells[I, J], Prices[I - 1, J - 2]) then

             begin

               Col := I;

               Row := J;

               ActiveControl := sgTable;

               goto ResCheck;

             end;

         for I := 2 to RowCount - 2 do

           if not TryStrToFloat(Cells[ColCount - 1, I], Stock[I - 2]) or

             (Stock[I - 2] = 0) then

           begin

             Col := ColCount - 1;

             Row := I;

             goto ResCheck;

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

        (Need[I - 1] = 0) then

           begin

             Col := I;

             Row := RowCount - 1;

             goto ResCheck;

           end;

         Exit;

       end;

       ResCheck: begin

         Result := False;

         MessageBox(Application.Handle, 'В таблице имеются  некорректные ' +

           'значения. Исправьте их и попробуйте снова.', 'Ошибка', MB_ICONERROR

           or MB_OK);

         ActiveControl := sgTable;

       end;

     end; 

     procedure TfMain.bAboutClick(Sender: TObject);

     begin

       fAbout.ShowModal;

     end; 

     procedure TfMain.bCalcAutomaticClick(Sender: TObject);

     var

       I, J: Longword;

     begin

       if not InputValues then

         Exit;

       sgTable.Options := sgTable.Options - [goEditing];

       TT.SetInputData(Prices, Need, Stock);

       ClearInfo;

       case TT.TaskType of

         tttClosed: WriteInfo('Задача закрытая.');

         tttSurplus: begin

           WriteInfo('Задача открытая, с избытком запасов, введён ' +

           'фиктивный потребитель B' + IntToStr(TT.ConsumersCount) + '.');

           Inc(CC);

         end;

         tttShortage: begin

           WriteInfo('Задача открытая, с дефицитом  запасов, введён ' +

           'фиктивный поставщик A' + IntToStr(TT.SuppliersCount) + '.');

           Inc(SC);

         end;

       end;

       TT.Calculate;

       with sgTable do

       begin

         ColCount := CC + 1;

         RowCount := SC + 1;

         FixedRows := 1;

         for I := 1 to ColCount - 1 do

           Cells[I, 0] := 'B' + IntToStr(I);

         for I := 1 to RowCount - 1 do

           Cells[0, I] := 'A' + IntToStr(I);

         bCalcAutomatic.Enabled := False;

         SetLength(Answer, CC);

         for I := 0 to CC - 1 do

           SetLength(Answer[I], SC);

         TT.GetOutputData(Answer);

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

       for I := 0 to CC - 1 do

           for J := 0 to SC - 1 do

             if Answer[I, J] <> 0 then

               Cells[I + 1, J + 1] := FloatToStr(Answer[I, J])

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

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

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

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

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

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

Задание.doc

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

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