利用C++日期类实现简单的日期计算器

网络上有一个日期计算器可以通过输入的日期来计算天数,或者通过日期加减天数来计算出相应的日期。这个小工具对在我们生活中还是非常有用的,它的代码实现是不是很难呢?其实用我们学习过的C++类来处理问题就变得很简单了。

参考代码:(加强版)

#include<iostream>
#include<cstdlib>
using namespace std;

class Date
{
public:
	Date(int year=1900,int month=1,int day=1)//构造函数
		:_year(year)
		,_month(month)
		,_day(day)
	{
		if(IsInvalidDate())
		{
			_year=1900;
			_month=1;
			_day=1;
		}
	}

	Date(const Date& d)//拷贝构造
	{
		_year=d._year;
		_month=d._month;
		_day=d._day;
	}

	bool IsInvalidDate()
	{
		if((_year<1900) || ((_month<1) || (_month>12)) || ((_day<1) || (_day>DayInMonth())))
		{
			return true;
		}
		return false;
	}

	int DayInMonth()
	{
		int Days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
		if((_year%400==0) ||((_year%100!=0) && (_year%4==0)))
		{
			Days[2]+=1;
		}
		return Days[_month];
	}

	Date& operator=(const Date& d)
	{
		if(this!=&d)
		{
			_year=d._year;
			_month=d._month;
			_day=d._day;
		}
		return *this;
	}

	Date operator+(int Day)
	{
		Date d(*this);
		d._day+=Day;
		d.ToCorrectDate();
		return d;
	}

	Date operator-(int Day)
	{
		Date d(*this);
		d._day-=Day;
		d.ToCorrectDate();
		return d;
	}

	Date operator+=(int Day)
	{
		this->_day+=Day;
		this->ToCorrectDate();
		return *this;
	}

	Date operator-=(int Day)
	{
		this->_day-=Day;
		this->ToCorrectDate();
		return *this;
	}

	void ToCorrectDate()
	{
		while(_day<=0)
		{
			if(1==_month)
			{
				_month=12;
				_year-=1;
			}
			else
			{
				_month-=1;

			}
			_day+=DayInMonth();
		}
		while(_day>DayInMonth())
		{
			if(12==_month)
			{
				_month=1;
				_year+=1;
			}
			else
			{
				_month+=1;

			}
			_day-=DayInMonth();
		}
	}

	int operator-(Date& d)
	{
		int days=0;
		Date d1(d);
		Date d2(*this);
		if(d1>d2)
		{
			d1=(*this);
			d2=d;
		}
		while(d1!=d2)
		{
			days++;
			d2-=1;
		}
		return days;
	}

	bool operator==(const Date& d)
	{
		return (d._year==_year && d._month==_month && d._day==_day);

	}

	bool operator!=(const Date& d)
	{
		return !(d._year==_year && d._month==_month && d._day==_day);

	}

	bool operator>(const Date& d)
	{
		return ((_year>d._year) || ((_year==d._year) && (_month>d._month)) || ((_year==d._year) && (_month==d._month) &&(_day>d._day)));
	}

	bool operator<(const Date& d)
	{
		return !((_year>d._year) || ((_year==d._year) && (_month>d._month)) || ((_year==d._year) && (_month==d._month) &&(_day>d._day)));
	}

	friend ostream& operator<<(ostream& os,Date& d);
	friend istream& operator>>(istream& in,Date& d);
private:
	int _year;
	int _month;
	int _day;
};

ostream& operator<<(ostream& os,Date& d)
{
	os<<d._year<<"-"<<d._month<<"-"<<d._day<<endl;
	return os;
}

istream& operator>>(istream& in,Date& d)
{
	in>>d._year;
	in>>d._month;
	in>>d._day;
	return in;
}

int main()
{
	Date d2;
    Date d1;
	int days=0;
	int input=1;
	while(input)
	{
		cout<<"***********1、通过日期求天数*************************"<<endl;
	    cout<<"***********2、通过天数求日期——日期减天数***********"<<endl;
		cout<<"***********3、通过天数求日期——日期加天数***********"<<endl;
	    cout<<"请选择:"<<endl;
		cin>>input;
		switch(input)
		{
		case 1:
			cout<<"请输入日期:"<<endl;
			cin>>d1>>d2;
			cout<<(d1-d2)<<endl;
			break;
		case 2:
			cout<<"请输入日期和天数:"<<endl;
			cin>>d1;
			cin>>days;
			cout<<(d1-days)<<endl;
			break;
		case 3:
			cout<<"请输入日期和天数:"<<endl;
			cin>>d1;
			cin>>days;
			cout<<(d1+days)<<endl;
			break;
		}
	}
	system("pause");
	return 0;
}

博主可能随着知识增长会将其做的更加强大,尽请期待~~~~~~

时间: 2024-10-10 09:29:22

利用C++日期类实现简单的日期计算器的相关文章

时间类和日期类派生出时间日期类

今天再写一个多重继承的应用实例,时间类和日期类派生出时间日期类 程序代码 #include <iostream> using namespace std; class Date//日期类 { public: //构造函数 Date(int y = 0, int m = 0, int d = 0); //设置日期 void SetDate(int y,int m,int d); //打印日期 void PrintDate() { cout<<year<<"年&q

Java中日期类型和mysql中日期类型进行整合

1. java与mysql中日期.时间类型总结: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mysql(版本:5.1.50)的时间日期类型如下: datetime 8bytes xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00到9999-12-31 23:59:59 timestamp 4bytes xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01到2038 date 3bytes xxxx-x

java — 时间日期类

java -- 时间日期类的简单操作 一.java.util.Date类 获取系统时间 1 public static void main(String[] args) { 2 // 使用Date获取系统时间 3 Date date = new Date(); 4 System.out.println(date); 5 } 输出结果:Sun Jan 13 12:30:30 CST 2019 输出结果不符合中国人的阅读习惯,我们得使用 SimpleDateFormat类 进行一些操作,按照我们自己

OC - 时间日期类NSDate

OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSDate *date = [NSDate date]; NSLog(@"当前零时区时间 %@", date); //2.获得本地时间 东八区 晚八个小时 以秒计时 NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:8 * 60 * 60

实现日期类

题目:实现一个日期类,主要实现日期计算功能: 日期+天数=日期: 日期-天数=日期: 日期-日期=天数: 要实现该日期类,必须熟练掌握运算符重载的概念和实现方法. 以下是编写的一个日期类: 头文件: #ifndef __DATE_H__ #define __DATE_H__ #include<iostream> using namespace std; class Date { public:  Date(int year = 1900, int month = 1, int day = 1)

类实现一个简单的日期计算器

作为一个程序员,对于时间的概念已经退化到了三岁小孩水平,常常会醉心于写一个程序忘记了时间,一个下午,一天,甚至一个星期就过去了.对于一个刚入程序员大门的我来说,时光真的是匆匆溜走,所以经常会百度一个日期计数器,算今天到那些特别的日子还有多少天.用多了后就觉得现在储备的编程知识可以去实现一个简单的日期计算器了.所以就写了这篇博客给大家分享一下. 首先,得设计这个日期类,一个日期类应该具有私有数据成员应该有年Year,月month,日day.在这我们就不精确到时分秒了. #pragma once #

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

用c++实现的简单的日期类

自己写的这个日期类实现了简单的一些日期可能会用到的功能, 比如加减某一个日期等等,详细的已在代码里面标注出来了. #include <iostream>using namespace std; class Date{public: Date(int year = 1900, int month = 1, int day = 1)  :_year(year)    //初始化列表     ,_month(month)     ,_day(day) {  if (year < 1900   

c++ 日期类

#pragma once //头文件 class Date{ private: int _year; int _month; int _day; public: Date(int year=1990,int month=1,int day=1); Date(const Date& tmp);     ~Date(); int operator-(const Date& tmp);//日期相减 Date operator+(int day);//日期与天数相加 Date& opera