打印日历(标准版)
#ifndef __CALENDER__
#define __CALENDER__
#include<stdio.h>
#define PRINT_YEAR 1
#define PRINTD_MONTH 2
void print_date(int year,int month);
#endif
//打印日歷
#include"calender.h"
int main(int argc, const char *argv[])
{int choose,ret,year,month;puts("********Please choose***************");puts("********1.Print year calender*******");puts("********2.Print month calender******");puts("************************************");printf("Input chose>");ret=scanf("%d",&choose);if(ret!=1){printf("打印錯誤");return -1;}while(getchar()!='\n');switch (choose){case PRINT_YEAR:printf("input Print year>");ret = scanf("%d",&year);if(ret!=1){printf("input year error\n");return -1;}while((getchar())!=('\n'));//判斷年份if(year<=0){printf("input error\n");return -1;}print_date(year,0);break;case PRINTD_MONTH://輸入年和月printf("input year and month\n");ret = scanf("%d-%d",&year,&month);if(ret!=2){printf("intput year and month error\n");return -1;}while(getchar()!='\n');if((year<=0)||(month<=0)||(month>12)){printf("intput year and month error\n");return -1;}print_date(year,month);break;dafault:printf("input chose error,try again\n");return -1;}return 0;
}
#include"calender.h"
//計算某年某月的某一天為星期幾0代表星期日
int getWeekdayByYearday(int iY,int iM,int iD)
{int iWeekDay = -1;if(1==iM||2==iM){iM+=12;iY--;}iWeekDay = (iD+1+2*iM+3*(iM+1)/5+iY+iY/4-iY/100+iY/400)%7;return iWeekDay;
}
//得到某一月有多少天
int getmonthofday(int year,int month)
{int day=0;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 4:case 6:case 9:case 11:day=30;break;case 2:{if((year%4==0&&year%100!=0)||(year%400==0))day=29;elseday=28;}break; }return day;
}
void print_month(int year,int month)
{int week;printf("%d-%d\n",year,month);printf("\tSun\tMon\tTue\tWed\tThu\tFri\tSat\n");//這一月的第一天是星期幾week=getWeekdayByYearday(year,month,1);//移動光標到每月的第一天是周幾的位置for(int i=0;i<=week;i++){printf("\t");}//打印日期int i,j;for(i=1,j=week;i<=getmonthofday(year,month);i++,j++){if(j==7){j=0;printf("\n\t");}printf("%d\t",i);}printf("\n");
}void print_date(int year,int month)
{if(month==0){for(int i=1;i<=12;i++){print_month(year,i);}}else{print_month(year,month);}
}
總結
- 上一篇: 调用照相机和相册功能
- 下一篇: 红蓝对抗——蓝军(CheckList)总