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();
};
Класс имеет следующие члены-данные:
first_floor – этаж, на котором находится груз перед отправкой;
last_floor – этаж, на котором должен оказаться груз;
weight_load – вес груза;
pas_weight – вес пассажира, сопровождающего груз;
in_lift – нахождение груза в лифте;
out_lift – нахождение груза вне лифта.
В классе определены операции установки и возврата значений членов-данных.
На базе предыдущих двух классов получим класс «грузовой лифт». Описание класса приведено ниже:
class car_lift: public lift
{
load *cargo;//массив грузов
int qual;//количество вызовов
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();
В классе определены члены-данные:
сargo – массив элементов класса «груз»;
qual – количество человек вызовов лифта.
Над членами-данными класса определены следующие операции:
· установка количества пассажиров, ожидающих лифт;
· ввод данных для работы лифта;
· изменение членов-данных класса в связи со входом пассажира в лифт;
· изменение членов-данных класса в связи с выходом пассажира из лифта;
· изменение членов-данных класса в связи с перегрузкой лифта;
· движение лифта.
Диаграмма классов показывает классы и их отношения, тем самым, представляя логический аспект проекта. Отдельная диаграмма классов представляет определенный ракурс структуры классов. На стадии анализа используются диаграммы классов, чтобы выделить общие роли и обязанности сущностей, обеспечивающих требуемое поведение системы. На стадии проектирования пользуются диаграммой классов, чтобы передать структуру классов, формирующих архитектуру системы.
Два главных элемента диаграммы классов - это классы и их основные отношения.
Основные атрибуты и функции данных классов, а также их взаимосвязь и иерархию удобно показать на диаграмме классов (рисунок 2.1).
Рис. 2.1 – Диаграмма классов для объекта «грузовой лифт»
2.2 Построение диаграммы модулей
Диаграмма модулей показывает распределение классов и объектов по модулям в физическом проектировании системы. Каждая отдельная диаграмма модулей представляет некоторый ракурс структуры модулей системы. При разработке мы используем диаграмму модулей, чтобы показать физическое деление нашей архитектуры по слоям и разделам. Основными элементами диаграммы модулей являются модули и их зависимости.
Единственная связь, которая может существовать между двумя модулями, - компиляционная зависимость - представляется стрелкой, выходящей из зависимого модуля. В C++ такая зависимость указывается директивой #include. В множестве компиляционных зависимостей не могут встречаться циклы. Чтобы определить частичную упорядоченность компиляций, достаточно выполнить частичное упорядочение структуры модулей системы.
На рисунке 2.2 показана диаграмма модулей для нашей задачи.
Рис. 2.2 – Диаграмма модулей
Далее приведены заголовочные h –файлы с комментариями.
Заголовочный файл класса «груз»:
class load
int first_floor;//начальный этаж
int last_floor;//конечный этаж
float weight_load;//вес груза
float pas_weight;//вес пассажира
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;//активация безопасности
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();//настройка лифта
Заголовочный файл класса «грузовой лифт»:
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();//работа лифта
Далее приведено описание структур данных и функций используемых классов.
Функция используется для глобальной настройки работы лифта. Пример реализации функции приведён ниже:
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)
cout<<"Допустимое превышение грузоподъемности(кг): ";
if(f_number<0)
cout<<"Превышение грузоподъемности должно быть положительным"<<endl;
} while (f_number<0);
put_excess(f_number);
}
cout<<"Количество этажей в здании: ";
if(i_number>25) cout<<"Количество этажей должно быть меньше 25"<<endl;
} while (i_number>25);
put_h(i_number);
cout<<"Останавливаться на промежуточных этажах?('да'-1) ";
if(i_number==1) put_stop(true);
else put_stop(false);
В данной реализации производится проверка вводимых значений, чтобы избежать некорректных данных. Например, грузоподъёмность лифта должна быть положительной (больше 0), а количество этажей в здании, в котором эксплуатируется лифт, меньше 25 (это связано демонстрационной программой).
Функция используется для подъёма кабины лифта с этажа 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++)
Страницы: 1, 2, 3