万年历的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++) {