Добавлен: 31.03.2023
Просмотров: 104
Скачиваний: 1
Рисунок 32. Схема алгоритма подъема лифта
Алгоритм спуска лифта имеет схожий принцип работы. Только переменная (приложение Г) floor1 уменьшается на единицу. На рисунке 33 представлена схема алгоритма спуска лифта. После того как лифт прибыл на нужный этаж, стрелка с направлением убирается с помощью функции PointAction (приложение Г). Тут она принимает параметр со значением stop.
Рисунок 33. Схема алгоритма спуска лифта
Как только лифт приезжает на назначенный этаж, кнопка лифта выключается. Выключение кнопки происходит с помощью метода setstatusfloor (приложение Г). Ему передаются параметры false и номер этажа.
Используя цикл for, двери лифта на форме открываются. Данный цикл используется для плавного передвижения дверей лифта. Для перемещения дверей на форме используется функция DoorAction (приложение Г). Функция принимает параметр, который указывает направление дверей. Для открытия дверей нужно передать параметр значение, которого равно единице. Потом выполняется перемещение дверей. Схема алгоритма функции DoorAction представлена на рисунке 34.
Рисунок 34. Схема алгоритма функции DoorAction
Затем добавляем к таймеру время работы дверей лифта. Вывод текущего времени эксперимента на форму программы осуществляется с помощью функции ShowClock (приложение Г). Передвигаем пассажира в лифт. Передвижение пассажира организовано с помощью функции PassengerAction (приложение Г). Функция принимает число, на которое нужно передвинуть пассажира. Если переменная положительная, то пассажир выходит из лифта, если переменная отрицательная, то пассажир заходит в лифт. Схема алгоритма функции PassengerAction представлена на рисунке 35.
Рисунок 35. Схема алгоритма функции PassengerAction
Прибавляем к таймеру время передвижения пассажира. Выводим значение таймера на форму программы.
С помощью функции randomNumber (приложение Г) выбирается случайный этаж. Убираем номер этаж, на котором был пассажир. Функция PassangerPosition (приложение Г) убирает это значение. Функция принимает значение -1 для того, чтобы убрать номер с формы. Любое другое значение позволяет вернуть номер на форму программы. Схема алгоритма функции PassangerPosition представлена на рисунке 36. Когда пассажир зашел в лифт, он нажимает на нужную кнопку этажа. Функция ButtounLift (приложение Г) служит для показа нужного этажа на кнопке в лифте и этажа с пассажиром. Если значение статуса true, то кнопка появляется, если значение статуса false, то кнопка исчезает. Функция принимает номер этажа и параметр, отвечающий за состояние копки. Схема алгоритма функции ButtounLift представлена на рисунке 37. Прибавляем к таймеру время активации кнопки. Выводим значение таймера на форму программы.
Рисунок 36. Схема алгоритма функции PassangerPosition
Рисунок 37. Схема алгоритма функции ButtounLift
Далее происходит обработка этажа, на который нужно лифту прибыть. Если этаж равен текущему, то выполняется пауза. Если нужный этаж ниже этажа с лифтом, то функции PointAction (приложение Г) передается параметр down. На форме появляется стрелка вниз. Пока нужный этаж не будет равен этажу с лифтом, будет использоваться цикл. Уменьшаем на единицу переменную, в которой лежит значение этажа с лифтом. Делаем паузу на пять секунд. Выводим текущий этаж, на котором расположен лифт, на форму программы. Прибавляем к таймеру время работы лифта. Выводим значение таймер на форму программы. Если нужный этаж выше этажа с лифтом, то функции PointAction передается параметр up. На форме появляется стрелка вверх. Пока нужный этаж не будет равен этажу с лифтом, будет использоваться цикл. Прибавляем на единицу переменную, в которой лежит значение этажа с лифтом. Делаем паузу на пять секунд. Вывод текущий этаж с лифтом на форму программы. Прибавляем к таймеру время работы лифта. Выводим значение таймера на форму программы.
Когда пассажир прибыл на нужный этаж, выводим номер этажа на форму программы. Функция PassangerPosition (приложение Г) выполняет данное действие. Затем убираем стрелку с направлением. Передаем параметр stop функции PointAction. Данный параметр заставляет убрать стрелки с формы программы. Выключаем кнопку в лифте. Передадим функции ButtounLift (приложение Г) параметр false, чтобы выключить кнопку в лифте. Прибавляем к таймеру время работы кнопки. Выводим значение таймера на форму программы.
Затем происходит открытие дверей лифта (рисунок 38). Чтобы открыть и закрыть двери, используется цикл for и функция DoorAction (приложение Г). Функция DoorAction принимает положительный параметр, чтобы открыть двери лифта. Схема данного алгоритма представлена на рисунке 38. Прибавляем к таймеру время работы лифта. Выводим значение таймер на форму программы. Когда двери лифта открылись, пассажир покидает лифт. Чтобы пассажир вышел из лифта, используется цикл for и функция PassengerAction (приложение Г). Функция PassengerAction принимает положительный параметр, чтобы пассажир вышел из лифта. Схема данного алгоритма представлена на рисунке 39. Прибавляем к таймеру время, которое затратил пассажир на выход из лифта. Выводим значение таймера на форму программы.
Рисунок 38. Схема алгоритма открытия дверей
Рисунок 39. Схема алгоритма передвижения пассажира на форме
Далее происходит закрытие дверей лифта. Функция DoorAction (приложение Г) принимает параметр, который не равен 1. И двери на форме начинают закрываться. Схема данного алгоритма такая же, как у открытия дверей. Прибавляем к таймеру время работы дверей. Выводим значение таймера на форму программы.
К счетчику пассажиров прибавляем единицу. Сравниваем количество пассажиров, которые проехали, и количество пассажиров, которые должны проехать. Функция прекращает работу, если достигнуто необходимое количество пассажиров, которые должные проехать на лифте.
На рисунке 40 показана структура программы. В главном файле Myform.h описывается форма программы, и она же служит для запуска функции, в которой происходит процесс моделирования. В данном файле происходит подключение заголовочных файлов классов, которые описаны выше. В каждом заголовочном файле класса присутствует подключение внешних стандартных файлов.
Рисунок 40. Структура программы
На рисунке 41 показана UML-диаграмма классов программы. На данной диаграмме показаны переменные, методы, объекты классов, а также связь классов программы.
Рисунок 41. UML-диаграмма классов
Класс MyForm изображен на рисунках 42 и 43.
Рисунок 42. Класс MyForm
Рисунок 43. Класс MyForm
ЗАКЛЮЧЕНИЕ
Этап проектирования является одним из главных этапов объектно-ориентированного программирования. Проектирование помогает исключить ряд проблем в архитектуре программного средства. Для проектирования программного средства был выбран язык UML. Данный язык имеет множество элементов, которые предоставляют возможность наиболее полно описать программную систему на этапе проектирования.
Важную роль в процессе разработки занимает правильная организация всего процесса. Придерживаясь этапов проектирования при разработке программной системы можно сэкономить время и исключить ошибки в программной системе.
Грамотный выбор среды разработки предостережет разработчика программной системы от мелких и крупных неприятностей в процессе разработки.
В проектной части КР было спроектировано и разработано программное средство для моделирования работы лифта, а также проведен эксперимент с его использованием. Написано руководство пользователя.
В ходе разработки использовался объектно-ориентированный подход. Это привело к сокращению времени разработки и повысило качество программного решения. Разработанная программа подходит как строительным фирмам, так и компаниям, которые занимаются проектированием подъемных устройств и предоставляет проектным организациям эффективное решение под различные задачи. Данная программа имеет ряд возможностей для её адаптации к реальным проблемам, стоящим перед предприятиями, которые занимаются проектированием и разработкой лифто-подъемного оборудования.
Тема КР является актуальной. Моделирование работы лифта позволяет определить множество параметров для наладки оптимальной работы подъемников в различных строениях. К примеру, разработанная программа позволяет рассчитать пассажирооборот за нужный промежуток времени, а при проектировании зданий – определить, имеется ли необходимость в дополнительном лифте, настроить оптимальную скорость лифта и т.п. Программа позволяет исключить дополнительные расходы, связанные с переналадками лифтового оборудования. У данного программного средства есть множество способов для улучшения, например, добавление различных параметров, в частности, добавление возможности регулировать очереди пассажиров, увеличение числа лифтов, масштабирование в облачный ресурс для быстрого доступа к программе через интернет и др.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Харви Д. Как программировать на C++ [Текст] / Харви Д, Пол Д – М.: ООО «Бином-Пресс», 2008. - 1456 с.
- Труб И. Объектно-ориентированное моделирование на C++ [Текст] –СПБ: Питер, 2006. - 411 с.
- Ларман К. Применение UML 2.0 и шаблонов проектирования. [Текст] — М.: ООО “И.Д. Вильямс”, 2013. — 736 с.
- Лешек А. Анализ и проектирование информационны
- х систем с помощью UML 2.0 [Текст] — М: ООО “И.Д. Вильямс”, 2008. — 816 с.
- Вирт Н. Алгоритмы и структуры данных [Текст] – М.: ДМК Пресс, 2010. – 272 с.
- Фаулер M. UML. Основы [Текст] – СПб.: Символ-Плюс, 2004. – 192 с.
- Гома Х. UML. Проектирование систем реального времени, параллельных и распределительных приложений. [Текст] – М.: ДМК Пресс, 2011. – 704 с.
- Арлоу Д.UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование. [Текст] – СПб.: Символ-Плюс, 2007. – 624 с.
- Страуструп Б. Программирование: принципы и практика с использованием С++. [Текст]- М.: ООО "И.Д. Вильяме", 2016. - 1328 с.
- Зиборов В. MS Visual C++ 2010 в среде .NET. Библиотека программиста. [Текст] — СПб.: Питер, 2012. — 320 с.
- Лафоре Р. Объектно-ориентированное программирование в С++. [Текст] - СПБ.: Питер, 2006. - 924 с.
- Прата C. Язык программирования C++. Лекции и упражнения. [Текст] — М.: ООО "И.Д. Вильяме", 2012. - 1248 с.
- Назаров С.В. Архитектура и проектирование программных систем [Текст] – М.: НИЦ Инфра-М, 2013. – 351 с.
- Брукс Ф. Проектирование процесса проектирования. Записки компьютерного эксперта [Текст] - М.: Вильямс, 2013. – 464 с.
- Культин Н. C/C++ в задачах и примерах [Текст] - СПБ.: БХВ-Петербург, 2009. — 351 с.
- Кёнинг Э. Эффективное программирование С++ [Текст] - М.: Издательский дом «Вильямс», 2002. – 386 с.
- Сидорина Т. Самоучитель Microsoft Visual Studio C++ и MFC [Текст] - СПБ.: БХВ-Петербург, 2009. — 848 с.
- Макконнелл С. Совершенный код. [Текст] - М.: Русская редакция, 2005. – 889 с.
- Стенли Л. Язык программирования С++ [Текст] - М.: Издательский дом «Вильямс», 2007. – 890 с.
- Годштейн С. Оптимизация приложений на платформе .NET [Текст] – М.: ДМК Пресс, 2014. – 524 с.
- Тепляков С. Паттерны проектирования на платформе .NET [Текст] - М.: Издательский дом «Вильямс», 2016. – 320 с.
- Вайсфельд М. Объектно-ориентированное мышление [Текст] –СПБ: Питер, 2014. - 304 с.
- Генри С. Алгоритмические трюки для программистов [Текст] - М.: Издательский дом «Вильямс», 2016. – 512 с.
- Клейнберг Дж. Алгоритмы: разработка и применение. [Текст] –СПБ: Питер, 2016. - 800 с.
- Колдаев В. Основы алгоритмизации и программирования [Текст] – М: ИД «ФОРУМ», 2006. - 416с.
- Шилд Г. Полный справочник по C++ [Текст] - М.: Издательский дом «Вильямс», 2006. – 791 с.
- Мейерс С. Эффективный и современный С++ [Текст] - М.: Издательский дом «Вильямс», 2016. – 306 с.
- Хортон А. Visual C++ 2010 Полный Курс. [Текст] — М.: Издательский дом «Вильямс», 2011. - 1216 с.
- Потопахин В. Современное программирование с нуля [Текст] – М.: ДМК Пресс, 2010. – 242 с.
- Вернон В. Реализация методов предметно-ориентированного проектирования. [Текст] — М.: Издательский дом «Вильямс», 2015. - 688 с.
- Эспозито Д. Microsoft .NET. Архитектура корпоративных приложений. [Текст] — М.: Издательский дом «Вильямс», 2015. - 432 с.
- Джейсон С. Элементарные шаблоны проектирования. [Текст] — М.: Издательский дом «Вильямс», 2013. - 533 с.
- Гради Б. Объектно-ориентированный анализ и проектирование с примерами приложений. [Текст] — М.: Издательский дом «Вильямс», 2008. - 721 с.
- Бабич А.В. Введение в UML [Текст] — М.: НОУ ИНТУИТ, 2016. - 209 c.
- Мацяшек Л.А. Анализ и проектирование информационных систем с помощью UML 2.0 [Текст] — М.: Издательский дом «Вильямс», 2008. - 816 с.
- Новиков Ф.А. Моделирование на UML: теория, практика [Текст] — СПб.: Профессиональная литература, 2010. — 640 с.
- Леоненков А. Объектно-ориентированный анализ и проектирование с использованием UML и IBM Rational Rose [Текст] — М.: НОУ ИНТУИТ, 2006. - 209 c.
- Йордон Э. Объектно-ориентированный анализ и проектирование систем [Текст] — М.: Лори, 2014. - 264 c.
- Кормен Т. Алгоритмы. Построение и анализ [Текст] — М.: Издательский дом «Вильямс», 2015. - 1368 с.
- Скиена С. Алгоритмы. Руководство по разработке [Текст] - СПБ.: БХВ-Петербург, 2011. — 720 с.
Листинг класса button.
#pragma once
// подключение заголовочных файлов
#include <windows.h>
#include <iostream>
using namespace std; //объявление пространства имен std
// класс button
class button {
public:
bool status; // нажата ли кнопка
button(bool p) { status = p; } // конструктор класса
void showstatus(int fl) {
// функция для отображения состояния кнопки в лифте
if (status == true) {// если кнопка нажата
cout << " Кнопка " << fl << " этажа включена" << endl; // вывод результата в консоли
}
else {// если не нажата
cout << " Кнопка " << fl << " этажа выключена" << endl;// вывод результата в консоли
}
}
void setstatus(bool p, int fl) {
// функция для задания состояния кнопки в лифте
status = p; // установка статуса кнопки
showstatus(fl); // вывод положение кнопки
}
void showstatusfloor(int fl) {
// функция для отображения состояния кнопки на этаже
if (status == true) { // если кнопка нажата
cout << " Кнопка вызова лифта включена на " << fl << " этаже" << endl;// вывод результата в консоли
}
else { // если кнопка не нажата
cout << " Кнопка вызова лифта выключена на " << fl << " этаже" << endl;// вывод результата в консоли
}
}
void setstatusfloor(bool p, int fl) {
// функция для задания состояния кнопки на этаже
status = p; // установка статуса кнопки
showstatusfloor(fl); // вывод положение кнопки
}
};
Листинг класса man.
#pragma once
// подключение заголовочных файлов
#include <windows.h>
#include <iostream>
using namespace std; //объявление пространства имен std
// класс man
class man {
public:
int pos; // этаж пассажира
bool enter;// позиция пассажиры
// man() { }
man(int p) { pos = p; }// конструктор класса
void print() {
// функция для отображения информации о положении пассажира
cout << " Человек на " << pos << " этаже" << endl; // вывод результата в консоли
}
void pressButton() {
// функция для отображения информации о нажатии кнопки лифта
cout << " Пассажир нажал на кнопку" << endl; // вывод результата в консоли
}
void enterToElevator() {
// функция для отображения информации о входе пассажира в лифт
cout << " Человек входит в лифт " << endl;// вывод результата в консоли
enter = true; // пассажир внутри лифта
}
void exitToElevator() {
// функция для отображения информации о выходе пассажира из лифта
cout << " Человек выходит из лифта " << endl;// вывод результата в консоли
enter = false; // пассажир вышел лифта
}
};
Листинг класса elevator.
#pragma once
// подключение заголовочных файлов