327 lines
6.2 KiB
C++
327 lines
6.2 KiB
C++
#include<stdio.h>
|
||
#include<stdlib.h>
|
||
|
||
|
||
int main(){
|
||
|
||
int a;
|
||
|
||
printf("1:查看日期为星期几,该年是否为闰年\n");
|
||
printf("2:单列输出该年日历\n");
|
||
printf("3:双列输出该年日历\n");
|
||
printf("0:输出0退出程序\n");
|
||
printf("请输出你想查询的序号\n");
|
||
scanf("%d",&a);
|
||
switch(a){
|
||
case(0):break;
|
||
|
||
|
||
case(1):
|
||
|
||
|
||
while(1){
|
||
//星期计算方法:公元元年1月1日至指定日期总天数%7
|
||
int year,month,day;
|
||
printf("请输入年(格式:0000年)\n");
|
||
scanf("%d",&year);//输入年份
|
||
|
||
if(year==0)
|
||
break;
|
||
|
||
|
||
if(year==1582&&month==10&&day>4&&day<15){
|
||
printf("输入有误,请重新输入\n\n\n");
|
||
continue;}
|
||
|
||
|
||
|
||
|
||
//判断年的天数
|
||
int sumyear1=0;//表示从公元元年开始 ,表示闰年总数
|
||
if(year>1582){
|
||
for(int i=1;i<=year-1;i++){
|
||
if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法
|
||
sumyear1++;
|
||
}
|
||
}
|
||
else{
|
||
for(int i=1;i<=year-1;i++){
|
||
if(i%4==0){
|
||
sumyear1++;
|
||
}
|
||
//儒略历判断闰年方法
|
||
}
|
||
sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天
|
||
}
|
||
int sumday;//统计总天数
|
||
sumday=(year-1)*365+sumyear1;//统计至去年的总天数
|
||
|
||
// 判断公历与儒略历二月天数
|
||
int feb;
|
||
if(year>1582){
|
||
if((year%4==0&&year%100!=0)||year%400==0){
|
||
printf("%d年是闰年\n\n",year);
|
||
feb=29;}
|
||
else{
|
||
printf("%d年是平年\n\n",year);
|
||
feb=28;}
|
||
}
|
||
else{
|
||
if(year%4==0){
|
||
|
||
feb=29;
|
||
printf("%d年是闰年\n\n",year);}
|
||
else{
|
||
printf("%d年是平年\n\n",year);
|
||
feb=28;}
|
||
}
|
||
int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31};
|
||
printf("请输入月(格式:00月)\n");
|
||
scanf("%d",&month);
|
||
if(month==0)
|
||
break;//输入月份
|
||
|
||
//统计公元元年至去年总天数加本年一月至上月总天数
|
||
for(int i=1;i<=month-1;i++)
|
||
sumday+=a[i];//统计完成
|
||
if(year==1582&&(month==11||month==12))
|
||
sumday+=11;
|
||
|
||
printf("请输入日(格式:00日)\n\n");
|
||
scanf("%d",&day);//输入日
|
||
if(day==0)
|
||
break;
|
||
|
||
if(year==1582&&month==10&&day>4&&day<15){
|
||
printf("输入有误,请重新输入\n");
|
||
continue;
|
||
}
|
||
//从公元元年开始求星期
|
||
int week;
|
||
if(year==1582&&month==10&&day>=15){
|
||
week=(sumday+day-10)%7;
|
||
}
|
||
else week=(sumday+day)%7;
|
||
if(week!=0){
|
||
printf("%d年%d月%d日是星期%d\n\n",year,month,day,week);
|
||
}
|
||
else{
|
||
printf("%d年%d月%d日是星期日\n\n",year,month,day);
|
||
}
|
||
}
|
||
break;
|
||
|
||
|
||
|
||
case(2):
|
||
while(1){/////////////重复 单列输出
|
||
//星期计算方法:公元元年1月1日至指定日期总天数%7
|
||
int year,month;
|
||
printf("请输入年(格式:0000年)\n");
|
||
scanf("%d",&year);//输入年份
|
||
|
||
if(year==0)
|
||
break;
|
||
|
||
|
||
//判断年的天数
|
||
int sumyear1=0;//表示从公元元年开始 ,表示闰年总数
|
||
if(year>1582){
|
||
for(int i=1;i<=year-1;i++){
|
||
if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法
|
||
sumyear1++;
|
||
}
|
||
}
|
||
else{
|
||
for(int i=1;i<=year-1;i++){
|
||
if(i%4==0){
|
||
sumyear1++;
|
||
}
|
||
//儒略历判断闰年方法
|
||
}
|
||
sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天
|
||
}
|
||
int sumday;//统计总天数
|
||
sumday=(year-1)*365+sumyear1;//统计至去年的总天数
|
||
|
||
// 判断公历与儒略历二月天数
|
||
int feb;
|
||
if(year>1582){
|
||
if((year%4==0&&year%100!=0)||year%400==0){
|
||
feb=29;}
|
||
else{
|
||
feb=28;}
|
||
}
|
||
else{
|
||
if(year%4==0){
|
||
|
||
feb=29;}
|
||
else{
|
||
feb=28;}
|
||
}
|
||
int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31};
|
||
for(month=1;month<=12;month++){
|
||
//统计公元元年至去年总天数加本年一月至上月总天数
|
||
for(int i=1;i<=month-1;i++)
|
||
sumday+=a[i];//统计完成
|
||
if(year==1582&&(month==11||month==12))
|
||
sumday+=11;
|
||
|
||
int day=1,week;
|
||
week=(sumday+day)%7;
|
||
|
||
printf("\n------------------ %d 年 %d 月 ---------------------\n\n",year,month);
|
||
printf("日 一 二 三 四 五 六\n\n");
|
||
|
||
///放入1号
|
||
for(int j=1;j<=week;j++){
|
||
printf(" ");
|
||
}
|
||
//放入其他日期 当天日期加1号>=7
|
||
if(year==1582&&month==10){
|
||
for(int j=1;j<=a[month];j++){
|
||
printf("%d ", j);
|
||
if((week+j)>=7){
|
||
printf("\n\n");
|
||
week-=7;
|
||
}
|
||
if(j==4){//单独判断1582
|
||
j+=10;
|
||
week-=10;
|
||
}
|
||
}
|
||
}
|
||
else{
|
||
for(int j=1;j<=a[month];j++){
|
||
printf("%d ", j);
|
||
if((week+j)>=7){
|
||
printf("\n\n");
|
||
week-=7;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
case(3):
|
||
while(1){/////////////重复 双列输出
|
||
//星期计算方法:公元元年1月1日至指定日期总天数%7
|
||
int year,month;
|
||
printf("请输入年(格式:0000年)\n");
|
||
scanf("%d",&year);//输入年份
|
||
|
||
if(year==0)
|
||
break;
|
||
|
||
|
||
//判断年的天数
|
||
int sumyear1=0;//表示从公元元年开始 ,表示闰年总数
|
||
if(year>1582){
|
||
for(int i=1;i<=year-1;i++){
|
||
if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法
|
||
sumyear1++;
|
||
}
|
||
}
|
||
else{
|
||
for(int i=1;i<=year-1;i++){
|
||
if(i%4==0){
|
||
sumyear1++;
|
||
}
|
||
//儒略历判断闰年方法
|
||
}
|
||
sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天
|
||
}
|
||
int sumday;//统计总天数
|
||
sumday=(year-1)*365+sumyear1;//统计至去年的总天数
|
||
|
||
// 判断公历与儒略历二月天数
|
||
int feb;
|
||
if(year>1582){
|
||
if((year%4==0&&year%100!=0)||year%400==0){
|
||
feb=29;}
|
||
else{
|
||
feb=28;}
|
||
}
|
||
else{
|
||
if(year%4==0){
|
||
|
||
feb=29;}
|
||
else{
|
||
feb=28;}
|
||
}
|
||
int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31};
|
||
for(month=1;month<=12;month++){
|
||
//统计公元元年至去年总天数加本年一月至上月总天数
|
||
for(int i=1;i<=month-1;i++)
|
||
sumday+=a[i];//统计完成
|
||
if(year==1582&&(month==11||month==12))
|
||
sumday+=11;
|
||
|
||
int day=1,week;
|
||
week=(sumday+day)%7;
|
||
|
||
printf("\n--------------------------------------------\n\n");
|
||
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n\n");
|
||
for(month=1;month<=12;month+=2){
|
||
|
||
///放入1号
|
||
for(int j=1;j<=week;j++){
|
||
printf(" ");
|
||
}
|
||
//放入其他日期 当天日期加1号>=7
|
||
|
||
for(int j=1;j<=a[month+2];j++){
|
||
printf("%d ", j);
|
||
if((week+j)>=7){
|
||
printf("\n\n");
|
||
week-=7;
|
||
}
|
||
}
|
||
}
|
||
for(month=2;month<=12;month+=2){
|
||
for(int j=1;j<=week;j++){
|
||
printf(" ");
|
||
}
|
||
//放入其他日期 当天日期加1号>=7
|
||
if(year==1582&&month==10){
|
||
for(int j=1;j<=a[month];j++){
|
||
printf("%d ", j);
|
||
if((week+j)>=7){
|
||
printf("\n\n");
|
||
week-=7;
|
||
}
|
||
if(j==4){//单独判断1582
|
||
j+=10;
|
||
week-=10;
|
||
}
|
||
}
|
||
}
|
||
else{
|
||
for(int j=1;j<=a[month];j++){
|
||
printf("%d ", j);
|
||
if((week+j)>=7){
|
||
printf("\n\n");
|
||
week-=7;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|