1. 程式人生 > >Servlet+AJAX實現的模擬電梯調度

Servlet+AJAX實現的模擬電梯調度

保持 數據 style service pan 教學 width eight com

需求產生:

  大三下學期天天在學校的同一棟教學樓上課,每天要等四次電梯,有次等電梯無聊了,就想到電梯的運行邏輯該如何用程序來表達呢?

問題描述:

  大學的那棟樓有21層,不過在頁面中畫21層有點密,所以只畫了9層;

  同時有三座電梯等待調度;

  按鈕分為樓層按鈕和電梯內按鈕,電梯內按鈕有樓層數字和關門按鈕;

  運行的要求:

    1.電梯空閑時,電梯內按鈕被點擊,對應按鈕被點亮,需要按關門鍵自動運行到最近的樓層;

    2.電梯正在運行過程中,電梯內按鈕被點擊,如果離電梯更近,需要自動更改電梯目的停靠樓層為新添加的請求樓層,否則電梯還是到達原定樓層;

    3.與電梯運行狀態相反的電梯內按鈕將不會被響應,比如從四樓向上運行的電梯,1、2、3樓按鈕無法點擊;

    4.樓層按鈕請求因為三個電梯共享按鈕請求,所以應該設計一個合理的調度選擇;

      ①最優先選擇這樣的電梯:正在前往本樓層的電梯,如5樓向上的按鈕被點擊了,電梯B要從3樓到9樓,那麽優先選擇電梯B,且會先停靠5樓;

      ②其次選擇這樣的電梯:空閑狀態的電梯,如果沒有符合①中條件的電梯,那麽隨機選擇一個空閑狀態的電梯(這裏可以優化的,選擇最近的電梯)運行到當前樓層接人;

      ③如果沒有以上兩種條件的電梯存在,那麽保持請求狀態,直到以上兩種條件之一出現,如1樓的向上請求,但電梯ABC都在從2樓向上運行,那麽選擇最 先完成任務停止的電梯到1樓接人。

    5.電梯到達某一層,電梯內亮著的按鈕被熄滅,樓層按鈕有兩種情況:

      ①當前電梯到達這一層樓之後沒有下一層樓的目標了,更改狀態為空閑,向上和向下的按鈕都熄滅(此條是因為4-②中如果向下請求,但電梯從下面運行上來時,熄滅的應該是向下的按鈕);

      ②當前電梯有繼續運行的下一層目標,只熄滅與當前運行方向相同的樓層按鈕。

界面:

  技術分享圖片

包結構:

技術分享圖片

1.po層:

  FutureFloor作為實體類,使用五個TreeSet保存按鈕請求數據(因為TreeSet 有序,唯一),這五個TreeSet分別保存,樓層上升請求、樓層下降請求、三個電梯內按鈕請求;

  FutureFloorFactory,實體類的工廠類;

2.service層

  Service:封裝一些方法;

3.servlet:

  按順序分別為:

  電梯停靠樓層時觸發的響應;

  電梯開始運行時觸發的響應;

  電梯內關閉按鈕被點擊時觸發的響應;

  設置編碼的過濾器;

  電梯內按鈕響應;

  樓層按鈕響應;

  向前端頁面返回電梯當前狀態;

缺陷:

  其實保存電梯狀態只在前端保存,然後傳遞就可以了,後臺保存需要每次操作更改狀態,容易造成紕漏,且沒有頁面保存的實時性;

源碼:

https://files.cnblogs.com/files/liumaowu/elevator.zip

    

Servlet+AJAX實現的模擬電梯調度