UIT2024_Calendar/lcm.c
2024-12-07 16:23:34 +08:00

350 lines
7.1 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.

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include<stdio.h>
#include<stdlib.h>
void one(int year);//查询对应年份的日历,要求可双列输出可单列输出
void two(int year, int month, int day);//查询对应日期的星期
void three(int year);//查询对应年份是否为闰年
int main() {
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期\n");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n");
int a;
int year, month, day;
while (scanf("%d", &a) != EOF) {
system("cls");
if (a == 1) {
printf("请输入年份:");
while (scanf("%d", &year) != EOF) {
system("cls");
if (year > 0) {
one(year);
break;
}
else {
printf("请重新输入:");
}
}
}
else if (a == 2) {
printf("请输入日期(年 月 日):");
while (scanf("%d %d %d", &year, &month, &day) != EOF) {
system("cls");
if (year > 0 && month > 0 && month < 13) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
if (day > 0 && day <= 31) {
two(year, month, day);
break;
}
else
printf("请重新输入日期(年 月 日):");
}
else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 0 && day <= 30) {
two(year, month, day);
break;
}
else
printf("请重新输入日期(年 月 日):");
}
else if (month == 2) {
if (!(year % 4) && (year % 100)) {
if (day > 0 && day <= 29) {
two(year, month, day);
break;
}
else
printf("请重新输入日期(年 月 日):");
}
else {
if (day > 0 && day <= 28) {
two(year, month, day);
break;
}
else
printf("请重新输入日期(年 月 日):");
}
}
}
else {
printf("请重新输入日期(年 月 日):");
}
}
}
else if (a == 3) {
printf("请输入年份:");
while (scanf("%d", &year) != EOF) {
system("cls");
if (year > 0) {
three(year);
break;
}
else {
printf("请重新输入:");
}
}
}
else if (a == 4) {
return 0;
}
else {
printf("请重新输入:");
}
}
}
void one(int year) {
int a[13] = { 0,31,0,31,30,31,30,31,31,30,31,30,31 };
if (!(year % 4) && (year % 100)) {
a[2] = 29;
}
else {
a[2] = 28;
}
int g = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
g++;
printf("1.单列输出\n");
printf("2.双列输出\n");
int q;
while (scanf("%d", &q) != EOF) {
system("cls");
if (q == 1 || q == 2) {
break;
}
else {
printf("请重新输入:");
}
}
if (q == 1) {
if (year != 1582) {
if (year < 1582)
g += 5;
if (g >= 7)
g %= 7;
printf("\n%d年\n", year);
int m = 1;
while (m <= 12) {
printf("\n%d月\n", m);
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
for (int j = 0, k = 1;k <= a[m];j) {
if (j == g) {
g++;
j++;
printf("%d\t", k++);
if (j == 7) {
j = 0;
g = 0;
printf("\n");
}
}
else {
j++;
printf("\t");
}
}
printf("\n");
m++;
}
}
else {
printf("\n%d年", year);
int m = 1;
while (m <= 12) {
printf("\n%d月\n", m);
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
for (int j = 0, k = 1;k <= a[m];j) {
if (j == g) {
g++;
j++;
if (m == 10 && k == 5)
k = 15;
printf("%d\t", k++);
if (j == 7) {
j = 0;
g = 0;
printf("\n");
}
}
else {
j++;
printf(" \t");
}
}
printf("\n");
m++;
}
}
}
else {
if (year < 1582) {
g += 5;
}
if (g >= 7) {
g %= 7;
}
int f = (g + 31) % 7;
int y = f;
printf("%d年\n", year);
int m = 1;
while (m <= 12) {
int n = m + 1;
printf("%d月\t\t\t\t\t\t\t\t%d月\n", m, n);
printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t\t星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
int i = 1, j = 1;
for (i = 1, j = 1;i <= a[m] || j <= a[n];i, j) {
for (int k = 0;1;k) {
if (k == g) {
k++, g++;
if (i <= a[m])
printf("%d\t", i++);
else
printf("\t");
if (k == 7) {
k = 0, g = 0;
break;
}
}
else {
printf("\t");
k++;
}
}
printf("\t");
for (int k = 0;1;k) {
if (k == f) {
k++, f++;
if (year == 1582 && n == 10 && j == 5) {
j = 15;
}
if (j <= a[n])
printf("%d\t", j++);
else
printf("\t");
if (k == 7) {
k = 0, f = 0;
break;
}
}
else {
printf("\t");
k++;
}
}
printf("\n");
}
if (year == 1582 && m == 9) {
g = (y + a[n] - 10) % 7;
f = (g + a[n + 1]) % 7;
y = f;
}
else {
g = (y + a[n]) % 7;
f = (g + a[n + 1]) % 7;
y = f;
}
m += 2;
}
}
system("pause");
system("cls");
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期\n");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n");
printf("\n\n请输入您接下来想要进行的操作:");
}
void two(int year, int month, int day) {
char n[7];
char a[7];
int g, i, k, r = 0;
g = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
if (year != 1582) {
if (year < 1582)
g += 5;
if (g >= 7)
g %= 7;
}
if (year == 1582 && month == 10) {
if (day > 4 && day < 15) {
system("cls");
printf("由于一些特殊原因从1582年10月5日到1582年10月14日这十天被删去所以请重新输入\n");
system("Pause");
system("cls");
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期\n");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n");
printf("\n\n请输入您接下来想要进行的操作:");
return ;
}
}
switch (0)
{
case 0:a[0] = 's';
case 1:a[1] = 'm';
case 2:a[2] = 't';
case 3:a[3] = 'w';
case 4:a[4] = 'x';
case 5:a[5] = 'f';
case 6:a[6] = 'a';
}
for (i = 0, k = g;i < 7;i++, g++)
{
if (g == 7)
g = 0;
n[i] = a[g];
}
switch (month - 1)
{
case 12:r += 31;
case 11:r += 30;
case 10:r += 31;
case 9:r += 30;
case 8:r += 31;
case 7:r += 31;
case 6:r += 30;
case 5:r += 31;
case 4:r += 30;
case 3:r += 31;
case 2:r += 28;
case 1:r += 31;
}
if (!(year % 4) && (year % 100) && (month > 2))
r++;
r += day;
k = r % 7;
printf("%d年%d月%d日是", year, month, day);
switch (n[k])
{
case 's':printf("星期日\n");break;
case 'm':printf("星期一\n");break;
case 't':printf("星期二\n");break;
case 'w':printf("星期三\n");break;
case 'x':printf("星期四\n");break;
case 'f':printf("星期五\n");break;
case 'a':printf("星期六\n");break;
}
system("pause");
system("cls");
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期\n");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n");
printf("\n\n请输入您接下来想要进行的操作:");
}
void three(int year) {
if ((year % 4 == 0) && (year % 100) != 0) {
printf("\n%d年是闰年\n\n", year);
}
else {
printf("\n%d年不是闰年\n\n", year);
}
system("pause");
system("cls");
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期\n");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n");
printf("请输入您接下来想要进行的操作:");
}