如題
這不是作業,也不是我公司的工作(小弟在數位廣告業當碼農,在台北扣完勞健保大概快四萬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/jKRcBmKhttps://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