zoukankan      html  css  js  c++  java
  • 会议室预定系统

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

     技术分析:
    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_TIMESTAMPOR [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,@tomorrowOR [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
  • 相关阅读:
    .Net平台AOP技术概览
    ARP&ICMP
    .NET面向上下文、AOP架构模式(概述)
    Attribute在拦截机制上的应用
    .NET面向上下文、AOP架构模式(实现)
    使用RequireJS优化Web应用前端
    使用asp.net MVC4创建兼容各种设备显示的web应用程序
    entity framework for asp.net mvc
    jquery多功能软键盘插件
    优美登录页面源码(一)
  • 原文地址:https://www.cnblogs.com/insus/p/2155286.html
Copyright © 2011-2022 走看看