求解万年历的显示??
xuqie 2003-08-29 09:02:55 我编了一个万年历的程序(一行显示两个月),但是现在需要改进到由命令行输入:一行显示的月的个数count,然后再显示出来也就是说pintmonthday需要改进,大家来看看程序怎么改?请高手帮帮忙,如果改好了可以发到我信箱xuqie@163.com,或者回复在版上我给你加分,急!谢谢
#include<iostream.h>
int weekday1=0;
int weekday2=0;
int isleap(int y); //判断润年——确定2月天数
int monthday(int m,int y); //判断每一个月有几天
int fristmonthday(int m,int y); //判断每一年的某个月的第一天是星期几
void printmonthhead(int m,int n); //打印月表头
void printmonthday(int y); //打印每一天
void main()
{
int year=0,count=0;
do
{
cout<<"Please input year (>0):";
cin>>year;
if(year<=0)
cout<<"\nThe year is incorrect,please input again:";
}while(year<=0);
//cout<<"how much months display in a row?";目前默认一行打印2个月,即count=2
//cin>>count;
cout<<"\n\n "<<year<<" 年cout<<"*********************************************************************\n";
cout<<"*********************************************************************\n";
printmonthday(year);
}
int isleap(int y)
{
return((y%4==0 && y%100!=0)||(y%400==0));
}
int monthday(int m,int y)
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31;
case 4:
case 6:
case 9:
case 11: return 30;
case 2:
if(isleap(y))
return 29;
else
return 28;
}
return 0;
}
int fristmonthday(int m,int y)
{
long s=0,n=0;
int j;
/*for(int i=1;i<=y;i++)
{
if (isleap(i))
n+=366;
else
n+=365;
}*/
for(j=1;j<m;j++)
n+=monthday(j,y);
s=y-1+(y-1)/4-(y-1)/100+(y-1)/400+n;
s=(s+1)%7;
return(s);
}
void printmonthhead(int m,int n)
{
if(m<=10)
cout<<"\n"<<m<<" 月 日 一 二 三 四 五 六";
else
cout<<"\n"<<m<<"月 日 一 二 三 四 五 六";
if(n<10)
cout<<" "<<n<<" 月 日 一 二 三 四 五 六"<<endl;
else
cout<<" "<<n<<"月 日 一 二 三 四 五 六"<<endl;
cout<<" ";
for(int i=0;i<weekday1;i++)
cout<<" ";
}
void printmonthday(int y)
{
int d1,d2;
for(int i=1;i<12;i=i+2)
{
d1=1;
d2=1;
weekday1=fristmonthday(i,y);
weekday2=fristmonthday(i+1,y);
printmonthhead(i,i+1);
while(d1<=monthday(i,y))
{
if(d1<10)
cout<<" "<<d1;
else
cout<<" "<<d1;
d1=d1+1;
weekday1=(weekday1+1)%7;
if(weekday1==0 )
{
cout<<" ";
for(int p=0;p<weekday2;p++)
cout<<" ";
while(d2<=monthday(i+1,y))
{
if(d2<10)
cout<<" "<<d2;
else
cout<<" "<<d2;
weekday2=(weekday2+1)%7;
d2=d2+1;
if(weekday2==0)
{
cout<<endl;
cout<<" ";
break;
}
}
if(d2>monthday(i+1,y))
{
cout<<endl;
cout<<" ";
}
}
}
if(d1>monthday(i,y))
{
for(int p=0;p<7-weekday1;p++)
cout<<" ";
cout<<" ";
while(d2<=monthday(i+1,y))
{
cout<<" "<<d2;
d2=d2+1;
weekday2=(weekday2+1)%7;
if(weekday2==0)
{
cout<<endl;
cout<<" ";
}
}
}
}
cout<<" "<<endl;
}