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
- C++练手之计算老妈的工作时间段
- C#中计算时间段内工作日期
- 工作练手之json数据简单排序
- 根据时间段,返回时间段的工作小时数
- 实现指定时间段的工作天数
- 计算两个时间段内的记录
- java中计算基本的时间段
- java中计算基本的时间段
- java计算两个时间段的重合天数
- iOS 计算两个时间段的差值
- java计算两个时间段的精确天数
- 老博客的日记集之工作之后
- QT学习笔记之MySql如何计算两个时间段相隔的天数
- 给定时间段和星期几,计算该时间段内共有多少个给定的星期几
- 计算时间段相隔日期
- 计算有效时间段
- TimeSpan的用法(如何计算一个thread的时间段)
- java 计算过去的时间到今天的时间段
- 初学安卓:安卓小游戏之2048
- 第10章 vim程序编辑器
- 在Android使用AIDL实现IPC机制
- redis 持久化与备份策略
- 发邮件
- C++练手之计算老妈的工作时间段
- Leetcode: 328. Odd Even Linked List(JAVA)
- 基于XML配置的springMVC小案例
- 基于linux的正则表达式以及工具的使用
- ios开发之多线程NSThread
- 4407: 于神之怒加强版 莫比乌斯反演+线性筛积性函数
- iOS-App installation failed原因及解决方法
- Java 9终于要包含Jigsaw项目了
- 使用Apriori算法进行关联分析