课程设计说明万年历程序设计

  • 格式: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,那么退出查询系统