叫號系統排隊系統掛號系統實現(JAVA佇列)
關於佇列,使用的地方非常的多。現實中有很多的例子。比如醫院的掛號系統,銀行裡的叫號系統,食堂裡的排隊打飯等等。市場上又這樣的排隊取號的裝置。他們的功能基本如下:
1、系統可聯網聯機統一發號;
2、系統可無線對接,也可有線連線;
3、系統支援100種業務以上;
4、系統支援多個等候區提示等候資訊,各等候區語音及顯示可獨立;
5、個性化語音可呼叫客戶所辦理的業務名稱(醫院版可呼叫病人姓名)等資訊;
6、號碼可在不同服務類別的櫃檯視窗之間相互轉移,顧客不必重複排隊;
7、具備登入操作功能和退出操作功能:工作開始前,輸入員工登陸號進行登入,工作結束後,退出排隊系統,這對統計非常準確;
8、發號機介面的圖片客戶完全可以按個性化自主設計更換;
9、各項業務的按鍵客戶完全可以按個性化自主設計更換;
10、支援通過讀卡器讀取客戶相關資訊後,自動區分VIP客戶和普通客戶,自動區分對公客戶和對私客戶,並按營業機構自定的排隊規則自動編組排隊;
11、號票上和發號機上的螢幕會顯示每個顧客前面的等待人數;
12、各項業務佇列客戶完全可以自主按需任意增減;
13、各項業務的等待人數客戶完全可以自主設定在介面上顯示並可任意排版;
14、各項業務的工作時段及暫停時段客戶完全可以自主設定;
15、操作員工的增減及登陸賬號客戶完全可以自主更改;
16、語音呼叫的資訊客戶完全可以自主按個性化更改;
17、螢幕的任何顯示資訊客戶完全可以自主按個性化更改;
18、顧客辦理各項業務的序號客戶完全可以自主設定,如:貴賓業務或理財金業務可設為1-200號內、外幣業務可設為201-500號內、人民幣業務設501-9999號內;
19、工作員工所辦理的業務佇列客戶完全可以自主任意設定優先順序;
20、號票上的文字內容、圖案、業務名稱、時間格式、更改字型及大小、紙張長短等客戶完全可以自主按個性化設定;
21、系統支援播放背景音樂,音樂曲目完全由客戶自主選擇;
22、系統支援在值班經理處增設監控軟體,處理各種特殊狀況;
23、系統支援高清晰度等離子顯示器、大螢幕、電視牆等多種顯示裝置,顯示豐富的排隊資訊;
24、系統支援連線網際網路絡,可實現遠端監控;
25、系統設有擴充套件功能,當需要有關統計和管理資料時,可熱鍵啟用管理軟體並列印;
26、系統可根據需要配置客戶評價器及排隊資訊(簡訊)提示功能。
OK,瞭解了這些後,我們來實現一個簡單的例子吧!先看看效果圖:
廢話不多說了,看程式碼:
CallNum.java
package com.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* @see 模擬銀行叫號系統
* @author Herman.Xiong
* @date 2014年11月17日 14:48:48
* @version V1.0
*/
public class CallNum {
public static void main(String[] args) throws InterruptedException {
//建立服務中心,如一個銀行的營業廳
Center center = new Center();
ExecutorService exec = Executors.newCachedThreadPool();
//模擬產生服務人員
Producer producer = new Producer(center);
//模擬產生N多客戶
Consumer consumer = new Consumer(center);
exec.execute(producer);
//模擬10名客戶
for (int i = 0; i < 10; i++) {
exec.execute(consumer);
}
TimeUnit.SECONDS.sleep(10);
exec.shutdown();
//如有疑問,請加QQ群:135430763共同學習!
}
}
Center.javapackage com.test;
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* @see 服務中心
* @author Herman.Xiong
* @date 2014年11月17日 14:41:28
* @version V1.0
*/
public class Center extends Thread {
private final static int MAXCOUNT = 10;
private BlockingQueue<Waiter> waiters;
private BlockingQueue<Customer> customers;
private Random rand = new Random(47);
private final static int PRODUCERSLEEPSEED = 100;
private final static int CONSUMERSLEEPSEED = 10000;
public Center() {
//建立10名提供服務的工作人員
this.waiters = new LinkedBlockingQueue<Waiter>(MAXCOUNT);
for (int i = 0; i < MAXCOUNT; i++) {
waiters.add(new Waiter());
}
//10名工作人員工作就緒,建立客戶佇列
this.customers = new LinkedBlockingQueue<Customer>();
}
public void produce() {
try {
TimeUnit.MILLISECONDS.sleep(rand.nextInt(PRODUCERSLEEPSEED));
} catch (InterruptedException e) {
e.printStackTrace();
}
this.customers.add(new Customer());
}
public void consume() {
try {
// 服務視窗可用
Waiter waiter = this.waiters.take();
this.waiters.remove(waiter);
// 客戶可用
Customer customer = this.customers.take();
this.customers.remove(customer);
// 視窗顯示
System.out.println(waiter + "正在為" + customer + "服務...");
TimeUnit.MILLISECONDS.sleep(rand.nextInt(CONSUMERSLEEPSEED));
this.waiters.add(waiter);
} catch (InterruptedException e) {
System.err.println("---" + e.getMessage());
}
}
}
Producer.javapackage com.test;
/**
* @see 生產者執行緒,模擬銀行工作人員服務完成一位客戶後開始準備服務下一位客戶
* @author Herman.Xiong
* @date 2014年11月17日 14:55:43
* @version V1.0
*/
public class Producer implements Runnable {
private Center center;
public Producer(Center center) {
this.center = center;
}
@Override
public void run() {
while (!Thread.interrupted()) {
//產生客戶
center.produce();
}
}
}
Consumer.javapackage com.test;
/**
* @see 模擬客戶完成業務需求後,服務人員空閒就緒
* @author Herman.Xiong
* @date 2014年11月17日 14:57:11
* @version V1.0
*/
public class Consumer implements Runnable {
private Center center;
public Consumer(Center center) {
this.center = center;
}
@Override
public void run() {
while (!Thread.interrupted()) {
center.consume();
}
}
}
點選原始碼下載:http://download.csdn.net/download/xmt1139057136/8167619關於大家關注我的部落格!如有疑問,請加QQ群:135430763共同學習!
相關文章
- 訊號與系統
- Laravel5.6使用redis佇列實現系統通知LaravelRedis佇列
- 用訊息佇列和socket實現聊天系統佇列
- Python捕捉系統訊號Python
- 醫院掛號系統開發技術方案
- 訊號課組(一) 訊號與系統 Part 0 MATLAB在訊號與系統中的使用Matlab
- PHP 訊號中斷系統PHP
- 【Java】基礎_14_開發團隊排程系統Java
- PHP外掛系統的實現(一)PHP
- Golang 系統訊號接收說明Golang
- 實用!Swoole + Redis 佇列 訂單處理系統Redis佇列
- 資料庫大設計需求分析(門診掛號系統)資料庫
- 07 系統排程
- Kubernetes 編排系統
- Linux系統程式設計:訊號捕捉Linux程式設計
- 抖音企業號私信客服系統
- Linux系統程式設計—訊號捕捉Linux程式設計
- PHP外掛系統的實現(七):外掛案例PHP
- 多系統管理混亂?SAP系統整合其他系統實現統一管理
- 資料結構棧和佇列排隊演算法應用的例子【停車場停車位排隊管理系統】資料結構佇列演算法
- 系統程式設計——IPC訊息佇列程式設計佇列
- 排隊免單系統原始碼架構分析原始碼架構
- 簡單快遞系統 java實現Java
- tp5(雲約CRM)預約掛號登記管理系統
- 作業系統實驗6之訊號量的實現與應用作業系統
- APS高階計劃排程系統和生產排產系統
- PHP外掛系統的實現(五):觸發外掛PHP
- 【Linux系統程式設計】Linux訊號列表Linux程式設計
- 作業系統 訊號量vs互斥鎖作業系統
- Linux系統下使用pppd撥號上網Linux
- 三分鐘上手openldap帳號系統LDA
- 系統單據號生成規則推薦
- Linux系統使用者賬號的管理Linux
- centos 設定 laravel 佇列隨系統啟動CentOSLaravel佇列
- Linux系統掛載win系統的共享檔案Linux
- AOP實現系統告警
- 不同團隊如何實現登入系統 (just for fun)
- PHP外掛系統的實現(三):實現探測器PHP
- 智慧家居系統的匯流排系統和無線系統的具體介紹