Автор работы: Пользователь скрыл имя, 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
Приложение
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(
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(
begin
eConsumersCount.Text := IntToStr(udConsumersCount.
end;
procedure
TfMain.eSuppliersCountExit(
begin
eSuppliersCount.Text := IntToStr(udSuppliersCount.
end;
procedure TfMain.FormActivate(Sender: TObject);
begin
sgTable.Refresh;
end;
procedure
TfMain.FormConstrainedResize(
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(
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[
then begin
Информация о работе Разработка программы "Организация перевозок"