C语言万年历(代码+说明)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*本程序在Microsoft Visual Studio 2010 旗舰版中测试通过*/ #include "stdio.h"

#include "stdlib.h"

#include "time.h"

#include "conio.h"

#define KEYUP 72//宏定义键盘的键值(↑)

#define KEYDOWN 80//宏定义键盘的键值(↓)

#define KEYLEFT 75//宏定义键盘的键值(←)

#define KEYRIGHT 77//宏定义键盘的键值(→)

//函数声明部分

const int isLeap(int year);

const int getMonthDays(int year,int month);

const int yearDays(int year);

void printCalendar(int year,int month);

void main(){

int year,month;

int action = 0;

//获取本地当前的年份和月份

time_t timep;

struct tm *p;

time(&timep);

p = localtime(&timep);

year = p->tm_year+1900;//获取本地当前的年份

month = p->tm_mon + 1;//获取本地当前的月份

while(1){

printf("\t\t %d 年%d 月\n",year,month);

printCalendar(year,month);

action = getch();

system("cls");

switch(action){

case KEYUP:

year++;

break;

case KEYDOWN:

year--;

break;

case KEYLEFT:

month--;

if(month < 1){

month = 12;

}

break;

case KEYRIGHT:

month++;

if(month > 12){

month = 1;

}

break;

}

}

}

//判断year 是否是润年返回1 为闰年

const int isLeap(int year){

if(year%4==0&&year%100!=0||year%400==0){ return 1;

}

else{

return 0;

}

}

/*计算year 年的month 月是多少天

*返回值:整型,天数

*/

const int getMonthDays(int year,int month){ switch(month){

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

break;

case 4:

case 6:

case 9:

case 11:

return 30;

break;

case 2:

if(isLeap(year)){

return 29;

}else{

return 28;

}

break;

default:

return 0;

break;

}

}

//计算year 年的天数

const int yearDays(int year){

if(isLeap(year)){

return 366;

}else{

return 365;

}

}

/*判断year 年month 月day 天时星期几

*返回值:0,1,2,3,4,5,6

*/

const int isWeek(int year,int month,int day){ int days = 0;

int i;

//计算前year 年有多少天

for(i=1;i

days = days + yearDays(i);

}

//计算year 年的前month 个月有多少天

for(i=1;i

days = days + getMonthDays(year,i);

}

//从公元1 年

days = days + day;

return days%7;

}

//按日历的格式打印year 年month 月的日历void printCalendar(int year,int month){

const char *week[]

= {"日","一","二","三","四","五","六"};

int i;int row = 0;

for(i=0;i<7;i++){

printf("%s\t",week[i]);

}

printf("\n");

//判断year 年month 月1 日时星期几

for(i=0;i

printf("\t");

}

for(i=0;i

//如果是星期六就换行打印日期

if(isWeek(year,month,i+1) == 6){

相关文档
最新文档