#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;
}
设置未来时间,并通过倒计时显示器的界面显示
最新推荐文章于 2024-07-10 15:26:13 发布
本文介绍了一个基于C++实现的智能计时器与日期计算功能,通过输入当前时间和未来时间,计算两者之间的差异,并提供了计时器功能。重点在于日期和时间的精确计算,适用于需要实时更新日期和时间的应用场景。

1360

被折叠的 条评论
为什么被折叠?



