#include #include #include #include void rili(int year,int pri){//1.按月份输出 int a,b,con=0; int c=0; int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;//判断某一年第一天 if(year<=1582){ a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+11)%7; } if((year%4==0&&year%100!=0)||year%400==0) //闰年 arr[2]=29; if(pri==1){ //单列输出 for(int i=1;i<13;i++){ printf("=======================%2d月=======================\n",i); printf("日\t一\t二\t三\t四\t五\t六\n"); if(year==1582&&i==11) a=1; if(year==1582&&i==112) a=3; if(a!=0){ for(int x=1;x<=a;x++) { printf("\t"); } } else printf("\n"); for(int j=1;j<=arr[i];j++) { if(year==1582&&i==10&&(j>4&&j<15)){ //特殊年 continue; } con+=1; printf("%d\t",j); if((con+a)%7==0||j==arr[i]) printf("\n"); } a=(arr[i]+a)%7; con=0; printf("\n"); } } //单列结束 else if(pri==2){ //双列 con=0; int q,m; for(int i=1;i<13;i+=2){ printf("=======================%2d月=======================\t",i); printf("=======================%2d月=======================\n",i+1); printf("日\t一\t二\t三\t四\t五\t六\t日\t一\t二\t三\t四\t五\t六\n"); b=(arr[i]+a)%7; q=7-b+1; m=7-a+1; if(year==1582&&i==11){ a=1;b=3;m=7;q=5; } if(a!=0){ for(int x=1;x<=a;x++) { printf("\t"); } } for(int x=1;x<=7-a;x++) { printf("%d\t",x); } if(year==1582&&i+1==10){ printf("\t1\t2\t3\t4\t15\t16\t"); q=17; } else{ if(b!=0) { for(int x=1;x<=b;x++) { printf("\t"); } } for(int y=1;y<=7-b;y++) { printf("%d\t",y); } } printf("\n"); /////////////////////////////////////第一行 for(int j=m;j<=arr[i];j++) { printf("%d\t",j); if(j==arr[i]&&(j+a)%7!=0){ for(int g=0;g<=7-b-1;g++){ printf("\t"); } } if((j+a)%7==0||j==arr[i]){ for(int y=q;y<=arr[i+1];y++){ printf("%d\t",y); if(year==1582&&(i+1)==10){ if(y==23||y==30||y==31){ q=y+1; printf("\n"); break; } else continue; } else{ if(((y+b)%7==0||y==arr[i+1])&&j!=arr[i]){ q=y+1; printf("\n"); break; } else if(j==arr[i]&&(y+b)%7==0&&y!=arr[i+1]){ q=y+1; printf("\n\t\t\t\t\t\t\t"); continue; } } } } if(year==1582&&i==9&&j==29) printf("\n"); } a=(arr[i+1]+b)%7; printf("\n"); } } } void xingqi(int year,int mon,int day){ //查询星期 int a,b,con=0; int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;//判断某一年第一天 if(year<=1582){ a=((year-1)*365+((year-1)/4)-((year-1)/100)+((year-1)/400)+11)%7; } if((year%4==0&&year%100!=0)||year%400==0) //闰年 arr[2]=29; if(year==1582){ arr[10]=21; } for(int i=1;i=15){ b=(day-10)%7; } else b=(a+day-1)%7; switch(b){ case 1:printf("这一天是星期一\n");break; case 2:printf("这一天是星期二\n");break; case 3:printf("这一天是星期三\n");break; case 4:printf("这一天是星期四\n");break; case 5:printf("这一天是星期五\n");break; case 6:printf("这一天是星期六\n");break; case 0:printf("这一天是星期日\n");break; } } void run(int year){ //判断闰年 if((year%4==0&&year%100!=0)||year%400==0) printf("%d是闰年\n",year); else printf("%d不是闰年\n",year); } bool nian(int year){ if(year>0&&year<10000) return true; else return false; } bool yue(int mon){ if(mon>0&&mon<13) return true; else return false; } bool ri(int year,int mon,int day){ int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if((year%4==0&&year%100!=0)||year%400==0) //闰年 arr[2]=29; if(year==1582&&mon==10&&day>4&&day<15) return false; if(day>0&&day<=arr[mon]) return true; else return false; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// int main(){ qwe:printf("1.查询对应年份的日历\n2.查询对应日期的星期\n3.查询对应年份是否为闰年\n4.退出\n(如果需要返回请按0)\n"); printf("请选择想要执行的项目:\n"); char num[100001]; //选择项目内容 int year=0,pri=0,mon=0,day=0,a,b,c;//年份 输出方式 月 char y[100001],p[100001],m[100001],d[100001]; while(gets(num)){ year=0;pri=0;mon=0;day=0; if(strlen(num)!=1){ printf("输入错误!请重新输入:\n"); continue; } if(num[0]=='1'){ asd: printf("请输入想要查询的年份:\n"); edc: while(gets(y)){ year=0; if(y[0]=='0'&&strlen(y)==1){ goto qwe; } if(strlen(y)<=4){ for(int i=0;i='0'&&y[i]<='9'){ continue; } else { printf("输入有误!请重新输入:\n"); goto edc; } } break; } else{ printf("输入有误!请重新输入:\n"); continue; } } a=strlen(y)-1; c=strlen(y); while(a>=0){ b=((int)y[a]-48)*pow(10,c-a-1); year+=b; a-=1; } while(!nian(year)){ printf("您输入的年份有误请重新输入:\n"); goto edc; } printf("请选择日历的表现形式:\n1.单列输出\n2.双列输出\n"); bnm: while(gets(p)){ if(p[0]=='0'&&strlen(p)==1){ goto asd; } if(strlen(p)>1||(strlen(p)==1&&(p[0]>'2'||p[0]<'1'))){ printf("输入错误!请重新输入:\n"); continue; } else break; } pri=(int)p[0]-48; while(pri!=1&&pri!=2){ printf("请输入1或2\n"); goto bnm; } rili(year,pri); //执行1 输出日历 } else if(num[0]=='2'){ rty: printf("请输入想要查询的具体日期\n"); printf("年:"); wsx: while(gets(y)){ year=0; if(y[0]=='0'&&strlen(y)==1){ goto qwe; } if(strlen(y)<=4){ for(int i=0;i='0'&&y[i]<='9'){ continue; } else { printf("输入有误!请重新输入:\n"); goto wsx; } } break; } else{ printf("输入有误!请重新输入:\n"); continue; } } a=strlen(y)-1; c=strlen(y); while(a>=0){ b=((int)y[a]-48)*pow(10,c-a-1); year+=b; a-=1; } while(!nian(year)){ printf("您输入的年份有误请重新输入:\n"); goto wsx; } uio: printf("月:"); qaz: while(gets(m)){ mon=0; if(m[0]=='0'&&strlen(m)==1){ goto rty; } if(strlen(m)>2||(strlen(m)<=2&&((m[0]>'9'||m[0]<'0')||((m[1]>'9'||m[1]<'0')&&m[1]!='\0')))){ printf("输入错误!请重新输入:\n"); continue; } else break; } a=strlen(m)-1; c=strlen(m); while(a>=0){ b=((int)m[a]-48)*pow(10,c-a-1); mon+=b; a-=1; } if(!yue(mon)){ printf("您输入的月份有误请重新输入:\n"); goto qaz; } printf("日:"); rfv: while(gets(d)){ day=0; if(d[0]=='0'&&strlen(d)==1){ goto uio; } if(strlen(d)>2||(strlen(d)<=2&&((d[0]>'9'||d[0]<'0')||((d[1]>'9'||d[1]<'0')&&d[1]!='\0')))){ printf("输入错误!请重新输入:\n"); continue; } else break; } a=strlen(d)-1; c=strlen(d); while(a>=0){ b=((int)d[a]-48)*pow(10,c-a-1); day+=b; a-=1; } while(!ri(year,mon,day)){ printf("您输入的日期有误请重新输入:\n"); goto rfv; } xingqi(year,mon,day); } else if(num[0]=='3'){ //3程序 printf("请输入想要查询的年份:\n"); tgb: while(gets(y)){ year=0; if(y[0]=='0'&&strlen(y)==1){ goto qwe; } if(strlen(y)<=4){ for(int i=0;i='0'&&y[i]<='9'){ continue; } else { printf("输入有误!请重新输入:\n"); goto tgb; } } break; } else{ printf("输入有误!请重新输入:\n"); continue; } } //判空字符 a=strlen(y)-1; c=strlen(y); while(a>=0){ b=((int)y[a]-48)*pow(10,c-a-1); year+=b; a-=1; } while(!nian(year)){ printf("您输入的年份有误请重新输入:\n"); goto tgb; } //判错误年份 run(year); } else if(num[0]=='4')break; else{ //判错误序号 printf("输入错误!请重新输入:\n"); continue; } printf("想要在使用一次赵思雨的无敌旋风霹雳程序吗\n1.好的\n2.婉拒\n");//继续程序 char ok[100001]; int f=ok[100001]-48; okf: while(gets(ok)){ if(strlen(ok)>1||(strlen(ok)==1&&(ok[0]>'2'||ok[0]<'1'))){ printf("输入错误!请重新输入:\n"); continue; } else break; } f=(int)ok[0]-48; while(f!=1&&f!=2){ printf("请输入1或2\n"); goto okf; } if(f==2)break; else if(f==1){ system("cls"); goto qwe; } } }