亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? define.pas

?? 模擬電梯系統,有40個樓層,10做電梯,實現全部人和動作,望大家參考,提意見.
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit Define;

interface

uses
  Classes,Forms,Controls,Windows,comctrls,stdctrls,Sysutils,grids,Dialogs;

Const
   MaxFloor     = 40;      //最大樓梯層
   MaxPerson    = 1000;    //最大仿真人數
   MaxElavotor  = 10;      //最大電梯數
   ElavotorStatus_Idle   = 0;  //電梯空閑狀態
   ElavotorStatus_UP     = 1;  //電梯上行狀態
   ElavotorStatus_Down   = 2;  //電梯下行狀態
   PersonStatus_idle     = 0;  //人員停留狀態
   PersonStatus_Request  = 1;  //人員請求狀態
   PersonStatus_Taking   = 2;  //人員乘梯狀態
type

//定義線程對象
  TRunThread = class(TThread)
     private
       ElavotorID:integer;
     protected
        procedure RuningElavotor; //線程仿真電梯運行
        procedure Runing(ElavotorID:integer); //線程仿真電梯運行
        procedure Execute; override;
  end;

  TSystemMonitor = class(TThread)
     private
     protected
        procedure Monitor; //線程仿真電梯運行
        procedure Execute; override;
  end;

//定義電梯對象
  TElavotor = class
     private
     protected
     public
       	Speed:integer;                  //速度
        Direction:integer;              //電梯運行方向 “0=idle" "1=up" "2=down"
        MaxLoadCapacity:integer;        //電梯最大載客量
	CurrentLoadCapacity:integer;    //電梯當前載客量
        DestFloorLayer:integer;         //電梯目標樓層
        isFull:Boolean;                 //電梯滿員
	nIdleTime:integer;              //空閑時間計數器
	nBusyTime:integer;              //工作時間計數器
        CurrentStatus:integer;          //電梯當前狀態 "idle" "up" "down"
	PersonTotal:integer;            //總完成承載人數
	ID:integer;                     //電梯編號
	CurrentFloor:integer;           //電梯當前所處樓層
        UpDownTime:integer;             //每人上下電梯時間
        OSdelaytime:integer;            //電梯開關門時間
        OuterRequestArray:TStringList;  //等待隊列 "xx-xx"
        InsideRequestArray:TStringList; //等待隊列 "12-35"
     procedure OpenDoor(DelayTime:integer);  //開門
     procedure CloseDoor(DelayTime:integer); //關門
     Procedure UPrun;                        //上行
     Procedure Downrun;                      //下行
     Procedure Continuerun;                  //繼續運行
     Function  CheckStop(CurrentFloor:integer):Boolean;  //檢查當前層是否有人上下
     Procedure TakeElavotor(CurrentFloor:integer);      //乘梯
  end;

//定義人員對象
  TPerson = Class
     Private
     Protected
     public
	Direction:integer;          //請求的方向   "0=idle" "1=Up" "2=Down"
	FinishedCount:integer;       //目前已乘坐次數
	DestinationFloor:integer;   //請求目標樓層
	CurrentFloor:integer;       //目前所處樓層
	PersonID:integer;           //人員編號
        SelectedElavotorID:integer; //選擇要乘的電梯編號
        PersonStatus:integer;       //當前狀態 "Request" "idle" "Taking"
        idle_Time:integer;          //人員停留時間
        Request_Time:integer;       //人員請求時間
        Taking_Time:integer;        //人員乘梯時間
        MissionCompleted:Boolean;       //是否結束仿真任務
      Function ChooseElavotor(CurrentFloor,DestinationFloor:integer):integer;//選擇合適的電梯
      Procedure SendRequest(CurrentFloor,DestinationFloor:integer);       //發送乘梯請求
  end;

//定義樓層對象
  TFloor = class
     private
     protected
     public
        Requestlist:TStringList;       //請求乘梯隊列
        Idlelist:TStringList;          //空閑隊列 "UserID-CurTime-IdleTime"
   end;

//定義系統控制對象
  TSystemControl = Class
     private
     protected
     public
        CurrentPersonTotal:integer;           //當前已經到達大廈的人數
        FinishedPersonTotal:integer;          //當前已經完成乘梯任務的人數
        SimTimeTotal:integer;                 //系統計數器
        NewPerson:integer;                    //新到人數
       Procedure Initsystem;                 //初始化系統
       Function InitAddedPerson:integer;     //初始化新到來的人對象
       Procedure Statistic;                  //系統實時統計
   end;
   
   function Finduser(arraylist:TStringList;userId:integer):Boolean; //尋找隊列中是否已經存在該客戶
   function CanTake(ElavotorID,Destlayer:integer):Boolean;   //目標樓層是否可以直接到達
var
   Maxload :integer;                     //電梯最大乘客量
   PersonNum:integer;                    //參與仿真人數
   Ontime:integer;                       //人員到齊時間
   ElavotorSpeed:integer;                //電梯運行速度
   UpDownTime:integer;                   //上下電梯時間
   TakeNum:integer;                      //乘做電梯次數
   Elavotor:array[0..9] of TElavotor;    //電梯實例對象
   RunThread:array[0..9] of TRunThread;  //運行電梯線程實例對象
   Floor:array[1..40] of TFloor;         //定義樓梯實例對象
   Person:array of Tperson;              //定義動態人員列表
   SystemControl:TSystemControl;         //系統控制對象
   SystemMonitor:TsystemMonitor;         //系統監控線程實例對象
   ElavotorTrack:array[0..9] of TTrackBar;           //顯示電梯進度
   Elavotor_idle_Label:array[0..9] of TStaticText;   //顯示空閑時間
   Elavotor_Busy_Label:array[0..9] of TStaticText;   //顯示運行時間
   Elavotor_Memo:array[0..9] of TMemo;               //顯示電梯內部運載情況
   ShowFloor:TstringGrid;                            //顯示樓層人員停留
   DelIdle:Tstringlist;                              //臨時刪除隊列
implementation
uses main;
{ TRunThread }

function Finduser(arraylist:TStringList;userId:integer):Boolean;
var i,j:integer;
    Tempstr,str,StrEID,strFloor:string;
begin
   Result:=False;
   for i:=0 to arraylist.Count-1 Do
     begin
       Tempstr:=arraylist.Strings[i];           //等待信息
       Str:=Copy(Tempstr,0,pos('-',Tempstr)-1); //取得乘客編號
       StrEID:=Copy(Tempstr,pos(':',Tempstr)+1,
         length(tempstr)-pos(':',Tempstr)+1);   //取得所等待的電梯編號
       if Strtoint(Str)=userId then             //當前乘客是否存在
         begin
           Result:=True;
           if Person[userId].SelectedElavotorID<>Strtoint(StrEID) then //是否改變所乘電梯
              begin
                strFloor:=copy(Tempstr,0,pos(':',Tempstr)-1);
                Elavotor[Strtoint(StrEID)].OuterRequestArray.Delete(            //刪除不合適等待隊列
                  Elavotor[Strtoint(StrEID)].OuterRequestArray.indexof(strFloor));
                Floor[Person[userId].CurrentFloor].Requestlist.Delete(
                  Floor[Person[userId].CurrentFloor].Requestlist.indexof(Tempstr));
                Person[userId].SendRequest(Person[userId].CurrentFloor,        //選擇另外一個電梯
                   Person[userId].DestinationFloor);
              end;
           Exit;
         end;
     end;
end;

procedure TRunThread.RuningElavotor;
begin
   self.Runing(self.ElavotorID);
end;

procedure TRunThread.Runing(ElavotorID: integer);
begin
   Elavotor[ElavotorID].Continuerun;
   Application.ProcessMessages;
end;

procedure TRunThread.Execute;
begin
  while not self.Terminated DO
    begin
       Synchronize(RuningElavotor);
       sleep(1000);
    end;
end;

function TSystemControl.InitAddedPerson: integer;
var i,iTemp:integer;
begin
  Result:=0;
  //人員隨機到齊
  if self.CurrentPersonTotal>=PersonNum then
    begin
      Result:=1;
      exit;
    end else if (PersonNum-self.CurrentPersonTotal)<5 then
      begin
        Self.NewPerson:=PersonNum-self.CurrentPersonTotal;
      end else Self.NewPerson:=Random(5);

     if Self.NewPerson = 0 then exit;
       iTemp:=self.CurrentPersonTotal+Self.NewPerson;
       if iTemp>PersonNum then
          begin
            Self.NewPerson:=PersonNum + self.CurrentPersonTotal;
            iTemp:=PersonNum;
            exit;
          end;
  Setlength(Person,iTemp);
  for i:=0 to self.NewPerson-1 Do
   try
      person[self.CurrentPersonTotal+i]:=Tperson.Create;
      person[self.CurrentPersonTotal+i].FinishedCount:=0;
      person[self.CurrentPersonTotal+i].Direction:=1;
      person[self.CurrentPersonTotal+i].CurrentFloor:=1;
      Person[self.CurrentPersonTotal+i].PersonID:=self.CurrentPersonTotal+i;
      Person[self.CurrentPersonTotal+i].PersonStatus:=PersonStatus_Request;
      Person[self.CurrentPersonTotal+i].Taking_Time:=0;
      Person[self.CurrentPersonTotal+i].idle_Time:=0;
      Person[self.CurrentPersonTotal+i].Request_Time:=0;
      Person[self.CurrentPersonTotal+i].MissionCompleted:=false;
      person[self.CurrentPersonTotal+i].DestinationFloor:=Random(40)+1;
      while person[self.CurrentPersonTotal+i].DestinationFloor<=1 DO
            person[self.CurrentPersonTotal+i].DestinationFloor:=Random(40)+1;

      person[self.CurrentPersonTotal+i].SelectedElavotorID:=
         person[self.CurrentPersonTotal+i].ChooseElavotor(1,
          person[self.CurrentPersonTotal+i].DestinationFloor);

      person[self.CurrentPersonTotal+i].SendRequest(1,
        person[self.CurrentPersonTotal+i].DestinationFloor);
    finally
    end;
     self.CurrentPersonTotal:=iTemp;
end;

procedure TSystemControl.Initsystem;
var i:integer;
begin
  self.SimTimeTotal:=0;
  self.CurrentPersonTotal:=0;
  DelIdle:=Tstringlist.Create;
  systemMonitor:=TsystemMonitor.create(false); //創建系統監控線程
  systemMonitor.Suspend;
  Randomize;
  //初始化電梯對象參數
   try
    for i:=0 to 9 Do
      begin
           Elavotor[i]:=TElavotor.Create;
           Elavotor[i].ID:=i;
           Elavotor[i].Speed :=ElavotorSpeed;
           Elavotor[i].MaxLoadCapacity:=Maxload;
           Elavotor[i].UpDownTime:=UpDownTime;
           Elavotor[i].CurrentLoadCapacity :=0;
           Elavotor[i].Direction:=2;
           Elavotor[i].DestFloorlayer:=0;
           Elavotor[i].OSdelaytime:=1;
           Elavotor[i].CurrentStatus:=0;
           Elavotor[i].CurrentLoadCapacity :=0;
           Elavotor[i].nIdleTime:=0;
           Elavotor_idle_Label[i].Caption :=Inttostr(Elavotor[i].nidleTime);
           Elavotor[i].nBusyTime:=0;
           Elavotor_Busy_Label[i].Caption :=Inttostr(Elavotor[i].nBusyTime);
           Elavotor[i].CurrentFloor:=Random(40)+1;
           ElavotorTrack[i].Position:=1-Elavotor[i].CurrentFloor;
           Elavotor[i].PersonTotal :=0;
           Elavotor[i].OuterRequestArray :=TStringList.Create;
           Elavotor[i].InsideRequestArray :=TStringList.Create;
           RunThread[i]:=TRunThread.Create(false);
           RunThread[i].Suspend;
           RunThread[i].ElavotorID:= i;
      end;
      For i:=1 to 40 Do
         begin
          Floor[i]:=TFloor.Create;
          Floor[i].Requestlist:=TStringList.Create;
          Floor[i].Idlelist:=TStringList.Create;
         end;

   finally
   end;
end;

{ TElavotor }

function TElavotor.CheckStop(CurrentFloor:integer): Boolean;
var i,j,iDown:integer;
    Tempstr,Str:string;
begin
   Result:=false;
   //判斷當前層是否有人下
   if (CurrentFloor>40) or (CurrentFloor<1) then exit;
   iDown:=self.InsideRequestArray.Count-1;
   for i:=0 to iDown Do
     begin
       Tempstr:=self.InsideRequestArray.Strings[i];
       Str:=Copy(Tempstr,0,pos('-',Tempstr)-1);
       j:=Strtoint(Str);
       if Person[j].MissionCompleted then Continue;
       if person[j].DestinationFloor=CurrentFloor then
         begin
           Result:=True;
           Exit;
         end;
     end;
   //判斷是否滿員
   if self.isFull then
     begin
       Result:=false;
       exit;
     end;
   //如果沒有人下,判斷是否有人上
   iDown:=Floor[CurrentFloor].Requestlist.Count-1;
    for i:=0 to iDown Do
      if CurrentFloor<>1 then
        begin
          Tempstr:=Floor[CurrentFloor].Requestlist.Strings[i];
          Str:=Copy(Tempstr,0,pos('-',Tempstr)-1);
          j:=Strtoint(Str);
          if not person[j].MissionCompleted then
          if person[j].CurrentFloor = CurrentFloor then
           begin
             Result:=True;
             Exit;
           end;
        end else if (CurrentFloor=1) or (CurrentFloor=40) then
           begin
             Result:=True;
             Exit;
           end;
end;

procedure TElavotor.CloseDoor(DelayTime: integer);
begin
  self.nidleTime:=self.nidleTime+DelayTime;
  Elavotor_idle_Label[self.ID].Caption :=inttostr(self.nidleTime);
end;

procedure TElavotor.Continuerun;
begin
   if Self.Direction=1 then self.UPrun
      else if Self.Direction=2 then self.Downrun
        else if Self.Direction=0 then
                   begin
                     self.nidleTime:=self.nidleTime+1;
                     Elavotor_idle_Label[self.ID].Caption :=inttostr(self.nidleTime);
                     exit;
                   end;
end;

procedure TElavotor.Downrun;
begin
  if (self.CurrentFloor=1) then
      begin
         self.Direction:=1;
         exit;
      end;
  Self.CurrentFloor:=self.CurrentFloor-ElavotorSpeed;
  if Self.CurrentFloor<=0 then  Self.CurrentFloor:=1;
  ElavotorTrack[self.ID].Position:=1-self.CurrentFloor;
  self.nBusyTime:= self.nBusyTime+1;
  Elavotor_Busy_Label[self.ID].Caption :=inttostr(self.nBusyTime);
  if not CanTake(self.ID,self.CurrentFloor) then exit;  //如果當前樓層不能停,就繼續下
  self.TakeElavotor(self.CurrentFloor);
end;

procedure TElavotor.OpenDoor(DelayTime: integer);
begin
    self.nidleTime:=self.nidleTime+DelayTime;
    Elavotor_idle_Label[self.ID].Caption :=inttostr(self.nidleTime);
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产va精品久久久不卡综合| 国产日产精品1区| 欧美一区二区在线视频| 久久久国产精品不卡| 亚洲人成亚洲人成在线观看图片| 久久精品国产99国产| 91无套直看片红桃| 国产午夜精品在线观看| 石原莉奈在线亚洲三区| 91在线观看免费视频| 精品成人免费观看| 视频一区视频二区中文| 99r精品视频| 亚洲精品在线免费播放| 首页国产丝袜综合| 色吧成人激情小说| 国产欧美视频在线观看| 九九视频精品免费| 欧美另类一区二区三区| 亚洲免费观看高清| 成年人国产精品| 国产亚洲精品超碰| 激情亚洲综合在线| 日韩欧美专区在线| 日日噜噜夜夜狠狠视频欧美人| 91高清在线观看| 亚洲欧洲日产国产综合网| 高清成人免费视频| 26uuu国产在线精品一区二区| 婷婷亚洲久悠悠色悠在线播放| 日本大香伊一区二区三区| 综合久久久久综合| 97aⅴ精品视频一二三区| 国产精品无遮挡| 成人看片黄a免费看在线| 国产色爱av资源综合区| 亚洲美女区一区| 国产麻豆欧美日韩一区| 91精品国产综合久久香蕉的特点| ...中文天堂在线一区| 国产福利一区二区三区在线视频| 欧美大胆人体bbbb| 精品一区二区在线观看| 精品女同一区二区| 国产精品一区专区| 欧美极品少妇xxxxⅹ高跟鞋| 成人污视频在线观看| 国产精品免费久久| 91丨porny丨户外露出| 亚洲与欧洲av电影| 欧美日韩精品一区二区三区蜜桃| 亚欧色一区w666天堂| 欧美大片顶级少妇| 国产不卡视频一区| 亚洲黄色小说网站| 91精品啪在线观看国产60岁| 精品一区二区三区在线观看| 日本一区二区视频在线| 99久久99久久精品免费观看| 国产剧情一区二区| 中文字幕中文乱码欧美一区二区| 日本福利一区二区| 久久成人18免费观看| 中文字幕精品—区二区四季| 在线精品国精品国产尤物884a| 亚洲h在线观看| 久久一区二区视频| 色综合一区二区| 蜜桃一区二区三区四区| 日本一区二区久久| 欧美日韩色综合| 国产精品66部| 亚洲国产日韩一区二区| 精品噜噜噜噜久久久久久久久试看| 成人免费毛片a| 肉色丝袜一区二区| 国产精品青草久久| 制服丝袜亚洲播放| 色综合天天综合| 国产一区二区看久久| 亚洲超丰满肉感bbw| 国产精品视频线看| 在线成人免费视频| 一本一道波多野结衣一区二区| 另类小说综合欧美亚洲| 最新日韩av在线| www欧美成人18+| 欧美美女黄视频| 91麻豆精品视频| 国产精品中文有码| 免费xxxx性欧美18vr| 亚洲视频在线一区二区| 久久久久久久国产精品影院| 制服丝袜激情欧洲亚洲| 欧美国产日本视频| 亚洲午夜影视影院在线观看| 久久精品欧美一区二区三区不卡 | 日韩国产高清影视| 欧美国产禁国产网站cc| 日韩欧美中文字幕一区| 欧美日韩视频一区二区| 欧美艳星brazzers| 91女人视频在线观看| eeuss鲁片一区二区三区在线看| 久久99国产乱子伦精品免费| 午夜视频一区在线观看| 亚洲无线码一区二区三区| 成人免费一区二区三区在线观看| 国产天堂亚洲国产碰碰| 久久久久97国产精华液好用吗| 日韩欧美国产综合一区 | 日本不卡一二三| 亚洲午夜在线观看视频在线| 亚洲精品美国一| 怡红院av一区二区三区| 亚洲精品乱码久久久久久| 亚洲欧美电影院| 一区二区三区视频在线观看| 亚洲色图清纯唯美| 亚洲免费观看高清完整版在线观看 | 亚洲欧美在线视频观看| 国产精品国产三级国产a| 中文字幕第一区| 成人免费在线播放视频| 亚洲一区二区三区免费视频| 午夜欧美一区二区三区在线播放| 亚洲一卡二卡三卡四卡无卡久久| 亚洲福利一区二区三区| 日本亚洲天堂网| 久久超碰97中文字幕| 精品成a人在线观看| 欧美在线制服丝袜| 成人午夜电影久久影院| 99re成人在线| 精品粉嫩超白一线天av| 久久久五月婷婷| 国产日韩精品一区| 中文字幕一区二区三区色视频| 亚洲黄色av一区| 日韩精品国产精品| 国产一区二区三区四区五区美女| 国产成a人亚洲| 色琪琪一区二区三区亚洲区| 欧美日韩一区中文字幕| 欧美一区二区黄色| 欧美激情综合五月色丁香小说| 18成人在线视频| 日韩中文字幕麻豆| 国产精品亚洲人在线观看| www.欧美亚洲| 91精品综合久久久久久| 久久综合九色综合久久久精品综合 | 国产精品一区二区黑丝| 亚洲国产日日夜夜| 亚洲日本va午夜在线影院| 日韩精品欧美精品| 国产麻豆成人传媒免费观看| 91免费看视频| 337p粉嫩大胆色噜噜噜噜亚洲 | 一个色在线综合| 国产在线精品一区二区夜色| 91片在线免费观看| 欧美成人福利视频| 夜夜嗨av一区二区三区网页| 精品在线一区二区三区| 91久久精品网| 精品国产乱码久久久久久夜甘婷婷| 亚洲欧洲av一区二区三区久久| 免费人成精品欧美精品 | 国产一区二区看久久| 在线观看一区日韩| 国产亚洲欧美在线| 日本伊人色综合网| 色老头久久综合| 中文字幕电影一区| 激情成人综合网| 欧美精品视频www在线观看| 中文字幕在线不卡一区| 国产一区二区在线视频| 91精品国产综合久久精品麻豆| 亚洲人亚洲人成电影网站色| 国产乱国产乱300精品| 91精品午夜视频| 亚洲国产美国国产综合一区二区| 成人av影视在线观看| 久久嫩草精品久久久久| 裸体健美xxxx欧美裸体表演| 欧美精品久久久久久久多人混战| 一区二区三区四区国产精品| 一本一本久久a久久精品综合麻豆| 国产性色一区二区| 国产麻豆成人传媒免费观看| 欧美成人女星排名| 久久精品久久精品| 欧美一区二区在线不卡| 五月综合激情婷婷六月色窝| 欧美视频你懂的| 婷婷国产在线综合| 欧美一区二区高清| 久久se精品一区二区|