c语言程序设计年历显示.docx

上传人:b****2 文档编号:1175389 上传时间:2022-10-18 格式:DOCX 页数:15 大小:129.14KB
下载 相关 举报
c语言程序设计年历显示.docx_第1页
第1页 / 共15页
c语言程序设计年历显示.docx_第2页
第2页 / 共15页
c语言程序设计年历显示.docx_第3页
第3页 / 共15页
c语言程序设计年历显示.docx_第4页
第4页 / 共15页
c语言程序设计年历显示.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

c语言程序设计年历显示.docx

《c语言程序设计年历显示.docx》由会员分享,可在线阅读,更多相关《c语言程序设计年历显示.docx(15页珍藏版)》请在冰豆网上搜索。

c语言程序设计年历显示.docx

c语言程序设计年历显示

计算机科学与技术学院

课程设计报告

2012—2013学年第一学期

 

课程名称C/C++高级语言程序设计课程设计

设计题目年历显示

学生姓名

学号

专业班级

指导教师

2012年9月20日

一、课程设计问题描述1

1.课程设计题目1

2.设计任务要求1

二、总体设计1

1.总体思路1

2.遇到的问题1

3.问题的解决1

4.大概的流程图1

三、详细设计3

1.显示输入年份的日历3

2.显示所查询月份的日历4

3.判断当天是星期几,是否为法定假日4

四、运行结果测试与分析5

1.输出结果5

2.分析7

五、结论与心得7

一、课程设计问题描述

1.课程设计题目

年历显示

2.设计任务要求

功能要求

(1)输入一个年份,输出是在屏幕上显示该年的日历。

假定输

的年份在1940-2040年之间。

(2)输入年月,输出该月的日历。

(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。

二、总体设计

1.总体思路

想要实现输出某年的日历,必须知道一个常识,那就是公元一年一月一日是星期一,这是一个重要的切入点。

如果知道了这一点,那问题就迎刃而解了。

我们可以先计算出公元一年一月一日到这年一月一日之前的总天数,这用for语句较易实现,不过要注意到平年与闰年的区别。

有了总天数,再除以7,余数是什么,那这年的一月一日就是星期几,如此依次写出一月的日历。

然后一月的天数加上总天数得到的结果再除以7,如此知道二月一日是星期几,写出二月的月历。

如此便可以依次写出一到十二月的日历。

至于输入年月,输出该月的日历,思路相同。

至于判断是否为公历节日,用一个if语句便可实现。

2.遇到的问题

(1)函数的调用与套用,具体来说就是如何在一个构造的函数中调用另一个构造函数。

(2)把每月的日历设计的美观,如何让星期和下面的数字对齐。

(3)如何把握日历的前几天的空格,使每月的第一天正好对在它应该的星期下。

3.问题的解决

第一个问题我通过查书,需要先把调用的函数在该构造函数中声明。

至于第二和第三个问题,都是通过反复调试,反复修改,最后基本达到了要求。

4.大概的流程图

 

三、详细设计

1.显示输入年份的日历

当我们输入年份任意公元后的年份year时,可以通过一个for语句,算出从公元一年到year-1年的总天数,这其中要注意平年与闰年的区别,平年365天,闰年是366天,把这一部分用how()函数表示。

算出总天数Z后,用Z除以7,余数是d,则year这一年的一月一日便是星期d。

如此则一月的日历可表示出来。

然后把Z加上一月的天数tian得到的新值赋给Z,再用Z除以7,重新得到新的余数d,如此可知二月的第一天是星期几,可表示出二月的日历。

依次循环,用for(i=0;i<12;i++)语句可表示出该年的日历。

注意闰年二月是29天,平年是28天。

 

 

 

2.显示所查询月份的日历

当我们输入year和month时,同上,用how()函数算出公元一年一月一日到year-1年的总天数Z,再用一个for(i=1;i

3.判断当天是星期几,是否为法定假日

当我们输入year,month和day,同上,算出从公元一年一月一日到month-1月以前的总天数Z,再加上day赋值给Z,用Z除以7得余数d,那本天便是星期d。

调用when()函数,可判断本日是否是法定假日。

 

四、运行结果测试与分析

1.输出结果

2.分析

在测试的过程中,基本都是一些语法上的缺陷,没有什么太大的逻辑错误,根据系统的提示,较易容易改正。

还有就是在调试过程中,月份不够美观,基本是前后左右不能对齐,中间的空格不易把握。

不过,在反复的调试与修改之后,最终实现了上面的效果。

虽说不是太完美,也不至于太难看。

五、结论与心得

当我第一次看到这个程序问题时,感觉比较容易,就选择了它。

可当我仔细研究这个问题时,却傻了眼,没有我想象的那么简单。

首先使我困惑的是每年的第一天是星期几怎么计算,这使我郁闷了很久,一度没有头绪。

后来,当我和同学交流时,知道了公元一年一月一日是星期一,这才恍然大悟。

后来思路就有了,整个的过程也就想明白了。

剩下的就是程序的编写与测试的过程了。

在实际的编写过程中,也遇到了很多麻烦。

不过,在一次次的调试与修改后,这些问题也一一克服。

要说我编写的这个代码,也有许多不尽如人意处。

最大的问题是我是按照三个问题依次编下去,也就是说三个问题是连续的,如果你想要知道第三个问题,必须从第一个问题开始做下去,一直到第三个问题,不能直接出现第三个问题的结果。

我一直在寻找一个办法,能够把三个问题分开,可很遗憾,直到现在,也未能成功。

通过这次编写这个代码,我知道了思考的重要性,也明白了做任何事都不能轻易放弃,也不能轻易否决自己,多想想,多问一问,问题也许就解决了。

附录

#include<>

inthow(intA)

{

inti,s=0,day;

for(i=1;i<=A-1;i++)

{

if(i%4==0&&i%100!

=0||i%400==0)

day=366;

else

day=365;

s=s+day;}

returns;

}

intwhere(intB,intC)

{

inttian;

switch(C)

{case1:

tian=31;break;

case2:

if(B%4==0&&B%100!

=0||B%400==0)

tian=29;

else

tian=28;break;

case3:

tian=31;break;

case4:

tian=30;break;

case5:

tian=31;break;

case6:

tian=30;break;

case7:

tian=31;break;

case8:

tian=31;break;

case9:

tian=30;break;

case10:

tian=31;break;

case11:

tian=30;break;

case12:

tian=31;break;

}

returntian;

}

voidwhy(intE)

{

switch(E)

{

case1:

printf("该日星期一\n");break;

case2:

printf("该日星期二\n");break;

case3:

printf("该日星期三\n");break;

case4:

printf("该日星期四\n");break;

case5:

printf("该日星期五\n");break;

case6:

printf("该日星期六\n");break;

case7:

printf("该日星期日\n");break;

}

}

voidwhen(intF,intG)

{

if(F==1&&G==1||F==5&&G==1||F==10&&G==1)

printf("当天为法定节日");

else

printf("当天不是法定节日");

}

voidmain()

{

intyear,d,j,Z,di,did,m,n,D,x,y,z,h,k,l,jian,Z1;

printf("输入你所查寻日历的年份:

");

scanf("%d",&year);

Z=how(year);

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

{

d=Z%7;

printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("%d月份\n",j);

printf("sunmontuewedthufrisat\n");

if(d<6)

for(di=1;di<=d+1;di++)

printf("");

for(did=1;did<=where(year,j);did++)

{

printf("%d",did);

if(did<10)

printf("");

else

printf("");

if(did==6-d||(did-6+d)%7==0||did==where(year,j))

printf("\n");

}

Z=Z+where(year,j);

}

printf("输入所查日历的年月");

scanf("%d%d",&m,&n);

Z=how(m);

for(j=1;j<=n-1;j++)

{

D=where(m,j);

Z=Z+D;

}

d=Z%7;

printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("%d月份\n",j);

printf("sunmontuewedthufrisat\n");

if(d<6)

for(di=1;di<=d+1;di++)

printf("");

for(did=1;did<=where(year,j);did++)

{

printf("%d",did);

if(did<10)

printf("");

else

printf("");

if(did==6-d||(did-6+d)%7==0||did==where(year,j))

printf("\n");

}

printf("输入年月日");

scanf("%d%d%d",&x,&y,&z);

Z=how(x);

for(j=1;j<=y-1;j++)

{

D=where(x,j);

Z=Z+D;

}

Z=Z+z;

printf("输入当前年月日");

scanf("%d%d%d",&h,&k,&l);

Z1=how(h);

for(j=1;j<=k-1;j++)

{

D=where(k,j);

Z1=Z1+D;

}

Z1=Z1+l;

jian=Z1-Z;

printf("输入日期距今有%d天\n",jian);

d=Z%7;

why(d);

when(y,z);

}

函数释意

how()计算公元一年一月一日到输入年份之前的总天数的函数

where()实现判断每月天数的函数

when()实现判断输入日期是星期几的函数

why()实现判断输入日期是否为法定节日的函数精心搜集整理,只为你的需要

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

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

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