日历系统.docx

上传人:b****7 文档编号:9974821 上传时间:2023-02-07 格式:DOCX 页数:12 大小:142.38KB
下载 相关 举报
日历系统.docx_第1页
第1页 / 共12页
日历系统.docx_第2页
第2页 / 共12页
日历系统.docx_第3页
第3页 / 共12页
日历系统.docx_第4页
第4页 / 共12页
日历系统.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

日历系统.docx

《日历系统.docx》由会员分享,可在线阅读,更多相关《日历系统.docx(12页珍藏版)》请在冰豆网上搜索。

日历系统.docx

日历系统

 

《数据结构》课程设计报告

 

专业:

班级:

学号:

姓名:

完成日期:

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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1