⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 自定义一个简单的日期类DateType
💻
字号:
/*22.自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。
而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。
	例如,下面给出的"雏形"可用来实现对天的增加,比较两个日期是否相等,
	以及对日期的输出等操作。请完成各类成员函数,并编制主函数,说明DateType类对象,
	对定义的各成员函数进行调用,以验证它们的正确性。
class DateType {					//自定义的日期类DateType
	int y,m,d;  					//数据成员,表示当前日期的年、月、日
public:
	DateType(int y0=1, int m0=1, int d0=1); 
				//构造函数,设定年、月、日;并设置参数默认值
	void incrementDay();  			//增加1天
   	bool equal(DateType dt2);  		//判断二日期是否相等 
	void printDate();  				//屏幕输出日期对象的有关数据(年、月、日)
};
注意,当对日期增加1天后,也会涉及所谓的"进位"问题:首先算出本"日"所在的月份具有的天数N,
若加1之后的"日"数值超过所在的月份具有的天数N时,"进位"到月,而月份若超过12时还要"进位"到年。
思考:可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,
计算某日期为星期几,打印对象当前数据的y年m月的月历,一次增加若干天,对两个日期进行其他比较运算等。*/
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
class DateType                     	//自定义的日期类DateType
{ 					//数据成员,表示当前日期的年、月、日
public:
	DateType(){y=m=d=1;} //构造函数,设定年、月、日;并设置参数默认值
	Init(int a,int b,int c)
	{
		y=a;m=b;d=c;
	}
	int IsLeapYear(int y)
	{
		return(y%4==0&&y%100!=0||y%400==0);
	                                //判断是否为闰年
	}
	void incrementDay();  			//增加1天
   	bool equal(DateType dt2)
	{
		if(dt2.d==d&&dt2.m==m&&dt2.y==y)
		return true;
	    else return false;	        //判断二日期是否相等 
	}
	void yueli();                   // 打印月历
	void printDate()
	{
		cout<<setw(4)<<y<<"年"<<setw(2)<<m<<"月"<<setw(2)<<d<<"日"<<endl;
	} //屏幕输出日期对象的有关数据(年、月、日)

	int isWrong();       //出错处理
private: 
	int y,m,d; 
};
void DateType::incrementDay()
{
	int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	if(m==2&&IsLeapYear(y)==1)
	{	
		if(d==29)
		{d=1;m++;}
		else
			d++;
	}
	else 
	{
		if(d<days[m-1])
			d++;
		else
		{
			if(m==12)
			{d=1;m=1;y++;}
			else
			{d=1;m++;}
		}
    }
}
int DateType::isWrong()
{
	int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	if(IsLeapYear(y)) days[1]=29;
    if(y<1||m<1||m>12||d<1||d>days[m-1])
		return 1;
	else
		return 0;
}
//----------------------------------------------此程序段由第8题代码稍作改变即可得到,不再注释
void DateType::yueli()
{
	int i,n;
    int day;
    int days[]={31,28,31,30,31,30,31,31,30,31,30,31};

	long int Year_days = 0;
    int Year_Start = 1;
    int Per_Year_Days;
    while(Year_Start<y)
	{
		if(IsLeapYear(Year_Start))
			Per_Year_Days=366;
        else
			Per_Year_Days=365;
		Year_days=Year_days+Per_Year_Days;
		Year_Start++;
	}
	for(int j=1;j<m;j++){
		switch(j)
		{
        case 1:
			Year_days=Year_days+days[0];
            break;
        case 2:
			if(IsLeapYear(y))
				Year_days=Year_days+29;
			else
				Year_days=Year_days+days[1];
            break;
        case 3:
			Year_days=Year_days+days[2];
            break;
        case 4:
			Year_days=Year_days+days[3];
            break;
        case 5:
			Year_days=Year_days+days[4];
            break;
        case 6:
			Year_days=Year_days+days[5];
            break;
        case 7:
			Year_days=Year_days+days[6];
            break;
        case 8:
			Year_days=Year_days+days[7];
            break;
        case 9:
			Year_days=Year_days+days[8];
            break;
        case 10:
			Year_days=Year_days+days[9];
            break;
        case 11:
			Year_days=Year_days+days[10];
            break;
		}
	}
	 i =Year_days%7;
	 cout<<endl;
     cout<<"Mon Tue Wed Thu Fri Sat Sun"<<endl;
     if(i!=0)
		 for(n=0;n<i;n++)
         cout<<"    ";
         day=1;
	 if(IsLeapYear(y)&&m==2)
        while(day<=29)
		{
			 if(day>1)
				 if(Year_days%7==0)
                 cout<<endl;
             if(day>=10)
		         cout<<day<<"  ";
             else
                 cout<<day<<"   ";
			 Year_days++;
             day++;
		 }
	else
		while(day<=days[m-1])
		{
			if(day>1)
                if(Year_days%7==0)
                cout<<endl;
            if(day>=10)
                cout<<day<<"  ";
            else
                cout<<day<<"   ";
            Year_days++;
            day++;
		}
	cout<<endl;
}
//---------------------------------------------------------------------
void main()
{
	int y,m,d,n;
	DateType date;
	cout<<"输入年、月、日,设定为当前日期:"<<endl;
	cin>>y>>m>>d;
	date.Init(y,m,d);
	while(date.isWrong())
	{ 
	   cout<<"输入有误!请重新输入!"<<endl;
       cin>>y>>m>>d;
	   date.Init(y,m,d);
	}
	DateType date2;
	DateType date3;
	while(!date.isWrong())
	{
		char op;int i;
		cout<<"请选择操作:"<<endl;
		cout<<"----------1.屏幕输出当前日期"<<endl;
		cout<<"----------2.比较两日期是否相等"<<endl;
		cout<<"----------3.屏幕输出n天之后的日期"<<endl;
		cout<<"----------4.打印当月月历"<<endl;
		cout<<"----------5.退出程序"<<endl;
		cout<<"您选择的操作是:";
		cin>>op;
		switch(op)
		{
		case'1':
			cout<<"屏幕输出当前日期:"<<endl;
	        date.printDate();
			break;
		case'2':
			cout<<"输入待比较的日期:"<<endl;
	        cin>>y>>m>>d;
	       date2.Init(y,m,d);
            while(date2.isWrong())
			{
				cout<<"输入有误!请重新输入!"<<endl;
                cin>>y>>m>>d;
				date2.Init(y,m,d);
			}
	        cout<<"屏幕输出待比较的日期:"<<endl;
	        date2.printDate();
	        if(date.equal(date2))
				cout<<"此日期与当前日期相等!"<<endl;
	        else
		        cout<<"此日期与当前日期不等!"<<endl;
			break;
		case'3':
			date3=date;
			cout<<"输入在当前日期之上要增加的天数:"<<endl;
	        cin>>n;
	        for(i=0;i<n;i++)
			{
				date3.incrementDay();
			}
	        cout<<"增加"<<n<<"天后的日期是:"<<endl;
           	date3.printDate();
			break;
		case'4':
			date.yueli();
			break;
		case'5':
			exit(1);
			break;
		default:
			cout<<"您的操作有误,请重新选择操作!"<<endl;
			break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -