47360 (608233), страница 2

Файл №608233 47360 (Класс "Грузовой лифт") 2 страница47360 (608233) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

void put_in(bool in);//установка нахождения груза в лифте

void put_out(bool out);//установка нахождения груза вне лифта

int get_first();//возврат начального этажа

int get_last();//возврат конечного этажа

float get_load();//возврат веса груза

float get_pweight();//возврат веса пассажира

bool get_in();//возврат нахождения груза в лифте

bool get_out();//возврат нахождения груза вне лифта

};

Заголовочный файл класса «лифт»:

class lift

{

float weight;//грузоподъемность

int height;//кол-во этажей

bool stop;//остановка на промежуточных этажах

float weight_load;//вес груза и пассажиров в лифте

float exc_weight;//превышение грузоподъемности

bool safety;//активация безопасности

public:

lift();//конструктор

void put_weight(float weigh);//установка грузоподъемности

void put_h(int h);//установка количества этажей

void put_stop(bool stp);//установка политики обслуживания

(останавливаться ли на промежуточных этажах)

void put_wload(float weigh);//установка веса груза и пассажиров в лифте

void put_excess(float exc);//установка превышения грузоподъемности

void put_safety(bool saf);//установка безопасности

float get_weight();//возврат грузоподъемности

int get_h();//возврат количества этажей

bool get_stop();//возврат политики обслуживания

float get_wload();//возврат веса груза и пассажиров в лифте

float get_excess();//возврат превышения грузоподъемности

bool get_safety();//возврат безопасности

void global_tuning();//настройка лифта

};

Заголовочный файл класса «грузовой лифт»:

class car_lift: public lift

{

load *cargo;//массив грузов

int qual;//количество вызовов

public:

car_lift();

~car_lift();

int get_first(int k);//возврат начального этажа

int get_last(int k);//возврат конечного этажа

float get_load(int k);//возврат веса груза

float get_pweight(int k);//возврат веса пассажира

bool get_in(int k);//возврат нахождения груза в лифте

bool get_out(int k);//возврат нахождения груза вне лифта

void put_load(int ql);//установка количества вызовов

void turning();//ввод данных для работы лифта

void entry(load &l);//вход пассажира из лифта

void out(load &l);//выход пассажира из лифта

void overl(int floor);//временный выход пассажира в связи с перегрузкой

void work();//работа лифта

};

    1. Описание структур данных

Далее приведено описание структур данных и функций используемых классов.

  • void global_turning()

Функция используется для глобальной настройки работы лифта. Пример реализации функции приведён ниже:

void lift::global_tuning()

{

clrscr();

float f_number=0;

int i_number=0;

cout<<"Глобальная настройка работы лифта:"<

do

{

cout<<"Грузоподъемность лифта(кг): ";

cin>>f_number;

if(f_number<=0)

cout<<"Грузоподъемность должна быть больше 0"<

} while (f_number<=0);

put_weight(f_number);

cout<<"Активировать безопасность?('да'-1) ";

cin>>i_number;

if(i_number==1) put_safety(true);

else put_safety(false);

if(get_safety()==false)

{

do

{

cout<<"Допустимое превышение грузоподъемности(кг): ";

cin>>f_number;

if(f_number<0)

cout<<"Превышение грузоподъемности должно быть положительным"<

} while (f_number<0);

put_excess(f_number);

}

do

{

cout<<"Количество этажей в здании: ";

cin>>i_number;

if(i_number>25) cout<<"Количество этажей должно быть меньше 25"<

} while (i_number>25);

put_h(i_number);

cout<<"Останавливаться на промежуточных этажах?('да'-1) ";

cin>>i_number;

if(i_number==1) put_stop(true);

else put_stop(false);

}

В данной реализации производится проверка вводимых значений, чтобы избежать некорректных данных. Например, грузоподъёмность лифта должна быть положительной (больше 0), а количество этажей в здании, в котором эксплуатируется лифт, меньше 25 (это связано демонстрационной программой).

  • int up(int a, int b)

Функция используется для подъёма кабины лифта с этажа a на этаж b. Пример реализации функции приведён ниже:

int up(int a, int b)

{

char num[10];

delay(4000);

setcolor(0);

outtextxy(25,47,"Двери открыты!");

int x=5+(a-1)*25;

for(int i=a;i<=b;i++)

{

setcolor(15);

itoa(i,num,10);

outtextxy(x+6,15,num);

if(i>a)

{

setcolor(8);

itoa(i-1,num,10);

outtextxy(x-19,15,num);

}

x+=25;

delay(2000);

}

setcolor(15);

rectangle(5,40,150,60);

setcolor(15);

outtextxy(25,47,"Двери открыты!");

return b;

}

В данной реализации функция лишь подсвечивает номера этажей во время движения. А после прибытия лифта подсвечивает надпись «Двери открыты!».

  • int down(int a, int b)

Функция используется для спуска кабины лифта с этажа a на этаж b. Пример реализации функции приведён ниже:

int down(int a, int b)

{

char num[10];

delay(4000);

setcolor(0);

outtextxy(25,47,"Двери открыты!");

int x=5+(a-1)*25;

for(int i=a;i>=b;i--)

{

setcolor(15);

itoa(i,num,10);

outtextxy(x+6,15,num);

if(i

{

setcolor(8);

itoa(i+1,num,10);

outtextxy(x+31,15,num);

}

x-=25;

delay(2000);

}

setcolor(15);

rectangle(5,40,150,60);

setcolor(15);

outtextxy(25,47,"Двери открыты!");

return b;

}

Функция идентична функции подъёма лифта.

  • void turning()

Функция используется для ввода данных необходимых для работы лифта. Пример реализации функции приведён ниже:

void car_lift::turning()

{

float f_number=0;

int i_number=0;

cout<<"Ввод необходимых данных!"<

cout<<"Введите количество человек, ожидающих лифт: ";

cin>>i_number;

put_load(i_number);

for(int i=0; i

{

cout<

do

{

cout<<"Начальный этаж: ";

cin>>i_number;

if((i_numberget_h()))

cout<<"В этом доме нет такого этажа!"<

} while((i_numberget_h()));

cargo[i].put_first(i_number);

do

{

cout<<"Конечный этаж: ";

cin>>i_number;

if((i_numberget_h()))

cout<<"В этом доме нет такого этажа!"<

if(i_number==cargo[i].get_first())

cout<<"Этому грузу не надо никуда ехать!"<

} while((i_numberget_h())||(i_number==cargo[i].get_first()));

cargo[i].put_last(i_number);

do

{

cout<<"Вес груза(кг): ";

cin>>f_number;

if(f_number<0)

cout<<"Вес должен быть положительным!"<

if(f_number>get_weight()-cargo[i].get_pweight())

cout<<"Лифт не сможет поднять этот груз!"<

} while((f_numberget_weight()-cargo[i].get_pweight()));

cargo[i].put_load(f_number);

}

}

В данной реализации производится проверка вводимых значений, чтобы избежать некорректных данных. Например, задаваемые этажи должны быть в диапазоне от 1 до последнего в данном здании, начальный и конечный этажи не должны совпадать, вес сопровождаемого груза должен быть больше нулевого и суммарный вес груза и сопровождающего его человека не должен быть больше грузоподъёмности лифта.

  • void entry(load &l)

Функция осуществляет изменение членов данных класса в связи со входом пассажира в лифт. Пример реализации функции приведён ниже:

void car_lift::entry(load &l)

{

l.put_in(true);

l.put_out(false);

put_wload(get_wload()+l.get_pweight()+l.get_load());

}

В данной реализации функция записывает значение «истина» в поле, определяющее нахождение данного груза в лифте и значение «ложь» - в поле, определяющее нахождение данного груза вне лифта. В поле, определяющее вес груза и пассажира в лифте, функция суммирует предыдущий вес, вес вошедшего пассажира и сопровождаемого груза.

  • void out(load &l)

Функция осуществляет изменение членов данных класса в связи с выходом пассажира из лифта. Пример реализации функции приведён ниже:

void car_lift::out(load &l)

{

l.put_in(false);

l.put_out(false);

put_wload(get_wload()-l.get_pweight()-l.get_load());

}

В данной реализации функция записывает значение «ложь» в поле, определяющее нахождение данного груза в лифте и значение «ложь» - в поле, определяющее нахождение данного груза вне лифта. В поле, определяющее вес груза и пассажира в лифте, функция записывает значение, полученное при вычитании из предыдущего веса вес вышедшего пассажира и сопровождаемого груза.

  • void overl(int floor)

Функция осуществляет изменение членов-данных класса в связи с временным выходом пассажира из лифта из-за перегрузки. Пример реализации функции приведён ниже:

void car_lift::overl(int floor)

{

grow_overl();

closegraph();

int i_number;

bool buf=true;

cout<<"Перегрузка!!! Один человек должен выйти!!!"<

do

{

cout<<"Введите номер пассажира, который выйдет"<

cin>>i_number;

buf=cargo[i_number-1].get_in();

if(cargo[i_number-1].get_in()==false) cout<<"Такого пассажира в лифте нет!"<

else

{

cargo[i_number-1].put_in(false);

cargo[i_number-1].put_out(true);

cargo[i_number-1].put_first(floor);

put_wload(get_wload()-cargo[i_number-1].get_pweight()-cargo[i_number1].get_load());

}

} while(buf==false);

init_graph();

grow(get_h());

}

  • void work()

Функция осуществляет работу лифта в зависимости от глобальной настройки и входных данных. Пример реализации функции приведён ниже:

void car_lift::work()

{

int first;

int last;

int sum=0;

int i_number;

int j;

bool over_l=false;

grow(get_h());

do

{

sum=0;

if(get_wload()==0)//груза в лифте нет

{

j=0;

while((cargo[j].get_out()==false)&&(j

first=cargo[j].get_first();

last=cargo[j].get_last();

entry(cargo[j]);

}

if(over_l==false)

{

for(int i=0;i

{

if((cargo[i].get_out()==true)&&(cargo[i].get_first()==first))

entry(cargo[i]);

}

}

if(last>first)//движение на подъем

{

if(get_stop()==true)

{

for(int i=0;i

{

if((cargo[i].get_in()==true)&&(cargo[i].get_last()

(cargo[i].get_last()>first))

last=cargo[i].get_last();

if((cargo[i].get_out()==true)&&(cargo[i].get_first()

(cargo[i].get_first()>first))

last=cargo[i].get_first();

}

}

if (get_wload()>get_weight())//проверка на перегрузку

{

overl(first);

over_l=true;

}

else

{

first=up(first,last);//подъем

over_l=false;

}

}

else//движение на спуск

{

if(get_stop()==true)

{

for(int i=0; i

{

if((cargo[i].get_in()==true)&&((cargo[i].get_last()>last)&&

(cargo[i].get_last()

last=cargo[i].get_last();

if((cargo[i].get_out()==true)&&((cargo[i].get_first()>last)&&

(cargo[i].get_first()

last=cargo[i].get_first();

}

}

if(get_wload()>get_weight())//проверка на перегрузку

{

overl(first);

over_l=true;

}

else

{

first=down(first,last);//спуск

over_l=false;

}

}

for(int i=0; i

{

if((cargo[i].get_in()==true)&&(cargo[i].get_last()==first))

{

out(cargo[i]);

}

}

if(over_l==false)

{

for(i=0;i

{

if((cargo[i].get_out()==true)&&(cargo[i].get_first()==first))

{

entry(cargo[i]);

}

}

}

j=0;

while((cargo[j].get_in()==false)&&(j

last=cargo[j].get_last();//определение следующего этажа,

//если в лифте есть груз

for(i=0; i

if((cargo[i].get_out()==true)||(cargo[i].get_in()==true)) sum++;

if((get_wload()==0)&&(sum>0))//определение движения,

//если в лифте нет груза

{

j=0;

while((cargo[j].get_out()==false)&&(j

last=cargo[j].get_first();

if(last>first) up(first,last);

else down(first,last);

}

} while(sum>0);//пока есть вызовы

delay(2000);

outtextxy(25,70,"Работа завершена! Нажмите 'Enter'");

}

В данной реализации функция определяет порядок обслуживания вызовов в зависимости от глобальной настройки лифта и входных данных. Работа лифта задаётся циклом с операциями в следующем порядке:

  1. задаётся направление движения лифта;

  2. проверяется наличие вызовов на данном этаже;

  3. проверяется, есть ли груз, для которого этот этаж конечный;

  4. проверяется наличие вызовов на промежуточных этажах;

  5. проверяется превышение грузоподъёмности;

  6. осуществляется движение.

Цикл выполняется до тех пор, пока не будут обслужены все вызовы.

    1. Инструкция программисту

При написании класса «грузовой лифт» были использованы следующие классы:

  • класс «груз», описывающий основные функции объекта «груз для перевозки». Этот класс используется для создания массива вызовов для грузового лифта;

  • класс «лифт», описывающий основную функциональность лифта. Этот класс наследуется классом «грузовой лифт» с добавлением членов-данных и членов функций.

Класс «грузовой лифт» предназначен для определения порядка обслуживания вызовов в зависимости от глобальной настройки лифта. Для наглядности кода был определён новый тип данных – bool, для работы с логическими переменными.

Особое требование при работе с классом: так как функция work() работает в графическом режиме, необходимо вызывать функцию init_graph() перед вызовом функции work().

  1. Демонстрационная программа

    1. Текст программы

Далее приведена программа, демонстрирующая работу грузового лифта. Программа находится в файле lift_main.cpp.

void main()

{

clrscr();

int i_number=0;

int ch;

car_lift elevator;

elevator.global_tuning();

do

{

elevator.turning();

init_graph();

elevator.work();

getch();

closegraph();

cout<<"Продолжить работу?(y-да)"<

ch=getch();

} while (ch==121);

}

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

Программа демонстрирует работу грузового лифта. Для начала работы необходимо запустить файл lift_main.exe. После чего, следуя указаниям программы, необходимо произвести настройку работы лифта (эта настройка будет действовать в течение всей работы программы) и ввести исходные данные для работы. После завершения работы с одними данными, можно продолжить работу, введя новые. При вводе некорректной информации, программа выдаст предупреждение и можно будет повторить ввод. Для изменения настроек лифта, необходимо запустить программу заново.

  1. Тестовый пример

После запуска файла lift_main.exe необходимо произвести настройку лифта:

Глобальная настройка работы лифта:

Грузоподъемность лифта (кг): 500

Активировать безопасность? ('да'-1) 1

Количество этажей в здании: 15

Останавливаться на промежуточных этажах? ('да'-1) 1

Затем ввести необходимые данные:

Ввод необходимых данных!

Введите количество человек, ожидающих лифт: 3

1-й вызов:

Начальный этаж: 1

Конечный этаж: 3

Вес груза (кг): 200

2-й вызов:

Начальный этаж: 2

Конечный этаж: 5

Вес груза (кг): 100

3-й вызов:

Начальный этаж: 2

Конечный этаж: 8

Вес груза (кг): 100

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

  1. Вид экрана во время движения лифта (см. рис. 5.1)

Рис. 5.1 - Движение лифта

  1. Вид экрана во время остановки лифта (см. рис. 5.2)

Рис. 5.2 – Остановка лифта

  1. Вид экрана в момент перегрузки лифта (см. рис. 5.3)

Рис. 5.3 – Перегрузка лифта

Результаты работы программы:

Движение лифта: 1 – 2;

Перегрузка!!! Один человек должен выйти!!!

Введите номер пассажира, который выйдет: 1

2 – 5; 5 – 8; 8 – 2; 2 – 3.

Заключение

В курсовой работе был создан класс «грузовой лифт», путём наследования от класса «лифт» и использования экземпляра класса «груз». На базе созданного класса была написана демонстрационная программа, показывающая работу грузового лифта в графическом режиме. Класс «грузовой лифт» может быть настроен на конкретные условия работы. Параметрами настройки служат:

  • грузоподъёмность лифта;

  • высота здания, в котором эксплуатируется лифт;

  • политика обслуживания вызовов (останавливаться ли на промежуточных этажах);

  • активация безопасного режима работы.

В классе продумана оптимизация работы лифта, которая базируется не только на скорости работы, но и на удобстве пассажиров.

Список использованных источников

1. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд./ Пер. с англ.- М.: БИНОМ, 560 с.

2. Климова Л.М. Основы практического программирования на языке С++ -М.: “Издательство ПРИОР”, 1999, 464с.

3. Шилдт Г. Самоучитель С++: Пер. с англ. - 3-е изд. – СПб.: БХВ-Петербург, 2004, 688 с.

Характеристики

Тип файла
Документ
Размер
2,04 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7028
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее