请假模块申请算法(3)

1、请假模块申请


2、工作日设置


3、工作时间设置(开始时间、截止时间、上午上班时间、上午下班时间、下午上班时间和下午下班时间)

4、请假实体类

     请假表

    [Table("KTD_Leaves", "LeaveID")]
   public class Leaves: BaseEntity
   {
      private string leaveID = string.Empty;
      [PrimaryKey(PrimaryKeyType.Assign,"LeaveID", DbType.String)]
      public string LeaveID
      {
         get{ return leaveID; }
         set{ leaveID = value; }
      }
      /// <summary>
      /// 请假类型
      /// </summary>
      private string leaveType = string.Empty;
      [Colum("LeaveType")]
      public string LeaveType
      {
          get { return leaveType; }
          set { leaveType = value; }
      }
       /// <summary>
       /// 请假人
       /// </summary>
      private string leaveUserID = string.Empty;
      [Colum("LeaveUserID")]
      public string LeaveUserID
      {
         get{ return leaveUserID; }
         set{ leaveUserID = value; }
      }
       /// <summary>
       /// 开始时间
       /// </summary>
      private DateTime? startTime = null;
      [Colum("StartTime", DbType.DateTime)]
      public DateTime? StartTime
      {
         get{ return startTime; }
         set{ startTime = value; }
      }
       /// <summary>
       /// 截止时间
       /// </summary>
      private DateTime? endTime = null;
      [Colum("EndTime", DbType.DateTime)]
      public DateTime? EndTime
      {
         get{ return endTime; }
         set{ endTime = value; }
      }


       /// <summary>
       /// 请假原由
       /// </summary>
      private string reasonTxt = string.Empty;
      [Colum("ReasonTxt")]
      public string ReasonTxt
      {
         get{ return reasonTxt; }
         set{ reasonTxt = value; }
      }
      /// <summary>
      /// 
      /// </summary>
      private double allDay = 0;
      [Colum("AllDay",DbType.Double)]
      public double AllDay
      {
          get { return allDay; }
          set { allDay = value; }
      }


      /// <summary>
      /// 详细
      /// </summary>
      private string leaveEx = string.Empty;
      [Colum("LeaveEx")]
      public string LeaveEx
      {
          get { return leaveEx; }
          set { leaveEx = value; }
      }


       /// <summary>
       /// 操作人员
       /// </summary>
      private string userID = string.Empty;
      [Colum("UserID")]
      public string UserID
      {
          get { return userID; }
          set { userID = value; }
      }
       /// <summary>
       /// 创建时间
       /// </summary>
      private DateTime? createDate = DateTime.Now;
      [Colum("CreateDate", DbType.DateTime)]
      public DateTime? CreateDate
      {
         get{ return createDate; }
         set{ createDate = value; }
      }
   }

    请假类型

    [Table("KTD_LeaveTypes", "LeaveTypeID")]
    public class LeaveTypes : BaseEntity
   {
       private string leaveTypeID = string.Empty;
      [PrimaryKey(PrimaryKeyType.Assign, "LeaveTypeID", DbType.String)]
      public string LeaveTypeID
      {
          get { return leaveTypeID; }
          set { leaveTypeID = value; }
      }
      /// <summary>
      /// 请假类型
      /// </summary>
      private string leaveTypeName = string.Empty;
      [Colum("LeaveTypeName")]
      public string LeaveTypeName
      {
          get { return leaveTypeName; }
          set { leaveTypeName = value; }
      }
       /// <summary>
       /// 状态
       /// </summary>
      private bool state = false;
      [Colum("State", DbType.Boolean)]
      public bool State
      {
          get { return state; }
          set { state = value; }
      }
       /// <summary>
       /// 是否工作日计算
       /// </summary>
      private bool isWorkDay = false;
      [Colum("IsWorkDay", DbType.Boolean)]
      public bool IsWorkDay
      {
          get { return isWorkDay; }
          set { isWorkDay = value; }
      }
      
   }

5、请假具体算法

      /// <summary>
      /// 请假不在同一天(小时)-开始时间
      /// </summary>
      /// <param name="t1"></param>
      /// <param name="wt"></param>
      /// <returns></returns>
      public double GetSameDayTimeFirstDate(DateTime t1, WorkTimes wt)
      {
          double dayHoule = 0;

          DateTime s1 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.AMStartTime);//8:30
          DateTime e1 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.AMEndTime);//11:30
          DateTime s2 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.PMStartTime);//13:00
          DateTime e2 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.PMEndTime);//16:30

          TimeSpan sts33 = new TimeSpan(e1.Ticks);
          TimeSpan ets33 = new TimeSpan(s2.Ticks);
          TimeSpan interval33 = ets33.Subtract(sts33);

          TimeSpan sts22 = new TimeSpan(s1.Ticks);
          TimeSpan ets22 = new TimeSpan(e2.Ticks);
          TimeSpan interval22 = ets22.Subtract(sts22);

          double dayAllHoule = interval22.TotalHours - interval33.TotalHours;

          if (t1 < s1)
          {
              t1 = s1;
          }

          if (t1 < e2)
          {
              if (t1 <= e1) //上午
              {
                  TimeSpan sts3 = new TimeSpan(e1.Ticks);
                  TimeSpan ets3 = new TimeSpan(s2.Ticks);
                  TimeSpan interval3 = ets3.Subtract(sts3);

                  TimeSpan sts2 = new TimeSpan(t1.Ticks);
                  TimeSpan ets2 = new TimeSpan(e2.Ticks);
                  TimeSpan interval2 = ets2.Subtract(sts2);
                  dayHoule = interval2.TotalHours - interval3.TotalHours;
              }
              else if (t1 >= s2 && t1 <= e2)  //下午
              {
                  TimeSpan sts2 = new TimeSpan(t1.Ticks);
                  TimeSpan ets2 = new TimeSpan(e2.Ticks);
                  TimeSpan interval2 = ets2.Subtract(sts2);
                  dayHoule = interval2.TotalHours;
              }
              else
              {
                  TimeSpan sts3 = new TimeSpan(t1.Ticks);
                  TimeSpan ets3 = new TimeSpan(s2.Ticks);
                  TimeSpan interval3 = ets3.Subtract(sts3);

                  TimeSpan sts2 = new TimeSpan(t1.Ticks);
                  TimeSpan ets2 = new TimeSpan(e2.Ticks);
                  TimeSpan interval2 = ets2.Subtract(sts2);
                  dayHoule = interval2.TotalHours - interval3.TotalHours;
              }
          }
          else
          {
              dayHoule = 0;
          }

          if (dayHoule == dayAllHoule)
          {
              return 1;
          }
          else
          {
              return dayHoule * 0.1;
          }
      }


      /// <summary>
      /// 请假不在同一天(小时转天)-截止时间
      /// </summary>
      /// <param name="t2"></param>
      /// <param name="wt"></param>
      /// <returns></returns>
      public double GetSameDayTimeEndDate(DateTime t2, WorkTimes wt)
      {
          double dayHoule = 0;

          DateTime s1 = Convert.ToDateTime(t2.Date.ToString("yyyy-MM-dd") + " " + wt.AMStartTime);//8:30
          DateTime e1 = Convert.ToDateTime(t2.Date.ToString("yyyy-MM-dd") + " " + wt.AMEndTime);//11:30
          DateTime s2 = Convert.ToDateTime(t2.Date.ToString("yyyy-MM-dd") + " " + wt.PMStartTime);//13:00
          DateTime e2 = Convert.ToDateTime(t2.Date.ToString("yyyy-MM-dd") + " " + wt.PMEndTime);//16:30

          TimeSpan sts33 = new TimeSpan(e1.Ticks);
          TimeSpan ets33 = new TimeSpan(s2.Ticks);
          TimeSpan interval33 = ets33.Subtract(sts33);

          TimeSpan sts22 = new TimeSpan(s1.Ticks);
          TimeSpan ets22 = new TimeSpan(e2.Ticks);
          TimeSpan interval22 = ets22.Subtract(sts22);

          double dayAllHoule = interval22.TotalHours - interval33.TotalHours;

          if (t2 > e2)
          {
              t2 = e2;
          }

          if (t2 > s1)
          {
              if (t2 > s1 && t2 <= e1) //上午
              {
                  TimeSpan sts2 = new TimeSpan(s1.Ticks);
                  TimeSpan ets2 = new TimeSpan(t2.Ticks);
                  TimeSpan interval2 = ets2.Subtract(sts2);
                  dayHoule = interval2.TotalHours;
              }
              else if (t2 > s2) //下午
              {
                  TimeSpan sts3 = new TimeSpan(e1.Ticks);
                  TimeSpan ets3 = new TimeSpan(s2.Ticks);
                  TimeSpan interval3 = ets3.Subtract(sts3);

                  TimeSpan sts2 = new TimeSpan(s1.Ticks);
                  TimeSpan ets2 = new TimeSpan(t2.Ticks);
                  TimeSpan interval2 = ets2.Subtract(sts2);
                  dayHoule = interval2.TotalHours - interval3.TotalHours;
              }
              else //中午
              {
                  TimeSpan sts2 = new TimeSpan(s1.Ticks);
                  TimeSpan ets2 = new TimeSpan(e1.Ticks);
                  TimeSpan interval2 = ets2.Subtract(sts2);
                  dayHoule = interval2.TotalHours;
              }
          }
          else
          {
              dayHoule = 0;
          }

          if (dayHoule == dayAllHoule)
          {
              return 1;
          }
          else
          {
              return dayHoule * 0.1;
          }
      }

      /// <summary>
      /// 请假在同一天(小时转天)
      /// </summary>
      /// <param name="t1"></param>
      /// <param name="t2"></param>
      /// <param name="wt"></param>
      /// <returns></returns>
      public double GetSameDayTimeDate(DateTime t1, DateTime t2, WorkTimes wt)
      {
          double dayHoule = 0;

          DateTime s1 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.AMStartTime);//8:30
          DateTime e1 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.AMEndTime);//11:30
          DateTime s2 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.PMStartTime);//13:00
          DateTime e2 = Convert.ToDateTime(t1.Date.ToString("yyyy-MM-dd") + " " + wt.PMEndTime);//16:30

          TimeSpan sts33 = new TimeSpan(e1.Ticks);
          TimeSpan ets33 = new TimeSpan(s2.Ticks);
          TimeSpan interval33 = ets33.Subtract(sts33);

          TimeSpan sts22 = new TimeSpan(s1.Ticks);
          TimeSpan ets22 = new TimeSpan(e2.Ticks);
          TimeSpan interval22 = ets22.Subtract(sts22);
          double dayAllHoule = interval22.TotalHours - interval33.TotalHours;

          if (t1 < s1)
          {
              t1 = s1;
          }

          if (t2 > e2)
          {
              t2 = e2;
          }

          if (t2 <= e1)  //上午
          {
              TimeSpan sts2 = new TimeSpan(t1.Ticks);
              TimeSpan ets2 = new TimeSpan(t2.Ticks);
              TimeSpan interval2 = ets2.Subtract(sts2);
              dayHoule = interval2.TotalHours;
          }
          else if (t1 >= s2) //下午
          {
              TimeSpan sts2 = new TimeSpan(t1.Ticks);
              TimeSpan ets2 = new TimeSpan(t2.Ticks);
              TimeSpan interval2 = ets2.Subtract(sts2);
              dayHoule = interval2.TotalHours;
          }
          else if (t1 >= e1 && t1 < s2) //中午
          {
              TimeSpan sts2 = new TimeSpan(s2.Ticks);
              TimeSpan ets2 = new TimeSpan(t2.Ticks);
              TimeSpan interval2 = ets2.Subtract(sts2);
              dayHoule = interval2.TotalHours;
          }
          else
          {
              TimeSpan sts3 = new TimeSpan(e1.Ticks);
              TimeSpan ets3 = new TimeSpan(s2.Ticks);
              TimeSpan interval3 = ets3.Subtract(sts3);

              TimeSpan sts2 = new TimeSpan(t1.Ticks);
              TimeSpan ets2 = new TimeSpan(t2.Ticks);
              TimeSpan interval2 = ets2.Subtract(sts2);
              dayHoule = interval2.TotalHours - interval3.TotalHours;
          }

          if (dayHoule == dayAllHoule)
          {
              return 1;
          }
          else
          {
              return dayHoule * 0.1;
          }
      }

     public List<LeaveDateTimes> GetWorkTimeOfTwoDay(Trans t, DateTime t1, DateTime t2, string leaveID)
      {
          List<LeaveDateTimes> list = new List<LeaveDateTimes>();

          DateTime? sD = null;
          DateTime? eD = null;
          DateTime? tmp = null;

          if (t1.CompareTo(t2) > 0)
          {
              tmp = t1;
              t1 = t2;
              t2 = tmp.Value;
          }
          sD = t1.AddDays(1).Date;
          eD = t2.Date.AddMilliseconds(-1);
          double days = 0;
          while (sD < eD)
          {
              if (IsWorkDate(t, sD.Value))
              {
                  WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t1);
                  LeaveDateTimes item = new LeaveDateTimes();
                  item.LeaveID = leaveID;
                  item.LeaveDate = sD.Value;
                  item.LeaveDay = 1;
                  item.LeaveHour = 0;
                  item.WorkTime = wt.WorkHour;
                  list.Add(item);
              }
              sD = sD.Value.AddDays(1);
          }
          if (t1.Date != t2.Date)
          {
              if (IsWorkDate(t, t1))
              {
                  WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t1);
                  days = (new WorkTimesBLL()).GetSameDayTimeFirstDate(t1, wt);
                  LeaveDateTimes item = new LeaveDateTimes();
                  item.LeaveID = leaveID;
                  item.LeaveDate = t1.Date;
                  item.LeaveDay = days < 1 ? days / wt.WorkHour : 1;
                  item.LeaveHour = days < 1 ? days : 0;
                  item.WorkTime = wt.WorkHour;
                  list.Add(item);
              }

              if (IsWorkDate(t, t2))
              {
                  WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t2);
                  days = (new WorkTimesBLL()).GetSameDayTimeEndDate(t2, wt);
                  LeaveDateTimes item = new LeaveDateTimes();
                  item.LeaveID = leaveID;
                  item.LeaveDate = t2.Date;
                  item.LeaveDay = days < 1 ? days / wt.WorkHour : 1;
                  item.LeaveHour = days < 1 ? days : 0;
                  item.WorkTime = wt.WorkHour;
                  list.Add(item);
              }
          }
          else
          {
              if (IsWorkDate(t, t1))
              {
                  WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t1);
                  days = (new WorkTimesBLL()).GetSameDayTimeDate(t1, t2, wt);
                  LeaveDateTimes item = new LeaveDateTimes();
                  item.LeaveID = leaveID;
                  item.LeaveDate = t1.Date;
                  item.LeaveDay = days < 1 ? days / wt.WorkHour : 1;
                  item.LeaveHour = days < 1 ? days : 0;
                  item.WorkTime = wt.WorkHour;
                  list.Add(item);
              }
          }
          return list;
      }


      public List<LeaveDateTimes> GetNoWorkTimeOfTwoDay(Trans t, DateTime t1, DateTime t2, string leaveID)
      {
          List<LeaveDateTimes> list = new List<LeaveDateTimes>();

          DateTime? sD = null;
          DateTime? eD = null;
          DateTime? tmp = null;

          if (t1.CompareTo(t2) > 0)
          {
              tmp = t1;
              t1 = t2;
              t2 = tmp.Value;
          }
          sD = t1.AddDays(1).Date;
          eD = t2.Date.AddMilliseconds(-1);
          double days = 0;
          while (sD < eD)
          {
              WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t1);
              LeaveDateTimes item = new LeaveDateTimes();
              item.LeaveID = leaveID;
              item.LeaveDate = sD.Value;
              item.LeaveDay = 1;
              item.LeaveHour = 0;
              item.WorkTime = wt.WorkHour;
              list.Add(item);

              sD = sD.Value.AddDays(1);
          }
          if (t1.Date != t2.Date)
          {

              WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t1);
              days = (new WorkTimesBLL()).GetSameDayTimeFirstDate(t1, wt);
              LeaveDateTimes item = new LeaveDateTimes();
              item.LeaveID = leaveID;
              item.LeaveDate = t1.Date;
              item.LeaveDay = days < 1 ? days / wt.WorkHour : 1;
              item.LeaveHour = days < 1 ? days : 0;
              item.WorkTime = wt.WorkHour;
              list.Add(item);

              wt = (new WorkTimesBLL()).GetWorkTime(t, t2);
              days = (new WorkTimesBLL()).GetSameDayTimeEndDate(t2, wt);
              item = new LeaveDateTimes();
              item.LeaveID = leaveID;
              item.LeaveDate = t2.Date;
              item.LeaveDay = days < 1 ? days / wt.WorkHour : 1;
              item.LeaveHour = days < 1 ? days : 0;
              item.WorkTime = wt.WorkHour;
              list.Add(item);
          }
          else
          {
              WorkTimes wt = (new WorkTimesBLL()).GetWorkTime(t, t1);
              days = (new WorkTimesBLL()).GetSameDayTimeDate(t1, t2, wt);
              LeaveDateTimes item = new LeaveDateTimes();
              item.LeaveID = leaveID;
              item.LeaveDate = t1.Date;
              item.LeaveDay = days < 1 ? days / wt.WorkHour : 1;
              item.LeaveHour = days < 1 ? days : 0;
              item.WorkTime = wt.WorkHour;
              list.Add(item);
          }
          return list;
      }

     public bool IsWorkDate(Trans t, DateTime theDay)
      {
          try
          {
              List<WorkDates> wds = this.Find(t,string.Format(" StartDate<='{0}' AND EndDate>='{0}'", theDay.ToString("yyyy-MM-dd HH:mm:ss")),false);
              if (wds.Count > 0)
              {
                  return wds[0].IsWorkDate;
              }
              else
              {
                  return (theDay.DayOfWeek != DayOfWeek.Saturday && theDay.DayOfWeek != DayOfWeek.Sunday);
              }
          }
          catch (Exception ex)
          {
              throw ex;
          }
      }


### 回答1: Swing综合实训学生请假系统是一款基于Java Swing框架开发的学生请假管理软件,旨在为学校及学生提供一个高效、便捷的请假申请与审批平台。 该系统的主要功能包括学生请假申请、审批、查询、统计等功能。学生可通过登录系统,在界面上填写请假原因、请假时间等信息,并提出申请,等待审批人员进行审核。审批人员可以根据实际情况,对请假申请进行批准或驳回,并在系统中记录审核结果。同时,系统还提供了查询功能,学生和审批人员可以随时查询请假记录和统计数据。 此外,该系统还具备性能稳定、安全可靠、数据准确的特点。系统采用了良好的数据结构和算法设计,确保数据输入和输出的准确性和完整性。同时,系统还支持多用户同时在线使用,为学校提供更为便捷和高效的管理平台。 总之,Swing综合实训学生请假系统是一款有实用性、高效性和实用性的学生请假管理软件,可以为学校提供优质的管理服务,并帮助学生轻松高效地完成请假手续,提高学生学习效率和生活品质。 ### 回答2: swing综合实训是计算机专业的一门实习课程,学生在该课程中需要开发一个请假系统。这个请假系统的设计和实现需要结合Java Swing作为开发框架,使用MySQL数据库存储数据,同时对用户界面和交互进行完善的设计和优化。 请假系统主要包括学生请假和教师审核两个主要功能模块系统中,学生可以通过提交请假申请进行请假的操作。在提交请假申请时,需要填写请假起止时间、请假原因等相关信息。申请提交后,系统将自动发送邮件通知学生请假申请的状态和进度。 教师审核模块主要是用来对学生提交的请假申请进行审核处理。教师可以对学生申请中的相关信息进行查看和审批,并向学生发送审核结果的邮件。 除此之外,该请假系统还有一些辅助模块,如学生和教师登录、密码修改、数据备份和恢复等,这些模块都有助于优化系统的用户体验和安全性。 总之,swing综合实训的请假系统开发是一个完整的软件工程项目,需要学生团队全面合作、注重实践、体验软件开发全流程,从需求分析和设计到编码和测试,最终实现一个可靠的请假系统,为日后的工作做好准备。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值