Клас Вантажний ліфт

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти Російської Федерації
Тульський державний університет
Кафедра автоматики і телемеханіки

Клас «Вантажний ліфт»

Пояснювальна записка

до контрольно-курсової роботі

з курсу «Об'єктно-орієнтоване програмування»

Виконала: студентка групи 220622
Павликова М. В.
Перевірив: доцент кафедри АТМ
Середін О. С.

Тула 2004


Анотація

В контрольно-курсовій роботі розглянуто задачу створення класу «вантажний ліфт» та опису операцій над даними класом. Це завдання було спроектована з використанням концепцій об'єктно-орієнтованого програмування і реалізована на мові програмування С + +. Пояснювальна записка містить 26 аркушів, 5 рисунків та 3 використаних джерела.

Зміст

Стор. "1-3"
Введення ................................................. .................................................. ........ 3
Постановка завдання ................................................ .......................................... 5
Побудова абстрактної моделі класу «вантажний ліфт »........................... 6
2.1 Побудова діаграми класів .............................................. ................. 9
2.2 Побудова діаграми модулів .............................................. .............. 10
Структура класу «вантажний ліфт »............................................ ................. 11
3.1Формальное опис класу .............................................. .................... 11
3.2 Опис структур даних .............................................. ....................... 13
3.3 Інструкція програмісту ............................................... ...................... 21
Демонстраційна програма ................................................ ..................... 22
4.1Текст програми ............................................... ....................................... 22
4.2 Інструкція користувачеві ............................................... ....................... 22
Тестовий приклад ................................................ ........................................... 23
Висновок ................................................. .................................................. . 25
Список використаних джерел ............................................... ............. 26

Введення

Об'єктно-орієнтоване програмування - це новий підхід до створення програм. У міру розвитку обчислювальної техніки виникали різні методики програмування. На кожному етапі створювався новий підхід, який допомагав програмістам справлятися зі зростаючим ускладненням програм. Перші програми створювалися за допомогою ключових перемикачів на передній панелі комп'ютера. Очевидно, що такий спосіб підходить тільки для дуже невеликих програм. Потім був винайдений мова асемблера, який дозволяв писати більш довгі програми. Наступний крок був зроблений в 1950 році, коли був створений перший мова високого рівня Фортран.
Використовуючи мову високого рівня, програмісти могли писати програми до декількох тисяч рядків довжиною. Для того часу зазначений підхід до програмування був найбільш перспективним. Однак мова програмування, легко зрозумілий у коротких програмах, коли справа стосувалася великих програм, ставав нечитабельним (і некерованим). Позбавлення від таких неструктурованих програм прийшло після винаходу в 1960 році мов структурного програмування. До них відносяться мови Алгол, Паскаль, і С. Структурне програмування на увазі точно зазначені керуючі структури, програмні блоки, відсутність (або, принаймні, мінімальне використання) інструкцій GOTO, автономні підпрограми, в яких підтримується рекурсія та локальні змінні. Суттю структурного програмування є можливість розбиття програми на складові елементи. Використовуючи структурне програмування, програміст може створювати і підтримувати програми понад 50000 рядків довгою.
Хоча структурне програмування, при його використанні для написання помірно складних програм, принесло видатні результати, навіть воно виявлялося неспроможним тоді, коли програма досягала певної довжини. Щоб написати більш складну програму, необхідний був новий підхід до програмування. У результаті були розроблені принципи об'єктно-орієнтованого програмування. ООП акумулює найкращі ідеї, втілені в структурному програмуванні, і поєднує їх з потужними новими концепціями, які дозволяють оптимально організовувати ваші програми. Об'єктно-орієнтоване програмування дозволяє вам розкласти проблему на складові частини. Кожна складова стає самостійним об'єктом, який містить свої власні коди і дані, які відносяться до цього об'єкту. У цьому випадку вся процедура в цілому спрощується, і програміст отримує можливість оперувати з набагато більшими за обсягом програмами.
Всі мови ООП засновані на трьох основоположних концепціях, званих інкапсуляцією, поліморфізмом і спадкоємством:
Інкапсуляція - це механізм, який об'єднує дані і код, який маніпулює з цими даними, а також захищає і те, і інше від зовнішнього втручання або неправильного використання.
Поліморфізм - це властивість, яка дозволяє одне і те ж ім'я використовувати для вирішення двох або більш схожих, але технічно різних завдань. Метою поліморфізму, стосовно об'єктно-орієнтованого програмування, є використання одного імені для завдання загальних для класу дій.
Спадкування - це процес, за допомогою якого один об'єкт може набувати властивостей іншого. Точніше, об'єкт може успадковувати основні властивості іншого об'єкту і додавати до них риси, характерні тільки для нього.
В контрольно-курсової роботі реалізуємо клас «вантажний ліфт». Ліфти можна підрозділяти по безлічі ознак, наприклад: вантажні і легкові, пасажирські та непассажірскіе і т. д. У даному випадку буде написаний клас для демонстрації роботи ліфта для перевезення вантажу в супроводі людини. Як параметри роботи ліфта будуть використані: вантажопідйомність, політика обслуговування запитів (зупинятися чи на проміжних поверхах), кількість поверхів у будинку та активація безпечного режиму роботи. Даний клас може бути використаний в апаратурі управління ліфтом, тому що може бути налаштований на конкретні умови роботи. В якості демонстраційної програми покажемо порядок виконання запитів при різних настройках ліфта і різних вхідних даних.

1. Постановка завдання

Потрібно створити клас «ліфт», в якому буде реалізована базова функціональність ліфта, а потім створити похідний від нього клас «вантажний ліфт». Клас повинен бути налаштованим на конкретні умови роботи. Параметрами такого налаштування можуть бути: кількість поверхів у будинку, політика обслуговування запитів, вантажопідйомність ліфта і т. д. Мають бути продумані питання безпеки й оптимізації роботи ліфта.

2. Побудова абстрактної моделі

класу «вантажний ліфт»

На початку роботи створено базовий клас «ліфт», який реалізує основну функціональність ліфта.
Паралельно з базовим класом створено клас «вантаж» з наступними членами класу:
· Поверх, на якому знаходиться вантаж;
· Поверх, на якому йому потрібно опинитися;
· Вага вантажу.
На базі класів «ліфт» і «вантаж» створимо клас «вантажний ліфт». Цей клас будемо наслідувати від класу «ліфт», а одним з членів цього класу буде масив з елементів класу «вантаж».
Наведемо опис класу «ліфт»:
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 ();
};
Клас має наступні члени-дані:
weight - вантажопідйомність ліфта;
height - висота будинку, в якому експлуатується ліфт (кількість поверхів);
stop - політика обслуговування запитів (зупинятися чи на проміжних поверхах);
weight_pas - вага пасажирів і вантажу, що знаходяться в ліфті;
exc_weight - припустиме перевищення вантажопідйомності ліфта;
safety - активація безпечної роботи ліфта.
Також у класі визначено такі операції над членами-даними:
· Установка і повернення значень членів-даних;
· Настройка ліфта перед запуском в експлуатацію;
· Підйом і спуск кабіни ліфта;
· Підсвічування датчиків положення ліфта на поверсі, відкриття дверей та повідомлення про перевантаження.
Далі наведемо опис класу «вантаж»:
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 ();
};
Клас має наступні члени-дані:
first_floor - поверх, на якому знаходиться вантаж перед відправкою;
last_floor - поверх, на якому повинен виявитися вантаж;
weight_load - вага вантажу;
pas_weight - вага пасажира, що супроводжує вантаж;
in_lift - знаходження вантажу в ліфті;
out_lift - знаходження вантажу поза ліфта.
У класі визначено операції установки і повернення значень членів-даних.
На базі попередніх двох класів отримаємо клас «вантажний ліфт». Опис класу наведено нижче:
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 ();
};
У класі визначені члени-дані:
Сargo - масив елементів класу «вантаж»;
qual - кількість осіб викликів ліфта.
Над членами-даними класу визначені наступні операції:
· Установка кількості пасажирів, які очікують ліфт;
· Введення даних для роботи ліфта;
· Зміна членів-даних класу у зв'язку з входом пасажира в ліфт;
· Зміна членів-даних класу у зв'язку з виходом пасажира з ліфта;
· Зміна членів-даних класу у зв'язку з перевантаженням ліфта;
· Рух ліфта.

2.1 Побудова діаграми класів

Діаграма класів показує класи і їхні відносини, тим самим, представляючи логічний аспект проекту. Окрема діаграма класів становить певний ракурс структури класів. На стадії аналізу використовуються діаграми класів, щоб виділити загальні ролі і обов'язки сутностей, що забезпечують необхідну поведінку системи. На стадії проектування користуються діаграмою класів, щоб передати структуру класів, формують архітектуру системи.
Два головних елемента діаграми класів - це класи і їх основні відносини.
Основні атрибути та функції даних класів, а також їх взаємозв'язок та ієрархію зручно показати на діаграмі класів (рисунок 2.1).

Рис. 2.1 - Діаграма класів для об'єкта «вантажний ліфт»
2.2 Побудова діаграми модулів
Діаграма модулів показує розподіл класів та об'єктів по модулях у фізичному проектуванні системи. Кожна окрема діаграма модулів представляє певний ракурс структури модулів системи. При розробці ми використовуємо діаграму модулів, щоб показати фізичне поділ нашої архітектури по шарах і розділах. Основними елементами діаграми модулів є модулі та їх залежності.
Єдиний зв'язок, яка може існувати між двома модулями, - компіляційний залежність - представляється стрілкою, що виходить із залежного модуля. У C + + така залежність вказується директивою # include. У безлічі компіляційний залежностей не можуть зустрічатися цикли. Щоб визначити часткову упорядкованість компіляцій, досить виконати часткове впорядкування структури модулів системи.
На малюнку 2.2 показана діаграма модулів для нашої задачі.

Рис. 2.2 - Діаграма модулів

3. Структура класу «вантажний ліфт»

3.1 Формальний опис класу

Далі наведені заголовні 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
{
cout <<"Початковий поверх:";
cin>> i_number;
if ((i_number <= 0) | | (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) | | (i_number> get_h ()))
cout <<"У цьому будинку немає такого поверху!" <<endl;
if (i_number == cargo [i]. get_first ())
cout <<"Цьому вантажу не треба нікуди їхати!" <<endl;
} 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'");
}
У даній реалізації функція визначає порядок обслуговування викликів в залежності від глобальної налаштування ліфта і вхідних даних. Робота ліфта задається циклом з операціями в наступному порядку:
1. задається напрямок руху ліфта;
2. перевіряється наявність викликів на даному поверсі;
3. перевіряється, чи є вантаж, для якого цей поверх кінцевий;
4. перевіряється наявність викликів на проміжних поверхах;
5. перевіряється перевищення вантажопідйомності;
6. здійснюється рух.
Цикл виконується до тих пір, поки не будуть обслужені всі виклики.

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
Третій виклик:
Початковий поверх: 2
Кінцевий поверх: 8
Вага вантажу (кг): 100
Під час роботи програми на екрані з'являється наступна картинка:
1. Вид екрану під час руху ліфта (див. рис. 5.1)

Рис. 5.1 - Рух ліфта
2. Вид екрану під час зупинки ліфта (див. рис. 5.2)

Рис. 5.2 - Зупинка ліфта
3. Вид екрану в момент перевантаження ліфта (див. рис. 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 с.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
56.4кб. | скачати


Схожі роботи:
Ваговимірювальне обладнання електронне Вантажний промисловий ліфт
Інтегрований урок читання 1 клас історії 3 клас
Аналіз та планування фінансово-господарської діяльності підприємства на прикладі МП Ліфт-Сервіс
Вантажний план судна
Вагон вантажний рефрижераторної секції
Вантажний план судна Визначення основних
Фінансові ресурси ВАТ Хабаровський вантажний автокомбинат
Вантажний транзит на морському транспорті стан проблеми перспективи для України
Багатостраждальний клас
© Усі права захищені
написати до нас