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

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

             else

               Cells[I + 1, J + 1] := '';

       end;

       WriteInfo('Получен оптимальный план, целевая функция F=' +

         FloatToStr(TT.DestFunction));

       Mode := True;

     end; 

     procedure TfMain.bExitClick(Sender: TObject);

     begin

       if DataChanged then

         if MessageBox(Application.Handle, 'При выходе из  программы будут потеряны' +

           ' все введённые данные и результаты. Вы действительно хотите выйти?',

           'Предупреждение', MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) = ID_NO

         then

           Exit;

       Close;

     end; 

     procedure TfMain.bHelpClick(Sender: TObject);

     begin

       fHelp.Show;

     end; 

     procedure TfMain.bNewCalculationClick(Sender: TObject);

     var

       I, J: Longword;

     begin

       if DataChanged then

         if MessageBox(Application.Handle, 'При начале нового  расчёта будут ' +

           'потеряны все введённые данные и результаты. Вы действительно хотите ' +

           'начать новый расчёт?', 'Предупреждение', MB_YESNO or MB_ICONWARNING or

           MB_DEFBUTTON2) = ID_NO then

           Exit;

       if TT <> nil then

         FreeAndNil(TT);

       SC := udSuppliersCount.Position;

       CC := udConsumersCount.Position;

       TT := TTransportTask.Create(SC, CC);

       DataChanged := False;

       Mode := False;

       with sgTable do

       begin

         ColCount := CC + 2;

         RowCount := SC + 3;

         FixedRows := 2;

         for I := 1 to ColCount - 2 do

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

         for I := 2 to RowCount - 2 do

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

         Cells[1, 0] := 'Потребители';

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

     Cells[0, 1] := 'Поставщики';

         Cells[0, RowCount - 1] := 'Потребность';

             Cells[ColCount - 1, 1] := 'Запасы';

         SetLength(Prices, CC);

         for I := 0 to CC - 1 do

           SetLength(Prices[I], SC);

         for I := 0 to CC - 1 do

           for J := 0 to SC - 1 do

           begin

             Prices[I, J] := 0;

             Cells[I + 1, J + 2] := '0';

           end;

         SetLength(Stock, SC);

         for I := 0 to SC - 1 do

         begin

           Stock[I] := 0;

           Cells[ColCount - 1, I + 2] := '0';

         end;

         SetLength(Need, CC);

         for I := 0 to CC - 1 do

         begin

           Need[I] := 0;

           Cells[I + 1, RowCount - 1] := '0';

         end;

         Options := Options + [goEditing];

       end;

       if Length(Answer) > 0 then

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

           SetLength(Answer[I], 0);

       SetLength(Answer, 0);

       bCalcAutomatic.Enabled := True;

       ClearInfo;

       sgTable.Refresh;

       WriteInfo('Введите исходные данные в таблицу и нажмите "Расчёт"');

     end; 

     procedure TfMain.eConsumersCountExit(Sender: TObject);

     begin

       eConsumersCount.Text := IntToStr(udConsumersCount.Position);

     end; 

     procedure TfMain.eSuppliersCountExit(Sender: TObject);

     begin

       eSuppliersCount.Text := IntToStr(udSuppliersCount.Position);

     end; 

     procedure TfMain.FormActivate(Sender: TObject);

     begin

       sgTable.Refresh;

     end; 

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

       MaxWidth, MaxHeight: Integer);

     begin

       sgTable.Refresh;

     end;

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

     procedure TfMain.FormCreate(Sender: TObject);

     begin

       DoubleBuffered := True;

     bNewCalculation.Click;

     end; 

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

     begin

       if (Key = #13) and (ActiveControl is TAlignEdit) then

       begin

         ActiveControl := sgTable;

         Exit;

       end;

       if (Key = #13) and (ActiveControl = sgTable) then

         bCalcAutomatic.Click;

     end; 

     procedure TfMain.sgTableDrawCell(Sender: TObject; ACol, ARow: Integer;

       Rect: TRect; State: TGridDrawState);

     var

       R1, R2: TRect;

       I, W: Longword;

     begin

       with sgTable do

         with Canvas do

         begin

           if Mode then

           begin

             FillRect(Rect);

             TextOut(Rect.Left + (Rect.Right - Rect.Left -

               TextWidth(Cells[ACol, ARow])) div 2, Rect.Top + (Rect.Bottom -

               Rect.Top - TextHeight(Cells[ACol, ARow])) div 2, Cells[ACol, ARow]);

           end else

           begin

             if (ACol = ColCount - 1) and (ARow = 1) then

             begin

               R1 := Classes.Rect(Rect.Left, CellRect(ColCount - 1, 0).Top,

                 Rect.Right, Rect.Bottom);

               FillRect(R1);

               TextOut(R1.Left + (R1.Right - R1.Left - TextWidth(Cells[ACol, ARow]))

                 div 2, R1.Top + (R1.Bottom - R1.Top - TextHeight(Cells[ACol, ARow]))

                 div 2, Cells[ACol, ARow]);

               Exit;

             end;

             if (ACol = ColCount - 1) and (ARow = RowCount - 1) then

             begin

               Brush.Color := FixedColor;

               FillRect(Rect);

               Exit;

             end;

             if (ACol = 0) and (ARow = 1) then

             begin

               R1 := Classes.Rect(Rect.Left, CellRect(0, 0).Top, Rect.Right,

                 Rect.Bottom);

               FillRect(R1);

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

                 div 2, Cells[ACol, ARow]);

               Exit;

             end;

             if (ACol = 0) or (ARow = 1) then

             begin

               FillRect(Rect);

               TextOut(Rect.Left + (Rect.Right - Rect.Left - TextWidth(

                 Cells[ACol, ARow])) div 2, Rect.Top + (Rect.Bottom - Rect.Top -

                 TextHeight(Cells[ACol, ARow])) div 2, Cells[ACol, ARow]);

               Exit;

             end;

             if (ARow = 0) and (ACol in [1..ColCount - 1]) then

             begin

               if VisibleColCount = ColCount then

                 R2 := Classes.Rect(ColWidths[0] + 1, 0, RowHeights[0],

                   CellRect(ColCount - 2, ARow).Bottom)

               else begin

                 W := 0;

                 if ColCount - VisibleColCount = 1  then

                   for I := 0 to ColCount - 2 do

                     Inc(W, ColWidths[I])

                 else

                   W := sgTable.Width;

                 R2 := Classes.Rect(ColWidths[0] + 1, 0, W, RowHeights[0]);

               end;

               FillRect(R2);

               TextOut(R2.Left + (R2.Right - R2.Left - TextWidth(Cells[1, ARow]))

                 div 2, R2.Top + (R2.Bottom - R2.Top - TextHeight(Cells[1, ARow]))

                 div 2, Cells[1, ARow]);

               Exit;

             end;

           end;

         end;

     end; 

     procedure TfMain.sgTableExit(Sender: TObject);

     begin

       sgTable.EditorMode := False;

     end; 

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

       Shift: TShiftState);

     begin

       with sgTable do

         if (Key = VK_TAB) and (Col = ColCount - 2) and (Row = RowCount - 1)

         then

         begin

           Col := 1;

           Row := 2;

           Key := 0;

         end;

     end; 

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

       var CanSelect: Boolean);

     var

       F: Double;

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

       begin

         if (ACol = ColCount - 1) and (ARow = RowCount - 1) then

         begin

           CanSelect := False;

           Exit;

         end;

         if not TryStrToFloat(sgTable.Cells[CCol, CRow], F)

         then begin

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

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

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

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

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

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

Задание.doc

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

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