#include<stdio.h> #include<iostream> using namespace std; int gg1,gg2; int Year_first[10000];//每年第一天周几。 int day_first;//记录每月第一天是周几。 int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//月份天数 。 int moshi() { printf("请选择查看模式\n"); printf("若按年查看则输0,若按月查看则输1\n"); printf("您的选择: "); scanf("%d",&gg1); return gg1; } void pan0(int year) { //判断平闰年,改变二月份天数 if((year%4==0)&&(year%100!=0)||(year%400==0)) { a[2]=29; } } void pan1(int year,int month) { //判断平闰年,改变二月份天数 if(((year%4==0)&&(year%100!=0)||(year%400==0))&&(month>=2)) { a[2]=29; } } void shu0(int year) { int month; for(month=1;month<=12;month++) { day_first=Year_first[year]; //一年过了多少天 for(int i=1;i<month;i++) day_first+=a[i]; //算出本月第一天是周几 day_first%=7; printf("\t\t\t\t%d年%d月份\n\n",year,month); printf("\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n"); //本月第一天前的空 for(int i=0;i<day_first;i++) printf("\t"); //若第一天为周日为特殊情况 if(day_first==0) printf("\t\t\t\t\t\t\t"); //输出日期 for(int i=0;i<a[month];i++) { printf("%d\t",i+1); if((i+day_first)%7==0) printf("\n\t"); } printf("\n\n\n\n"); } } void shu1(int year,int month) { day_first=Year_first[year]; //一年过了多少天 for(int i=1;i<month;i++) day_first+=a[i]; //算出本月第一天是周几 day_first%=7; printf("\t\t\t\t%d年%d月份\n\n",year,month); printf("\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n"); //本月第一天前的空 for(int i=0;i<day_first;i++) printf("\t"); //若第一天为周日为特殊情况 if(day_first==0) printf("\t\t\t\t\t\t\t"); //输出日期 for(int i=0;i<a[month];i++) { printf("%d\t",i+1); if((i+day_first)%7==0) printf("\n\t"); } printf("\n\n\n\n"); } int main() { printf("\t\t\t万年历\n"); printf("\t\t\t\t------爸爸送给覃女儿的六一礼物\n\n"); printf("\t\t功能介绍:中途输入-1结束,输入-2重新选择模式\n"); int i,year, month; int flag;//每年星期变化,平年加1,闰年加2。 Year_first[1900]=1; //各年度第一天周几 for(i=1900;i<9999;i++) { flag=1; if((i%4==0)&&(i%100!=0)||(i%400==0)) flag=2; Year_first[i+1]=(Year_first[i]+flag)%7; } gg2=moshi(); while(1) { printf("请输入年份(Sample Input: 1900):"); scanf("%d",&year); if(year<1900&&year!=-1&&year!=-2) { printf("请输入大于等于1900的年份"); continue; } if(year==-1) { return 0; } if(year==-2) { gg2=moshi(); printf("请输入年份(Sample Input: 1900):"); scanf("%d",&year); } //按月查看 if(gg2) { printf("请输入月份(Sample Input: 01):"); scanf("%d",&month); pan1(year,month); shu1(year,month); } //按年查看 else { pan0(year); shu0(year); } } return 0; }
时间: 2024-10-16 16:08:48