UIT2024_Calendar/stu2024/计科2402刘相宁.cpp
2024-12-07 16:23:34 +08:00

327 lines
6.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}