1.模擬銀行服務(wù)完成程序代碼
目前,在以銀行營(yíng)業(yè)大廳為代表的窗口行業(yè)中大量使用排隊(duì)(叫號(hào))系統(tǒng),該系統(tǒng)完全模擬了人群排隊(duì)全過(guò)程,通過(guò)取票進(jìn)隊(duì)、排隊(duì)等待、叫號(hào)服務(wù)等功能,代替了人們站隊(duì)的辛苦。
排隊(duì)叫號(hào)軟件的具體操作流程為:
顧客取服務(wù)序號(hào)
當(dāng)顧客抵達(dá)服務(wù)大廳時(shí),前往放置在入口處旁的取號(hào)機(jī),并按一下其上的相應(yīng)服務(wù)按鈕,取號(hào)機(jī)會(huì)自動(dòng)打印出一張服務(wù)單。單上顯示服務(wù)號(hào)及該服務(wù)號(hào)前面正在等待服務(wù)的人數(shù)。
服務(wù)員工呼叫顧客
服務(wù)員工只需按一下其柜臺(tái)上呼叫器的相應(yīng)按鈕,則顧客的服務(wù)號(hào)就會(huì)按順序的顯示在顯示屏上,并發(fā)出“叮咚”和相關(guān)語(yǔ)音信息,提示顧客前往該窗口辦事。當(dāng)一位顧客辦事完畢后,柜臺(tái)服務(wù)員工只需按呼叫器相應(yīng)鍵,即可自動(dòng)呼叫下一位顧客。
編寫(xiě)程序模擬上面的工作過(guò)程,主要要求如下:
程序運(yùn)行后,當(dāng)看到“請(qǐng)點(diǎn)擊觸摸屏獲取號(hào)碼:”的提示時(shí),只要按回車鍵,即可顯示“您的號(hào)碼是:XXX,您前面有 YYY 位”的提示,其中XXX 是所獲得的服務(wù)號(hào)碼,YYY 是在 XXX 之前來(lái)到的正在等待服務(wù)的人數(shù)。
用多線程技術(shù)模擬服務(wù)窗口(可模擬多個(gè)),具有服務(wù)員呼叫顧客的行為,假設(shè)每個(gè)顧客服務(wù)的時(shí)間是10000ms,時(shí)間到后,顯示“請(qǐng) XXX 號(hào)到 ZZZ 號(hào)窗口!”的提示。其中 ZZZ 是即將為客戶服務(wù)的窗口號(hào)。
代碼:
以下為 python 實(shí)現(xiàn):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
from Task04_Queue.linkedQueue import LinkedQueue import threading import time class LinkBankQueue(LinkedQueue): def __init__( self ): LinkedQueue.__init__( self ) self .callNumber = 0 def getCallNumber( self ): if self .is_empty() and self .callNumber = = 0 : self .callNumber = 1 else : self .callNumber + = 1 return self .callNumber def getLength( self ): if self .is_empty(): return 0 else : cur = self ._head len = 1 while cur ! = self ._tail: cur = cur. next len + = 1 return len # 服務(wù)器 class ServiceWindow(threading.Thread): def __init__( self ): threading.Thread.__init__( self ) self .bankQueue = None self .lock = threading.Lock() def service( self ): self .lock.acquire() while True : time.sleep( 20 ) try : if not self .bankQueue.is_empty(): print ( '請(qǐng) %d 號(hào)到 %s 號(hào)窗口' % ( self .bankQueue._head.data, threading.current_thread().name)) self .bankQueue.dequeue() # time.sleep(10) else : print ( '隊(duì)列為空哦' ) finally : self .lock.release() # 客戶端 if __name__ = = '__main__' : bankQueue = LinkBankQueue() windowcount = 2 serviceWindows = [ None ] * windowcount threadList = [ None ] * windowcount for i in range (windowcount): serviceWindows[i] = ServiceWindow() serviceWindows[i].bankQueue = bankQueue threadList[i] = threading.Thread(name = (i + 1 ), target = serviceWindows[i].service, args = ()) threadList[i].start() while True : input ( '請(qǐng)點(diǎn)擊觸摸屏獲取號(hào)碼:' ) callNumber = bankQueue.getCallNumber() if bankQueue ! = None : print ( '您的號(hào)碼是:%d,您前面有 %d 位' % (callNumber, bankQueue.getLength())) bankQueue.enqueue(callNumber) else : print ( '您的號(hào)碼是:%d,您前面有 0 位' % (callNumber)) |
結(jié)果截圖:
總結(jié)
以上所述是小編給大家介紹的python多線程實(shí)現(xiàn)代碼(模擬銀行服務(wù)操作流程),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
原文鏈接:https://blog.csdn.net/Shine_rise/article/details/103949072