课程设计说明万年历程序设计.docx
《课程设计说明万年历程序设计.docx》由会员分享,可在线阅读,更多相关《课程设计说明万年历程序设计.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计说明万年历程序设计
《高级语言程序设计》
课程设计说明书
设计题目:
万年历程序设计
一:
课程设计目的
《高级语言程序设计》课程设计是电子信息、光信息专业以及物理学专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习,其目的在于加深对程序设计基本知识的理解,掌握使用C语言进行模块化软件设计的基本方法,提高通过编写程序解决实际问题的能力,为今后从事设计工作和后续各种编程课程的学习打好基础。
二:
需求分析
题目:
要求:
输入年份和月份,自动输出该月的日历,清楚的显示每一天是星期几,输入年份,月份和具体日期能确定某天是星期几。
万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。
因此,研究万年历及扩大其应用,有着非常现实的意义。
它可以对年、月、日、周日、时、分、秒进行计时,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
三:
概要设计
1-判断是否为闰年
计算所输入的年份是否可被4整除,若不能被整除,为平年。
若可被4整除,计算此年份能否被100整除,不能被100整除则为闰年。
既能被4整除,也能被100整除的年份,若也能被400整除,则为闰年,否则为平年。
闰年366天,平年365天
2-主要设计思路
四:
详细设计
源程序:
#include
#include
voidDayOfWeek()
{
intrtnDay;
inty,m,d;
charch;
while
(1)
{
printf("请输入年月日(xxxx,xx,xx):
");
scanf("%d,%d,%d",&y,&m,&d);
fflush(stdin);
rtnDay=(3*y-(7*(y+(m+9)/12))/4+(23*m)/9+d+17-((y+(m<3?
-1:
0))/100+1)*3/4)%7;
printf("%04d年%02d月%02d日是星期%d\n",y,m,d,rtnDay?
rtnDay:
7);
printf("继续查询(y/n)");
ch=getchar();
if(ch!
='y'&&ch!
='Y')
break;
}
}
voidGetMonth(intD,intmd,intn)
{
intN,m,d,y,c,Wd;
inti,maxday,i1;
if(md>=13||md<=0)
printf("HAVEWRONG!
");
else
{
for(i1=0;;md++,i1++)
{
if(md==0)
{
md=12;
D-=1;
}
else
if(md==13)
{
md=1;
D+=1;
}
m=md;
printf("\n============%d,%2d============\n",D,md);
if(0{
switch(m)
{
case1:
maxday=31;break;
case2:
if(D%4==0&&D%100!
=0||D%400==0)
maxday=29;
else
maxday=28;
break;
case3:
maxday=31;break;
case4:
maxday=30;break;
case5:
maxday=31;break;
case6:
maxday=30;break;
case7:
maxday=31;break;
case8:
maxday=31;break;
case9:
maxday=30;break;
case10:
maxday=31;break;
case11:
maxday=30;break;
case12:
maxday=31;break;
default:
printf("HAVEWRONG");
}
if(0{
N=D-1;
m=m+10;
}
else
{
N=D;
m=m-2;
}
c=N/100;
y=N%100;
Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7;
printf("SUNMOUTUEWEDTURFRISAT\n");
for(i=0;iprintf("%4c",'');
for(d=1;d<=maxday;d++)
{
printf("%4d",d);
Wd=(Wd+1)%7;
if(Wd==0)
printf("\n");
}
}
else
printf("HAVEWRONG!
");
if(i1==n)
break;
}
}
}
voidMonthOfYear()
{
charch;
inty,m;
while
(1)
{
printf("请输入年月(xxxx,xx):
");
scanf("%d,%d",&y,&m);
fflush(stdin);
GetMonth(y,m,0);
printf("\n继续查询(y/n)");
ch=getchar();
if(ch!
='y'&&ch!
='Y')
break;
}
}
voidGetYear()
{
charch;
inty;
while
(1)
{
printf("请输入年:
");
scanf("%d",&y);
fflush(stdin);
GetMonth(y,1,11);
printf("\n继续查询(y/n)");
ch=getchar();
if(ch!
='y'&&ch!
='Y')
break;
}
}
intmain()
{
charch;
while
(1)
{
system("cls");
printf("1.查询星期\n");
printf("2.查询月份\n");
printf("3.显示一年\n");
printf("4.退出程序\n");
ch=getchar();
fflush(stdin);
switch(ch)
{
case'1':
DayOfWeek();
break;
case'2':
MonthOfYear();
break;
case'3':
GetYear();
break;
case'4':
printf("是否退出(y/n)");
ch=getchar();
fflush(stdin);
if(ch=='y'||ch=='Y')
exit(0);
break;
}
}
}
五:
运行效果及分析
1登录界面
输入3,通过输入年份可显示一年每个月份的日历;输入2,通过输入年份和月份(中间以空格分开)可显示该月的日历;若输入1,通过输入年份月份和日期(中间以逗号分开)可显示该日的星期;输入4,则退出查询系统
2查询星期
输入1后回车,然后输入具体的年月日可查出该天为星期几
3查询月历
输入2回车,然后输入年月可显示该月月历
4显示一年
输入3后回车,输入一个有效年份可显示该年的十二个月的月历。
六:
课程设计心得
通过本次课程设计我第一次通过自己的实践对书本上的知识进行了与生活相关的运用。
在这个程序中,主要应用了这学期所学习的循环,条件语句,数组以及调用函数。
这些知识的应用使我对课本内容的认识得到了加深。
在编写程序的过程中,也出现了很多错误。
比如程序语句错误导致检测时连续报错;函数语句编写错误导致输出结果与实际不符等。
出现这些情况后,通过对一些新知识的学习和对网上相关资料的阅览,我发现了自己的程序的问题所在并进行了改正。
最后得到了正确的结果。
在程序的编写完成后,我按照要求对程序进行了拓展。
在输出年历的基础上增加了月历及确定日期的输出。
经过这一次的课程设计我再一次清楚地认识到了编译的重要性,虽然课程结业了,但我们仍然要不断的学习这一方面的知识,只有这样我们才能够成为一个出色的大学生!
参考文献:
《c语言程序设计教程》第三版谭浩强
《C语言程序设计》.北京:
清华大学出版社.李泽中孙红艳主编.
《.C语言程序设计教程[M]》清华大学出版社.杨文君,杨柳
《C语言程序设计》精品课程学习网站