diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..12ca94a4e608df8d03e8b6f16b65469bcff006ec --- /dev/null +++ b/main.cpp @@ -0,0 +1,301 @@ +#include<stdio.h> +#include<math.h> +#include<string.h> +#define _CRT_SECURE_NO_WARNINGS +#define SHOW "* This program will show you displaying the day of the week or the birthday year calenda from caculate with Korean age *\n\n" +#define PROMPT "Please enter a person's birth date (yyyy mm dd).\nValid input range for the year entry is 0000 ~ 2020: \tex)2020 01 31.\n" +#define OP "\n\nPlease enter your option (1~4)\n\n" +#define A "Please enter a desired age. The valid range for the age is 0~120:\n" +#define E1 "*********************************************************************************\n" +#define E2 "* *\n" +#define ERROR "Wrong input, please try again.\n" +#define PNS "\nPlease enter '-1' for previous month, '1' for next month and '0' for stop\ndisplaying: " +#define S1 "*\t1. Display the day of the week when the person was born\t\t\t*\n" +#define S2 "*\t2. Display the day of the week on person's nnth birthday\t\t*\n" +#define S3 "*\t3. Display the birth month calendar the birth year\t\t\t*\n" +#define S4 "*\t4. Display the birth month calendar of the person's nnth birthday\t*\n" +#define DI "\t\t\t This program was made by 202020815, 김영훈\n\n" + +void printcal(int y, int m, int ly, int sum); +void printm(int m); +int sumofday(int y, int m, int d); + +int main() { + printf(DI); + printf(SHOW); + printf(PROMPT); + int y, m, d; + int age = 0; + int num; + int ly; + + do { + scanf("%4d %2d %2d", &y, &m, &d); + if (!((0 <= y && y <= 2020) && (0 < m && m <= 12) && (0 < d && d <= 31))) { + printf(ERROR); + } + else + { + break; + } + } while (1); + + printf(E1); + printf("\n%d/%d, %d has been entered.\n", m,d,y); + + printf(OP); + printf(E1); + printf(E2); + printf(S1); + printf(S2); + printf(S3); + printf(S4); + printf(E2); + printf(E1); + + int day_of_ly = ((y - 1) * 365 + ((y - 1) / 4) - ((y - 1) / 100) + ((y - 1) / 400)) % 7; + int i; + + do { + scanf("%d", &num); + if (!(1 <= num && num <= 4)) { + printf(ERROR); + } + else + { + break; + } + } while (1); + + int k; + + switch (num) + { + case 1: + k = sumofday(y, m, d) % 7; + switch (k) + { + case 0: printf("This person was born on Sunday.\n"); + break; + case 1: printf("This person was born on Monday.\n"); + break; + case 2: printf("This person was born on Tuesday.\n"); + break; + case 3: printf("This person was born on Wendnedsday.\n"); + break; + case 4: printf("This person was born on Thursday.\n"); + break; + case 5: printf("This person was born on Friday.\n"); + break; + case 6: printf("This person was born on Saturday.\n"); + break; + default: + break; + } + break; + + + case 2: + printf(E1); + printf(A); + scanf("%d", &age); + printf("When you were %d years old, the result was...\n\n", age); + k = sumofday(y + age - 1, m, d); + ly = ((y + age - 2) * 365 + ((y + age - 2) / 4) - ((y + age - 2) / 100) + ((y + age - 2) / 400)) % 7; + k = (k + ly) % 7; + switch (k) + { + case 0: printf("%d years old birthday is Sunday.\n", age); + break; + case 1: printf("%d years old birthday is Monday.\n", age); + break; + case 2: printf("%d years old birthday is Tuesday.\n", age); + break; + case 3: printf("%d years old birthday is Wendnedsday.\n", age); + break; + case 4: printf("%d years old birthday is Thursday.\n", age); + break; + case 5: printf("%d years old birthday is Friday.\n", age); + break; + case 6: printf("%d years old birthday is Saturday.\n", age); + break; + default: + break; + } + break; + + case 3: + printf(S3); + printcal(y, m, day_of_ly, sumofday(y, m, d)); + printf(PNS); + while (1) + { + scanf("%d", &i); + if (i == 0) { + printf("Program was Eixt\n"); + break; + } + else if (i == -1 || i == 1) { + m += i; + if (m == 13) { + m = 1; y++; + day_of_ly = ((y - 1) * 365 + ((y - 1) / 4) - ((y - 1) / 100) + ((y - 1) / 400)) % 7; + } + else if (m == 0) { + m = 12; y--; + day_of_ly = ((y - 1) * 365 + ((y - 1) / 4) - ((y - 1) / 100) + ((y - 1) / 400)) % 7; + } + printcal(y, m, day_of_ly, sumofday(y, m, d)); + printf(PNS); + continue; + } + else + printf(ERROR); + break; + } + + break; + + case 4: + printf(E1); + printf(S4); + printf(A); + scanf("%d", &age); + printf("When you were %d years old, the result was...\n\n", age); + y += age - 1; + day_of_ly = ((y - 1) * 365 + ((y - 1) / 4) - ((y - 1) / 100) + ((y - 1) / 400)) % 7; + printcal(y, m, day_of_ly, sumofday(y, m, d)); + printf(PNS); + while (1) + { + scanf("%d", &i); + if (i == 0) { + printf("Program was Eixt\n"); + break; + } + else if (i == -1 || i == 1) { + m += i; + if (m == 13) { + m = 1; y++; + } + else if (m == 0) { + m = 12; y--; + } + printcal(y, m, day_of_ly, sumofday(y, m, d)); + printf(PNS); + continue; + } + else + printf(ERROR); + break; + } + break; + + } + printf("Thanks!\n"); + return 0; + +} + +int sumofday(int y, int m, int d) { + int rs = 0; + switch (m) { //m-1월까지의 요일 합 + case 12: rs += 30; + case 11: rs += 31; + case 10: rs += 30; + case 9: rs += 31; + case 8: rs += 31; + case 7: rs += 30; + case 6: rs += 31; + case 5: rs += 30; + case 4: rs += 31; + case 3: rs += 28; + case 2: rs += 31; + case 1:break; + default: break; + } + if (m > 2) { + if (y % 4 == 0) { + if (y % 100 == 0) { + if (y % 400 == 0) + rs++; + } + else + rs++; + } + } + rs += d; + return rs; +} // +void printm(int m) { + switch (m) { + case 1:printf("January\n"); + break; + case 2:printf("February\n"); + break; + case 3:printf("March\n"); + break; + case 4:printf("April\n"); + break; + case 5:printf("May\n"); + break; + case 6:printf("June\n"); + break; + case 7:printf("July\n"); + break; + case 8:printf("August\n"); + break; + case 9:printf("September\n"); + break; + case 10:printf("October\n"); + break; + case 11:printf("November\n"); + break; + case 12:printf("December\n"); + break; + default:break; + } +} +void printcal(int y, int m, int ly, int sum) { + int tmp = sumofday(y, m, 1) % 7 + ly; //해당하는 월의 1일이 시작되는 날짜 세기용 + int flag = 0; //1이면 윤년, 0이면 일반 + if (y % 4 == 0) { + if (y % 100 == 0) { + if (y % 400 == 0) + flag = 1; + } + else + flag = 1; + } + tmp = tmp % 7; + printf("Year: %d\nMonth: ", y); + printm(m); + printf("SUN MON TUE WED THU FRI SAT\n"); + if (tmp < 7) + for (int i = 0; i < tmp; i++) + printf(" "); + if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) //31일인 달 출력 + for (int i = 1; i < 32; i++) { + printf("%4d", i); + if ((i + tmp) % 7 == 0) + printf("\n"); + } + else if (m == 4 || m == 6 || m == 9 || m == 11) //30일인 달 출력 + for (int i = 1; i < 31; i++) { + printf("%4d", i); + if ((i + tmp) % 7 == 0) + printf("\n"); + } + else if (m == 2 && flag == 0) //28일인 달 출력 + for (int i = 1; i < 29; i++) { + printf("%4d", i); + if ((i + tmp) % 7 == 0) + printf("\n"); + } + else + for (int i = 1; i < 30; i++) { //29일인 달 출력 + printf("%4d", i); + if ((i + tmp) % 7 == 0) + printf("\n"); + } +}