※ 本文轉寄自 ptt.cc, 文章原始頁面
看板Soft_Job
標題

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

時間
最新2023-06-21 23:56:00
留言218則留言,46人參與討論
推噓41 ( 410177 )
如題 這不是作業,也不是我公司的工作(小弟在數位廣告業當碼農,在台北扣完勞健保大概快四萬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

Re: 回文串

41218
> [討論] 醫院的排隊叫號機怎麼設計比較好
Soft_Job06/06 01:24

218 則留言

kissmickey, 1F
不是你想怎麼寫就怎麼寫

kissmickey, 2F
是以醫院制度醫生跟護理師說的算

abccbaandy, 3F
建議把你手上的專案優化比較實在...

jyunwei, 4F
現實當然很難,但想想也沒關係吧

Burwei, 5F
這感覺比較像是OOP隨堂小練習XD

Burwei, 6F
可以多想一下要變成一個可以用的系統,會有哪些service、

Burwei, 7F
資料怎麼傳遞、db怎麼設計之類的

WTS2accuracy, 8F
當下號碼為n,叫號未到的號碼x存set

WTS2accuracy, 9F
過號者x重新註冊時去查set

WTS2accuracy, 10F
x在set的話從set踢出 塞入 pq<K,V> = (n+3,x)

WTS2accuracy, 11F
pq 依K排序

WTS2accuracy, 12F
每次叫號 if(pq.peek().K <= n) 改叫過號者號碼

WTS2accuracy, 13F
之後做pq.poll() 如果再度過號就重新塞進set

WTS2accuracy, 14F
應該連OOP都用不太到 現成的資結就能實作了

BigCockman, 15F
你這是OOP跟系統設計沒什麼關聯 這就簡單的CRUD就能

BigCockman, 16F
解決了 頂多就是思考怎麼解決多人同時預約熱門醫生的

BigCockman, 17F
問題

lazarus1121, 18F
實務上一定是crud吧,大概四個欄位就搞定了

lazarus1121, 19F
好像需要五個,編號,id,是否掛號,是否看完,掛號時間

codepo, 20F
現在的醫院叫號機應該還有一些病人的優先順序,例如高齡

codepo, 21F
病患的順序比般人高之類的,然後再疊加上去是否已過號,

codepo, 22F
過號病患插卡後,會等兩位未過號的病患看診完就輪到他,

codepo, 23F
此時他的優先度又比其他人高,可以再多觀察看看叫號機的

codepo, 24F
實務狀況

yamagishi, 25F
開三條thread放東西就好

yamagishi, 26F
main

yamagishi, 27F
準備要進入main的(max3)

yamagishi, 28F
skip

yamagishi, 29F
變數只用一個 priority,剩下都是內部的商業邏輯處理
這樣會有share resource的問題嗎 還是我想太多了 你的pq 是怎麼決定順序的阿

OriginStar, 30F
我以為掛號機的目的是如何取最大的公平性,每家醫院診

OriginStar, 31F
所看來不太一下,自己看診掛號多注意一下就可以觀察到

tmdla, 32F
廣告業碼農也太有上進心

devilkool, 33F
剛好公司最近在做類似的東西,沒做這麼複雜因為實體的

devilkool, 34F
叫號機可以自己按號碼,醫生想先看誰就看誰XD

stupid0319, 35F
這麼簡單的功能,先上線,使用者有問題再改就好了

ashlikewing, 36F
前提就錯了吧,這不是system design

empireisme, 37F
喔喔 我想說leetcode有一題是design twitter 所以這

empireisme, 38F
種只是算是物件設計嗎?

quickbym1, 39F
已經從 OOP 下手了,可以從 OOA 的角度先找關聯性

empireisme, 208F
好的謝謝

timofEE, 209F
先把題目明確再來想怎麼做吧

timofEE, 210F
一直出想法小專案都被擴成大問題了

timofEE, 211F
門診掛號一路加到住院回診緊急開刀

timofEE, 212F
要不要連哪個民代插隊比較有利也一起放進來?

a159753, 213F
公立醫院80歲敬老優先

asdfghjklasd, 214F
有人做.google 一下

cck525, 215F
實務上一定是crud啦 不過之前去長庚看診在掛門號上好像沒

cck525, 216F
遇到什麼不便

alan3100, 217F
你應該參考狀態設計模式 而不是建一堆flag

acgotaku, 218F
你用內存去搞?服務重啟怎麼辦

acgotaku, 219F
這個用資料庫讀寫鎖就完成 用 redis queue做序列

JackChena, 220F
基本的排版空格也要做一下

empireisme 作者的近期文章

Re: [新聞] 鐵飯碗生鏽 公職報考人數10年減一半
※ 引述《qq326 (夢想當個好爺爺)》之銘言: : 1.媒體來源: : 中時新聞網 : 2.記者署名: : 林欣儀、曾雪蒨/連線報導 : 3.完整新聞標題: : 鐵飯碗生鏽 公職報考人數10年減一半 : 4.完整新聞內文: : 進入公家
[問卦] 林書豪開健身房會賺更多嗎?
林書豪後來回台打籃球 以林書豪的完美身材 如果來台灣開健身房 有機會複製館長的成功之路 發大財嗎? Sent from nPTT on my iPhone 11
Re: [閒聊] 只有一間房的你 還會希望房價漲嗎?
※ 引述《Avandia ()》之銘言: : 房版的人大多應該都在30-40歲區間 : 就算現在買了房 也不可能在這間房住上一輩子吧 : 孩子大了總是要換房的 : 不過目前看起來每個買房的人 : 似乎都迫切希望自家房價大漲 真的匪夷所思 :
[問片] 囚禁一群年輕女孩的片
之前在myvideo(一兩年內) 看到一部片的預告 是一個年輕男子 囚禁一群年輕女孩 是一群不是一個 女主一開始進去的時候 其他女孩都很溫順 不敢反抗男生 後來怎麼找我都找不到這部片了 可能已經下架 或是我當初忘記按到片單 還希望版友幫忙
更多 empireisme 作者的文章...