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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? define.pas

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

interface

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

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

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

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

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

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

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

//定義系統(tǒng)控制對象
  TSystemControl = Class
     private
     protected
     public
        CurrentPersonTotal:integer;           //當(dāng)前已經(jīng)到達(dá)大廈的人數(shù)
        FinishedPersonTotal:integer;          //當(dāng)前已經(jīng)完成乘梯任務(wù)的人數(shù)
        SimTimeTotal:integer;                 //系統(tǒng)計(jì)數(shù)器
        NewPerson:integer;                    //新到人數(shù)
       Procedure Initsystem;                 //初始化系統(tǒng)
       Function InitAddedPerson:integer;     //初始化新到來的人對象
       Procedure Statistic;                  //系統(tǒng)實(shí)時統(tǒng)計(jì)
   end;
   
   function Finduser(arraylist:TStringList;userId:integer):Boolean; //尋找隊(duì)列中是否已經(jīng)存在該客戶
   function CanTake(ElavotorID,Destlayer:integer):Boolean;   //目標(biāo)樓層是否可以直接到達(dá)
var
   Maxload :integer;                     //電梯最大乘客量
   PersonNum:integer;                    //參與仿真人數(shù)
   Ontime:integer;                       //人員到齊時間
   ElavotorSpeed:integer;                //電梯運(yùn)行速度
   UpDownTime:integer;                   //上下電梯時間
   TakeNum:integer;                      //乘做電梯次數(shù)
   Elavotor:array[0..9] of TElavotor;    //電梯實(shí)例對象
   RunThread:array[0..9] of TRunThread;  //運(yùn)行電梯線程實(shí)例對象
   Floor:array[1..40] of TFloor;         //定義樓梯實(shí)例對象
   Person:array of Tperson;              //定義動態(tài)人員列表
   SystemControl:TSystemControl;         //系統(tǒng)控制對象
   SystemMonitor:TsystemMonitor;         //系統(tǒng)監(jiān)控線程實(shí)例對象
   ElavotorTrack:array[0..9] of TTrackBar;           //顯示電梯進(jìn)度
   Elavotor_idle_Label:array[0..9] of TStaticText;   //顯示空閑時間
   Elavotor_Busy_Label:array[0..9] of TStaticText;   //顯示運(yùn)行時間
   Elavotor_Memo:array[0..9] of TMemo;               //顯示電梯內(nèi)部運(yùn)載情況
   ShowFloor:TstringGrid;                            //顯示樓層人員停留
   DelIdle:Tstringlist;                              //臨時刪除隊(duì)列
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             //當(dāng)前乘客是否存在
         begin
           Result:=True;
           if Person[userId].SelectedElavotorID<>Strtoint(StrEID) then //是否改變所乘電梯
              begin
                strFloor:=copy(Tempstr,0,pos(':',Tempstr)-1);
                Elavotor[Strtoint(StrEID)].OuterRequestArray.Delete(            //刪除不合適等待隊(duì)列
                  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;
  //人員隨機(jī)到齊
  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); //創(chuàng)建系統(tǒng)監(jiān)控線程
  systemMonitor.Suspend;
  Randomize;
  //初始化電梯對象參數(shù)
   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;
   //判斷當(dāng)前層是否有人下
   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;  //如果當(dāng)前樓層不能停,就繼續(xù)下
  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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱人伦精品一区二区在线观看| 国产精品久久久久9999吃药| 色婷婷久久久亚洲一区二区三区| 国产酒店精品激情| 精品一区免费av| 精品无人码麻豆乱码1区2区| 日本在线不卡视频| 日韩国产成人精品| 男女激情视频一区| 国产麻豆9l精品三级站| 国产福利91精品一区二区三区| 韩国三级中文字幕hd久久精品| 国产综合色精品一区二区三区| 激情国产一区二区| 成人18视频日本| 色一情一伦一子一伦一区| 色噜噜狠狠一区二区三区果冻| 色美美综合视频| 制服丝袜av成人在线看| 欧美国产日韩在线观看| 欧美国产欧美综合| 亚洲自拍偷拍av| 青草国产精品久久久久久| 极品少妇一区二区| av电影在线不卡| 欧美久久久影院| 国产日韩欧美高清在线| 亚洲欧美日韩国产综合| 婷婷成人激情在线网| 国产一区二区三区在线观看免费视频 | 日韩一本二本av| 国产精品色哟哟网站| 欧美性大战久久久久久久 | 久久久一区二区| 国产精品高潮呻吟久久| 亚洲成人动漫av| 国产一区在线观看麻豆| 99久久国产综合精品女不卡| 欧美午夜片在线观看| 欧美变态凌虐bdsm| 欧美高清在线一区二区| 亚洲国产日韩一区二区| 九色综合国产一区二区三区| av动漫一区二区| 日韩一区二区电影| 中文成人av在线| 免费人成在线不卡| 91浏览器在线视频| 26uuu色噜噜精品一区二区| 亚洲柠檬福利资源导航| 国产一区二区三区黄视频| 色婷婷综合久久久中文一区二区| 日韩一区二区视频| 一区二区三国产精华液| 国产电影一区在线| 欧美日韩性生活| 综合自拍亚洲综合图不卡区| 奇米综合一区二区三区精品视频| 色先锋资源久久综合| 国产精品网站在线观看| 国内精品不卡在线| 欧美一区二区人人喊爽| 亚洲国产人成综合网站| 91丨porny丨在线| 中文字幕国产精品一区二区| 精品一区精品二区高清| 欧美一二三四区在线| 亚洲va韩国va欧美va精品 | 五月综合激情网| 在线免费观看日本欧美| 国产精品国产三级国产三级人妇 | 成人午夜电影小说| 久久综合九色综合欧美就去吻| 婷婷丁香久久五月婷婷| 欧美日本一区二区在线观看| 亚洲午夜久久久久久久久久久| 91色porny蝌蚪| 亚洲欧美激情在线| 91福利在线导航| 亚洲午夜一二三区视频| 欧美中文一区二区三区| 亚洲国产一区二区视频| 欧美喷潮久久久xxxxx| 五月天丁香久久| 制服丝袜亚洲网站| 韩国在线一区二区| 国产农村妇女毛片精品久久麻豆| 国产成人综合在线观看| 国产欧美视频一区二区三区| 国产精品2024| 亚洲精选一二三| 欧美人伦禁忌dvd放荡欲情| 日本一区中文字幕 | 国产日韩av一区| 99re热这里只有精品视频| 亚洲激情av在线| 91搞黄在线观看| 婷婷中文字幕综合| 久久综合成人精品亚洲另类欧美| 成人性生交大片免费看中文| 国产精品乱码久久久久久| 在线看国产一区| 麻豆久久久久久久| 国产精品久久久久久久久免费丝袜| 色综合咪咪久久| 毛片av一区二区| 国产精品久久毛片| 欧美三级电影网| 国产精品亚洲综合一区在线观看| 国产精品福利一区| 91麻豆精品国产91久久久| 国产乱对白刺激视频不卡| 亚洲欧美激情小说另类| 日韩视频永久免费| 91亚洲精品久久久蜜桃网站 | 欧美一区二区三区思思人| 国产乱理伦片在线观看夜一区| 一区二区三区在线看| 日韩欧美黄色影院| 色综合久久久网| 国产一区二区三区国产| 亚洲综合在线电影| 亚洲国产精品传媒在线观看| 欧美日韩一区视频| 成人三级在线视频| 裸体在线国模精品偷拍| 亚洲男人天堂av网| 久久久国产一区二区三区四区小说| 色一区在线观看| 成人的网站免费观看| 免费在线观看一区二区三区| 国产精品久久久久久久午夜片| 欧美一区二区视频网站| 色久综合一二码| 国产精品白丝jk黑袜喷水| 日产精品久久久久久久性色| 国产精品国产自产拍高清av| 精品久久久久一区二区国产| 欧美亚洲一区二区在线| 成人av电影观看| 成人一道本在线| 国产suv精品一区二区6| 国精产品一区一区三区mba视频 | 国产高清精品网站| 日韩成人午夜精品| 麻豆国产91在线播放| 五月激情丁香一区二区三区| 亚洲视频在线观看一区| 欧美国产日韩a欧美在线观看| 日韩你懂的在线播放| 欧美日本韩国一区二区三区视频| 91视频免费播放| 99re视频精品| 91在线观看视频| 91老师国产黑色丝袜在线| www.亚洲激情.com| 91美女蜜桃在线| 色综合色综合色综合| 色综合天天天天做夜夜夜夜做| 成人av在线网站| 99精品1区2区| 色成年激情久久综合| 在线精品亚洲一区二区不卡| 欧美三级电影在线观看| 欧美主播一区二区三区| 欧美日精品一区视频| 欧美日韩性生活| 欧美一级高清片| 久久久一区二区| 国产精品电影院| 亚洲综合一区二区三区| 三级影片在线观看欧美日韩一区二区| 亚洲成在人线在线播放| 奇米色一区二区三区四区| 激情五月婷婷综合网| 国产成人鲁色资源国产91色综| 成人avav影音| 欧美日韩国产另类不卡| 精品欧美一区二区三区精品久久 | 国产成人亚洲综合色影视| 成人深夜在线观看| 欧美三级日韩三级| 精品成人一区二区三区| 亚洲色图一区二区| 亚洲电影欧美电影有声小说| 精品一区二区三区欧美| jlzzjlzz国产精品久久| 欧美日韩夫妻久久| 国产日韩综合av| 亚洲一区二区视频在线| 狠狠色综合播放一区二区| av男人天堂一区| 制服丝袜激情欧洲亚洲| 国产精品传媒在线| 日韩成人av影视| 97se亚洲国产综合自在线观| 91精品国产色综合久久不卡电影| 欧美激情艳妇裸体舞| 婷婷成人激情在线网| 成人av一区二区三区|