350 lines
7.1 KiB
C
350 lines
7.1 KiB
C
#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("请输入您接下来想要进行的操作:");
|
||
} |