第一篇:銀行排隊系統(tǒng)的優(yōu)化
題目:銀行排隊系統(tǒng)的優(yōu)化
論文通過分析銀行售票窗口的排隊系統(tǒng)實例,根據(jù)排隊系統(tǒng)的數(shù)量指標銀行售票處的排隊系統(tǒng),確定售票窗口的開設(shè)個數(shù)。首先通過題目所給數(shù)據(jù)確定單位時間到達的顧客人數(shù)和每位顧客在售票窗口前的服務(wù)時間分別服從Possion分布和雙參數(shù)指數(shù)分布,從而確定排隊系統(tǒng)符合n個M/G/1排隊系統(tǒng)模型;接著通過排隊系統(tǒng)的數(shù)量指標確定銀行設(shè)立售票窗口個數(shù)的最優(yōu)值,得到的是系統(tǒng)效率較高且成本較低,并提出能使顧客達到滿意最大化的方案,最后提出論文中解決排隊問題方法的普適性。
關(guān)鍵字:排隊論分布擬合檢驗M/G/1模型最優(yōu)化客戶滿意度
一、問題重述
1.1背景分析
隨著我國加入WTO以后,國有銀行的日益壯大,各種商業(yè)銀行的創(chuàng)辦,銀行為了經(jīng)營效益,將不高的營業(yè)網(wǎng)點拆并,網(wǎng)點資源減少后,客戶流進一步像現(xiàn)有網(wǎng)點集中,導(dǎo)致客戶排隊現(xiàn)象突出,造成客戶等待時間過長,引發(fā)服務(wù)投訴和存款的流失。本文結(jié)合我國銀行營業(yè)廳排隊問題的現(xiàn)狀,利用排隊論原理及其模型對排隊服務(wù)制度上的問題進行剖析,找出最優(yōu)方案,旨在提高銀行服務(wù)質(zhì)量和最大收益。1、2問題重述
此題對已給的顧客到達時間和銀行服務(wù)時間,研究符合經(jīng)理的條件:期待顧客平均等待時間小于2分鐘,平均隊列長度小于等于2人,在給定的每天大約150名顧客的前提下提供服務(wù),第一問是建立銀行排隊系統(tǒng)的優(yōu)化模型,第二問是給出能提高顧客滿意度的優(yōu)化方法,以此達到經(jīng)理的的目標。
二、問題分析
第一問是要我們建立銀行排隊系統(tǒng)的優(yōu)化模型,我們認為這里有必要引進排隊論的知識。
三、模型假設(shè)
1、影響排隊系統(tǒng)的因素是很多的,不包括特設(shè)或突發(fā)情況,如:顧客蠻不講理或遭遇災(zāi)難等;
2、顧客一個一個到來,不同顧客之間到達相互獨立
3、顧客服務(wù)方式為一個一個進行的,采用先到先服務(wù)的原則
4、每位顧客的服務(wù)時間長度是隨機的,其分布對時間是平穩(wěn)的
5、一個窗口可以辦理多項業(yè)務(wù)
6、排除銀行地理位置的影響因素
四、符號說明
(1)Ls:平均隊長:指系統(tǒng)內(nèi)顧客數(shù)(包括正被服務(wù)的顧客與排隊等待服務(wù)的顧客)的 數(shù)學(xué)期望;
(2)Lq:平均排隊長:指系統(tǒng)內(nèi)等待服務(wù)的顧客數(shù)的數(shù)學(xué)期望;
(3)Ws:平均逗留時間:顧客在系統(tǒng)內(nèi)逗留時間(包括排隊等待的時間和接受服務(wù)的 時間)的數(shù)學(xué)期望;
(4)Wq:平均等待時間:指一個顧客在排隊系統(tǒng)中排隊等待時間的數(shù)學(xué)期望;
(5)Tb:平均忙期:指服務(wù)機構(gòu)連續(xù)繁忙時間(顧客到達空閑服務(wù)機構(gòu)起,到服務(wù)機 構(gòu)再次空閑止的時間)長度的數(shù)學(xué)期望;
(6)?s:系統(tǒng)的服務(wù)強度;
(7)Cs:單位時間內(nèi)每個服務(wù)臺的成本費;(8)Cw:單位時間內(nèi)的總分費用的期望值;(9)W:系統(tǒng)中顧客總的等待時間
五、模型的建立與求解
設(shè)顧客單個到達,相繼到達時間間隔服從參數(shù)為λ的負指數(shù)分布,系統(tǒng)中共有s個 服務(wù)臺,每個服務(wù)臺的服務(wù)時間相互獨立,且服從參數(shù)為μ的負指數(shù)分布。當顧客到
達時,若有空閑的服務(wù)臺則馬上接受服務(wù),否則便排成一個隊列等待,等待時間為無限。
p?P?N?n?下面來討論這個排隊系統(tǒng)的平穩(wěn)分布。n(n=0,1,2,3,…….)為系統(tǒng)
達到平穩(wěn)狀態(tài)后隊長N的概率分布,注意到對個數(shù)為s的多服務(wù)臺系統(tǒng),有
?n??,n?0,1,2,...?n??
記?s?
?n?,n?0,1,21...s?s?,n?s,s?1,....?
s
?
???.....?0
則當?s?1時,由Cn?n?1n?2,n?1,2,......s??n?n?1.....?1
pn?Cnp0,n?1,2,...p0?
11??Cn
n?1?
得到:
?(??)n,n?1,2,...,s?
n!?
Cn??ns
????,n?s??(??)??????s!sn?s?s!?s??
所以
??n
?,n?1,2,...,s??n!0
pn??n
??p,n?s
??s!sn?s
其中
?s?1?n?s?p0?????
n!s!(1??)s??n?0
?1
由前面的公式給出了在平衡條件下系統(tǒng)中顧客數(shù)為n的概率,當n?s時,即系統(tǒng)中顧客
數(shù)大于或者等于服務(wù)臺個數(shù)時,這時再來的顧客必須等待,因此記
c?s,????pn?
n?s
?
?s
s!1??sp0
平均排隊長
p0?s
Lq???n?s?pn?
s!n?s?1
?
??n?s??
n?s
?
n?s
s
p0?sd??n?p0?s?s??s???2
s!d?s??n?1?s!?1??s?
記系統(tǒng)中正在接受服務(wù)的顧客平均數(shù)是s,顯然s也是正在忙得服務(wù)臺平均數(shù),所以
?s?1?n?1??s?1n?n?s
?s??npn?s?pn??p0?sp0?p0??????n?1!s?1!1??s?s!1??sn?0n?sn?0n!?n?1s?1
?
s?
1上式說明,平均在忙的服務(wù)臺個數(shù)不依賴于服務(wù)臺個數(shù)s平均隊長Ls=平均排隊長+正在接受服務(wù)的顧客的平均數(shù)=Lq??平均逗留時間和平均等待時間分別為
Ws?
Ls
?,Wq?
Lq
?
?Ws?
?
六、模型檢驗
七、模型評價與改進
7.1模型的優(yōu)點和缺點 7.1.1缺點
1、我們并沒有考慮到顧客的主觀因素;
2、排除了銀行位置和突發(fā)事件的不確定性因素;
3、對人數(shù)上限的約束較難實現(xiàn); 7.1.2優(yōu)點
1、我們通過分析的的道理了滿足條件的最優(yōu)窗口數(shù);
2、提出了滿足顧客需求的最優(yōu)方案;
3、該模型適用于多種排隊系統(tǒng),具有普適性; 7.2改進
八、模型推廣
應(yīng)用排隊輪的理論和方法對服務(wù)機構(gòu)進行定量分析評價,優(yōu)化服務(wù)系統(tǒng)質(zhì)量,提高效率,為設(shè)備的合理配置和有效利用提供科學(xué)的依據(jù),這是進行布局規(guī)劃和可行性分析的一種有效途徑。該模型同樣適用于各種排隊系統(tǒng),如火車售票系統(tǒng),超市排隊系統(tǒng)
九、參考文獻
【1】楊米沙,銀行排隊系統(tǒng)分析及窗口設(shè)置優(yōu)化研究,武漢理工大學(xué)學(xué)報,2008 【2】劉衛(wèi)國,MALAB程序設(shè)計教程,中國水利水電出版社,北京,2005 【3】唐映輝,排隊論(基礎(chǔ)與應(yīng)用),電子科技大學(xué)出版社,成都,2000 【4】
附錄
第二篇:銀行排隊
以人為本,解決銀行排隊問題
近年來,隨著經(jīng)濟的快速發(fā)展和人們生活水平的提高,銀行排隊的問題凸顯出來。在一些大城市、繁華地帶和高峰時段,往往會出現(xiàn)排長隊的現(xiàn)象,辦理一次銀行業(yè)務(wù)要等好長時間。這種現(xiàn)象降低了人們的辦事效率,加大了交易成本,解決這個問題成為各方關(guān)注的焦點。
銀行排隊問題之所以如此突出,其原因是多方面的:其一,隨著經(jīng)濟的發(fā)展,銀行的業(yè)務(wù)出現(xiàn)復(fù)雜化的趨勢,各種代收代繳的業(yè)務(wù),各種金融理財產(chǎn)品加大了銀行的負擔(dān);其二,銀行的服務(wù)態(tài)度和服務(wù)效率存在一些突出問題。銀行職員服務(wù)的主動性和業(yè)務(wù)的熟練程度有待加強,銀行窗口設(shè)置不夠合理和有效,銀行操作流程比較繁瑣,自助服務(wù)設(shè)施還不夠廣泛;其三,銀行和社會部門的金融業(yè)務(wù)有效對接存在問題,社會部門的金融業(yè)務(wù)往往沒有統(tǒng)一的標準,這導(dǎo)致了銀行處理此類業(yè)務(wù)效率較低,本可以通過批處理解決的業(yè)務(wù)卻只能單獨手動解決,大大降低了效率。另外,廣大客戶對自助設(shè)備不習(xí)慣使用、銀行對相關(guān)業(yè)務(wù)流程的宣傳不到位也是重要原因。
銀行排隊問題反映了銀行的服務(wù)水平和整個社會的協(xié)調(diào)能力,關(guān)系到廣大公民的日常生活,我們必須采取切實有效的措施解決好這個問題。
第一,銀行部門要有服務(wù)意識,要把客戶是上帝的理念落到實處,銀行不僅是商業(yè)部門,而且是窗口部門,是服務(wù)部門,銀行必須要加強自律,要為客戶提供優(yōu)質(zhì)的服務(wù)。要有效整合現(xiàn)有的資源,在人員配置和網(wǎng)點配置上實現(xiàn)優(yōu)化,要對員工加強教育培訓(xùn),提高他們的業(yè)務(wù)素質(zhì)和服務(wù)意識。要配備好大堂經(jīng)理,以有效指導(dǎo)銀行客戶選擇合適的服務(wù)方式,以節(jié)約客戶的時間,提高銀行的效率。
第二,要增加相關(guān)方面的投入,在大城市、繁華地段增加網(wǎng)點,增設(shè)自助設(shè)備,增加服務(wù)人員,要加大宣傳力度,引導(dǎo)公眾使用電話銀行、電子銀行等新業(yè)務(wù)方式提高業(yè)務(wù)效率,要在銀行設(shè)定排號器等設(shè)施實現(xiàn)業(yè)務(wù)有序,要為等待的客戶提供休息和娛樂的服務(wù)。
第三,要有效整合社會資源,銀行要推動制定金融業(yè)務(wù)的統(tǒng)一規(guī)范標準,實現(xiàn)銀行和社會部門的無縫對接,要對客戶進行宣傳教育和引導(dǎo),對客戶的簡單業(yè)務(wù)盡量說服通過自助設(shè)備進行,要通過宣傳單、標語指示牌等豐富多樣的方式對公眾進行服務(wù)引導(dǎo)。要引導(dǎo)公眾盡量避免高峰時段辦理業(yè)務(wù)。
第四,監(jiān)管部門和行業(yè)組織要加強對銀行部門的管理和引導(dǎo),要對銀行系統(tǒng)內(nèi)的資源進行有效整合,各銀行網(wǎng)點和自助服務(wù)系統(tǒng)要實現(xiàn)有效對接,實現(xiàn)聯(lián)通服務(wù)。要吸收借鑒國內(nèi)外的先進經(jīng)驗,加強與優(yōu)秀跨國公司的交流與合作。
總而言之,解決好銀行排隊的問題是貫徹以人為本理念的重要體現(xiàn),解決這個問題,銀行增強服務(wù)意識是關(guān)鍵,全社會聯(lián)動、協(xié)調(diào)和配合是重要保障。相信通過我們的努力,這個問題會得到逐步解決。
第三篇:銀行排隊系統(tǒng)需求分析報告
銀行排隊系統(tǒng)需求分析報告
1.引言
編寫目的
隨著時代的發(fā)展,信息技術(shù)在各服務(wù)行業(yè)中的重要作用得到充分體現(xiàn),通過服務(wù)模式的信息化,可以極大提高服務(wù)質(zhì)量,節(jié)約人力成本,提高工作效率。
本產(chǎn)品是針對銀行的排隊取號業(yè)務(wù)而開發(fā)的新一代銀行排隊系統(tǒng)。本產(chǎn)品較現(xiàn)有的銀行排隊系統(tǒng)在功能上有一定的擴充,這體現(xiàn)在用戶端用戶體驗的提升以及銀行內(nèi)部管理人員的管理效率的提升。
本產(chǎn)品目前版本號:ver.1.0 1.2項目風(fēng)險 1.3 文檔約定
1.4 預(yù)期讀者和閱讀建議 用戶:各大銀行
開發(fā)人員:熊宇軒,蔣雅楠,劉昕
項目經(jīng)理:王萌
營銷人員:暫缺
測試人員:蔣雅楠
文檔編寫入員:熊宇軒 1.3定義
靜態(tài)數(shù)據(jù):系統(tǒng)固化在內(nèi)的描述系統(tǒng)實現(xiàn)功能的一部分數(shù)據(jù)。動態(tài)數(shù)據(jù):在軟件運行過程中用戶輸入的后系統(tǒng)輸出給用戶的一部分數(shù)據(jù),也就是系統(tǒng)要處理的數(shù)據(jù)。
數(shù)據(jù)字典:數(shù)據(jù)字典中的名字都是一些屬性與內(nèi)容的抽象和概括,它們的特點是數(shù)據(jù)的“嚴密性”和“精確性”,沒有半點含糊。1.4參考資料
NEUSOFT實習(xí)資料
2任務(wù)概述
2.1目標
本系統(tǒng)的設(shè)計目標是能夠?qū)崿F(xiàn)客戶銀行排隊取號,柜員柜臺叫號功能,并且使銀行管理者能夠查詢排隊記錄。系統(tǒng)應(yīng)該具有簡單,易用,小巧,經(jīng)典的特色,應(yīng)該能夠?qū)︺y行排隊取號業(yè)務(wù)進行優(yōu)化,使其系統(tǒng)化,高效化,智能化。并保證工資管理的準確性,簡易性,為學(xué)校財務(wù)人員提供便利。相應(yīng)的需求如下:
(1)普通客戶排隊取號
(2)VIP客戶優(yōu)先取號
(3)移動端預(yù)約客戶身份驗證取號
(4)柜員叫號
(5)客戶對柜員服務(wù)進行評分
(6)數(shù)據(jù)的統(tǒng)計,并且在經(jīng)理客戶端顯示數(shù)據(jù)
(7)經(jīng)理手動插隊權(quán)限
(8)登錄信息管理。(9)人性化服務(wù)體驗提升功能 本軟件系統(tǒng)的開發(fā)設(shè)計思想是:
1.系統(tǒng)應(yīng)符合銀行管理的規(guī)定,滿足銀行客戶和管理人員的需要,并達到操作過程中的直觀、方便、實用、安全等要求;
2.系統(tǒng)采用模塊化程序設(shè)計方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開發(fā)的技術(shù)維護人員對其進行補充、維護;
3.系統(tǒng)應(yīng)具備數(shù)據(jù)庫維護功能,及時根據(jù)用戶需求進行數(shù)據(jù)的添加、刪除、修改、備份等操作。
2.2用戶的特點
本軟件的最終用戶是各銀行網(wǎng)點,由于該單位的員工的學(xué)歷、素質(zhì)較高,具有一定的計算機操作技能。本軟件需要至少一名系統(tǒng)管理人員,由于本軟件系統(tǒng)的易用性,并不需要受過專業(yè)訓(xùn)練人員。
2.3假定和約束
由于本軟件系統(tǒng)較小,且在linux系統(tǒng)下采用c 語言開發(fā),故在一般環(huán)境下基本沒有什么限制。
一個更為完善的工資管理系統(tǒng),應(yīng)提供更為便捷與強大的信息查詢功能,如相應(yīng)的網(wǎng)絡(luò)操作及服務(wù),由于開發(fā)時間和計算機數(shù)量有限,該系統(tǒng)并未提供這一功能。對信息的保護手段僅限于設(shè)置用戶級別,以及提供數(shù)據(jù)文件的備份,比較簡單,不能防止惡意的破壞,安全性能有待進一步完善。
3需求規(guī)定
3.1對功能的規(guī)定
3.1.1功能模塊及描述
本系統(tǒng)主要功能模塊如下,系統(tǒng)功能模塊圖如圖: 1)用戶排隊取號模塊
叫號機當前服務(wù)信息: 普通用戶VIP用戶預(yù)約用戶 圖1-1 該模塊可以實現(xiàn)普通用戶取票,VIP 用戶取票,移動客戶端預(yù)約用戶身份驗證取號業(yè)務(wù)。三個按鈕對應(yīng)三個不同的服務(wù)客戶對象類型,右側(cè)的對話框顯示當前叫號情況。
普通用戶和VIP用戶會跳轉(zhuǎn)至圖1-2所示的頁面
窗體標題負債業(yè)務(wù)當前等候人數(shù)資產(chǎn)業(yè)務(wù)當前等候人數(shù)中間業(yè)務(wù)當前等候人數(shù)
圖1-2-1
三個按鈕對應(yīng)不同的業(yè)務(wù)類型,按下之后就可以取票,通過socket通信將排隊請求上傳到服務(wù)器,并在服務(wù)器端口進行多線程任務(wù)管理,自動為客戶分配排隊號碼。負債業(yè)務(wù)對應(yīng)柜臺1-3,資產(chǎn)業(yè)務(wù)對應(yīng)4-6,中間業(yè)務(wù)對應(yīng)7-9。
圖1-2-2 預(yù)約用戶可跳轉(zhuǎn)至圖1-2-2的界面,輸入手機號和驗證碼來驗證信息,并且取已預(yù)約的號
2)員工叫號模塊 叫號界面正在為 服務(wù)叫號正在呼叫下一個
圖1-3 員工可使用圖1-3所示界面進行叫號,叫號按鈕按下之后,會自動生成正在呼叫的客戶排隊號碼。為了防止有的客戶取號之后又離開銀行的廢票現(xiàn)象的發(fā)生,我們設(shè)置了跳轉(zhuǎn)至下一個排隊用戶的按鈕。右側(cè)的對話框顯示正在服務(wù)的客戶,在柜員對面的客戶服務(wù)端按下開始服務(wù)按鈕之后,柜員的正在呼叫對話框內(nèi)將被置空,而有側(cè)的對話框會顯示相應(yīng)服務(wù)信息。
3)用戶服務(wù)模塊
用戶界面評分1開始服務(wù)2345結(jié)束服務(wù)
圖1-4 開始服務(wù)和結(jié)束服務(wù)按鈕對應(yīng)柜員端相應(yīng)功能,在按下結(jié)束服務(wù)按鈕之前,用戶要通過右側(cè)的按鈕對服務(wù)進行評分。評分情況和服務(wù)時間可在經(jīng)理端顯示
4)經(jīng)理管理模塊
業(yè)務(wù)情況排隊情況業(yè)務(wù)分類序號刷新插隊退出排隊號取號時間已等候時間負債業(yè)務(wù)已受理情況資產(chǎn)業(yè)務(wù)柜員評分信息統(tǒng)計中間業(yè)務(wù)
圖1-5-1 經(jīng)理可使用圖1-5-1所示界面來查看當前排隊信息,并且可以通過上方的插隊按鈕幫助特殊客戶插隊。業(yè)務(wù)情況排隊情況業(yè)務(wù)分類序號刷新插隊退出排隊號開始時間結(jié)束時間負債業(yè)務(wù)已受理情況資產(chǎn)業(yè)務(wù)柜員評分信息統(tǒng)計中間業(yè)務(wù)
圖1-5-2 經(jīng)理可以通過左側(cè)的已受理情況按鈕查詢以往客戶的排隊情況。業(yè)務(wù)情況排隊情況業(yè)務(wù)分類柜員號刷新插隊退出姓名已受理人數(shù)平均分負債業(yè)務(wù)已受理情況資產(chǎn)業(yè)務(wù)柜員評分信息統(tǒng)計中間業(yè)務(wù)
圖1-5-3 經(jīng)理可以通過評分按鈕來查看客戶對柜員的評分情況,便于內(nèi)部考核使用。信息統(tǒng)計排隊情況已受理情況柜員評分信息統(tǒng)計刷新
圖1-5-4 經(jīng)理可以查看總體的數(shù)據(jù)統(tǒng)計概要。
5)柜員/經(jīng)理登陸模塊
柜員登陸柜員號密碼登陸 系統(tǒng)可以通過查詢數(shù)據(jù)庫中的記錄來識別柜員/經(jīng)理的身份。
4.業(yè)務(wù)流程圖
系統(tǒng)的業(yè)務(wù)流程圖如下圖所示:
普通用戶取號VIP用戶取號插隊插隊插隊負債業(yè)務(wù)資產(chǎn)業(yè)務(wù)中間業(yè)務(wù)預(yù)約用戶取號等待叫號插隊柜員叫號開始服務(wù)經(jīng)理結(jié)束服務(wù)返回記錄客戶評分5.數(shù)據(jù)庫管理
5.1 動態(tài)數(shù)據(jù)描述 輸入數(shù)據(jù):菜單選項,查找關(guān)鍵字,新建記錄項。輸出數(shù)據(jù):由查詢關(guān)鍵字確定的數(shù)據(jù)庫記錄集合。內(nèi)部生成的數(shù)據(jù):中間查詢結(jié)果。數(shù)據(jù)庫描述
5.2數(shù)據(jù)庫描述
本系統(tǒng)使用MySQL數(shù)據(jù)庫
第四篇:銀行排隊叫號系統(tǒng)需求分析 設(shè)計文檔
銀行排隊叫號系統(tǒng)的分析與UML建模
一、需求分析
近年來,由于各行各業(yè)的信息化、智能化建設(shè)越來越普及,整個社會對各個行業(yè)的辦事效率的要求也越來越高。例如像銀行辦業(yè)務(wù),在顧客辦業(yè)務(wù)過程中排隊現(xiàn)象在所難免,為了在排隊時減少顧客的等待時間,為顧客辦業(yè)務(wù)創(chuàng)造一個良好的環(huán)境,銀行排隊叫號系統(tǒng)應(yīng)運而生。銀行排隊系統(tǒng)的功能性需求包括以下內(nèi)容:
1、排隊系統(tǒng)可以分為票務(wù)打印系統(tǒng)和窗口操作系統(tǒng)。
2、票務(wù)打印系統(tǒng)(1)顯示
發(fā)號機上的顯示屏使用液晶顯示,顯示對待辦業(yè)務(wù)的選擇;(2)輸入
輸入過程即通過觸摸屏對業(yè)務(wù)進行選擇的過程;(3)輸出打印
號票打印內(nèi)容應(yīng)該包括業(yè)務(wù)名稱、排隊號碼、時間等;
3、窗口操作系統(tǒng)基本包括顯示屏、語言提示,叫號按鈕(1)顯示屏
使用點陣式LED顯示,顯示內(nèi)容應(yīng)該是下一個號碼以及辦理業(yè)務(wù)窗口;(2)語音提示
語音播報時用語音的形式通過廣播或者音箱給人一提示信息。語音提示不需要用戶一直盯著提示屏或者排隊情況。選擇使用語音芯片,實現(xiàn)的功能應(yīng)該是當操作員按下按鈕后,語音播放下一個辦理者的票號。(3)叫號按鈕
設(shè)置叫號按鈕,以便于操作員控制窗口模塊的顯示屏及語音提示。滿足上述需求的系統(tǒng)主要包括以下幾個小的系統(tǒng)模塊:
(1)派號功能模塊。派號功能模塊主要是用于在用戶進入服務(wù)大廳后,根據(jù)自己的業(yè)務(wù)需要,通過自助式觸摸屏號票機領(lǐng)取票號;或者用戶在服務(wù)大廳業(yè)務(wù)咨詢臺進行業(yè)務(wù)咨詢后,咨詢員可以為用戶打印排隊號票。號票是由排隊服務(wù)器根據(jù)當前情況自動生成。
(2)叫號功能模塊。工作人員可以通過座席軟件鍵盤上的設(shè)置鍵對客戶進行叫號;也可通過按鍵控制器對客戶進行叫號;系統(tǒng)可以設(shè)置單語或雙語進行語音播放;以及通過LED顯示屏和其它視頻顯示設(shè)備顯示票號。
(3)預(yù)約功能模塊。用戶可以通過電話預(yù)約領(lǐng)取排隊號;預(yù)約成功后取得預(yù)約號;系統(tǒng)將此預(yù)約號按預(yù)約時間插入當前的排隊隊列,在系統(tǒng)處理后進行優(yōu)先呼叫;在同時間下辦理業(yè)務(wù)時,可以進行預(yù)約服務(wù),優(yōu)先辦理。同時用戶可以在網(wǎng)上進行預(yù)約。用戶可以在正常受理業(yè)務(wù)的工作日和系統(tǒng)進行網(wǎng)上預(yù)約。系統(tǒng)將此預(yù)約日期的預(yù)約號檢索到排隊序列中。
(4)管理功能模塊。實現(xiàn)窗口靈活安排,根據(jù)業(yè)務(wù)需要設(shè)置叫號規(guī)則;業(yè)務(wù)分類排隊管理;鼠標、鍵盤、按鍵控制器混合使用??梢园礃I(yè)務(wù)和窗口分類統(tǒng)計業(yè)務(wù)辦理情況。
二、用例圖
● 客戶能夠通過該系統(tǒng)進行如下活動:
(1)顧客取票:需要辦理業(yè)務(wù)的顧客到取票機前取號,并獲得打印。(2)顧客休息等待:取到排隊號的顧客在休息區(qū)休息等待,留意顯示屏信息和語音提示。
(3)營業(yè)員按鈕呼叫:窗口操作員按“下一位”,當前窗口就顯示顧客排隊號并語音呼叫“請XX到X”。(4)顧客到窗口辦理業(yè)務(wù):休息區(qū)的顧客聽到呼叫就到相應(yīng)窗口進行一對一服務(wù)。
根據(jù)以上的描述畫出相應(yīng)的用例圖如下:
三、系統(tǒng)類圖 我們可以識別系統(tǒng)中存在的主要實體類:顧客,柜臺營業(yè)員,維修管理員,保安。界面類:取票機。
根據(jù)以上的描述畫出相應(yīng)的類圖如下:
四、系統(tǒng)動態(tài)模型 顧客取號排隊辦理業(yè)務(wù)工作流程:
(1)取號:顧客取一張?zhí)柶?,上面有號碼、時間、辦理的業(yè)務(wù)類型等(2)休息等待:持號票在休息區(qū)休息并留意顯示屏音箱叫號。(3)按鍵叫號:工作人員辦完一筆業(yè)務(wù)后按下叫號器上的下一位按鈕(4)前去辦理:叫號時根據(jù)顯示屏音箱的信息到指定位置享受一對一的服務(wù)。根據(jù)以上的描述畫出序列圖如下:
柜臺營業(yè)員辦理業(yè)務(wù)工作流程:
(1)登 錄:工作開始前,輸入員工代碼進行登錄。(2)退 出:在工作結(jié)束后,退出系統(tǒng)。(3)順 呼:呼叫第一位或下一位顧客。
(4)重 呼:第一次呼叫顧客時沒有響應(yīng),重新進行呼叫。
(5)轉(zhuǎn)移窗口:對單一業(yè)務(wù)隊列可在窗口間進行轉(zhuǎn)移;對多業(yè)務(wù)隊列,不但可以在本業(yè)務(wù)隊列窗口間轉(zhuǎn)移,還可以在不同的業(yè)務(wù)隊列窗口間轉(zhuǎn)移。(6)優(yōu)先呼叫:碰到緊急或有特殊關(guān)系的顧客,可優(yōu)先呼叫。
(7)回 呼:顧客錯過機會或需多柜臺服務(wù)時,鍵入其號碼進行呼叫(注:回呼的號碼必須是已被呼叫過的號碼)。(8)棄 號:多次呼叫后,顧客依然沒有響應(yīng),可能顧客已棄號,然后呼叫下一位顧客。
(9)詢 問:查詢當前等待人數(shù)。根據(jù)以上的描述可畫出序列圖如下:
管理員管理業(yè)務(wù)工作流程:
(1)系統(tǒng)管理:對系統(tǒng)中排隊機、顯示屏、座席及其它與系統(tǒng)相關(guān)的硬件進行管理;
(2)管理顧客動態(tài):可實時提供當前各部門所有顧客取號時間、服務(wù)情況和等待人數(shù)等有關(guān)參考信息;
(3)員工效率管理(即監(jiān)督工作):可獲知員工幾時上班、幾時下班、服務(wù)人次、平均和最長及最短服務(wù)時間等有關(guān)信息;
(4)統(tǒng)計:統(tǒng)計多種有價值的信息,供管理層決策參考
五、狀態(tài)圖 排隊叫號系統(tǒng)包含以下六種狀態(tài):顧客到達、取票、等候辦理、辦理業(yè)務(wù)、柜員呼叫、顧客離去。它們之間的轉(zhuǎn)換規(guī)則是:
(1)需要辦理業(yè)務(wù)的顧客到達取票機前取票,并獲得打印。
(2)取到排隊號的顧客在休息區(qū)休息等待,留意顯示屏信息和語音提示。(2)柜臺營業(yè)員辦完一筆業(yè)務(wù)后按下叫號器上的下一位按鈕。(3)叫號時根據(jù)顯示屏音箱的信息到指定位置前去辦理業(yè)務(wù)。(4)辦理完業(yè)務(wù)后即可離開。根據(jù)以上的描述可繪制出狀態(tài)圖如下:
六、活動圖 顧客對象的活動圖:
(1)顧客在取票機的界面上輸入選擇所需辦理的相關(guān)業(yè)務(wù)。
(2)界面將信息傳遞到控制業(yè)務(wù)邏輯的對象中心顯示屏(動態(tài)顯示所有等待服務(wù)的顧客號碼以及相關(guān)的業(yè)務(wù)信息)進行驗證,然后傳遞到窗口顯示屏(顯示顧客、業(yè)務(wù)受理員號碼及宣傳、服務(wù)用語)。(3)窗口顯示屏獲得到的信息顯示顧客辦理業(yè)務(wù)的詳細信息。柜員對象的活動圖:
(1)柜員獲取中心顯示屏傳遞過來的信息,然后通過對象呼叫機進行按鍵呼叫。(2)叫號時顧客根據(jù)顯示屏音箱的信息到指定位置前去辦理業(yè)務(wù),辦完業(yè)務(wù)后即可離開。
管理員對象的活動圖:
(1)可實時提供當前各部門所有顧客取號時間、服務(wù)情況和等待人數(shù)等有關(guān)參考信息。
(2)可獲知員工幾時上班、幾時下班、服務(wù)人次、平均和最長及最短服務(wù)時間等有關(guān)信息,進行監(jiān)督。
(3)可監(jiān)督維修人員對系統(tǒng)中排隊機、顯示屏、座席及其它與系統(tǒng)相關(guān)的硬件進行管理。
通過以上的描述可繪制出活動圖如下:
七、系統(tǒng)構(gòu)件圖 在排隊叫號系統(tǒng)中,可以對參與者和主要的業(yè)務(wù)實體類分別創(chuàng)建對應(yīng)的構(gòu)件進行映射。我們前面在類圖中創(chuàng)建的顧客類、柜臺營業(yè)員類、系統(tǒng)管理員類,所以可以映射出相同的構(gòu)件類,包括顧客構(gòu)件、柜臺營業(yè)員構(gòu)件、排隊叫號系統(tǒng)構(gòu)件,此外,還必須有一個主程序構(gòu)件。由以上描述可繪制出構(gòu)件圖如下:
八、系統(tǒng)部署圖 在排隊叫號系統(tǒng)中,系統(tǒng)包括四個節(jié)點,分別是:主控箱節(jié)點,對系統(tǒng)中排隊機、顯示屏、座席及其它與系統(tǒng)相關(guān)的硬件進行管理;排隊機節(jié)點,提供顧客排隊取號的票據(jù);叫號器節(jié)點,提供給柜臺營業(yè)員通過叫號機對客戶進行叫號;窗口顯示屏節(jié)點,用于動態(tài)顯示所有等待服務(wù)的顧客號碼以及相關(guān)業(yè)務(wù)的信息;音箱節(jié)點,用于提示顧客辦理相關(guān)業(yè)務(wù)。由以上描述可繪制出部署圖如下:
第五篇:c++版模擬銀行窗口排隊叫號系統(tǒng)
c++版模擬銀行窗口排隊叫號系統(tǒng)
c++版模擬銀行窗口排隊叫號系統(tǒng)
看了兩位LZ的銀行排隊系統(tǒng)blog,感覺不錯,就也產(chǎn)生了用C++寫個排號系統(tǒng),原因有二,1、對Java不太熟悉,沒有看太懂。
2、練練手。
3、提高一下C++的人氣。進入主題:
對于這一塊的業(yè)務(wù)系統(tǒng)需求沒有做過多的分析,只在兩位LZ的基礎(chǔ)做了小小的改動,然后用C++實現(xiàn)。題目:
模擬實現(xiàn)銀行業(yè)務(wù)調(diào)度系統(tǒng)邏輯,具體需求如下:
銀行內(nèi)有6個業(yè)務(wù)窗口,1-4號窗口為普通窗口,5號窗口為快速窗口,6號窗口為VIP窗口。
有三種對應(yīng)類型的客戶:VIP客戶,普通客戶,快速客戶(辦理如交水電費、電話費之類業(yè)務(wù)的客戶)。
異步隨機生成各種類型的客戶,生成各類型用戶的概率比例為: VIP客戶:普通客戶:快速客戶 = 1 :6 :3。
客戶辦理業(yè)務(wù)所需時間有最大值和最小值,在該范圍內(nèi)隨機設(shè)定每個VIP客戶以及普通客戶辦理業(yè)務(wù)所需的時間,快速客戶辦理業(yè)務(wù)所需時間為最小值(提示:辦理業(yè)務(wù)的過程可通過線程Sleep的方式模擬)。
各類型客戶在其對應(yīng)窗口按順序依次辦理業(yè)務(wù)。
當VIP(6號)窗口和快速業(yè)務(wù)(5號)窗口沒有客戶等待辦理業(yè)務(wù)的時候,這兩個窗口可以處理普通客戶的業(yè)務(wù),而一旦有對應(yīng)的客戶等待辦理業(yè)務(wù)的時候,則優(yōu)先處理對應(yīng)客戶的業(yè)務(wù)。
隨機生成客戶時間間隔以及業(yè)務(wù)辦理時間最大值和最小值自定,可以設(shè)置。
不要求實現(xiàn)GUI,只考慮系統(tǒng)邏輯實現(xiàn),可通過Log方式展現(xiàn)程序運行結(jié)果。修改:
1、在這里為了簡化程序的設(shè)計(只省了只行代碼),F(xiàn)AST和VIP窗口只辦理對應(yīng)的客戶,不辦普通客戶的業(yè)務(wù)。
2、由于對于客戶的到來,也采用1S來一個的做法,但因為在console程序?qū)τ跁r間不太好控制,在這里只是設(shè)定了客戶數(shù),即每個1秒來一個客戶,根據(jù)來的客戶數(shù)控制時間。
開發(fā)環(huán)境:Linux 代碼:
文件constances.h 該文件中定義了一些常量,其中MAX_WAITING_CLIENT_NUM指的是,最多正在等待的客戶數(shù),如果客戶數(shù)到達最大,后來的客戶將會離開。
[cpp] view plaincopy
1.#ifndef CONSTANCES_H_
2.#define CONSTANCES_H_
3.enum {
4.MAX_SERVICE_TIME = 10, 5.MIN_SERVICE_TIME = 1, 6.CLIENT_INTERVAL_TIME = 1, 7.MAX_WAITING_CLIENT_NUM = 50, 8.MAX_CLIENT_NUM = 100, 9.};
10.#endif /* CONSTANCES_H_ */
文件main.cpp
1、每一個窗口對應(yīng)一個線程,在此創(chuàng)建了6個線程,分別對應(yīng)4個客戶窗口,1個FAST窗口中,1個VIP窗口中。
2、在這里本想用Unix中的alarm信號來控制客戶的間隔時間,但因為時間不好控制就廢棄了
[cpp] view plaincopy
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include “numMachine.h”
8.#include “serviceWin.h”
9.#include “client.h”
10.#include “constances.h”
11.Client::ClientType createClientType(){ 12.int type;
13.type = rand()% 10 + 1;14.if(type <= 6)
15.return Client::CLIENT_COMMON;16.else if(type >= 7 && type <= 9)17.return Client::CLIENT_FAST;18.return Client::CLIENT_VIP;19.}
20.int createTasktime(){
21.return rand()% MAX_SERVICE_TIME + 1;22.}
23.void createClient(){
24.Client::ClientType clientType;25.int taskTime;
26.for(int i = 0;i < MAX_CLIENT_NUM;++i){ 27.clientType = createClientType();28.taskTime = createTasktime();
29.std::cout << “Come in a client : clientType = ” << clientType 30.<< “ taskTime = ” << taskTime << std::endl;
31.NumMachine::getInstance()->pressMachine(clientType, taskTime);32.sleep(1);33.}
34.sleep(5);35.}
36.void * serviceWin(void *win){
37.ServiceWin *serWin = static_cast
41.bool createServiceWin(){
42.pthread_t commonServiceWin[4];43.pthread_t fastServiceWin;44.pthread_t vipServiceWin;45.char tmp[10];46.ServiceWin *win;
47.for(int i = 0;i < 4;++i){ 48.sprintf(tmp, “CommonWin%d”, i);49.win = new CommonSerWin(tmp);50.if(win == NULL){
51.std::cout << “Create common service win error.” << std::endl;52.return-1;53.}
54.if(pthread_create(&commonServiceWin[i], NULL, serviceWin,(void*)win)
55.!= 0){
56.std::cout << “Create common service thread error.” << std::endl;
57.return false;58.} 59.} 60.sprintf(tmp, “FastWin”);61.win = new FastSerWin(tmp);62.if(win == NULL){
63.std::cout << “Create fast service win error.” << std::endl;64.return false;65.}
66.if(pthread_create(&fastServiceWin, NULL, serviceWin,(void*)win)!= 0){
67.std::cout << “Create fast service thread error.” << std::endl;68.return false;69.}
70.sprintf(tmp, “VipWin”);71.win = new VipSerWin(tmp);72.if(win == NULL){
73.std::cout << “Create vip service win error.” << std::endl;74.return false;75.}
76.if(pthread_create(&fastServiceWin, NULL, serviceWin,(void*)win)!= 0){
77.std::cout << “Create vip service thread error.” << std::endl;78.return false;79.}
80.return true;81.}
82.int main(int argc, char *argv[]){
83.std::cout << “/***start : please wait 5 seconds when progress suspend *****/” << std::endl;
84.srand((unsigned)time(0));85.if(!createServiceWin()){
86.std::cout << “Create service win error.” << std::endl;87.return-1;88.}
89.createClient();
90.delete NumMachine::getInstance();91.}
文件client.cpp client.h 定義了我們的客戶,因為我們的客戶比較簡單,所有的客戶共享一個class,只是clientType來區(qū)分不同的客戶。
[cpp] view plaincopy 1.#ifndef CLIENT_H_
2.#define CLIENT_H_
3.class Client { 4.public:
5.enum ClientType {
6.CLIENT_COMMON, CLIENT_FAST, CLIENT_VIP 7.};
8.Client(ClientType type, int time);9.virtual ~Client();
10.ClientType getClientType();11.int getServiceTime();12.private:
13.ClientType clientType;14.int serviceTime;15.};
16.#endif /* CLIENT_H_ */
[c-sharp] view plaincopy
1.#include “client.h”
2.Client::Client(ClientType type, int time): 3.clientType(type), serviceTime(time){ 4.}
5.Client::~Client(){ 6.}
7.Client::ClientType Client::getClientType(){ 8.return clientType;9.}
10.int Client::getServiceTime(){ 11.return serviceTime;12.}
文件numMachine.cpp numMachine.h 文件中定義了排號機,在numMachine中定義了一個client list用來存放我們的客戶。
[cpp] view plaincopy
1.#ifndef NUMMACHINE_H_
2.#define NUMMACHINE_H_
3.#include 4.#include
5.#include
7.#include
8.#include “client.h”
9.#include “constances.h”
10.class NumMachine { 11.public:
12.virtual ~NumMachine();
13.static NumMachine *getInstance();
14.void pressMachine(Client::ClientType clientType, int tasktime);15.Client * removeClient(Client::ClientType val);16.private:
17.NumMachine();
18.static NumMachine *numMachine;19.std::list
22.int handledClient;
23.pthread_mutex_t clientListLock;24.};
25.class DelClientList { 26.public:
27.void operator()(Client * item);28.};
29.class FindClient { 30.public:
31.FindClient(Client::ClientType t);32.bool operator()(Client * item);33.private:
34.Client::ClientType clientType;35.};
36.#endif /* NUMMACHINE_H_ */
[cpp] view plaincopy
1.#include “numMachine.h”
2./***************************************************************************************/
3.NumMachine * NumMachine::numMachine = new NumMachine;4.NumMachine::NumMachine():
5.leaveClient(0), total(0), handledClient(0){ 6.pthread_mutex_init(&clientListLock, NULL);7.} 8.NumMachine::~NumMachine(){
9.std::cout << “/********** end ****************/” << std::endl;
10.std::cout << “The number of total client is ” << total << std::endl;11.std::cout << “The number of handled client is ” << handledClient << std::endl;
12.std::cout << “The number of waiting client is ” << clientList.size()<< std::endl;
13.std::cout << “The number of client is ” << leaveClient 14.<< “ ,because waiting time too long.” << std::endl;15.for_each(clientList.begin(), clientList.end(), DelClientList());16.}
17.NumMachine * NumMachine::getInstance(){ 18.return numMachine;19.}
20.void NumMachine::pressMachine(Client::ClientType clientType, int taskTime){
21.++total;
22.if(clientList.size()< MAX_WAITING_CLIENT_NUM){ 23.Client * c = new Client(clientType, taskTime);24.if(c == NULL){
25.std::cout << “Can't create Client” << std::endl;26.exit(-1);27.}
28.clientList.push_back(c);29.} else {
30.++leaveClient;31.} 32.}
33.Client * NumMachine::removeClient(Client::ClientType val){ 34.std::list
36.pthread_mutex_lock(&clientListLock);
37.pos = find_if(clientList.begin(), clientList.end(), FindClient(val));38.tmp = *pos;
39.if(pos!= clientList.end()){ 40.clientList.erase(pos);41.++handledClient;
42.pthread_mutex_unlock(&clientListLock);43.return tmp;44.} else {
45.pthread_mutex_unlock(&clientListLock);46.return NULL;47.} 48.}
49./***************************************************************************************/
50.void DelClientList::operator()(Client *item){
51.std::cout << “Waiting client : clientType =” << item->getClientType()52.<< “ taskTime = ” << item->getServiceTime()<< std::endl;53.delete item;54.}
55./***************************************************************************************/
56.FindClient::FindClient(Client::ClientType t): 57.clientType(t){ 58.}
59.bool FindClient::operator()(Client * item){ 60.if(item->getClientType()== clientType)61.return true;62.else
63.return false;64.}
文件serviceWin.cpp serviceWin.h 文件中定義了我們窗口。
[cpp] view plaincopy
1.#ifndef SERVICEWIN_H_
2.#define SERVICEWIN_H_
3.#include
4.#include
5.#include “numMachine.h”
6.class ServiceWin { 7.public:
8.ServiceWin(std::string n);9.virtual ~ServiceWin();10.virtual void execute()= 0;11.std::string getWinName();12.private:
13.std::string winName;14.};
15.class CommonSerWin: public ServiceWin { 16.public:
17.CommonSerWin(std::string n);18.virtual ~CommonSerWin();19.virtual void execute();20.};
21.class FastSerWin: public ServiceWin { 22.public:
23.FastSerWin(std::string n);24.virtual ~FastSerWin();25.virtual void execute();26.};
27.class VipSerWin: public ServiceWin { 28.public:
29.VipSerWin(std::string n);30.virtual ~VipSerWin();31.virtual void execute();32.};
33.#endif /* SERVICEWIN_H_ */
[cpp] view plaincopy
1.#include “serviceWin.h”
2./*********************************************************************************************/
3.ServiceWin::ServiceWin(std::string n): 4.winName(n){ 5.}
6.ServiceWin::~ServiceWin(){ 7.}
8.std::string ServiceWin::getWinName(){ 9.return winName;10.}
11./*********************************************************************************************/
12.CommonSerWin::CommonSerWin(std::string n): 13.ServiceWin(n){ 14.}
15.CommonSerWin::~CommonSerWin(){ 16.}
17.void CommonSerWin::execute(){ 18.Client * client = NULL;19.while(1){
20.client = NumMachine::getInstance()->removeClient(Client::CLIENT_COMMON);
21.if(client!= NULL){ 22.std::cout << “A client be handled : clientType = ” << client->getClientType()
23.<< “ taskTime = ” << client->getServiceTime()<< “ ”<< getWinName()<< std::endl;
24.sleep(client->getServiceTime());25.delete client;26.} 27.} 28.}
29./*********************************************************************************************/
30.FastSerWin::FastSerWin(std::string n): 31.ServiceWin(n){ 32.}
33.FastSerWin::~FastSerWin(){ 34.}
35.void FastSerWin::execute(){ 36.Client * client = NULL;37.while(1){
38.client = NumMachine::getInstance()->removeClient(Client::CLIENT_FAST);
39.if(client!= NULL){
40.std::cout << “A client be handled : clientType = ” << client->getClientType()
41.<< “ taskTime = ” << client->getServiceTime()<< “ ”<< getWinName()<< std::endl;
42.sleep(client->getServiceTime());43.delete client;44.} 45.} 46.}
47./*********************************************************************************************/
48.VipSerWin::VipSerWin(std::string n): 49.ServiceWin(n){ 50.}
51.VipSerWin::~VipSerWin(){ 52.}
53.void VipSerWin::execute(){ 54.Client * client = NULL;55.while(1){
56.client = NumMachine::getInstance()->removeClient(Client::CLIENT_VIP);
57.if(client!= NULL){ 58.std::cout << “A client be handled : clientType = ” << client->getClientType()
59.<< “ taskTime = ” << client->getServiceTime()<< “ ”<< getWinName()<< std::endl;
60.sleep(client->getServiceTime());61.delete client;62.} 63.} 64.}
結(jié)論:
經(jīng)過幾次測試發(fā)現(xiàn)在上述條件下,F(xiàn)AST窗口辦理業(yè)務(wù)不能滿足需求,在客戶不在來的后5秒內(nèi),不能處理完FAST客戶。