万年历的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

万年历的设计

一设计要求

(1)程序运行时,首先给出3个菜单选项的内容和输入提示:

1 显示一年的日历

2 显示某一天是星期几

0 退出

(2)用户可以通过主菜单选择不同的选项。若选择1,则通过输入年份,显示输出该年每个月的日历。若选择2,则通过输入日期,查询这一天是星期几。

二界面参考

登录界面

显示某年全年的日历

显示某天是星期几

三设计思路与算法

1.菜单选择界面,可在主函数中实现。

思路提示:可通过使用while语句和switch…case语句实现菜单功能的循环选择。参考代码提示:

void main()

{

int i=1;

。。。。。。。 //界面提示信息

while(i)

{

cin>>i;

if(i>=0 && i<=2)

{

switch(i)

{

case 1:fn1();break; //显示某年的日历

case 2:fn2();break;//查询日期为星期几

}

}

}

}

2:判断某年的元旦是星期几?(*)

公元元年(也就是第一年)的第一天是星期1,以后的每一年与元年的差值取模7就可以算出该年的第一天是星期几。

公式:C=[365*(year-1)+其中闰年的个数(闰年多一天)]%7+1;

简化为:C=((year-1)*365+[(year-1)/4]-[(year-1)/100]+[(year-1)/400+1])%7;

其中:公式中的[...]均指只取计算结果的整数部分。余数是几就是星期几。如果余数是0,则为星期日。

((year-1)/4-(year-1)/100+(year-1)/400就是闰年的个数,四年一闰,百年不闰,四百年再

闰,所以4年的个数减去100年的个数在加上400年的个数就是其中闰年的个数了;

比如:我们来算2011年1月1日

C=((2011-1)*365+[(2011-1)/4]- [(2011-1)/100]+ [(2011-1)/400+1])%7

=(733650+502-20+6)%7

=734138%7=6 ,说明这天为星期六

3: 实现查询某天是星期几,可定义函数void fn2()实现。

先判断出该年的元旦是星期几,然后再求输入的日期与该年元旦相差的天数。

公式为:

W = ((year-1)*365+[(year-1)/4]-[(year-1)/100]+[(year-1)/400+1])+date

其中:date是与元旦相差的天数

星期为:W%7

比如:我们来算2011年5月1日:

734138+31+28+31+30 = 734258,

734258 % 7 = 0,余数为六,说明这一天是星期日。

思路步骤提示:

(1)可调用如下函数:计算从元旦到指定月前的总天数

it monthdays(int year,int month) //计算任一年每月的天数

(2)程序中可定义一个指针数组,依次指向:

char *week[] = {"星期日","星期一","星期二", "星期三", "星期四", "星期五","星期六"};

cin>>year>>month>>day;

w=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)+与元旦差的天数;

w=w%7;

cout<<"\n该天是:"<

4:确定某年是否为闰年?

如果某年的年份不能被4整除,则是平年。如果能够被4整除, 再看它是否能被100整除,不能被100整除的肯定是闰年。在既能被4、也能被100整除的年份中,还能被400整除的也是闰年,否则是平年。若为闰年,该年的总天数为366天,否则为365天。

int judgeYear(int year) /*判断是否是闰年*/

{

if((y%400==0)||(y%4==0&&y%100!=0))

return 1;

else

return 0; }

5:判断任一年某月的天数?

除2月外,1,3,5,7,8,10,12月份天数为31天,其余为30天。

若为闰年,则2月的天数为29天,若为平年,2月的天数为28天。

int monthdays(int year,int month)/*返回某个月有多少天*/

{

if(m==2)

{

if(judgeYear(year)==1) return 29;

else return 28;

}

else if(m==4||m==6||m==9||m==11)

return 30;

else

return 31;

}

6:实现显示一年的日历,可定义函数void fn1()实现。

思路步骤提示:

需要调用如下函数:

it monthdays(int year,int month) //计算任一年每月的天数

在显示日历时,要控制显示内容的位置,可以采用setw(n)函数控制显示数据的宽度。参考:

cin>>year;

t=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;

//该年的元旦是星期几

for(k=1;k<=12;k++)

{

相关文档
最新文档