日期计算器
来源:互联网 发布:php实战视频教程百度云 编辑:程序博客网 时间:2024/05/16 13:48
实现日期加减天数,得到一个日期;日期减日期,得到一个天数。
<span style="font-size:18px;">#include<iostream>#include<cstring>#include<iomanip>using namespace std;//添加打印指定月的信息,一个月的每一天和对应enum{zero,one,tow,three};class Date{public:Date(int year = 2016, int month = 7, int day = 20, int week = 3) :_year(year), _month(month), _day(day), _week(week){}Date operator+ (int day);Date operator- (int day);int operator- (const Date& d);void display()const;friend int bissextile(const Date&, const Date&);friend istream& operator>>(istream& is, Date& d);int count() const;//private:int _year;int _month;int _day;int _week;static int month[12];};int Date::month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int Date::count() const //计算从当前年份开始到当前日期已经过了多少天{int i = 0;int sum = 0;for (i = 0; i <_month - 1; i++){sum += month[i];}return sum + _day;}int bissextile(const Date& d1, const Date& d2) //判断两个日期之间有多少个闰年{int i = 0;int j = 0;if (d1._month>2){i = d1._year;}else{i = d1._year - 1;}if (d2._month <= 2){j = d2._year;}else{j = d2._year + 1;}int sum = 0;for (; i >= j; i--){if (((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0)){sum++;}}return sum; }Date Date::operator+ (int day) //日期加天数{Date tmp = *this;_week = (_week + day - 1) % 7 + 1; //求出这一天对应的星期_year += (day / 365);day = day % 365;if (day - (month[_month - 1] - _day)>0){day -= (month[_month - 1] - _day);_day = 0; }else{_day += day;return *this;}for (int i = _month; day >month[i % 12]; i++){day -= month[i % 12];_month++;}_year += (_month / 12);_month = _month % 12 + 1;_day = day;return *this;}Date Date::operator- (int day) //日期减天数{int d = day % 7;if (_week >d){_week = _week - d;}else{_week = 7 - (d - _week);}Date tmp = *this;_year -= (day / 365);day = day % 365;if (day - _day >= 0){day -= _day;_month--;if (_month == 0){_year--;_month = 12;}_day = 0;}else{_day -= day;return *this;}for (int i = _month - 1; day - month[i] >= 0; i--){day -= month[i];_month--;if (_month == 0){_year--;_month = 12;}if (i == 0){i = 12;}}_day = month[_month - 1] - day;return *this;}int Date::operator- (const Date& d) //日期-日期{int sum = 0;sum = bissextile(*this, d); //判断两个日期之间有多少个闰年return (_year - d._year) * 365 + (*this).count() - d.count() + sum;}void Date::display()const{int i = 0;int j = 0;int d = _day - 1;int week = _week;d = d % 7;if (week >d){week = week - d;}else{week = 7 - (d - week);}cout << " " << _year << "年" << _month << "月" << _day << "日" << "星期" << _week << endl;cout << " 日 " << " 一 " << " 二 " << " 三 " << " 四 " << " 五 " << " 六 " << endl;for (i = 0; i < (week % 7); i++){cout << setw(4) << " ";}j = month[_month - 1];if ((((_year % 4 == 0) && (_year % 100 != 0)) || (_year % 400 == 0)) && _month == 2){j++;}for (i = 0; i <j; i++){week++;cout << setw(4) << setiosflags(ios::right) << (i + 1);if (week % 7 == 0){cout << endl;}}cout << endl;}istream& operator>>(istream& is, Date& d){is >> d._year >> d._month >> d._day >> d._week;return is;}void test1(){Date d1;Date d2;int day = 0;cout << "input>:日期" << endl;cin >> d1;cout << "input>:天数" << endl;cin >> day;d2 = d1 + day;int sum = bissextile(d1, d2);d2 = d2 - sum;d2.display();}void test2(){Date d1;Date d2;Date d3;int day = 0;cout << "input>:日期" << endl;cin >> d1;cout << "input>:天数" << endl;cin >> day;d3 = d1;d2 = d1 - day;int sum = bissextile(d3, d2);d2 = d2+sum;d2.display();}void test3(){Date d1;Date d2;cout << "input>:日期" << endl;cin >> d1;cout << "input>:日期" << endl;cin >> d2;int day=0;day = d1 - d2;cout << "相差"<<day<<"天" << endl;}void menu(){int n;while (1){cout << " 0.exit"<<" 1.日期加天数" << " 2.日期减天数" << " 3.日期减日期" << endl << endl;;cout <<"请选择:";cin >> n;switch (n){case zero:exit(1);break;case one:test1();break;case tow:test2();break;case three:test3();break;default:cout << "输入不合法" << endl;}}}int main(){menu();system("pause");return 0;}</span><span style="font-size:32px;"></span>
1 0
- 日期计算器
- 日期计算器
- 日期计算器
- 日期计算器
- 日期计算器
- 日期计算器
- 日期计算器
- 日期类->日期计算器
- 日期计算器的实现
- C++ 日期计算器
- 实现一个日期计算器
- 【C++】日期类+日期万年历+日期计算器
- 原生js的日期计算器
- C++日期计算器的实现
- 日期类——日期计算器
- 日期类——日期计算器
- 实现日期类(日期计算器)
- 来个超级大模拟-----日期计算器
- react native 首次运行时遇到的一个小问题(小米手机)
- 比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。
- 信息安全相关需求分析
- JAVA的集合框架详解
- 身份证最后一位
- 日期计算器
- springsecurity权限控制系列教程:1 入门
- ffmpeg参数中文详细解释
- LeetCode | Combinations
- HTTP协议支持的6种请求方式
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习
- 线程-实现线程的两种方式
- 【WebService】6.处理Map等CXF无法自动转换的值
- #381 Spiral Matrix II