Файл: Программные средства создания клиентских программ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 102

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

if (MainNumberFloor == NULL) {

fl = randomNumber(2, 6);//Если нет, то количество этажей равно 5

}

else

{

fl = MainNumberFloor;//Если есть, то количество этажей равно введенному значению

}

setlocale(LC_ALL, "Russian");// устанавливаем русскую локаль

elevator e(0, 1, false);//Инциализируем лифт

button bt_floor1(false), bt_floor2(true);//Инициализируем кнопки на этаже и в лифте

cout << "\n Количество этажей в доме " << fl << endl; // вывод значения этажей в консоль

cout << "\n Количество пассажиров " << sumofpassenegr << endl; // вывод значения пассажиров в консоль

Invoke(gcnew dNumberofFloor(this, &MyForm::NumberofFloor), fl); // вывод значения этажей на форму

Invoke(gcnew dSumPassenger(this, &MyForm::SumPassenger), sumofpassenegr); // вывод значения пассажиров форму

metka1: // установка метки

man h(randomNumber(1, fl));//Инциализируем пассажира

Invoke(gcnew dPassengerStatus(this, &MyForm::PassengerStatus), 1); // появление пассажира на форме

cout << "\n ---------------------------------------\n";

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), e.floor); // отображение этажа, на котором расположен лифт, на форме

h.print(); // печать положения лифта в консоле

Invoke(gcnew dPassangerPosition(this, &MyForm::PassangerPosition), h.pos); // отображение этажа, на котором расположен пассажир, на форме

if (bt_floor1.status == false || bt_floor2.status == false)

{

// если кнопки выключены

cout << " Press button elevator" << endl;

if (h.pos == 1 && e.floor==1) {

// если лифт и пассажир на одном этаже

bt_floor1.setstatusfloor(true, h.pos);// нажатие кнопки на этаже

Invoke(gcnew dButtonFloorAction(this, &MyForm::ButtonFloorAction), 1);// отображение нажатия кнопки на этаже

generalTime = generalTime + ButtonTime;// добавление к таймеру время нажатия на кнопки

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), h.pos); // отображение положения лифта на форме

}

else {

// если пассажир и лифт на разных этажах

bt_floor2.setstatusfloor(true, h.pos);// нажатие

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), e.floor); // отображение положения лифта на форме

}

cout << " Нажата кнопка вызова лифта " << endl;

Invoke(gcnew dButtonFloorAction(this, &MyForm::ButtonFloorAction),1); // отображение нажатия кнопки на этаже

generalTime = generalTime + ButtonTime;// добавление к таймеру время нажатия на кнопки

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

int floor1 = e.floor; // переменная с положением лифта

if (h.pos == floor1) {

//если лифт и пассажир на одном этаже

}

else if (h.pos > floor1) {

// если пассажир выше лифта

Invoke(gcnew dPointAction(this, &MyForm::PointAction), "up");// отображение стрелки вверх

while (h.pos != floor1) {

// пока пассажир и лифт не на одном этаже

floor1++;// прибавляем этаж

Sleep(5000);// пауза на 5 секунд

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), floor1); // отображение номера этажа с лифтом на форме


generalTime = generalTime + LiftTime; // добавление к таймеру время работы лифта

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

}

}

else if (h.pos < floor1)

{// если пассажир ниже лифта

Invoke(gcnew dPointAction(this, &MyForm::PointAction), "down"); // отображение стрелки вниз на форме

while (h.pos != floor1) {

// пока пассажир и лифт не на одном этаже

floor1--;// отнимаем этаж

Sleep(5000);// пауза на 5 секунд

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), floor1);// отображение номера этажа с лифтом на форме

generalTime = generalTime + LiftTime; // добавление к таймеру времени работы лифта

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

}

}

Sleep(1000); // пауза на 1 секунду

e.elevatorcall(h.pos); // вызов лифта к пассажиру

}

Invoke(gcnew dPointAction(this, &MyForm::PointAction), "stop");// выключение стрелок направления лифта

if (h.pos == 1) {

// если пассажир на первом этаже

bt_floor1.setstatusfloor(false, h.pos); // выключение кнопки и назначение этажа

Invoke(gcnew dButtonFloorAction(this, &MyForm::ButtonFloorAction), 0); // отображение выключения кнопки

generalTime = generalTime + ButtonTime; // дабавление к таймеру времени выкл кнопки

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

}

else {

// иначе

bt_floor2.setstatusfloor(false, h.pos);// выключение кнопки и назначение этажа

Invoke(gcnew dButtonFloorAction(this, &MyForm::ButtonFloorAction), 0); // отображение выключения кнопки

generalTime = generalTime + ButtonTime;// дабавление к таймеру времени выкл кнопки

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

}

h.enterToElevator(); // вход пассажира в лифт

step1 = 0; // счетчик

for (step1; step1 < doorLif; step1++)

{

// передвижение дверей на форме

Invoke(gcnew dDoorAction(this, &MyForm::DoorAction), 1);// Отображение открытия дверей на форме

Sleep(100); // пауза на 0,1 секунд

}

generalTime = generalTime + DoorTime; // добавление к таймер время работы дверей

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

step1 = 0; // счетчик

for (step1; step1 < 84; step1++)

{

// передвижение пассажира на форме

Invoke(gcnew dPassengerAction(this, &MyForm::PassengerAction),-42); // отображение передвижения пассажира на форме

Sleep(100);// пауза на 0,1 секунде.

}

generalTime = generalTime + PassengerTime; // добавление к таймеру вермя передвижения пассажира

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

int num = randomNumber(1, fl); // нужный этаж пассажиру

Invoke(gcnew dPassangerPosition(this, &MyForm::PassangerPosition), -1); // выключение отображение этажа с пассажиром

while (h.pos == num)

{

num = randomNumber(1, fl);// нужный этаж

}

//Invoke(gcnew dPassangerPosition(this, &MyForm::PassangerPosition), NULL);

Invoke(gcnew dButtonLift(this, &MyForm::ButtounLift), num, true);// отображение нажатия на кнопку в лифте и нужный этаж на форме


generalTime = generalTime + ButtonTime; // добавление к таймеру времени нажатия на кнопку

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

step1 = 0;// счетчик

for (step1; step1 < doorLif; step1++)

{

// передвижение дверей на форме

Invoke(gcnew dDoorAction(this, &MyForm::DoorAction), 0);// Отображение открытия дверей на форме

Sleep(100); // пауза на 0,1 секунды

}

generalTime = generalTime + DoorTime; // добавление к таймеру времени закрытия дверей

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // Отображение времени на форме

int floor1 = e.floor; // номер этаж с лифтом

int p = num; // нужный этаж

if (p == floor1) {

// если нужный этаж равен этажу с лифтом

Sleep(3000); // пауза на 0,3 секунды

}

else if (p < floor1) {

// если нужный этаж ниже этажа с лифтом

Invoke(gcnew dPointAction(this, &MyForm::PointAction), "down"); // Отображение стрелки вниз на форме

while (p != floor1) {

// Пока нужный этаж не равен этажу с лифтом

floor1--; // уменьшаем этаж с лифтом

Sleep(5000); // пауза на 5 секунд

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), floor1); // отображение номера этажа с лифтом на форме

generalTime = generalTime + LiftTime;// добавление к таймеру время работы лифта

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

}

}

else if (p > floor1) {

// если нужный этаж выше этажа лифтом

Invoke(gcnew dPointAction(this, &MyForm::PointAction), "up"); // отображение стрелки вверх на форме

while (p != floor1) {

// Пока нужный этаж не равен этажу с лифтом

floor1++; // прибавляем этаж с лифтом

Sleep(5000); // пауза на 5 секунд

Invoke(gcnew dLiftPosition(this, &MyForm::LiftPosition), floor1); // Отображение номера этажа с лифтом на форме

generalTime = generalTime + LiftTime; // добавление к таймеру время работы лифта

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

}

}

e.enterfloorButton(num); // передвижение лифта к заданому этажу

Invoke(gcnew dPassangerPosition(this, &MyForm::PassangerPosition), e.floor);// отображение этажа с пассажиром на форме

h.exitToElevator(); // выход пассажира из лифта

Invoke(gcnew dPointAction(this, &MyForm::PointAction), "stop"); //выключение стрелок направления лифта

Invoke(gcnew dButtonLift(this, &MyForm::ButtounLift), num, false); // выключение кнопки в лифте

step1 = 0;// счетчик

generalTime = generalTime + ButtonTime; // добавление к таймеру время выключения кнопки

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

for (step1; step1 < doorLif; step1++)

{

//передвижение дверей на форме

Invoke(gcnew dDoorAction(this, &MyForm::DoorAction), 1); //Отображение открытия дверей на форме

Sleep(100); // пауза 0,1 секунды

}

generalTime = generalTime + DoorTime; // добавление к таймеру времени открытие дверей

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // Отображение времени на форме


step1 = 0; // счетчик

for ( step1; step1 < 84; step1++)

{

// передвижение пассажира на форме

Invoke(gcnew dPassengerAction(this, &MyForm::PassengerAction), 42); // отображение передвижения пассажира на форме

Sleep(100); // пауза на 0,1 секунды

}

generalTime = generalTime + PassengerTime; // добавление к таймеру времени передвижения пассажира

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

e.Closedoor(); // закрытие дверей

step1 = 0;// счетчик

for (step1; step1 < doorLif; step1++)

{

// передвижение дверей на форме

Invoke(gcnew dDoorAction(this, &MyForm::DoorAction), 0); // отображение передвижения дверей

Sleep(100); // пауза на 0,1 секунды

}

generalTime = generalTime + DoorTime; // добавление к таймеру времени закрытия дверей

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

Sleep(5000); // пауза на 5 секунд

Invoke(gcnew dPassengerStatus(this, &MyForm::PassengerStatus), 0);// убрать пассажира с формы

k++; // прибавление пассажира

t = generalTime; // сохранение текущего времени

t = timer(randomNumber(0, 5), t); // произвольное время паузы между пассажирами

generalTime = t; // сохранение времени

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

//t++;

if (k > sumofpassenegr) {

// если проехало заданное количество пассажиров

cout << " Было пассажиров " << k - 1 << endl;

cout << " Прошло " << t << " секунд" << endl;

Invoke(gcnew dShowClock(this, &MyForm::ShowClock), generalTime); // отображение времени на форме

//_getch();

return 0; // завершение функции

}

goto metka1; // возврат к метки

return 0; // завершение функции

}

private: System::Void backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e)

{

// запуск функции работы лифта

main();

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

// обработка нажатия на кнопку запуск

label7->Text = ""; // Удаление времени на форме

String^ str;

str=textBox1->Text; // считывание количество этажей

Int32 number; // переменная для считывания числа

// установка значений времени, если поля ввода пустые

if (String::IsNullOrEmpty(textBox3->Text)) { textBox3->Text = "1"; }

if (String::IsNullOrEmpty(textBox4->Text)) { textBox4->Text = "1"; }

if (String::IsNullOrEmpty(textBox5->Text)) { textBox5->Text = "1"; }

if (String::IsNullOrEmpty(textBox6->Text)) { textBox6->Text = "1"; }

//проверка на число ввод этажей

if (Int32::TryParse(str, number)) {

MainNumberFloor = number;

}

str = textBox2->Text; // считывание количество пассажиров

// проверка на число ввод количества пассажиров

if (Int32::TryParse(str, number)) {

MainNumberPassenger = number;

}

str = textBox3->Text;// считывание время на вход/выход пассажира

// проверка на число ввод времени на вход/выход пассажира

if (Int32::TryParse(str, number)) {

PassengerTime = number;

}

str = textBox4->Text;// считывание время на вкл/выкл кнопок