求解万年历的显示??

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;
}

...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahu213 2003-09-08
  • 打赏
  • 举报
回复
祝贺!!!!!
^_^
xuqie 2003-08-31
  • 打赏
  • 举报
回复
这个问题我已经自己解决了,关键还是printmonthday()函数的改写,谢谢大家!
xuqie 2003-08-30
  • 打赏
  • 举报
回复
主要就是输出部分需要重新构思,我的那一部分printmonthday()针对性太强了可以不做考虑
只要能给出一个新的可以满足要求的输出就可以了!
laazzy 2003-08-29
  • 打赏
  • 举报
回复
这里有一个javascript 的例子:
http://www3.zzu.edu.cn/y1000.htm
superwsc 2003-08-29
  • 打赏
  • 举报
回复
你的代码好长而且没注释,谁帮你看啊
mahu213 2003-08-29
  • 打赏
  • 举报
回复
我觉的如果以你现在的输出程序而言,要想实现你的要求实属不易啊,因为要加一个参数进去的话,整个输出程序好像要重新构思啊!!
不知我的意见是不是对啊?!
还请各位多多指教!
学习,学习!
^_^
mahu213 2003-08-29
  • 打赏
  • 举报
回复
我帮你看过了,但我学识不够,实在是不能看懂你输出部分的程序!!!
还请其他各位高手多多帮忙!!!
^_^

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧