课程设计说明万年历程序设计
- 格式:docx
- 大小:58.39 KB
- 文档页数:13
《高级语言程序设计》
课程设计说明书
设计题目:万年历程序设计
班 级:
学 号:
姓 名:
完成日期:
一:课程设计目的
《高级语言程序设计》课程设计是电子信息、光信息专业和物理学专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习,其目的在于加深对程序设计大体知识的明白得,把握利用C语言进行模块化软件设计的大体方式,提高通过编写程序解决实际问题的能力,为尔后从事设计工作和后续各类编程课程的学习打好基础。
二:需求分析
题目:
要求:输入年份和月份,自动输出该月的日历,清楚的显示每一天是礼拜几,输入年份,月份和具体日期能确信某天是礼拜几。
万年历是采纳数字电路实现对.时,分,秒.数字显示的计时装置,普遍用于个人家庭,车站, 码头办公室等公开场合,成为人们常生活中不可少的必需品,由于数字集成电路的进展和石英晶体振荡器的普遍应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如按时自动报警、按时自动打铃、时刻程序自动操纵、按时广播、自动起闭路灯、按时开关烘箱、通断动力设备、乃至各类按时电气的自动启用等,可是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着超级现实的意义。它能够对年、月、日、周日、时、分、秒进行计时,关于数字电子万年历采纳直观的数字显示,能够同时显示年、月、日、周日、时、分、秒等信息,还具有时刻校准等功能。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简练、本钱低廉等诸多优势,符合电子仪器仪表的进展趋势,具有广漠的市场前景。
三:概要设计
1-判定是不是为闰年
计算所输入的年份是不是可被4整除,假设不能被整除,为平年。假设可被4整除,计算此年份可否被100整除,不能被100整除那么为闰年。既能被4整除,也能被100整除的年份,假设也能被400整除,那么为闰年,不然为平年。闰年366天,平年365天
2-要紧设计思路
四:详细设计
源程序:#include
#include
void DayOfWeek()
{
int rtnDay;
int y,m,d;
char ch; 开始
输入指令(1234)
输入4退出 判断是否为闰年
1日历 2月历 3年历
输入年月日 数日年月 输入年份
按下回车可得星期几 按下回车可得月历 按下回车可得年历 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;
}
}
void GetMonth(int D, int md, int n)
{
int N ,m,d,y,c,Wd;
int i,maxday,i1;
if(md>=13||md<=0)
printf("HAVE WRONG!");
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)
{
case 1:maxday=31;break; case 2:if(D%4==0&&D%100!=0||D%400==0)
maxday=29;
else
maxday=28;
break;
case 3:maxday=31;break;
case 4:maxday=30;break;
case 5:maxday=31;break;
case 6:maxday=30;break;
case 7:maxday=31;break;
case 8:maxday=31;break;
case 9:maxday=30;break;
case 10:maxday=31;break;
case 11:maxday=30;break;
case 12:maxday=31;break;
default:printf("HAVE WRONG");
}
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(" SUN MOU TUE WED TUR FRI SAT\n");
for(i=0;i
printf("%4c",' ');
for(d=1;d<=maxday;d++)
{
printf("%4d",d);
Wd=(Wd+1)%7;
if(Wd==0)
printf("\n");
}
}
else
printf("HAVE WRONG!");
if(i1==n) break;
}
}
}
void MonthOfYear()
{
char ch;
int y, 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;
}
}
void GetYear()
{
char ch;
int y;
while (1)
{
printf("请输入年: ");
scanf("%d", &y);
fflush(stdin);
GetMonth(y, 1, 11);
printf("\n继续查询(y/n)");
ch = getchar();
if(ch != 'y' && ch != 'Y')
break;
}
}
int main()
{
char ch;
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,那么退出查询系统