C++练手之计算老妈的工作时间段

需求

老妈的工作属于3班倒,给老妈打电话,老妈可能处于上班状态。 如果可以计算老妈的上班状态就好了。

实现

这里很简单的实现,不考虑一些异常节日什么的。如果某天工作顺序调换的话,改变输入的日期和状态就可以了。
假设知道老妈某个日期的工作状态,作差相减即可,得到当日老妈的工作状态。MyDate类用来计算两个日期的天数差。天数差是相对于1年1月1日来进行计算,比较方便。
实现也没啥技术含量,写着玩。。。

//date.h
#include<time.h>
class MyDate {
    int year;
    int month;
    int day;

    public:
    MyDate(int year, int month, int day);
    static int GetAbsDays(MyDate x);
    static int GetDiffDays(MyDate a, MyDate b);
};
//date.cpp
#include "date.h"

MyDate::MyDate(int year, int month, int day)
{
    this->year = year;
    this->month = month;
    this->day = day;
}

int MyDate::GetAbsDays(MyDate x)
{
    int i;
    int month_day[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int year = x.year-1;  // 因为欲求距离1年1月1日的距离
    int days = year * 365 + year/4 - year/100 + year/400;  //求得之前闰年的数量并在天数上进行想加
    if((x.year%4==0 && x.year%100!=0) || x.year%400==0) month_day[1]++; //当前年为闰年,二月加 1
    for(i=0; i<x.month-1; i++)
        days += month_day[i];
    days += x.day-1;  //今天应该是不算如天数计数
    return days;
}

int MyDate::GetDiffDays(MyDate a, MyDate b)
{
    return GetAbsDays(b) - GetAbsDays(a);
}
//work.cpp
#include<iostream>
#include<string>
#include "date.h"
using namespace std;

int main()
{
    string workArray[12];
    workArray[0]="day work 1--白班第一天";
    workArray[1] = "day work 2--白班第二天";
    workArray[2] = "day work 3--白班第三天";
    workArray[3] = "day work 4--白班第四天";
    workArray[4] = "night work 1--夜班第一天";
    workArray[5] = "night work 2--夜班第二天";
    workArray[6] = "night work 3--夜班第三天";
    workArray[7] = "night work 4 and middle work 1--夜班第四天也是中班的第一天";
    workArray[8] = "middle work 2--中班第二天";
    workArray[9] = "middle work 3--中班第三天";
    workArray[10] = "middel work 4--中班第四天";
    workArray[11] = "rest day--休息";

    //输入
    MyDate start(2016,3,2);
    int startIndex = 0;
    //获取当前时间
    time_t nowtime=time(NULL);
    struct tm *local = localtime(&nowtime);
    int todayYear = local->tm_year+1900;
    int todayMonth = local->tm_mon+1;
    int todayDay = local->tm_mday;
    //printf("%d %d %d\n",todayYear,todayMonth,todayDay);
    MyDate today(todayYear,todayMonth,todayDay);

    int diffDay = (MyDate::GetDiffDays(start,today)) %12;
    //printf("%d\n", diffDay);
    int endIndex = (startIndex + diffDay)%12;
    cout << workArray[endIndex] << endl;
}

编译运行:

andydeMacBook-Pro:c andy$ g++ work.cpp date.cpp
andydeMacBook-Pro:c andy$ ./a.out 
day work 1--白班第一天

你可能感兴趣的:(C++,3班倒)