一上午写完的。百度了几个算法。
#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void settime();
void zhuye();
void settime_showtime();
int main()
{
cout<<"是否使用本程序。请选择 y/n"<<endl;
char ch;
cin>>ch;
if(ch=='y')
{
zhuye();//欢迎界面
settime_showtime();//设置时间,显示时间
}
else
return 0;
return 0;
}
bool isleapyear(int year)
{
return (year%4==0 && year%100!=0)||(year%400==0);
}
class time //time类
{
protected:
int hour;
int minute;
int second;
public:
time();
time(int h,int m,int s);
};
class date //Date类
{
protected:
int year;
int month;
int day;
public:
date();
date(int y,int mon,int d);
};
class datetime:public time,public date //由time date派生出来的类
{
private://因为没有新增数据成员,所以为空
public:
datetime();//因为创建未被初始化的对象,所以声明默认函数
datetime(int y,int mon,int d,int h,int m,int s);//自定义构造函数
void setdatetime();//设置时间的成员函数
void showdatetime();//显示时间的成员函数
void getdatetime(int &y,int &m,int &d,int &h,int &min,int &s)//在后面查询中输出时间日期。
{
y=year;
m=month;
d=day;
h=hour;
min=minute;
s=second;
}
};
time::time()
{
hour=0;
minute=0;
second=0;
}
time::time(int h,int m,int s)
{
hour=h;
minute=m;
second=s;
}
date::date()
{
year=0;
month=0;
day=0;
}
date::date(int y,int mon,int d)
{
year=y;
month=mon;
day=d;
}
datetime::datetime()// 定义默认构造函数
{}
datetime::datetime(int y,int mon,int d,int h,int m,int s):date(y,mon,d),time(h,m,s)
{}
void datetime::setdatetime() //设置时间的成员函数
{
cout<<"请输入时间,年,月,日,时,分,秒"<<endl;
cout<<"年:";cin>>year;
cout<<"月:";cin>>month;
cout<<"日:";cin>>day;
cout<<"时:";cin>>hour;
cout<<"分:";cin>>minute;
cout<<"秒:";cin>>second;
cout<<endl;
}
void datetime::showdatetime() //更新时间的成员函数
{
cout<<"您输入的时间更新显示:"<<endl;
for(;;)
{
cout<<"\r";
cout<<year<<"."<<month<<"."<<day<<" "<<hour<<":"<<minute<<":"<<second;
if(second>58)
{
second=0,minute++;
if(minute>59)
{
minute=0,second=0,hour++;
if(hour>23)
{
day++,hour=0,minute=0,second=0;
if(month==2&&isleapyear(year))
{
monthday[2]++;
}
if(day>(monthday[month]))
{
month++,day=0;
if(month>11)
{
year++,month=1,day=1,hour=0,minute=0,second=0;
}
}
}
}
}
else second++;
Sleep(1000);
}
}
void zhuye() //定义欢迎界面函数
{
cout<<" **************";
cout<<"欢迎使用电子时间表";
cout<<"**************"<<endl;
}
void settime_showtime()//定义设置时间,显示时间函数
{
void xuanze(datetime &c1);
datetime c1;
c1.setdatetime();
xuanze(c1);//选择界面
c1.showdatetime();
}
int monthdays(datetime &c1);
int getDays(datetime &c1);
int yearDays(datetime &c1);
void xuanze(datetime &c1)//选择界面函数定义
{
void rili();
void jieri(int m);
void chaxunxingqi(int y,int m,int d);
void rili(datetime &);
void jieri(int m);
int choice;
int y,m,d,h,min,s;
cout<<" *****欢迎使用查询日历服务*****"<<endl;
cout<<"请输入时间,格式:年月日,时分秒"<<endl;
c1.getdatetime(y,m,d,h,min,s);
cout<<"您将要使用的功能:"<<endl;
cout<<"1.判断输入的时间查询当天为星期几2.通过年月查询本月日历.3.查询所输入的月份的节日"<<endl;
cout<<"请输入你的选择:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
chaxunxingqi(y,m,d);break;//查询星期几
case 2:
rili(c1);break;//查询输入时间的本月日历
case 3:
jieri(m);break;//是否为节日
}
cout<<"是否继续使用查询服务?请输入选择 y/n 。"<<endl;
char c;
cin>>c;
switch(c)
{
case 'y': xuanze(c1);break;
default:main();break;
}
}
void chaxunxingqi(int y,int m,int d) //查询星期几,在网上百度到一个公式,int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;基姆拉尔森计算公式。
{
cout<<" *****欢迎使用查询星期服务*****"<<endl;
int x=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(x)
{
case 1: cout<<"星期一"<<endl; break;
case 2: cout<<"星期二"<<endl; break;
case 3: cout<<"星期三"<<endl; break;
case 4: cout<<"星期四"<<endl; break;
case 5: cout<<"星期五"<<endl; break;
case 6: cout<<"星期六"<<endl; break;
case 0: cout<<"星期日"<<endl; break;
}
}
int yeardays(datetime &c1)//判断整年的天数
{
int y,m,d,h,min,s;
c1.getdatetime(y,m,d,h,min,s);
if(isleapyear(y))
return 365;
else
return 366;
}
int monthdays(datetime &c1)//判断整月的天数
{
int y,m,d,h,min,s;
c1.getdatetime(y,m,d,h,min,s);
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31;
else if(yeardays(c1)==366&&m==2) return 29;
else if(yeardays(c1)==365&&m==2) return 28;
else return 30;
}
int getDays(datetime &c1)
{
int i;
int sum=0;
int y,m,d,h,min,s;
c1.getdatetime(y,m,d,h,min,s);
if(y>1901)
for(i=1901;i<y;i++) sum+=yeardays(c1);
if(m>1)
for(i=1;i<m;i++) sum+=monthdays(c1);
return sum;
}
void rili(datetime& c1)
{ //1990.1.1是星期一
cout<<" *****欢迎使用查询日历服务*****"<<endl;
cout<<endl;
int y,m,d,h,min,s;
c1.getdatetime(y,m,d,h,min,s);
int sum,day,i,j,monthday;
sum=getDays(c1);
day=(1+sum)%7;
monthday=monthdays(c1);
cout<<" ******"<<m<<"月的日历"<<"******"<<endl;
cout<<endl;
cout<<": "<<y<<"年"<<m<<"月"<<endl;
cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
for(i=0;i<(day+1)%7;i++)
cout<<" ";
for(i=1,j=day+1;i<=monthday;i++,j++)
{
cout<<setw(4)<<setiosflags(ios::right)<<i;
if((j+1)%7==0) cout<<endl;
}
cout<<endl;
}
void jieri(int m)
{
cout<<endl;
cout<<"**********************************"<<endl;
switch(m)
{ case 1:
cout<<"* "<<m<<"/1"<<" 新年元旦"<<endl;
cout<<"* "<<m<<"/6"<<" 中国13亿人口日"<<endl;
cout<<"* "<<m<<"/10"<<" 中国110宣传日"<<endl;
break;
case 2:
cout<<"* "<<m<<"/2"<<" 世界湿地日"<<endl;
cout<<"* "<<m<<"/4"<<" 世界癌症日"<<endl;
cout<<"* "<<m<<"/7"<<" 国际声援南非日"<<endl;
cout<<"* "<<m<<"/10"<<" 世界气象日"<<endl;
cout<<"* "<<m<<"/14"<<" 情人节"<<endl;
cout<<"* "<<m<<"/21"<<" 国际母语日"<<endl;
break;
case 3:
cout<<"* "<<m<<"/3"<<" 全国爱耳日"<<endl;
cout<<"* "<<m<<"/8"<<" 妇女节"<<endl;
cout<<"* "<<m<<"/12"<<" 植树节"<<endl;
cout<<"* "<<m<<"/15"<<" 国际消费日"<<endl;
cout<<"* "<<m<<"/21"<<" 世界森林日"<<endl;
cout<<"* "<<m<<"/22"<<" 世界水日"<<endl;
cout<<"* "<<m<<"/23"<<" 世界气象日"<<endl;
cout<<"* "<<m<<"/24"<<" 世界防治结核病日"<<endl;
break;
case 4:
cout<<"* "<<m<<"/1"<<" 愚人节"<<endl;
cout<<"* "<<m<<"/5"<<" 清明节"<<endl;
cout<<"* "<<m<<"/7"<<" 世界卫生日"<<endl;
cout<<"* "<<m<<"/22"<<" 世界地球日"<<endl;
break;
case 5:
cout<<"* "<<m<<"/1"<<" 国际劳动节"<<endl;
cout<<"* "<<m<<"/4"<<" 中国青年节"<<endl;
cout<<"* "<<m<<"/5"<<" 全国碘缺乏病日"<<endl;
cout<<"* "<<m<<"/8"<<" 世界红十字日"<<endl;
cout<<"* "<<m<<"/12"<<" 国际护士节"<<endl;
cout<<"* "<<m<<"/15"<<" 国际家庭日"<<endl;
cout<<"* "<<m<<"/17"<<" 世界电信日"<<endl;
cout<<"* "<<m<<"/18"<<" 世界博物馆日"<<endl;
cout<<"* "<<m<<"/19"<<" 中国汶川地震哀悼日"<<endl;
cout<<"* "<<m<<"/20"<<" 全国学生营养日"<<endl;
cout<<"* "<<m<<"/22"<<" 国际生物多样性日"<<endl;
cout<<"* "<<m<<"/31"<<" 世界无烟日"<<endl;
break;
case 6:
cout<<"* "<<m<<"/1"<<" 国际儿童节"<<endl;
cout<<"* "<<m<<"/5"<<" 世界环境日"<<endl;
cout<<"* "<<m<<"/6"<<" 全国爱眼日"<<endl;
cout<<"* "<<m<<"/17"<<" 防治荒漠化和干旱日"<<endl;
cout<<"* "<<m<<"/23"<<" 国际奥林匹克日"<<endl;
cout<<"* "<<m<<"/25"<<" 全国土地日"<<endl;
cout<<"* "<<m<<"/26"<<" 国际反毒品日"<<endl;
break;
case 7:
cout<<"* "<<m<<"/1"<<" 香港回归日"<<endl;
cout<<"* "<<m<<"/1"<<" 建党节"<<endl;
cout<<"* "<<m<<"/7"<<" 抗日战争纪念日"<<endl;
cout<<"* "<<m<<"/8"<<" 世界过敏性疾病日"<<endl;
cout<<"* "<<m<<"/11"<<" 世界人口日"<<endl;
break;
case 8:
cout<<"* "<<m<<"/1"<<" 八一建军节"<<endl;
break;
case 9:
cout<<"* "<<m<<"/1"<<" 劳动节"<<endl;
cout<<"* "<<m<<"/8"<<" 国际扫盲日"<<endl;
cout<<"* "<<m<<"/10"<<" 教师节"<<endl;
cout<<"* "<<m<<"/10"<<" 世界预防自杀日"<<endl;
cout<<"* "<<m<<"/16"<<" 国际臭氧层保护日"<<endl;
cout<<"* "<<m<<"/17"<<" 国际和平日"<<endl;
cout<<"* "<<m<<"/20"<<" 国际爱牙日"<<endl;
cout<<"* "<<m<<"/27"<<" 世界旅游日"<<endl;
break;
case 10:
cout<<"* "<<m<<"/1"<<" 国庆节"<<endl;
cout<<"* "<<m<<"/1"<<" 国际音乐节"<<endl;
cout<<"* "<<m<<"/2"<<" 国际减轻自然灾害日"<<endl;
cout<<"* "<<m<<"/7"<<" 国际住房日"<<endl;
cout<<"* "<<m<<"/8"<<" 全国高血压日"<<endl;
cout<<"* "<<m<<"/8"<<" 世界视觉日"<<endl;
break;
case 11:
cout<<"* "<<m<<"/8"<<" 中国记者日"<<endl;
cout<<"* "<<m<<"/9"<<" 消防宣传日"<<endl;
cout<<"* "<<m<<"/11"<<" 光棍节"<<endl;
cout<<"* "<<m<<"/14"<<" 世界糖尿病日"<<endl;
cout<<"* "<<m<<"/17"<<" 国际大学生节"<<endl;
break;
default:
cout<<"* "<<m<<"/1"<<" 世界艾滋病日"<<endl;
cout<<"* "<<m<<"/3"<<" 世界残疾人日"<<endl;
cout<<"* "<<m<<"/9"<<" 世界足球日"<<endl;
cout<<"* "<<m<<"/20"<<" 澳门回归纪念日"<<endl;
cout<<"* "<<m<<"/21"<<" 国际篮球日"<<endl;
cout<<"* "<<m<<"/24"<<" 平安夜"<<endl;
cout<<"* "<<m<<"/25"<<" 圣诞节"<<endl;
cout<<"* "<<m<<"/25"<<" 世界强化免疫日"<<endl;
cout<<"* "<<m<<"/26"<<" 毛泽东诞辰"<<endl;
}
}