Добавлен: 31.03.2023
Просмотров: 103
Скачиваний: 1
Рисунок 13. Проектирование шестого этапа
На седьмом этапе выполним открытие дверей лифта. В переменную времени заложим время, которое необходимо на открытие дверей лифта. Отобразим процесс действия на форму. На рисунке 14 показана диаграмма проектирования седьмого этапа.
Рисунок 14. Проектирование седьмого этапа
На восьмом этапе выполним передвижение пассажира в лифт. В переменную времени заложим время, которое необходимо на передвижение пассажира в лифт. Отобразим процесс действия на форму. На рисунке 15 показана диаграмма проектирования восьмого этапа.
Рисунок 15. Проектирование восьмого этапа
На девятом этапе выполним случайный выбор этажа, нажатие на кнопку нужного этажа. В переменную времени заложим время, которое необходимо на нажатие кнопки лифта. Отобразим процесс действия на форму. На рисунке 16 показана диаграмма проектирования девятого этапа.
Рисунок 16. Проектирование девятого этапа
На десятом этапе выполним закрытие дверей лифта. В переменную времени заложим время, которое необходимо на закрытие дверей лифта. Отобразим процесс действия на форму. На рисунке 17 показана диаграмма проектирования на десятом этапе.
Рисунок 17. Проектирование десятого этапа
На одиннадцатом этапе выполним обработку движения лифта. В переменную времени заложим время на передвижение лифта к заданному этажу. Отобразим процесс действия на форму. На рисунке 18 показана диаграмма проектирования одиннадцатого этапа.
Рисунок 18. Проектирование одиннадцатого этапа
На двенадцатом этапе выполним выключение кнопки этажа в лифте. В переменную времени заложим время, которое необходимо на срабатывание кнопки лифта. Отобразим процесс действия на форму. На рисунке 19 показана диаграмма проектирования двенадцатого этапа.
Рисунок 19. Проектирование двенадцатого этапа
На тринадцатом этапе выполним открытие дверей лифта. В переменную времени заложим время, которое необходимо на открытие дверей лифта. Отобразим процесс действия на форму. На рисунке 20 показана диаграмма проектирования тринадцатом этапа.
Рисунок 20. Проектирование третьего этапа
На четырнадцатом этапе выполним передвижение пассажира в лифт. В переменную времени заложим время, которое необходимо на передвижение пассажира в лифт. Отобразим процесс действия на форму. На рисунке 21 показана диаграмма проектирования четырнадцатого этапа.
Рисунок 21. Проектирование четырнадцатого этапа
На пятнадцатом этапе выполним закрытие дверей лифта. В переменную времени заложим время, которое необходимо на закрытие дверей лифта. Отобразим процесс действия на форму. На рисунке 22 показана диаграмма проектирования пятнадцатого этапа.
Рисунок 22. Проектирование пятнадцатого этапа
На шестнадцатом этапе выполним проверку, сколько человек проехало. Если число будет равно числу необходимых пассажиров, то функция прекращает работу. На рисунке 23 показана диаграмма проектирования шестнадцатого этапа.
Рисунок 23. Проектирование шестнадцатого этапа
Совокупность этапов, на которые можно поделить разработку функции моделирования работы лифта, составило шестнадцать. Теперь с помощью языка программирования можно приступать к написанию кода, придерживаясь этих этапов.
-
- Проблемы проектирования
В процессе проектирования формируется модель программы. Во время формирования модели программы нужно выделить основные свойства системы. Проектирование программной системы решает следующие проблемы:
- Выбор платформы для программного средства.
- Выбор методов решения задачи.
- Разработка алгоритмов для решения задачи, функциональных структур алгоритмов. Проектирование свойств, методов, событий объектов.
- Составление общей структуры проекта.
На первых этапах проектирования нужно правильно выделить факты из постановки задачи. Используя таблицу для удобства распределения фактов и объектов, можно разделить выделенные факты по объектам в две колонки. Потом идет разделение фактов на две группы. Первую группу нужно пометить как Атрибуты, а вторую группу как Другие факты. Для описания поведения объектов нужно добавить третью группу. Это поможет выделить поведение объектов. Нужно добавить в отдельный список атрибуты, которые будут изменены. Выделим сообщения, посылаемые другим объектам. Это сообщения, которые будут передаваться от объектов к другим объектам, для осуществления их взаимодействия.
Для классов, которые были ранее выделены, нужно написать реализацию на языке программирования. Затем нужно спроектировать текстовой вывод действий, которые будут выполнены программой. Далее следует выделить отношения композиции между классами, которые были реализованы в программе, изменить описание классов, в которых будут отражены отношения композиции, и спроектировать и внедрить графический интерфейс в программу.
В процессе проектирования данной программы пришлось упростить класс man. Это сделано было для того, чтобы реализовать графический интерфейс. Было добавлено несколько функций, которые не изменяют основную логику программы, в основной класс программы для отображения результатов действий. С помощью этих функций и делегатов достигнута определенная стабильность программы. Основная функция, которая запускает процесс моделирования, сама запускается в отдельном потоке, что дает возможность увидеть визуальную часть программы. Но в целом программа работает так, как отражено в постановке задачи.
3. РАЗРАБОТКА ПРОГРАММНОЙ СИСТЕМЫ
3.1 Использование языка С++ для реализации программной системы
В классе Button описаны методы объекта кнопки. Листинг класса находится в приложении А. В классе Button содержится параметр, который отвечает за состояние кнопки. Методы служат для включения кнопки и выключения её. Также в этом классе содержатся методы для вывода состояния кнопки в консоль. На рисунке 24 показана диаграмма состояния класса button.
Рисунок 24. Диаграмма класса button
Класс man представляет собой объект пассажира. Листинг класса находится в приложении Б. Класс содержит два атрибута, которые отвечают за этаж с пассажиром и положение пассажира в лифте. Методы класса отвечают за положение пассажира по отношению к лифту. А также для вывода информации пассажира на экран. На рисунке 36 показана диаграмма состояния класса man.
Рисунок 25. Диаграмма класса man
Класс elevator содержит методы и атрибуты, необходимые для моделирования лифта. Листинг класса находится в приложении В. В классе содержатся атрибуты класса button для инициализации кнопки в лифте, два атрибута, которые показывают состояния дверей и положения лифта. Объект лифт содержит методы для спуска, подъема, открытия дверей, закрытия дверей, вызова лифта. Также класс имеет методы для передвижения лифта к заданному этажу, переключения кнопки в лифте, отображения состояния кнопки лифта. На рисунке 26 показана диаграмма состояния класса elevator.
Рисунок 26. Диаграмма класса elevator
Класс MyForm является основным в программе. Листинг класса находится в приложении Г. В этом классе содержится объявление и инициализация компонентов формы, подключение заголовочных файлов с классами man, button, elevator. При нажатии на кнопку «Запуск» запускается отдельный поток для выполнения основной функции. В функции main происходит инициализация нужных классов, а также происходит выполнение основного кода программы, процесс которого можно увидеть на форме программы. В программе используются делегаты для взаимодействия компонентов из потока.
Рассмотрим работу класса MyForm более подробно. Нажатие на кнопку запуска приводит к работе главную функцию программы. Нажатие на кнопку запуска активирует событие OnClick. При вызове OnClick происходит сброс времени на форме. Затем идет считывание полей ввода в переменные и запуск функции, которая запускает процесс моделирования работы лифта. При считывании поля происходит проверка: если оно пустое, то значение переменной будет равно 1. Запуск функции сделан через компонент BackgroundWorker. Он позволяет запускать функцию в отдельном потоке. На рисунке 27 изображена диаграмма алгоритма работы события OnClick кнопки запуска.
Рисунок 27. Диаграмма алгоритма работы события OnClick
В функции моделирования происходит инициализация классов button, elevator, man. После этого происходит вывод количества этажей и пассажиров, так как они могли быть не введены. Вывод данных осуществлен через делегатов. Они меняют значение компонента формы в функции, которая запущенна в отдельном потоке. Функции NumberofFloor, SumPassenger (приложение Г) принимают число, которое нужно изменить на форме программы. Функции NumberofFloor (приложение Г) изменяет количество этажей в текстовом, а функция SumPassenger (приложение Г) изменяет значение этажей в текстовом поле. Далее идет установка метки. Возвращение к метке происходит, если проехали не все пассажиры. Затем происходит инициализация класса man. С помощью делегата модель человека появляется на форме. Так как человек приходит и уходит, то функция, которая отвечает за модель человека, принимает два параметра. Если параметр равен одному, то человек появляется на форме, если параметр не равен одному, то он исчезает. Диаграмма функции PassengerStatus (приложение Г) показана на рисунке 28.
Рисунок 28. Диаграмма функции PassengerStatus
После этого появляется на форме программы номер этажа, на котором появился пассажир, и номер этажа, на котором расположен лифт. Номера этажей также выводятся с помощью делегатов. Затем проверяется состояние кнопки в лифте и на этаже. Если они находятся в выключенном состоянии, то происходит нажатие на кнопку.
Рассмотрим этап перемещения лифта и пассажира. Если этаж пассажира и лифта оказываются одинаковыми, то переменная, которая отвечает за статус кнопки, меняет значение на true. Метод setstatusfloor (приложение А) класса button изменяет статус кнопки. С помощью делегата функция ButtonFloorAction (приложение Г) меняет состояние кнопки этажа. То есть кнопка загорается. Функция принимает параметр, который указывает, что нужно сделать. Если параметр равен одному, то кнопка загорается. Любое другое число выключает кнопку. На рисунке 29 представлена диаграмма функции ButtonFloorAction.
Рисунок 29. Диаграмма функции ButtonFloorAction
Затем идет добавление времени, которое было затрачено на нажатие кнопки. Функция ShowClock (приложение Г) выводит время, а затем функция LiftPosition (приложение Г) выводит номер этажа на форму. Функции ShowClock, LiftPosition принимают число, которое нужно изменить на форме программы. Если положение пассажира и лифта разные, то включаем кнопку на этаже путем изменения её статуса с помощью метода setstatusfloor (приложение А). И выводим положение лифта на форму программы через функцию LiftPosition (приложение Г), которая меняет этаж лифта. На рисунке 30 представлена схема алгоритма проверки того, что лифт и пассажир находятся на одном этаже.
Рисунок 30. Схема алгоритма проверки
Затем идет перемещение лифта к пассажиру. Переменная floor1 (приложение Г) принимает значение этажа с лифтом. Если пассажир находится на этаже выше лифта, то лифт начинает движение вверх, которое обозначается стрелкой вверх. Функция PointAction (приложение Г) принимает значение направления, затем на форме появляется нужная стрелка. Если параметр этой функции равен up, то появляется стрелка вверх, если параметр равен down, то появляется стрелка вниз, если параметр равен stop, то стрелка исчезает с формы программы. На рисунке 31 представлена схема алгоритма функции PointAction.
Рисунок 31. Схема алгоритма функции PointAction
Пока лифт и пассажир не будут на одном этаже, лифт будет подниматься вверх. Прибавляем к значению floor1 (приложение Г) единицу. Устанавливаем паузу на 5 секунд. Это сделано для того, чтобы была возможность наблюдать плавную работу движения лифта. С помощью функции LiftPosition (приложение Г) выводим значение этажа с лифтом. Добавляем к таймеру время подъема лифта. Через функцию ShowClock (приложение Г) выводим время на форму. На рисунке 32 представлена схема алгоритма подъема лифта.