欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

基于C++实现简单日期计算器

时间:2020-10-18 11:29:13|栏目:C代码|点击:

基于C++编写的简单的日期计算器,供大家参考,具体内容如下

以下代码是在VS2013下编译运行的:

下面展示我的测试结果:

标题

代码如下:

#include<iostream>
using namespace std;
#include"vld.h"//这个是检测虚拟内存是否泄露,我在这里安装了vld,所以直接用,包含头文件就好了
 
class Date
{
public:
 //构造函数
 Date(int year=2018, int month=8, int day=16)
 {
 _year = year;
 _month = month;
 _day = day;
 }
 //析构函数
 ~Date()
 {
 
 }
 //拷贝构造函数
 Date(const Date& d)//必须传引用,传值会引发无穷递归调用
 {
 _year = d._year;
 _month = d._month;
 _day = d._day;
 }
 //赋值重载
 Date& operator=(const Date& d)
 {
 if (this != &d)
 {
  this->_year = d._year;
  this->_month = d._month;
  this->_day = d._day;
 }
 return *this;
 }
 //打印输出
 void showDate()
 {
 cout << "原来的日期:" << _year << "-" << _month << "-" << _day << endl;
 }
 
 void showDate1()
 {
 cout << "加上指定天数:" << _year << "-" << _month << "-" << _day<<endl;
 }
 void showDate2()
 {
 cout << "减去指定天数:" << _year << "-" << _month << "-" << _day << endl;
 }
 
 void showDate3()
 {
 cout << "加等指定天数:" << _year << "-" << _month << "-" << _day << endl;
 }
 
 void showDate4()
 {
 cout << "减等指定天数:" << _year << "-" << _month << "-" << _day << endl;
 }
 void showDate5()
 {
 cout << "前置++:" << _year << "-" << _month << "-" << _day << endl;
 }
 void showDate6()
 {
 cout << "后置++:" << _year << "-" << _month << "-" << _day << endl;
 }
 void showDate7()
 {
 cout << "前置--:" << _year << "-" << _month << "-" << _day << endl;
 }
 void showDate8()
 {
 cout << "后置--:" << _year << "-" << _month << "-" << _day << endl;
 }
 void showDate9()
 {
 cout << "要比较的日期:" << _year << "-" << _month << "-" << _day << endl;
 }
 
 bool operator ==(const Date& d)//判断两个日期相等
 {
 return _year == d._year
  &&_month == d._month
  &&_day == d._day;
 }
 bool operator !=(const Date& d)//判断两个日期不相等
 {
 return !(*this == d);
 }
 bool operator>(const Date& d) // > 
 {
 if ((_year > d._year) || (_year ==d._year&&_month > d._month) || (_year ==d._year&&_month == d._month&&_day > d._day))
 {
  return true;
 }
 return false;
 }
 bool operator>=(const Date& d)// >= 
 {
 return ((*this == d) || *this > d);
 }
 bool operator<(const Date& d) // <
 {
 if ((_year <d._year) || (_year ==d._year&&_month <d._month) || (_year == d._year&&_month ==d._month&&_day < d._day))
 {
  return true;
 }
 return false;
 }
 bool operator<=(const Date& d) //<=
 {
 return ((*this == d) || *this > d);
 }
 
 //是否是润年
 bool IsLeapYear(int year)
 {
 return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
 }
 
 int GetDayByYearAndMonth(int year, int month)//判断返回的月份的天数
 {
 int MonthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 if (IsLeapYear(year) && month == 2)
 {
  return 29;
 }
 else{
  return MonthDay[month];
 }
 }
 
 
 //日期加上天数,并不会改变原来的日期值
 Date operator+(int dayNum)
 {
 if (_day<0)
 {
  return *this -(-_day);
 }
 Date tmpDate(*this);//拷贝this指针
 tmpDate._day += dayNum;
 while (tmpDate._day > GetDayByYearAndMonth(_year, _month))
 {
  tmpDate._day = tmpDate._day -GetDayByYearAndMonth(tmpDate._year,tmpDate._month);
  tmpDate._month += 1;
  if (tmpDate._month > 12)
  {
  ++tmpDate._year;
  tmpDate._month = 1;
  }
 }
 return tmpDate;
 
 }
 Date& operator+=(int days)// +=,会改变原来的值,进而在原来的值上面继续加指定的天数
 {
 _day += days;
 while (_day > GetDayByYearAndMonth(_year, _month))
 {
  _day =_day - GetDayByYearAndMonth(_year,_month);
  _month += 1;
  if (_month > 12)
  {
  ++_year;
  _month = 1;
  }
 }
 return *this;
 }
 Date& operator++() //前置++
 {
 *this += 1;
 return *this;
 }
 Date operator++(int)//后置++ 
 {
 Date tmpDate(*this);
 *this += 1;
 return *this;
 }
 //日期减去天数,并不会改变原来的日期值
 Date operator-(int dayNum)
 {
  Date tmpDate(*this);
  tmpDate._day -= dayNum;
  while (tmpDate._day <0)
  {
  tmpDate._month -= 1;
  if (tmpDate._month <= 0)
  {
   --tmpDate._year;
   tmpDate._month = 12;
  }
  tmpDate._day += GetDayByYearAndMonth(tmpDate._year,tmpDate._month) ;
  }
  return tmpDate;
 }
 Date& operator-=(int dayNum)//-=,会改变原来的值,进而在原来的值上面继续减指定的天数
 {
  _day -= dayNum;
  while (_day <0)
  {
  _month -= 1;
  if (_month <= 0)
  {
   --_year;
   _month = 12;
  }
  _day += GetDayByYearAndMonth(_year,_month);
  }
  return *this;
 }
 Date& operator--()//前置?C 
 {
  *this -= 1;
  return *this;
 }
 Date operator--(int)//后置 ?C
 {
  Date tmpDate(*this);//先对*this进行拷贝
  *this -= 1;
  return *this;
 }
 int operator-( const Date& d) // 两个日期相隔天数 
 {
  Date big(*this);
  Date small(d);
  int day = 0;
  int flags = 1;
  if (big <small)
  {
  small = *this;
  big = d;
  flags *= -1;
  }
  
  while (small != big)
  {
  small =small+1;
  ++day;
  }
  
  return day*flags;
 }
 
 
 
 
 
private://私有成员变量
 int _year;
 int _month;
 int _day;
};
 
 
int main()
{
 Date d1(2018,1,1);
 d1.showDate();
 Date d2;
 d2 = d1 + 66;
 d2.showDate1();
 d2 = d1 + 1;
 d2.showDate1();
 Date d3;
 d3 = d1 - 20;
 d3.showDate2();
 Date d4;
 d4+=10;
 d4.showDate3();
 d4 += 10;
 d4.showDate3();
 Date d5;
 d5 -= 10;
 d5.showDate4();
 d5-= 10;
 d5.showDate4();
 
 Date d6;
 ++d6;
 d6.showDate5();
 Date d7;
 d7++;
 d7.showDate6();
 
 Date d8;
 d8--;
 d8.showDate7();
 Date d9;
 d9--;
 d9.showDate8();
 
 Date d10(2018, 8, 18);
 d10.showDate9();
 cout << "(d1 < d10):是否小于(1:表示小于 0表示:大于等于):"<<(d1 < d10) << endl;
 
 Date d11(2018,1,1);
 d11.showDate9();
 cout <<"(d1 > d10):是否大于(1:表示大于 0表示小于等于)"<< (d1 > d10) << endl;
 Date d12(2018,8,18);
 d12.showDate9();
 cout <<"(d1 >= d10):是否大于等于(0:表示小于 1表示:大于等于)"<< (d1 >= d10) << endl;
 Date d13(2018,10,1);
 d13.showDate9();
 cout <<"(d1 <= d10):是否小于等于(1:表示小于等于 0表示:大于)"<< (d1 <= d10) << endl;
 Date d14(2018,1,2);
 d14.showDate();
 cout << "两个日期相距天数:" <<(d1-d14) << endl;
 system("pause");
 return 0;
}

上一篇:Linux下C语言的几道经典面试题小结(分享)

栏    目:C代码

下一篇:Visual C++ 常用数据类型转换方法详解第1/2页

本文标题:基于C++实现简单日期计算器

本文地址:http://www.codeinn.net/misctech/13220.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有