[討論] 醫院的排隊叫號機怎麼設計比較好

軟工

86380

如題

這不是作業,也不是我公司的工作(小弟在數位廣告業當碼農,在台北扣完勞健保大概快四萬QQ)

是剛好有一次去醫院看病的時候想到,醫院的排隊叫號機

好像剛好可以是一個小system design的題目 ?

(小弟非本科年資快兩年,但平常幾乎都在CRUD跟設計TABLE還有接第三方API,所以以下內容
沒意外應該會有很多不太對的地方,希望可以海涵QQ)

就我的理解,醫院的排隊叫號機有以下規則

1.首先是可以線上掛號(checkInOnline),這邊很簡單,反正就是先掛號的優先看病,我這邊為了簡化先不考慮
現場掛號這件事,也假設只有一間醫院,以及一個門診,門診也沒有其他

2.可以過號(skipNumber),也就是現場叫號(callNumber)的時候,如果病人不在,那麼就把他

跳掉,直到他又現場註冊(checkInAgain),重新插入健保卡的時候,排隊叫號機才會

每看三個線上掛號的病人就去看現場註冊的病人,當然當現場線上掛號的病人時,排隊叫號機

就會一直去叫被過號的病人


上面就是我粗淺的規則

然後下面是我的思路:

我決定用物件來區分行為,因為事情好像沒有很複雜所以不引入Interface

我決定區分兩個class分別是 Patient 和 Hospital

Patient有兩個函數分別是

1.checkInOnline
2.checkInAgain (要有基本的防呆,只有被過號了,才能現場註冊,另外看過醫生的話,也不能再次註冊)

這兩個函數都argument都是 Hospital物件

Hospital我一開始有想到優先佇列,只是後來覺得好像直接設成兩個Queue事情好像
比較簡單?

我決定Hosptital要有這幾個Member

int skipNumber=3;
int skipNumberNow=0;

Queue<Patient> normalQueue= new LinkedList<>();
Queue<Patient> skipQueue= new LinkedList<>();

並且要有下面兩個函數

1.callNumber()
2.skipNumber()

說了這麼多,這是我的github,我覺得我真的code寫得很亂很爛

https://reurl.cc/nDEYG8

懶得看github的人

我直接貼code

https://imgur.com/jKRcBmK


https://imgur.com/UW2yp0z


我這邊為了各種防呆,宣告了一堆 flag

感覺程式碼沒有寫的很好

想請問各位先進,有沒有甚麼可以改善的方法,或是思路

謝謝各位年薪三百萬


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.13.10 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1685985884.A.451.html
kissmickey1樓不是你想怎麼寫就怎麼寫 06/06 01:47
kissmickey2樓是以醫院制度醫生跟護理師說的算 06/06 01:47
abccbaandy3樓建議把你手上的專案優化比較實在... 06/06 01:57
jyunwei4樓現實當然很難,但想想也沒關係吧 06/06 02:31
Burwei5樓這感覺比較像是OOP隨堂小練習XD 06/06 02:34
Burwei6樓可以多想一下要變成一個可以用的系統,會有哪些service、 06/06 02:34
Burwei7樓資料怎麼傳遞、db怎麼設計之類的 06/06 02:34
WTS2accuracy8樓當下號碼為n,叫號未到的號碼x存set 06/06 02:58
WTS2accuracy9樓過號者x重新註冊時去查set 06/06 02:58
WTS2accuracy10樓x在set的話從set踢出 塞入 pq<K,V> = (n+3,x) 06/06 02:59
WTS2accuracy11樓pq 依K排序 06/06 02:59
WTS2accuracy12樓每次叫號 if(pq.peek().K <= n) 改叫過號者號碼 06/06 03:00
WTS2accuracy13樓之後做pq.poll() 如果再度過號就重新塞進set 06/06 03:01
WTS2accuracy14樓應該連OOP都用不太到 現成的資結就能實作了 06/06 03:01
BigCockman15樓你這是OOP跟系統設計沒什麼關聯 這就簡單的CRUD就能 06/06 03:05
BigCockman16樓解決了 頂多就是思考怎麼解決多人同時預約熱門醫生的 06/06 03:05
BigCockman17樓問題 06/06 03:05
lazarus112118樓實務上一定是crud吧,大概四個欄位就搞定了 06/06 08:03
lazarus112119樓好像需要五個,編號,id,是否掛號,是否看完,掛號時間 06/06 08:09
codepo20樓現在的醫院叫號機應該還有一些病人的優先順序,例如高齡 06/06 08:14
codepo21樓病患的順序比般人高之類的,然後再疊加上去是否已過號, 06/06 08:14
codepo22樓過號病患插卡後,會等兩位未過號的病患看診完就輪到他, 06/06 08:14
codepo23樓此時他的優先度又比其他人高,可以再多觀察看看叫號機的 06/06 08:14
codepo24樓實務狀況 06/06 08:14
yamagishi25樓開三條thread放東西就好 06/06 08:27
yamagishi26樓main 06/06 08:27
yamagishi27樓準備要進入main的(max3) 06/06 08:27
yamagishi28樓skip 06/06 08:27
yamagishi29樓變數只用一個 priority,剩下都是內部的商業邏輯處理 06/06 08:29
這樣會有share resource的問題嗎 還是我想太多了 你的pq 是怎麼決定順序的阿
OriginStar30樓我以為掛號機的目的是如何取最大的公平性,每家醫院診 06/06 08:41