Разработка программы управления работой лифтов в четырехподъездном девятиэтажном доме, страница 4

        }

        if (floor3<Edit3->Text.ToInt())

        {

         Form1->Panel13->Color = clBtnFace;

         Panel13->Top -= 5; //едем вверх

         if(Panel13->Top >= perv-prolet*9)      //лифт на 9 этаже

                        floor3 = 9;

        if(Panel13->Top >= perv-prolet*8)       //лифт на 8 этаже

                        floor3 = 8;

        if(Panel13->Top >= perv-prolet*7)       //лифт на 7 этаже

                        floor3 = 7;

        if(Panel13->Top >= perv-prolet*6)      //лифт на 6 этаже

                        floor3 = 6;

        if(Panel13->Top >= perv-prolet*5)      //лифт на 5 этаже

                        floor3 = 5;

        if(Panel13->Top >= perv-prolet*4)      //лифт на 4 этаже

                        floor3 = 4;

        if(Panel13->Top >= perv-prolet*3)      //лифт на 3 этаже

                        floor3 = 3;

        if(Panel13->Top >= perv-prolet*2)      //лифт на 2 этаже

                        floor3 = 2;

        if(Panel13->Top >= perv-prolet*1)      //лифт на 1 этаже

                        floor3 = 1;

        }

        if (floor3>Edit3->Text.ToInt())

        {

         Form1->Panel13->Color = clBtnFace;

         Panel13->Top += 5; //едем вниз

         if(Panel13->Top >= perv-prolet*8)      //лифт на 9 этаже

                        floor3 = 9;

        if(Panel13->Top >= perv-prolet*7)       //лифт на 8 этаже

                        floor3 = 8;

        if(Panel13->Top >= perv-prolet*6)       //лифт на 7 этаже

                        floor3 = 7;

        if(Panel13->Top >= perv-prolet*5)      //лифт на 6 этаже

                        floor3 = 6;

        if(Panel13->Top >= perv-prolet*4)      //лифт на 5 этаже

                        floor3 = 5;

        if(Panel13->Top >= perv-prolet*3)      //лифт на 4 этаже

                        floor3 = 4;

        if(Panel13->Top >= perv-prolet*2)      //лифт на 3 этаже

                        floor3 = 3;

        if(Panel13->Top >= perv-prolet*1)      //лифт на 2 этаже

                        floor3 = 2;

        if(Panel13->Top >= perv)                    //лифт на 1 этаже

                        floor3 = 1;

        }

}

LeaveCriticalSection(&sect);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer8Timer(TObject *Sender)

{

 EnterCriticalSection(&sect);

 {

        if (floor4==Edit4->Text.ToInt())

        {

        Form1->Panel14->Color=clYellow;

        }

        if (floor4<Edit4->Text.ToInt())

        {

         Form1->Panel14->Color = clBtnFace;

         Panel14->Top -= 5; //едем вверх

          if(Panel14->Top >= perv-prolet*9)      //лифт на 9 этаже

                        floor4 = 9;

        if(Panel14->Top >= perv-prolet*8)       //лифт на 8 этаже

                        floor4 = 8;

        if(Panel14->Top >= perv-prolet*7)       //лифт на 7 этаже

                        floor4 = 7;

        if(Panel14->Top >= perv-prolet*6)      //лифт на 6 этаже

                        floor4 = 6;

        if(Panel14->Top >= perv-prolet*5)      //лифт на 5 этаже

                        floor4 = 5;

        if(Panel14->Top >= perv-prolet*4)      //лифт на 4 этаже

                        floor4 = 4;

        if(Panel14->Top >= perv-prolet*3)      //лифт на 3 этаже

                        floor4 = 3;

        if(Panel14->Top >= perv-prolet*2)      //лифт на 2 этаже

                        floor4 = 2;

        if(Panel14->Top >= perv-prolet*1)      //лифт на 1 этаже

                        floor4 = 1;

        }

        if (floor4>Edit4->Text.ToInt())

        {

         Form1->Panel14->Color = clBtnFace;

         Panel14->Top += 5; //едем вниз

          if(Panel14->Top >= perv-prolet*8)      //лифт на 9 этаже

                        floor4 = 9;

        if(Panel14->Top >= perv-prolet*7)       //лифт на 8 этаже

                        floor4 = 8;

        if(Panel14->Top >= perv-prolet*6)       //лифт на 7 этаже

                        floor4 = 7;

        if(Panel14->Top >= perv-prolet*5)      //лифт на 6 этаже

                        floor4 = 6;

        if(Panel14->Top >= perv-prolet*4)      //лифт на 5 этаже

                        floor4 = 5;

        if(Panel14->Top >= perv-prolet*3)      //лифт на 4 этаже

                        floor4 = 4;

        if(Panel14->Top >= perv-prolet*2)      //лифт на 3 этаже

                        floor4 = 3;

        if(Panel14->Top >= perv-prolet*1)      //лифт на 2 этаже

                        floor4 = 2;

        if(Panel14->Top >= perv)                    //лифт на 1 этаже

                        floor4 = 1;

        }

}

LeaveCriticalSection(&sect);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

InitializeCriticalSection(&sect); //инициализируем критическую секцию

hThread1 = CreateThread(0,0,ThreadFunc1,0,0,NULL);  //создаем вторичный поток       

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

if(hThread1 != NULL)

TerminateThread(hThread1,0);  //Завершаем вторичный поток       

}

//---------------------------------------------------------------------------

Заключение:

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

Список литературы:

1)  «Программирование в C++ Builder.» А. Я. Архангельский, Бином, 2003.- 1151 с.

2)  «С++ Builder. Самоучитель.» Н. Б. Культин, БХВ-Петербург, 2008.-464 с.

3)  Конспект лекций по курсу Операционные системы. Лектор Родников В.В. 2011г.