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

floor1 = 8;

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

floor1 = 7;

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

floor1 = 6;

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

floor1 = 5;

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

floor1 = 4;

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

floor1 = 3;

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

floor1 = 2;

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

floor1 = 1;

}

if (floor1>Edit1->Text.ToInt()) // Если находимся выше, чем нужно

{

Form1->Panel11->Color = clBtnFace; // закрываем двери (это на случай,

   //если пользователь меняет пункт назначения

   //«по пути»

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

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

floor1 = 9;

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

floor1 = 8;

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

floor1 = 7;

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

floor1 = 6;

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

floor1 = 5;

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

floor1 = 4;

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

floor1 = 3;

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

floor1 = 2;

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

floor1 = 1;

}

}

LeaveCriticalSection(&sect); // выходим из критической секции

}

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


Вид окна приложения:

Листинги:

1)  Листинг заголовочного файла программы Unit1.h:

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

#ifndef Unit1H

#define Unit1H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

#include <ExtCtrls.hpp>

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

class TForm1 : public TForm

{

__published:        // IDE-managed Components

        TTimer *Timer5;

        TTimer *Timer6;

        TTimer *Timer7;

        TTimer *Timer8;

        TLabel *Label1;

        TLabel *Label2;

        TLabel *Label3;

        TLabel *Label4;

        TEdit *Edit1;

        TEdit *Edit2;

        TEdit *Edit3;

        TEdit *Edit4;

        TUpDown *UpDown1;

        TUpDown *UpDown2;

        TUpDown *UpDown3;

        TUpDown *UpDown4;

        TButton *Button1;

        TButton *Button2;

        TButton *Button3;

        TButton *Button4;

        TButton *Button5;

        TPanel *Panel1;

        TPanel *Panel2;

        TPanel *Panel3;

        TPanel *Panel4;

        TPanel *Panel5;

        TPanel *Panel6;

        TPanel *Panel7;

        TPanel *Panel8;

        TPanel *Panel9;

        TPanel *Panel10;

        TPanel *Panel11;

        TPanel *Panel12;

        TPanel *Panel13;

        TPanel *Panel14;

        void __fastcall Button1Click(TObject *Sender);

        void __fastcall Button2Click(TObject *Sender);

        void __fastcall Button3Click(TObject *Sender);

        void __fastcall Button4Click(TObject *Sender);

        void __fastcall Button5Click(TObject *Sender);

        void __fastcall Timer5Timer(TObject *Sender);

        void __fastcall Timer6Timer(TObject *Sender);

        void __fastcall Timer7Timer(TObject *Sender);

        void __fastcall Timer8Timer(TObject *Sender);

        void __fastcall FormCreate(TObject *Sender);

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

        private:        // User declarations

public:                 // User declarations

        __fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif


2)  Листинг файла Unit1.cpp

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

#include <vcl.h>

#pragma hdrstop

#define perv 288 // первый этаж. Расстояние от верхнего края формы

#define prolet 32 // расстояние между этажами

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

   int floor1;  //Переменные, хранящие "положение" кабины (этаж)

   int floor2;

   int floor3;

   int floor4;

   int dest_st1; // Пункт назначения (номер этажа)

   int dest_st2;

   int dest_st3;

   int dest_st4;

   HANDLE hThread1; //дескриптор вторичного потока

   TRTLCriticalSection sect; //дескриптор критической секции

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

   floor1=1;  //Все кабины на первом этаже

   floor2=1;

   floor3=1;

   floor4=1;

   dest_st1=1; //Все кабины хотят ехать на первый этаж

   dest_st2=1;

   dest_st3=1;

   dest_st4=1;

}

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

DWORD WINAPI ThreadFunc1(void *p) //функция вторичного потока

{

   while(1)

   {

      EnterCriticalSection(&sect);

     Form1->Label1->Caption = floor1; //отображаем текущее положение лифтов

     Form1->Label2->Caption = floor2;

     Form1->Label3->Caption = floor3;

     Form1->Label4->Caption = floor4;

      LeaveCriticalSection(&sect);

   }

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Timer5->Enabled=true;

Form1->Panel11->Color = clBtnFace;

dest_st1 = Edit1->Text.ToInt();

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Timer6->Enabled=true;

Form1->Panel12->Color = clBtnFace;

dest_st2 = Edit2->Text.ToInt();

}