Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Работа ПРИМЕР.docx
Скачиваний:
3
Добавлен:
22.11.2019
Размер:
1.66 Mб
Скачать

6. Разработка программы для решения задачи в общем виде (Delphi)

Программа предназначена для решения задачи из условий варианта №16.

Инструкция пользователю.

Назначение.

Программа реализует интуитивно понятный интерфейс и разработана для решения, как транспортной задачи заданного условия варианта, так и для решения транспортных задач с другими исходными данными, удовлетворяющих условиям программы. Оболочка программы реализована на Delphi, однако расчеты производятся в файле Excel, выполненном ранее.

Программные и аппаратные требования.

Компьютер и процессор

Частота не ниже 500 МГц

Память

ОЗУ не менее 256 МБ

Место на жестком диске

2 ГБ..

Экран

Разрешение не менее 1024x768 точек

Операционная система

Microsoft Windows XP, Windows 7, Windows 8,Server 2003, Server 2008) или более поздняя версия

Программы

Microsoft Office 2007, 2010.

Установка программы.

Необходимо скопировать файлы «TZ.xlsm» и «Var16.exe» в одну папку.

Для корректной работы программы нужно запустить «TZ.xlsm». По умолчанию в MSExcel 2007 надстройка «Поиск решения» отключена. Чтобы активизировать ее необходимо перейти на вкладку «Пуск », нажать кнопку «Параметры Ecxel» => «Надстройки» и установить флажок рядом с пунктом «Поиск решения». Нажать «ОК» (см. рисунок 9).

Рис.9 Надстройки «Поиск решения»

После чего перейти на вкладку «основные» активировать для показа на ленте вкладку «Разработчик» (см. рисунок 10).

Рис.10 Надстройки «Разработчик»

Еще в «центре обеспечения безопасностью» нажать «Параметры безопасности» (см. рисунок 11).

Рис.11 Настройки безопасности

В параметрах макросов включить все макросы и доверить доступ VBA (см. рисунок 12).

Рис.12 Включение макросов

Также потребуется добавить компонент «Solver» перейдя во вкладку «Разработчик» => «Visual Basic» => «Tools» => «Reference» (см. рисунок 13).

Рис.13 Включение компонента «Solver»

Файл «TZ.xlsm» использует следующий макрос:

Sub makros1()

' makros1 POISK RESH

Range("F28").Select

SolverOk SetCell:="$F$28", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$18:$H$19"

SolverSolve UserFinish:=True

End Sub

Далее запускаем программу «Var16.exe». Появляется окно с заполненными данными согласно варианту: поставщики (Элеватор 1, Элеватор 2) их запасы, потребители (Хлебозавод 1, Хлебозавод 2, Хлебозавод 3) их потребности и затраты на 1 единицу (см. рисунок 14).

Рис.14 Заполнение данных

При нажатии на кнопку «Считать» программа произведет расчеты и будет выведен результат в строку «Оптимальный грузооборот» и «Минимальные затраты». Так же рассчитается оптимальный план перевозок (см. рисунок 15).

Рис.15 Расчет результатов

В программе предусмотрена возможность ввода других данных: расстояний, потребностей, запасов и затрат на 1 единицу. Для верного вычисления результатов должно соблюдаться условие - сумма всех запасов должна быть больше, чем сумма всех потребностей. Если условие не выполнится, то при нажатии на кнопку «Считать» появиться ошибка (см. рисунок 16).

Рис.16 Ошибка

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

Как видно из решения данной задачи оптимальный грузооборот составит:

Q = 148000 тон/км.

А минимальные денежные затраты составят:

S = 3700000 д.е.

Структура программы Delphi

В программе используются следующие компоненты:

Button- простая командная кнопка, используется для реализации в программе команд с помощью обработчика события OnClick этого компонента.

Label предназначен для отображения статического текста, то есть надписей и меток на Форме.

Edit представляет собой однострочное текстовое поле, служащее для ввода данных пользователем.

Memo - простой текстовый редактор. Memo позволяет вводить многострочный текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата.

Переменные в модуле были задействованы

Form1: TForm1;

ap: variant. Переменная Ap – ссылка объекта, возвращенная функцией 'Excel.Application'

Функция возвращает ссылку на объект, представляющий собой переменную типа variant

Тип Variant обеспечивает гибкий универсальный тип данных

procedure TForm1.FormCreate(Sender: TObject);

filename:string – переменная filename связывает путь и имя файла

Эта процедура выполняется сразу же после открытия формы и идет заполнение данных согласно варианту.

Memo1.Text:='';

Memo1.Lines.Add ('Имеются два элеватора, в которых сосредоточено соответственно 4200 и 1200 т зерна. Зерно необходимо перевезти трем хлебозаводам в количестве 1000,2000,1600 т каждому. Расстояние от элеватора до хлебозаводов указано в таблице. Затраты на 1т/км - 25 д.е');

Edit9.Text:='4200';

Edit10.Text:='1200';

Запись запасов

Edit14.Text:='1000'

Edit15.Text:='2000';

Edit16.Text:='1600';

запись потребностей

Edit17.Text:='25';

запись затрат на еденицу

Edit1.Text:='20';

Edit2.Text:='30';

Edit3.Text:='50';

Edit5.Text:='60';

Edit6.Text:='20';

Edit7.Text:='40';

Присвоение плану перевозок и ячеек с ответами значение «0»

Edit4.Text:='0';

Edit8.Text:='0';

Edit13.Text:='0';

Создается единичный OLE объект. И программа открывает Excel файл, который производит все вычисления

Ap := CreateOleObject('Excel.Application'); Функция возвращает ссылку на объект, представляющий собой переменную типа variant. Результатом выполнения данной процедуры будет запуск приложения Excel на выполнение.

filename:=ExtractFilePath(Application.ExeName)+'\TZ.xlsm';

ExtractFilePath - Извлекает из полного имени файла исполняемый файл.

Ap.Workbooks.Open(filename);

procedure TForm1.Button1Click(Sender: TObject);

переменные zap,pot: real – для записывания результата суммы запасов, и суммы потребностей.

Процедура нажатия на кнопку считать. Сразу после нажатия выполняется условие проверки на баланс. Если сумма запасов больше или равна сумме потребностей, то программа продолжит выполнение дальше. А если сумма запасов меньше сумме потребностей программа выдаст ошибку.

Условие выполнения задачи

zap:=strtofloat(edit9.Text)+strtofloat(edit10.Text);

pot:=strtofloat(edit14.Text)+strtofloat(edit15.Text)+strtofloat(edit16.Text);

if (zap>=pot) then - условный оператор выполняющий условие

else

Вывод ошибки

MessageBox(0,'Задача не может быть решена','Ошибка', MB_OK);

После проверки на баланс и при выполнении условия происходит записывание данных из программы в Exel файл

Ap.Range['E7']:=strtofloat(Edit1.Text);

Ap.Range - для задания объекта, ассоциированного с областью ячеек.

Ap.run('makros1')- Непосредственное выполнение макроса.

После вычислений происходит считывание данных из Exel файла и запись готовых ответов в программу.

Edit1.Text:=Ap.Range['E7'];

Edit2.Text:=Ap.Range['F7'];

Edit3.Text:=Ap.Range['G7'];

procedure TForm1.Button2Click(Sender: TObject);

Кнопка закрытия программы.

Ap.DisplayAlerts := False - отмена запроса о сохранении Exel файла

Ap.Workbooks.close - Закрытие рабочей книги

Ap.Application.Quit - Закрытие Exel файла

Application.Terminate - Закрытие программы

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

В этой процедуре при нажатии на крестик происходит закрытие программы и Exel файла.

Ap.DisplayAlerts := False - отмена запроса о сохранении Exel файла

Ap.Workbooks.close - Закрытие рабочей книги

Ap.Application.Quit - Закрытие Exel файла

Application.Terminate - Закрытие программы