博主在翻阅自己的往年课程设计时,找到了曾经写的一个C++万年历程序,这里分享给大家:
#include<iostream>
#include<iomanip>
using namespace std;
class time1
{
int year,month,day;
public:
time1(){}//默认构造函数
time1(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
int search(time1 &d)
{int a[13]={0,31,29,31,30,31,
30,31,31,30,31,30,31},
b[13] ={0,31,28,31,30,
31,30,31,31,30,31,30,31};
int sum=0,n;
if(d.year%4==0
&&d.year%100!=0||d.year%400==0)
{
if(d.month>13||d.month<1||d.day>30||d.day<0)
return 1;//终止
for(n=0;n<d.month;n++)
sum+=a[n];
sum+=d.day;
}
else
{
if(d.month>13||d.month<1||d.day>29||d.day<0)
return 1;
for(n=0;n<d.month;n++)
sum+=b[n];
sum+=d.day;
}
cout<<"该日为第"<<sum<<"天"<<endl;
return 0;
}
int test(time1 &d)
{
int sum=0,n;
if(d.year%4==0
&&d.year%100!=0||d.year%400==0)
{
if(d.month>12||d.month<1||d.day>29||d.day<0)
return 1;
}
else
{
if(d.month>12||d.month<1||d.day>28||d.day<0)
return 1;
}
return 0;
}
void week(time1 &d)
{
/*if(d.month==1||d.month==2) {
d.month+=12;
d.year--;
}*/
int iWeek=(d.day+2*d.month+3*(d.month+1)/5+d.year+d.year/4-d.year/100+d.year/400)%7;
switch(iWeek)
{
case 0: puts(" 星期一\n"); break;
case 1: puts(" 星期二\n"); break;
case 2: puts(" 星期三\n"); break;
case 3: puts(" 星期四\n"); break;
case 4: puts(" 星期五\n"); break;
case 5: puts(" 星期六\n"); break;
case 6: puts(" 星期日\n"); break;
}
}
void week1(time1 &d)
{int j=0,i;
/*if(d.month==1||d.month==2)
{
d.month+=12;
d.year--;
}*/
int iWeek=(d.day+2*d.month+3*(d.month+1)/5+d.year+d.year/4-d.year/100+d.year/400)%7;
cout<<setw(5)<<"一"<<" "<<
setw(5)<<"二"
<<" "<<setw(5)<<"三"
<<" "<<setw(5)<<"四"<<" "<<
setw(5)<<"五"<<" "<<setw(5)
<<"六"<<" "<<setw(5)
<<"七"<<endl;
for( i=0;i<iWeek;i++)
cout<<" ";
int t=0;
for(int s=0;s<7;s++)
{
cout<<setw(4)<<++j<<" ";
t++;
if(t==7-i)
{cout<<endl;
t=0;
s=7;
}
}
int a[13]={0,31,29,31,30,31,
30,31,31,30,31,30,31},
b[13] ={0,31,28,31,30,
31,30,31,31,30,31,30,31};
int sum=0,n;
if(d.year%4==0
&&d.year%100!=0||d.year%400==0)
{ for(int s=7-i;s<a[d.month];s++)
{
cout<<setw(4)<<++j<<" ";
t++;
if(t==7)
{
cout<<endl;
t=0;
}
}}
else for(int s=7-i;s<b[d.month];s++)
{
cout<<setw(4)<<++j<<" ";
t++;
if(t==7)
{
cout<<endl;
t=0;
}}
} };
int main()
{
cout<<" ☆☆☆☆☆☆☆☆☆"
"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl<<endl;
cout<<" 万年历"
<<endl;
cout<<" 1. 输出某年份日历"<<endl;
cout<<" 2. 输出某年某月份日历"<<endl;
cout<<" 3. 计算该日为该年第几天"<<endl;
cout<<endl<<endl;
cout<<" ☆☆☆☆☆☆☆☆☆"
"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
int year,month,day,h;
cout<<"输入选项"<<endl;
cin>>h;
while(h!=0)
{
switch(h)
{
case 3:
cout<<"输入年,月,日:"<<endl;
cin>>year>>month>>day;
/*time1 d1(year,month,day);
time1 date;*/
while(year!=0&&month!=0&&day!=0)
{
time1 d(year,month,day);
time1 date;
if(date.test(d)==1)
{
cout<<"您输入的数据错误,已退出系统"<<endl;
return 0;
}
date.search(d);
date.week(d);
cout<<"输入年,月,日:"<<endl;
cin>>year>>month>>day;
}
break;
case 1:
{cout<<"输入年份"<<endl;
cin>>year;
int x=1;
for( x=1;x<=12;x++)
{
cout<<x<<"月份"<<endl;
time1 d3(year,x,1);
time1 date3;
date3.week1(d3);
cout<<endl;}
break;}
case 2:
{ cout<<"输入年份,月份"<<endl;
cin>>year>>month;
time1 d2(year,month,1);
time1 date2;
date2.week1(d2);
cout<<endl;
break;}
}cout<<"输入选项"<<endl;
cin>>h;
}
return 0;
}