基于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--()//前置–
 {
  *this -= 1;
  return *this;
 }
 Date operator--(int)//后置 –
 {
  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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • c++编写简单的计算器程序

    首先来看下本人的开发环境 系统:win7 电脑:dell 运行环境:vs2015 语言:c++ 简单计算器代码 //四则运算 #include "stdafx.h" #include<iostream> #include<stdio.h> using namespace std; void add() { printf("输入要计算的加数(例如a b)\n"); int adda=0, addb=0,addc=0; cin >>

  • C++有限状态机实现计算器小程序

    本文介绍利用有限状态机原理开发计算器小程序的过程. 实现的功能 支持整数.小数输入 支持+ - * / 四则运算 CE 清除当前操作数 C 清除所有.回到初始状态 回显操作数和结果 HSM状态图 计算器可以分为七种状态:Start.Operand_1.Negate_1.Operator.Operand_2.Negate_2.Error.其中Start.Operand_1.Operand_1状态又分了几种子状态. 下面简要的介绍下状态状态转换的过程: 启动软件,进入Start状态 当用户点击1-9

  • 简单实现C++复数计算器

    本文实例为大家分享了简单实现C++复数计算器的具体代码,供大家参考,具体内容如下 1.有关计算器的功能  A,实现多个复数(包括实数)的加减乘除,大小比较,   B.实现十进制实数的进制转换,可以转换任意进制 2.有关设计的原理  A.复数计算的部分,采用运算符的重载,进行复数的加减乘除以及大小比较  对于输入输出,(>>和<<),加减乘除运算进行重载.  输入的重载,实现a+bi形式的复数的输入.  输出的重载,实现实数的输出(实现特殊的只输出实部虚部之类的).  加减乘除的重载

  • C/C++经典实例之模拟计算器示例代码

    前言 本文主要给大家介绍了关于利用C/C++如何实现模拟计算器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Problem Description 简单计算器模拟:输入两个整数和一个运算符,输出运算结果. Input 第一行输入两个整数,用空格分开: 第二行输入一个运算符(+.-.*./). 所有运算均为整数运算,保证除数不包含0. Output 输出对两个数运算后的结果. Example Input 30 50 * Example Output import j

  • C/C++实现日期计算器的示例代码

    问题介绍: 今天突然看到一个问题看起来蛮有趣的,跟大家分享一下. 给定任意日期对该日期进行加减天数,最后得出加减后出现的日期.以及给两个日期你可以得出他们两个之间相隔多少天.(需要考虑闰年,每个月天数不同,我们需要写一个我们直接可以使用的日期加减器)因为时间比较仓促,我也没有写界面,只有其中几个主要的函数的架构思想以及简单的调试就发出来了. 代码实现: #include<iostream> #include<Windows.h> #include<assert.h> u

  • 基于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

  • 基于C++实现一个日期计算器

    目录 一.日期计算器的功能 二.获取每个月的天数 三.Date类中的默认成员函数 1.构造函数 2.析构函数 3.拷贝构造 4.赋值运算符重载 四.运算符重载 1.+=.+.-=.- 2.==.!=.>.>=.<.<= 3.前置++和--.后置++和-- 五.日期类代码 一.日期计算器的功能 实现日期类的==.!=.+=.+.-=.-.>=.>.<=.<.前置++和--.后置++和--. 二.获取每个月的天数 int GetMonthDay(int year

  • 基于C++实现日期计算器的详细教程

    目录 一.前言 二.日期类的实现 检查日期的合法性 <  运算符重载 == 运算符重载 <= 运算符重载 >  运算符重载 >= 运算符重载 != 运算符重载 改进和优化 日期 + 天数 日期 += 天数 日期 -= 天数 日期 - 天数 前置 ++ 后置 ++ 前置 -- 后置 -- 日期 - 日期 三.总结 一.前言 在我们的日常生活中,我们可能需要计算几天后的日期,或计算日期差等,现如今计算日期的方式有很多,简单粗暴的直接查看日历,快捷点的直接使用日期计算器来求得,先给一个网

  • 基于wxpython开发的简单gui计算器实例

    本文实例讲述了基于wxpython开发的简单gui计算器.分享给大家供大家参考.具体如下: # wxCalc1 a simple GUI calculator using wxPython # created with the Boa Constructor which generates all the GUI components # all I had to do is add some code for each button click event # Boa free from: h

  • java基于正则表达式实现时间日期的常用判断操作实例

    本文实例讲述了java基于正则表达式实现时间日期的常用判断操作.分享给大家供大家参考,具体如下: 最近需要完成一个判断用户输入时间日期类型来进行相应操作的业务.实现这个功能自然少不了用到正则表达式,提高正则表达式的话,其实它的用法很简单,只需把这个表格记住并且会灵活运行就可以了. 元字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,"\n"匹配字符"n"."\\n"匹配一个换行符.序列&qu

  • C#实现简单加减乘除计算器

    第一次学习C#,做了个简单的加减乘除计算器,只能实现两个因数的运算. 主要是练习下C#编程,和以前用过的VB差不多.与VB6不同的是,C#代码区分大小写. Windows窗口程序主要也是由一些控件组成,响应响应的事件(event),实现具体的功能. 1.效果图如下所示 2.代码如下所示 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syst

  • mfc入门教程之实现一个简单的计算器

    mfc学习之前的了解 什么是mfc? MFC是微软基础类的缩写(Microsoft Foundation Classes),是一个庞大的类库,可以理解为一种在Windows上开发软件的架构,是微软专为Visual C++定制的.该类库提供一组通用的可重用的类库供开发人员使用. 没有MFC之前,Windows上用Win32 API进行编程,之后MFC出现,在一定程度上提高了软件开发效率,它是对win32 API的封装,所以易用性好,不过性能会比win32开发低一些,二者各有所长. 在Windows

  • java实现简单年龄计算器

    本文实例为大家分享了java实现简单年龄计算器的具体代码,供大家参考,具体内容如下 制作一个如下图年龄计算器 根据题目,我做了一个由Calendar类以及年月日各相减得到的年龄,当然正确的方法不止一个,以下为我的源代码和结果截图: package com.Date; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.uti

  • Java实战之基于TCP实现简单聊天程序

    目录 一.如何实现TCP通信 二.编写C/S架构聊天程序 1.编写服务器端程序 - Server.java 2.编写客户端程序 - Client.java 3.测试服务器端与客户端能否通信 4.程序优化思路 - 服务器端采用多线程 一.如何实现TCP通信 要实现TCP通信需要创建一个服务器端程序和一个客户端程序,为了保证数据传输的安全性,首先需要实现服务器端程序,然后在编写客户端程序. 在本机运行服务器端程序,在远程机运行客户端程序 本机的IP地址:192.168.129.222 远程机的IP地

  • jQuery实现简单日期格式化功能示例

    本文实例讲述了jQuery实现简单日期格式化功能.分享给大家供大家参考,具体如下: 代码如下,引入jquery后直接后加入以下代码刷新可测试 Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 &

随机推荐