日历系统.docx
- 文档编号:9974821
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:12
- 大小:142.38KB
日历系统.docx
《日历系统.docx》由会员分享,可在线阅读,更多相关《日历系统.docx(12页珍藏版)》请在冰豆网上搜索。
日历系统
《数据结构》课程设计报告
专业:
班级:
学号:
姓名:
完成日期:
2011年7月11日
2011年7月11日
一、问题描述:
1)用C语言设计一个日历系统
2)输入任一年将显示出该年的所有月份日期,对应的星期3)注意闰年情况
二、基本要求:
1)输入任一年将显示出该年的所有月份日期,对应的星期
2)中文英文显示日历都可以3)下一行显示星期,从周日到周六
4)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐
三、测试数据:
平年2011,输出2011年12个月份的日历;闰年2000,输出2000年12个月份的日历
四、算法思想:
以2000年为基年分为两种情况,一种是当所输入的年份大于2000时,首先判断此年是否为闰年,然后计算输入的年份距2000的总天数,即可得到每月得天数,又已知2000年1月1号是星期六,然后把天数对7取余就可以得到所对应的是星期几。
另一种小于2000的计算方法与上类似。
五、模块划分:
1)intleap(intyear),其功能是判断所输入的年份是否为闰年
2)voidcount(intyear,intmonth),其功能是对所输入的年份进行计算,输出该年12个月份的日历,调用leap()函数进行闰年的判断
3)voidmain(),主函数,功能是输入要查询的年份的12个月份的日历,调用voidcount()函数实现问题要求
七、源程序:
#include"stdio.h"
#defineYEAR365
intleap(intyear)/*判断输入的年份是否为闰年*/
{
intn;
n=(year%4==0&&year%100!
=0||year%400==0);
return(n);
}
voidrili(intyear,intmonth)/*以2000年1月为基础计算某年日历year表示输入的年份,month表示改年的月份*/
{
inti,day,first_day,flag,year1,year2;
inttemp=6;
flag=leap(year);
year1=year/100;/*相差几百年*/
year2=year%100;/*中间几十年*/
if(year>=2000)/*大于2000年的算法*/
{
year1=year1-20;
day=year1/4;/*百闰年数*/
day+=(YEAR+24)*year1+YEAR*year2+(year2-1)/4;/*2000年至现年总天数*/
if(year>2000)
day++;/*加上2000年闰年2月的29天*/
switch(month)
{
case1:
day+=0;break;
case2:
day+=31;break;/*加上月份天数*/
case3:
day+=59+flag;break;
case4:
day+=90+flag;break;
case5:
day+=120+flag;break;
case6:
day+=151+flag;break;
case7:
day+=181+flag;break;
case8:
day+=212+flag;break;
case9:
day+=243+flag;break;
case10:
day+=273+flag;break;
case11:
day+=304+flag;break;
case12:
day+=334+flag;break;
}
day+=temp;/*加上2000年1月1号是星期六*/
first_day=day%7;/*对7取余,为1号星期*/
}
else/*小于2000年的算法*/
{
year1=20-1-year1;
year2=100-year2-1;/*倒减,应多减1*/
day=year1/4;
day+=36524*year1+365*year2+year2/4;
switch(month)
{
case12:
day+=31;break;
case11:
day+=61;break;
case10:
day+=92;break;
case9:
day+=122;break;
case8:
day+=153;break;
case7:
day+=184;break;
case6:
day+=214;break;
case5:
day+=245;break;
case4:
day+=275;break;
case3:
day+=306;break;
case2:
day+=334+flag;break;
case1:
day+=365+flag;break;
}
day-=temp;/*减去1号的6天*/
day=day%7;
first_day=(7-day)%7;/*反对称*/
}
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
month=31;break;
case4:
case6:
case9:
case11:
month=30;break;
case2:
month=28+flag;
}
printf("SunMonTueWedThuFriSat\n");
for(i=1;i<=4*first_day;i++)/*输出空格*/
printf("");
for(i=0;i { printf("%4d",i+1);/*输出日历*/ if((first_day+i)%7==6) printf("\n"); } printf("\n"); printf("============================\n"); } voidmain() { intyear,i; printf("Inputtheyear: "); scanf("%d",&year); while(year<=0) { printf("输入错误,请重新输入"); scanf("%d",&year); fflush(stdin); } printf("\n"); printf("Thecalendaroftheyear%d.\n",year); printf("\n"); printf("============================\n"); for(i=1;i<13;i++) { printf("%d月份\n",i); rili(year,i); } } 八、测试情况: 当输入小于或等于0的年份时,程序会输出错误提示;当输入大于0的年份时程序会输出该年12个月份的日历情况。 2011(平年): 2000(闰年): 参考书目: [1]秦锋.数据结构[M].合肥: 中国科学技术大学出版社,2006. [2]罗文劼,王苗,石强.数据结构习题解答与实验指导[M].北京: 中国铁道出版社,2001. [3]何军,胡元义.数据结构500题[M].北京: 清华大学出版社,2003.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日历 系统