用c语言写简单万年历,使用C语言编写的简单的万年历

#include void init();

char *CalculateDay( int y, int m, int d ); /*用于计算输入的年月日对应的是周几*/

void showCalendar(int y, int m);/*显示日历*/

int CalculatePerMonth(int y,int m);/*计算每月都有多少天*/

int year;

int month;

int day;

int main(int argc, char *argv[])

{

char *weekstr;

init();/*初始化界面,提示用户输入年月日*/

scanf("%d%d%d",&year,&month,&day);

weekstr=CalculateDay(year,month,day); /*根据用户的输入计算年月日*/

printf("\n%d年%d月%d日是\t%s",year,month,day,weekstr);

showCalendar(year,month) ;/*显示日历*/

getch(); //画面暂停,按任意键继续

return 0;

}

/**

*模块名称:init

* 功 能:初始化显示界面,提示用户输入年月日

*输 入:无

*输 出:无

*/

void init()

{

printf("\n========欢迎使用万年日历简洁版========\n");

printf("\n请输入年月日:\n");

}

/**

*模块名称:CalculateDay

*功 能:根据输入的年月日计算是周几

*输 入:年 月 日

*返回值 :周几

*/

char *CalculateDay( int y, int m, int d)

{

static int r[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};

int c,w;

char *week;

y %= 400;

if ((y == 0 || y % 4 == 0 && y % 100 != 0) && m < 3)

c = 5;

else

c = 6;

w = (y + y / 4 - y / 100 + r[m] + d + c) % 7;

switch(w)

{

case 0:

week="星期天";

break;

case 1:

week="星期一";

break;

case 2:

week="星期二";

break;

case 3:

week="星期三";

break;

case 4:

week="星期四";

break;

case 5:

week="星期五";

break;

case 6:

week="星期六";

break;

}

return week;

}

/**

*模块名称: 计算每月有多天

*输 入:年,月

*输 出:每月天数

*/

int CalculatePerMonth( int y,int m)

{

if((m==1) || (m==3) || (m==5) ||(m==7) || (m==8) || (m==10) || (m==12))

return 31;

else if(m!=2)

return 30;

else if((y%4 == 0)&&(y%100 != 0)||(y%400 ==0))

return 29;

else

return 28;

}

/**

*模块名称:showColendar

*功 能:显示日历

*输 入:年 月 日

*输 出:无

*/

void showCalendar(int y, int m)

{

char *week; /*每月的1号是周几*/

int perMonth;/*每月共有多少天*/

int w;

perMonth=CalculatePerMonth(y,m);

week=CalculateDay(y,m,1);

if(week=="星期天")

w=0;

else if(week=="星期一")

w=1;

else if(week=="星期二")

w=2;

else if(week=="星期三")

w=3;

else if(week=="星期四")

w=4;

else if(week=="星期五")

w=5;

else if(week="星期六")

w=6;

printf("\n======================================\n");

printf("\n日 一 二 三 四 五 六\n");

printf("\n======================================\n");

int i=0;

int count=w;

while(w>0)

{

printf(" ");

w--;

}

for(i=1;i<=perMonth;i++)

{

printf("%-6d",i);

count++;

if(count==7)

{

printf("\n");

count=0;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值