会议室预定系统

时间:2022-04-21 02:41:48

最近完成的小系统,会议室预定系统。可预览:

会议室预定系统

 

 技术分析:
1,准备一个表,存储会议室,可以添加,编辑,启用或禁用(为控制某一会议室是否显示给用户在预定时是否可见),删除功能,可有可无,如果实现,当删除时,需要写触发器,把此预定过此会议室的记录一同删除。

2,准备两个表,存储时间记录(id,TimeName),每半个小时,如00:00,00:30,01:00直至23:30;另一个表是存储星期(id,weekName),你可以存储中文或是英文星期名称。这两个表均是为用户选择时间而准备。

3,预定你可以使用用户登录功能,登录成功之后,才可以预定,这样可以实现不同的人可以管理好自己的预定记录。

4,会议类型分为一次性,或是周期性。一次性的会议,日期需大于或等于当天。而开始时间,还需要判断,始时间须大于当前时间加上一小时。因为系统会预留半小时,不够半小时的,算够半小时。系统会作发送邮件。

5,准备一个表,存储预定记录,(id,会议室Id,WeekName,预定日期,开始,结束,...)上面使用中文,只是为了更好作解释。存储预定记录时,如果是周期性的,预定日期字段是为空的。另外,如果是存储一次性,预定日期字段不能为空,或是weekName要把预定日期转换算出是星期几填充WeekName字段,这样我们为下面判断时间是否有冲突,就方便多了。

5,判断预定时间是否有冲突,同一会议室,不管是一次性,还是周期性,时间不能重叠。

会议室预定系统会议室预定系统View Code
IF   EXISTS  ( SELECT   TOP   1   1   FROM  [ xxx]   WHERE   [ MRId ]   =   @MRId   AND   [ WeekName ]   =   @W   AND   @StartTime   <   [ EndTime ]   AND   @EndTime   >   [ StartTime ] )
BEGIN
    
RAISERROR (N ' 不能预定此会议室,会议时间发生重叠。 ' , 16 , 1 )
    
RETURN
END

 

 6,预定成功,给预定人和会议联系人发送会议室预定成功的邮件。

7,写一个进程,30秒判断一次,当前的时间,分钟部分是否为00或是30,如果是的话,把当前这个时间加半小时,去判断预定开始时间是否相同,如果相同,发送邮件。

会议室预定系统会议室预定系统View Code
  int  currentHour  =  e.SignalTime.Hour;
            
int  currentMinute  =  e.SignalTime.Minute;

            
if  (currentMinute  ==   0   ||  currentMinute  ==   30 )
            {
                
try
                {
                    AutomationEntity objAutomationEntity 
=   new  AutomationEntity();
                    objAutomationEntity.MeetingNotify(currentHour, currentMinute);
                }
                
catch  (Exception ex)
                {
                    
throw   new  Exception(ex.Message);
                }
            }

 

上面有一个方法MeetingNotify(xxx,xxx):

会议室预定系统会议室预定系统View Code
  public   void  MeetingNotify( int  currentHour,  int  currentMinute)
        {
            
int  cHour  =   0 ;
            
int  cMinute  =   0 ;

            
if  (currentMinute  ==   0 )
            {
                cHour 
=  currentHour;
                cMinute 
=   30 ;
            }

            
if  (currentMinute  ==   30 )
            {
                cHour 
=  currentHour  +   1 ;
                cMinute 
=   0 ;
            }     

            
// 传入数据库
        }

 

8,最后一个需要说的,就是会议参与人的字段,在发送邮件时,需要在SQL做split。sql没有此函数,但你可以在网上找到很多相关的方法。

 

另外,提供一下前端页面显示:

会议室预定系统

 

今天的预定:

SELECT  ...
FROM   [ dbo ] . [ xxx ]
WHERE   [ MRId ]   <>   1   AND  ( [ WeekName ]   =   DATENAME (w, CURRENT_TIMESTAMP OR   [ BookingDate ]   =   CAST ( CURRENT_TIMESTAMP   AS  DATE))


明天的预定:

DECLARE   @tomorrow  DATE  =   DATEADD ( day , 1 , CURRENT_TIMESTAMP )

SELECT  ...
FROM   [ dbo ] . [ xxx ]
WHERE   [ MRId ]   <>   1   AND  ( [ WeekName ]   =   DATENAME (w, @tomorrow OR   [ BookingDate ]   =   @tomorrow )

 

本周的预定,本月和所有的预定存储过程略。

取消或是过期:

首先要写一个预定记录Status的函数:

DECLARE   @BookingDateTime   DATETIME   =   ' 预定日期 '   +   ' 开始时间 '
    
    
IF  ( @IsEnable   =   0 )
        
SET   @ReturnValue   =   1   -- 取消
    
    
IF  ( ' 一次性 '   AND  ( @BookingDateTime   <   CURRENT_TIMESTAMP ))
        
SET   @ReturnValue   =   2   -- 过期
        
    
IF      ( @IsEnable   =   0   AND   ' 一次性 '   AND @BookingDateTime   <   CURRENT_TIMESTAMP ))
        
SET   @ReturnValue   =   3   -- 取消与过期

  

SELECT  ...
FROM   [ dbo ] . [ xxx ]
WHERE   [ MRId ]   <>   1    AND   [ Status ]   <>   0