会议室预订系统,时间判断有关问题

会议室预订系统,时间判断问题

我现在在做一个会议室的预定系统,用户会输入一个会议的开始时间和结束时间。如果在这个时间段会议室没有被预定,那么他就能够成功在这个时间段预定这个会议室,将它提交的内容插入数据库。否则预定不成功,提交数据不需要插入。

我想请问大家应该怎么来根据提交的数据和数据库对比,得到这个时间段是否有效?请帮忙指点,不胜感激!

譬如如果已经有人在8:00-10:00,以及15:30-17:30预定了一号会议室,那么如果在9:00-14:00就应该预定不成功,而在10:30-13:00应该还是可以预定成功的。

------解决思路----------------------
告诉你一下思路吧。

假设你的时间段[x~y] 在跟一段已经使用了的时间段[a~b]冲突,那么就要满足条件
     (x>=a && x<=b) 
------解决思路----------------------
 (y>=a && y<=b)
或者使用 t-sql语言就是
    x between a and b or y between a and b
------解决思路----------------------
嗯,不对!
------解决思路----------------------
在上述判断条件的同时,还要  [a~b] 不在 [x~y]  之内,也就是 

     (x>=a && x<=b) 
------解决思路----------------------
 (y>=a && y<=b)  
------解决思路----------------------
 (a>=x && a<=b && b>=x && b<=y)

或者说 
     x between a and b or y between a and b or (a between x and y and b bewteen y)

凡是符合此条件的,表示时间段 [x~y]跟已经预定的时间段有重叠部分,不能分配。
------解决思路----------------------
假定:预订的时间为 A_Start 和 A_End,而数据库中存放的时间为 B_Start 和 B_End


则判断是否冲突的方法为
A_Start <= B_End And A_End > B_Start


即可
------解决思路----------------------
这就是个初中数学题啊..会议室预订系统,时间判断有关问题
------解决思路----------------------
参考这里(第5点,有SQL语句):
http://www.cnblogs.com/insus/archive/2011/08/27/2155286.html
------解决思路----------------------
A_Start <= B_End And A_End > B_Start
这个条件根本不可能成立吧?
------解决思路----------------------
应该是
A_End< B_Start OR A_Start  > B_End
这是成立的条件

不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
------解决思路----------------------
A_End< B_Start OR A_Start  > B_End
时间不冲突


A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
时间冲突
------解决思路----------------------
不仅仅提交的时候要判断,首先用户在选择前,你就应该把可以选择的时间段罗列出来,前端也要做一次判断。
------解决思路----------------------
你保存在数据库的内容是怎样的先??是不是StartDateTime(开始时间)一个字段、EndDateTime(结束时间)一个字段的??
如果是这样的话,那就简单得多了~~~你只需要取出预定日期内所有的EndDateTime(结束时间),然后循环这些取出的值与用户输入的开始时间做判断
仅当用户的开始时间大于取出的结束时间就表示该时间有效啊
------解决思路----------------------
引用:
应该是
A_End< B_Start OR A_Start  > B_End
这是成立的条件

不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End



还真得用And,而不是Or,你画个图就知道了,呵

反正当时我为了算这个东西,我把所有的可能都用线条画了一遍,最后得出这么个公式的。至少目前我用在正式系统上运行好几年了,没出现过啥问题
------解决思路----------------------
引用:
Quote: 引用:

应该是
A_End< B_Start OR A_Start  > B_End
这是成立的条件

不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End



还真得用And,而不是Or,你画个图就知道了,呵

反正当时我为了算这个东西,我把所有的可能都用线条画了一遍,最后得出这么个公式的。至少目前我用在正式系统上运行好几年了,没出现过啥问题


无非是几种情况:
1. 左半交叉
2. 右半交叉
3. 全等
4. 全包含
5. 全部被包含


------解决思路----------------------
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
------解决思路----------------------
引用:
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。


感觉这个思路很不错, 我刚好在做ios的手机会议室预定APP,公司内部使用,我尝试一下这个思路。
 而且通常的预定都是整点或者半点开始,也就是说 Boolean[48] 就够了,感觉效率会很不错。

因为没有夸天的需求,所有的预定都在9点到17点之间,所以针对每一天:
1. 数据库里面,每一条预定实例,都有StartTime 和 EndTime。
2. 用户预定的时候,程序首先读出当天所有的预定记录,然后初始化数组Boolean[48] 。
3. 利用数组来初始化预定的时间选择界面,实现第一次验证,让用户无法选择无效的时间段。
4. 利用数组来判断客户输入的预定时间,在存入数据库的时候做第二次验证。

不知道这个思路有没有漏洞呢,试一试。




------解决思路----------------------
引用:
Quote: 引用:

这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。


感觉这个思路很不错, 我刚好在做ios的手机会议室预定APP,公司内部使用,我尝试一下这个思路。
 而且通常的预定都是整点或者半点开始,也就是说 Boolean[48] 就够了,感觉效率会很不错。

因为没有夸天的需求,所有的预定都在9点到17点之间,所以针对每一天:
1. 数据库里面,每一条预定实例,都有StartTime 和 EndTime。
2. 用户预定的时候,程序首先读出当天所有的预定记录,然后初始化数组Boolean[48] 。
3. 利用数组来初始化预定的时间选择界面,实现第一次验证,让用户无法选择无效的时间段。
4. 利用数组来判断客户输入的预定时间,在存入数据库的时候做第二次验证。

不知道这个思路有没有漏洞呢,试一试。





你这样的需求的话,用户界面直接显示48个格子,标出对应的时间段。一开始都能点,点了的就反转bool值。被别人点过的就不能点,自己点过的可以点回去,这样操作也简单。