на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Класс "Грузовой лифт"
i>

Далее приведены заголовочные h -файлы с комментариями.

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

class load

{

int first_floor;//начальный этаж

int last_floor;//конечный этаж

float weight_load;//вес груза

float pas_weight;//вес пассажира

bool in_lift;//в лифте

bool out_lift;//вне лифта

public:

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

void put_first(int floor);//установка начального этажа

void put_last(int floor);//установка конечного этажа

void put_load(float car);//установка веса груза

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();//работа лифта

};

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

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

void global_turning()

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

void lift::global_tuning()

{

clrscr();

float f_number=0;

int i_number=0;

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

do

{

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

cin>>f_number;

if(f_number<=0)

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

} 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<<"Превышение грузоподъемности должно быть положительным"<<endl;

} while (f_number<0);

put_excess(f_number);

}

do

{

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

cin>>i_number;

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

} 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<a)

{

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<<"Ввод необходимых данных!"<<endl;

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

cin>>i_number;

put_load(i_number);

for(int i=0; i<qual; i++)

{

cout<<i+1<<"-ый вызов:"<<endl;

do

(i_number>get_h()))

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

while((i_number<=0)||(i_number>get_h()));

cargo[i].put_first(i_number);

do

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

cin>>i_number;

if((i_number<=0) while((i_number<=0)||(i_number>get_h())||(i_number==cargo[i].get_first()));

cargo[i].put_last(i_number);

do

{

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

cin>>f_number;

if(f_number<0)

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

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

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

} while((f_number<=0)||(f_number>get_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<<"Перегрузка!!! Один человек должен выйти!!!"<<endl;

do

{

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

cin>>i_number;

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

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

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<qual)) j++;

first=cargo[j].get_first();

last=cargo[j].get_last();

entry(cargo[j]);

}

if(over_l==false)

{

for(int i=0;i<qual;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<qual;i++)//есть ли вызовы на промежуточных этажах

{

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

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

last=cargo[i].get_last();

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

(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<qual; i++)//есть ли вызовы на промежуточных этажах

{

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

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

last=cargo[i].get_last();

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

(cargo[i].get_first()<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<qual; i++)//хочет ли кто-нибудь выйти на данном этаже

{

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

{

out(cargo[i]);

}

}

if(over_l==false)

{

for(i=0;i<qual;i++)//есть ли вызовы на данном этаже

{

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

{

entry(cargo[i]);

}

}

}

j=0;

while((cargo[j].get_in()==false)&&(j<qual)) j++;

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

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

for(i=0; i<qual; 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<qual)) 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'");

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.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-да)"<<endl;

ch=getch();

} while (ch==121);

}

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

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

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

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

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

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

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

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

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

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

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

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

1-й вызов:

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

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

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

2-й вызов:

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

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

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

3-й вызов:

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

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

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

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

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

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

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

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

Вид экрана в момент перегрузки лифта (см. рис. 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 с.

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.