设置未来时间,并通过倒计时显示器的界面显示

本文介绍了一个基于C++实现的智能计时器与日期计算功能,通过输入当前时间和未来时间,计算两者之间的差异,并提供了计时器功能。重点在于日期和时间的精确计算,适用于需要实时更新日期和时间的应用场景。
#include<iostream>
#include<string>
#include<windows.h>
#define error 0
using namespace std;

class Time
{
private:
	int hour;
	int minute;
	int second;
public:
	Time(int h,int m)
	{
		hour=h;
		minute=m;
		second=0;
		JC();
	}
	void Set_Hour(int h)
	{
		hour=h;
	}
	void Set_Minute(int m)
	{
		minute=m;
	}
	int Return_Hour()
	{
		return hour;
	}
	int Return_Minute()
	{
		return minute;
	}
	int JC()
	{
		int t=0;
		if(minute>=60)
		{
			hour+=minute/60;
			minute=minute%60;
			if(hour>=24)
			{
				t=hour/24;
				hour=hour%24;
				return t;
			}
		}
		else
		{
			if(hour>=24)
			{
				t=hour/24;
				hour=hour%24;
				return t;
			}
		}
	return t;
	}
	int Add1(int n)   //是以小时为单位
	{
		int t;
		hour+=n;
		t=JC();
		return t;
	}
	int Add2(int n)   //是以分钟为单位
	{
		int t;
		minute+=n;
		t=JC();
		return t;
	}
	int Reduce(int n)    //以秒为为单位
	{
		int t;
		bool frage(true);
		t=second-n;
		if(t<0){second=second+60-n;frage=false;}
		else
			second=second-n;
		return frage;
	}
	int Reduce2(int n)    //是以分钟为单位
	{
		int s;
		bool frage(true);
		s=minute-n;
		if(s<0)
		{
			minute=minute+60-n;
			hour--;
			frage=false;
		}
		else
			minute=s;
		return frage;
	}
	int Reduce1(int hn,int mn)    //是以小时为单位
	{
		Reduce2(mn);
		int s;
		bool frage(true);
		s=hour-hn;
		if(s<0)
		{
			hour=hour+24-hn;
			frage=false;
		}
		else
			hour=s;
		return frage;
	}
	void Output()
	{
		//cout<<"hour:"<<hour<<endl;
		//cout<<"minute:"<<minute<<endl;
		if(hour==0)cout<<0<<0<<":";
		else
			if(1<=hour&&hour<=9)cout<<0<<hour<<":";
			else
				cout<<hour<<":";
		if(minute==0)cout<<0<<0<<":";
		else
			if(1<=minute&&minute<=9)cout<<0<<minute<<":";
			else
				cout<<minute<<":";
		if(second==0)cout<<0<<0;
		else
			if(1<=second&&second<=9)cout<<0<<second;
			else
				cout<<second;
		if(hour>=12)cout<<"PM"<<endl;
		else
			cout<<"AM"<<endl;
	}
};

class Calendar:public Time
{
private:
	
	int month;
	int date;
	string Day[7];//char Day[7][10];//私有成员不能初始化,而且字符数组要想赋值,要么就一个一个的赋值
	int Month[13];
	int sumday;
	int year;
public:
	Calendar(int y,int m,int d,int h,int mi):Time(h,mi)
	{
		year=y;
		month=m;
		date=d;
		Month[0]=0;Day[0]="日";
		Month[1]=31;Day[1]="一";
		Month[2]=28;Day[2]="二";
		Month[3]=31;Day[3]="三";
		Month[4]=30;Day[4]="四";
		Month[5]=31;Day[5]="五";
		Month[6]=30;Day[6]="六";
		Month[7]=31;
		Month[8]=31;
		Month[9]=30;
		Month[10]=31;
		Month[11]=30;
		Month[12]=31;
		sumday=0;
	}
	bool Leapyear(int y)
	{
		if((y%400==0)||((y%4==0)&&(y%100!=0)))
		{
			Month[2]=29;
			return true;
		}
		else
		{
			Month[2]=28;
			return false;
		}
	}
	int yearDay(int y)
	{
		if(Leapyear(y))return 366;
		if(!Leapyear(y))return 365;
		return error;
	}
	int Dateday()
	{
		return date;
	}
	int Monthday(int m)
	{
		return Month[m];
	}
	void Yearday(int y)
	{
		if(Leapyear(y))sumday=sumday+366;
		else
			sumday=sumday+365;
	}
	void Sumday()               //返回从公元1年1月至今的天数一
	{
		int i=1;
		for(;i!=year;i++)
		{
			Yearday(i);
		}
		Leapyear(year);
		for(i=1;i<month;i++)
		{
			sumday+=Monthday(i);
		}
		sumday+=date;
	}
	int Return_sumday()
	{
		return sumday;
	}
	int Onedate1(int t) //返回这一年的第一天是星期几
	{
		t=sumday%7;
		if(t==1) return 1;
		if(t==2) return 2;
		if(t==3) return 3;
		if(t==4) return 4;
		if(t==5) return 5;
		if(t==6) return 6;
		if(t==0) return 0;
		return error;
	}
	void Output1()              //往前推得输出年,月,日,时间及星期几
	{
		cout<<year<<"年"<<month<<"月"<<date<<"日"<<" ";
		int t;
		cout<<"星期";
		t=Onedate1(sumday);
		if(t==7)cout<<Day[0]<<" ";
		else
			cout<<Day[t]<<" ";
		Output();
	}
	void Output2()                           //只输出年月日和时间
	{
		cout<<year<<"年"<<month<<"月"<<date<<"日";
		Output();
	}
	int One_Year()              //返回本年一共是多少天
	{
		int i,s1=0;
		for(i=1;i<month;i++)
			s1=s1+Monthday(i);
		s1=s1+date;
		return s1;
	}
	void operator -(int n)    //刚开始没有重载好减号运算符,应为是倒过来算的,所以日起赋值必须是用这个月份的全部天数-求模余下来的天数
	{
		int t;
		t=Reduce(n);
		int m;
		if(!t)
		{
			m=Return_Minute();
			m--;
			if(m<0)
			{
				int t2;
				t2=Return_Hour();
				m=m+60;
				t2--;
				Set_Hour(t2);//
			}
			Set_Minute(m);
		}
		if(Return_Hour()<0)
		{
			int t1;
			t1=Return_Hour();
			t1=t1+24;
			Set_Hour(t1);
			sumday--;
			date--;
			if(date<=0)
			{
				month--;
				if(month<=0)
				{
					year--;
					month=12;
					date=Monthday(month);
				}
				else
					date=Monthday(month);
			}
		}
		Output1();
	}
	int operator -(Calendar &b)            //返回的是相差的分钟数
	{
		cout<<b.Return_Hour()<<" "<<b.Return_Minute()<<endl;
		int t1=b.Return_Hour();
		int t2=b.Return_Minute();
		int n,t,s;
		Sumday();	
		b.Sumday();
		n=Return_sumday()-b.Return_sumday();
		if(n<0)n=n*(-1);
		t=Reduce1(t1,t2);
		n--;                             //刚开始算的时候包括了当天,这里减去一天
		if(!t)n--;
		cout<<"相隔"<<n<<"天"<<Return_Hour()<<"小时"<<Return_Minute()<<"分钟"<<endl;
		s=n*24*60*60+Return_Hour()*60*60+Return_Minute()*60;
		return s;
	}
};
	
int main()
{
	int y1,m1,d1,h1,mi1;
	cout<<"Please input the time's year,month,date,hour,minute at present:";
	cin>>y1>>m1>>d1>>h1>>mi1;
	Calendar a(y1,m1,d1,h1,mi1);
	a.Sumday();
	cout<<"The sumday from the oneday is:"<<a.Return_sumday()<<endl;
	a.Output1();

	cout<<"Please input the time's year,month,date,hour,minute at future:";
	int y2,m2,d2,h2,mi2;
	cin>>y2>>m2>>d2>>h2>>mi2;
	Calendar b1(y2,m2,d2,h2,mi2);
	Calendar b2(y2,m2,d2,h2,mi2);                //要保留一个值下来,对后面做计时器
	b1.Sumday();
	b2.Sumday();
	cout<<"The sumday from the oneday is:"<<b1.Return_sumday()<<endl;
	b1.Output1();
	int s=b1-a;
	cout<<s<<endl;
	while(s!=0)
	{
		system("cls");
		cout<<"---------------计时器------------"<<endl;
		b2-1;
		Sleep(1000);                              //设置了睡眠时间
		s--;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值