UIT2024_Calendar/stu2024/计科2402沈意佳.cpp
2024-12-07 16:23:34 +08:00

184 lines
4.5 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 isLeapYear(int year) {
if ((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0)) {
return 1;
}
return 0;
}
int getDaysInMonth(int year,int month){
scanf("%d%d",&year,&month);
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
printf("31");
else if(month==4||month==6||month==9||month==11)
printf("30");
else{
if((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0))
printf("29");
else
printf("28");
}
return 0;
}
int getDayOfWeek(int year, int month, int day) {
if (month < 3) {
month += 12;
year--;
}
int c = year / 100;
int y = year % 100;
int week = (day + 2 * month + 3 * (month + 1) / 5 + y + y / 4 + c / 4 - 2 * c + 7) % 7;
return week;
}
/*单月日历*/
void x(int year, int month) {
printf("%d%d\n", year, month);
printf("日 一 二 三 四 五 六\n");
int dayOfWeek = getDayOfWeek(year, month, 1);
for (int i = 0; i < dayOfWeek; i++) {
printf(" ");
}
int daysInMonth;
int getDaysInMonth;
for (int i = 1; i <= daysInMonth; i++) {
printf("%2d ", i);
if ((i + dayOfWeek) % 7 == 0) {
printf("\n");
}
}
if ((daysInMonth + dayOfWeek) % 7!= 0) {
printf("\n");
}
}
void z(int year, int month) {
printf(" %d%d%d%d\n", year, month, year, month + 1);
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
int dayOfWeek1 = getDayOfWeek(year, month, 1);
int dayOfWeek2 = getDayOfWeek(year, month + 1, 1);
for (int i = 0; i < dayOfWeek1; i++) {
printf(" ");
}
int daysInMonth1 ;
int daysInMonth2 ;
int i1 = 1, i2 = 1;
while (i1 <= daysInMonth1 || i2 <= daysInMonth2) {
if (i1 <= daysInMonth1) {
printf("%2d ", i1);
i1++;
} else {
printf(" ");
}
if ((i1 + dayOfWeek1 - 1) % 7 == 0 && i1 <= daysInMonth1) {
printf(" ");
}
if (i2 <= daysInMonth2) {
printf("%2d ", i2);
i2++;
} else {
printf(" ");
}
if ((i2 + dayOfWeek2 - 1) % 7 == 0 && i2 <= daysInMonth2) {
printf("\n");
}
}
if ((daysInMonth1 + dayOfWeek1) % 7!= 0 || (daysInMonth2 + dayOfWeek2) % 7!= 0) {
printf("\n");
}
}
void showMenu() {
printf("菜单:\n");
printf("1. 查询某年某月某日的日期是周几及该年是否为闰年\n");
printf("2. 输入年份,输出这一年的单月日历\n");
printf("3. 输入年份,输出这一年的双月日历(并排显示两个月)\n");
printf("4.");
}
int main() {
int choice;
int year, month, day;
int m;
do {
showMenu();
scanf("%d",&choice);
switch (choice) {
case 1:
printf("请输入年份:");
scanf("%d",&year);
printf("请输入月份:");
scanf("%d",&month);;
printf("请输入日期:");
scanf("%d",&day);
if (year < 1583 && year == 1582 && month == 10 && day >= 5 && day <= 14) {
printf("1582年10月5日 - 14日不存在请重新输入。\n");
continue;
}
printf("%d%d%d", year, month, day);
switch (getDayOfWeek(year, month, day)) {
case 0:
printf("\n");
break;
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;
}
if (is LeapYear){
printf("%d\n", year);
} else {
printf("%d年不是闰年\n", year);
}
break;
case 2:
printf("请输入年份:");
scanf("%d",&year);
for (month = 1; month <= 12; month++) {
x(year, month);
printf("\n");
}
break;
case 3:
printf("请输入年份:");
scanf("%d",&year);;
for (month = 1; month <= 11; month += 2) {
z(year, month);
printf("\n");
}
break;
default:
printf("无效的选择,请重新输入。\n");
}
} while (choice!= 0);
return 0;
}