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

来源:互联网 发布:aigowifidisk mac 编辑:程序博客网 时间:2024/04/29 04:00

需求

老妈的工作属于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.cppandydeMacBook-Pro:c andy$ ./a.out day work 1--白班第一天
0 0
原创粉丝点击