線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:934
推到 Plurk!
推到 Facebook!

掛號日期的問題,解決方案??

答題得分者是:領航天使
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-05 08:00:23 IP:203.204.xxx.xxx 未訂閱
這是一個問題喔! 因為站上搜尋文章找不到相關解決的方法,所以來問站長,我相信這個問題一定難不倒站長(因為我看過站長的簡介)< >。如果有其他的網友有任何意見,我都很樂意接受。謝謝大家。 < > 因為我想試著改良一些對日期的算法和處理方式,如果能力夠的話。 因為這幾天我一直思考這個問題,想到最後,發現這個問題它變得很複雜。 問題開始: 我試著寫一個「類似」掛號的程式,沒錯,對線上掛號而言,有一些日期是不允許掛號的。我目前的做法是這樣:(我的做法可能有不妥,但請大家幫忙指正,謝謝。) 先建立一個表格,這個表格是「是否接受掛號的規則」。 class="code"> mysql> select * from regrule; ------- ------------ ------------- ------------ --------- ------------ | month | dayofmonth | dayofweek-1 | date | exin | memo | ------- ------------ ------------- ------------ --------- ------------ | NULL | NULL | NULL | 2002-12-10 | exclude | 測試用 | | NULL | NULL | 0 | NULL | exclude | 星期日 | | NULL | NULL | 6 | NULL | exclude | 星期六 | | 12 | 25 | NULL | NULL | exclude | 行憲記念日 | | 12 | 8 | NULL | NULL | include | 測試用 | ------- ------------ ------------- ------------ --------- ------------ 比方說: 上面的例子2002-12-10是休診,所以不允許掛號,但是就只有這一天而已。 第二項和第三項是說,星期六、日也不看診。 再來,12/25因為行憲紀念日,也休假。 12/8雖然星期日,但是也開放病患掛號、看診。(不要去考慮其他的,比如有沒有違反勞基法) 那問題來了, 1.假設要掛號的期期的變數是 @diagdate ,要怎麼判斷 @diagdate 是否不違反上面表格的規則。 2.要怎樣才能列表出來,最近50天能夠接受掛號的日期。
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-05 08:25:19 IP:192.168.xxx.xxx 未訂閱
引言: 這是一個問題喔! 因為站上搜尋文章找不到相關解決的方法,所以來問站長,我相信這個問題一定難不倒站長(因為我看過站長的簡介)< >。如果有其他的網友有任何意見,我都很樂意接受。謝謝大家。 < > 因為我想試著改良一些對日期的算法和處理方式,如果能力夠的話。 因為這幾天我一直思考這個問題,想到最後,發現這個問題它變得很複雜。 問題開始: 我試著寫一個「類似」掛號的程式,沒錯,對線上掛號而言,有一些日期是不允許掛號的。我目前的做法是這樣:(我的做法可能有不妥,但請大家幫忙指正,謝謝。) 先建立一個表格,這個表格是「是否接受掛號的規則」。 class="code"> mysql> select * from regrule; ------- ------------ ------------- ------------ --------- ------------ | month | dayofmonth | dayofweek-1 | date | exin | memo | ------- ------------ ------------- ------------ --------- ------------ | NULL | NULL | NULL | 2002-12-10 | exclude | 測試用 | | NULL | NULL | 0 | NULL | exclude | 星期日 | | NULL | NULL | 6 | NULL | exclude | 星期六 | | 12 | 25 | NULL | NULL | exclude | 行憲記念日 | | 12 | 8 | NULL | NULL | include | 測試用 | ------- ------------ ------------- ------------ --------- ------------ 比方說: 上面的例子2002-12-10是休診,所以不允許掛號,但是就只有這一天而已。 第二項和第三項是說,星期六、日也不看診。 再來,12/25因為行憲紀念日,也休假。 12/8雖然星期日,但是也開放病患掛號、看診。(不要去考慮其他的,比如有沒有違反勞基法) 那問題來了, 1.假設要掛號的期期的變數是 @diagdate ,要怎麼判斷 @diagdate 是否不違反上面表格的規則。 2.要怎樣才能列表出來,最近50天能夠接受掛號的日期。
c905165兄,感謝看得起站長, 您說:相信這個問題一定難不倒站長, 這樣站長也不好意思不回覆啦, 哈哈! 我的做法不同啦, 我是在掛號時去查看醫師排班表, 該日有醫師的班才可以掛該診間, 若當日當時段都無診間開診, 當然就不可以掛號! 1.先算出diagdate的dayofweek DecodeDate 得到Year,Month,Day,Week 從week去seek欄位dayofweek-1 從Month,Day去seek欄位month,dayofmonth 從Year,Month,Day去seek欄位date 以上三點若找到一點符合就不可掛號 2.用now()得到今天的datetime, 如:Today:TDateTime; Today:=now(); for i:=1 to 50 do begin // 檢查ToDay是否符合第一點的條件,才列出ToDay的日期 Today:=Today 1; end; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
c905165
中階會員


發表:50
回覆:120
積分:54
註冊:2002-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-05 09:29:27 IP:203.204.xxx.xxx 未訂閱
站長您好 站長言重了,只是我看到站長簡介裡就擺著掛號的系統,所以不要投石問路,直接來問有經驗的人...< > (呵呵呵,不要聽到我這麼一講,趕快把畫面拿掉)< > 1.站長的方法是屬於偏向「窮舉法」,再利用窮舉出來的這一些條件,一個一個逐一做檢查。這的確是一個好的方法。而且又可以考慮到是否有排到醫師看診的問題。 2.其實我當初的思考掉進了一個死胡同,我想要直接利用select 和一些 and or 等等的邏輯運算就能夠挑出我要的列表。再用 delphi 來做一些後續的動作。 我現在明白了,應該利用程式來運算。感謝指點迷津。 以下是思考出來的一些心得而已,沒有什麼重點: 利用mysql的select current_date,就可以選出今天的日期, date_add(current_date,interval n day)就可以挑出 n 天後的日期, month(current_date)就可以挑出月份, monthofday(current_date)就可以挑出「日」來, 其實光用 mysql 的 select 配合上邏輯運算就可以算出來答案。 只不過因為我也使用 delphi 在寫程式,發現站長提供的思考方向,果然讓我跳出了這個死胡同。 好了,我先來寫寫程式!!!
------
有困難就是能力不足,有麻煩就是方法不對... 劣者總是遇到困難,也時常出現麻煩
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-05 11:20:36 IP:192.168.xxx.xxx 未訂閱
引言: 站長您好 站長言重了,只是我看到站長簡介裡就擺著掛號的系統,所以不要投石問路,直接來問有經驗的人...< > (呵呵呵,不要聽到我這麼一講,趕快把畫面拿掉)< > 1.站長的方法是屬於偏向「窮舉法」,再利用窮舉出來的這一些條件,一個一個逐一做檢查。這的確是一個好的方法。而且又可以考慮到是否有排到醫師看診的問題。 2.其實我當初的思考掉進了一個死胡同,我想要直接利用select 和一些 and or 等等的邏輯運算就能夠挑出我要的列表。再用 delphi 來做一些後續的動作。 我現在明白了,應該利用程式來運算。感謝指點迷津。 以下是思考出來的一些心得而已,沒有什麼重點: 利用mysql的select current_date,就可以選出今天的日期, date_add(current_date,interval n day)就可以挑出 n 天後的日期, month(current_date)就可以挑出月份, monthofday(current_date)就可以挑出「日」來, 其實光用 mysql 的 select 配合上邏輯運算就可以算出來答案。 只不過因為我也使用 delphi 在寫程式,發現站長提供的思考方向,果然讓我跳出了這個死胡同。 好了,我先來寫寫程式!!!
您的方法也不錯喔! 不過站長比較傾向於各種資料庫都可以使用的情況下去寫軟體, 這樣程式才不會被資料庫綁住, 所以盡量都用標準指令, 也程式會比較累一點啦! 以上屬個人見解! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-12 00:53:59 IP:218.187.xxx.xxx 未訂閱
你們應該試著用正確的方法,要解決點的問題,不能單從點的角度思考,才不會被單一問題誤導,請想想看再作答。
系統時間:2024-07-05 21:40:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!