排班查询

轮班表如下:
1,2,3,4;
1,5,2,3;
4,5,2,3;
4,1,5,2;
3,1,5,2;
3,4,1,5;
2,4,1,5;
2,3,4,1;
5,3,4,1;
5,2,3,4;
从2006年1月1日起,1,2,3,4,5各班按此轮班表开始轮流上班,10天为一个轮回。(一天只安排四个班上班,每班工作6小时)
请观察出轮班表的排列规律(不要硬编码,即将该轮班表存储起来),计算出任意一天(如:2006年9月18日)的上班次序。

1/

#include<stdio.h>
    
int IsLeap(int year)//判断是否为闰年
{
    if(year%4==0&&year%100!=0||year%400==0)
        return(1);
    return(0);
}
int Get_Week(int y,int m,int d)
{
  long nday=0;
  int i=2006;
  while(i<y)//处理年份
  {
    if(IsLeap(i)==1)
      nday=nday+366;
    else
      nday=nday+365;
    i++;
  }
  i=1;
  while(i<m)//处理月份
  {
     switch(i)
      {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:nday=nday+31;break;
                case 4:
                case 6:
                case 9:
                case 11:nday=nday+30;break;
                case 2:
                {
                     if(IsLeap(y)==1)
                        nday=nday+29;
                     else
                        nday=nday+28;
                    break;
                 }
       }
     i++;
   }
   nday=nday+d-1;//处理天数
   return(nday%10);


int main()
{
    int data[10][4]={{1,2,3,4},{1,5,2,3},{4,5,2,3},{4,1,5,2},{3,1,5,2},    {3,4,1,5},{2,4,1,5},{1,3,4,1},{5,3,4,1},{5,2,3,4}};
    int year,month,day,i,j;
    printf("/nPlease input year,month,day:");
    scanf("%d%d%d",&year,&month,&day);
    i=Get_Week(year,month,day);
    for(j=0;j<4;j++)
        printf("%d ",data[i][j]);
    return(0);
}

 

2/

#include<iostream>
#include<cmath>
using namespace std;
int mm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class btime
{
   int d;
   int m;
   int y;
   bool rflag;//是润年就为真
   public:btime();
          btime(int d,int m,int y);
          btime(const btime &bt);
          void set(int d,int m,int y);
          void checkr();
          int checkr(int year);
          int tdfrom11();//算出距本年元旦 一共经过的日期日期总数
          bool operator >(btime b2);
          int operator-(btime b2);//日期之间的时间差距
};
inline btime::btime(){d=0;m=0;y=0;}
btime::btime(int d,int m,int y){this->d=d;this->m=m;this->y=y;checkr();}
btime::btime(const btime &bt){d=bt.d;m=bt.m;y=bt.y;checkr();}
inline void btime::set(int d,int m,int y){this->d=d;this->m=m;this->y=y;checkr();}
void btime::checkr()
{
    mm[2]=28;
    if((y%4==0&&y%100!=0)||y%400==0){ rflag=true; mm[2]=29;    }
}
int btime::checkr(int year)
{
    int td=365;
    if((year%4==0&&year%100!=0)||year%400==0){ td=366;}
    return td;
}
int btime::tdfrom11()
{
   int td=0;
   int i=1;
   for(;i<this->m;i++)
   { 
       td+=mm[i];
   }
   for(i=1;i <= this->d;i++) 
   {  
       td++;
   }
   return td;
}
bool btime::operator >(btime b2)
{
  if(y>b2.y) return true;
  if(y<b2.y) return false;
  if(y==b2.y)
  {
    if(m>b2.m) return true;
    else if(m<b2.m) return false;
    else 
    {
      if(d>b2.d) return true;
      else return false;
    }
  } return false;
}
int btime::operator-(btime b2)
{
    int sum=0;
    bool flag=false;
    if(this->y > b2.y)
    { 
        for(int yi=b2.y;yi<this->y;yi++)
        {
           sum+=checkr(yi);
        }

    }
    else if(this->y < b2.y)
    {
          flag=true;
        for(int yi=this->y;yi<b2.y;yi++)
        {
           sum+=checkr(yi);
        }
    }
    else 
    {
       return abs(this->tdfrom11()-b2.tdfrom11());
    }

    if(flag==false)
    {
       sum=sum+this->tdfrom11()-b2.tdfrom11();
    }
    else 
    {
     sum=sum-this->tdfrom11()+b2.tdfrom11();
    }
    return sum;
}
void getb(int i)
{
  int a[10] = {1,1,0,2,2,3,3,4,4,0};
  int b[4];
      i=i-1;
      b[a[i]-1]=1;
      b[a[(i+4)%10]-1]=2;
      b[a[(i+6)%10]-1]=3;
      b[a[(i+8)%10]-1]=4;
      b[a[(i+2)%10]-1]=5;
       for(int j=0;j<4;j++)
       {
         cout<<b[j]<<" ";
       }
       cout<<endl;
}

int main()
{  
 int i=0;
    btime BaseT(1,1,2006);
    
    int d;
    int m;
    int y;
    do
    {
        cout<<"请输入你要查询的日期(以年月日为0结束)"<<endl;
        cout<<"year:";cin>>y;
        cout<<"month:";cin>>m;
        cout<<"day:";cin>>d;
        if(y==0||m==0||d==0)
        {
          break;
        }
        btime b2(d,m,y);
        if(BaseT > b2)
        {
           cout<<(BaseT-b2)<<endl;
           i=11-(BaseT-b2)%10;;
        }
        else
        {
            i=(BaseT-b2)%10+1;
        }
        getb(i);
    }while(1);
    return 0;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vxe-table 是一个强大的基于 Vue.js 的表格组件,可以用于排班管理系统。通过 vxe-table,我们可以轻松地实现排班功能。 在排班系统中,我们通常需要考虑以下几个方面的内容: 1. 员工信息管理:通过 vxe-table 的数据绑定功能,我们可以方便地展示和编辑员工的基本信息,如姓名、部门、职位等。同时,也可以实现员工信息的增删改查操作。 2. 排班规则设定:通过 vxe-table 的表头固定功能,我们可以设定排班的时间段,如每天上午、下午、晚上等。可以通过下拉选择框、单选框等方式选择合适的时间段,并在表格中展示。 3. 排班安排:通过 vxe-table 的表格编辑功能,我们可以点击表格中的空单元格,进行排班的操作。可以选择员工进行排班,并可根据需要进行附加信息填写,如备注、加班等。 4. 排班查询:通过 vxe-table 的排序和筛选功能,我们可以方便地根据条件查询排班的员工信息。可以按照姓名、部门、日期等进行排序和筛选,提高查询的效率和准确性。 5. 数据导入导出:通过 vxe-table 的数据导入和导出功能,我们可以方便地将排班信息导入到系统中,或者将排班结果导出为 Excel、CSV 等格式,方便进行数据分析和备份。 总之,vxe-table 是一个功能丰富、易于使用的表格组件,可以很好地支持排班管理系统的开发。它可以简化排班过程中的各种操作,并提供了一系列方便的功能,帮助用户快速准确地完成排班工作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值