본문 바로가기

C, C++

C++/달력 만들기 헤더 파일/

년도, 월, 일을 넘겨받아서 요일을 출력하는 함수를 만들어보자.
헤더파일에 만들어서 소스 파일에 #include 시켜서 사용할 수 있다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
// 년도를 넘겨받아 윤년/평년을 판단해 윤년이면 true(1), 평년이면 false(0)을 리턴하는 함수
bool isLeapYear(int year) {
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0;
    }
 
// 년, 월을 넘겨받아 그 달의 마지막 날짜를 리턴하는 함수
int lastDay(int year, int month) {
    // 각 달의 마지막 날짜를 기억하는 리스트를 만든다.
    int m[] = { 312831303130313130313031 };
    // 인수로 넘겨받은 년도에 따른 2월의 마지막 날짜를 확정한다.
    m[1= isLeapYear(year) ? 29 : 28;
    return m[month - 1];
    }
 
    // 년, 월, 일을 넘겨받아 1월 1일부터 지난 날짜를 계산해 리턴하는 함수
int totalDay(int year, int month, int day) {
    int sum = (year - 1* 365 + (year - 1/ 4 - (year - 1/ 100 + (year - 1/ 400;
    for (int i = 1; i < month; i++) {
        sum += lastDay(year, i);
    }
    return sum + day;
}
    // 년, 월, 일을 넘겨받아 요일을 리턴하는 함수
  int weekDay(int year, int month, int day) {
//  0:일요일, 1:월요일, 2:화요일, 3:수요일, 4:목요일, 5:금요일 6:토요일
//  1년 1월 1일부터 인수로 넘겨받은 년, 월, 일까지 지난 날짜의 합계를 7로 나눈 나머지를 리턴시킨다.
      return totalDay(year, month, day) % 7;
}
 
cs

 

소스 파일에 위의 헤더 파일을 추가하여 달력 출력하기.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "config.h"
#include "calendar.h"
 
void main() {
 
        int year, month, day;
        
        // 달력 모양 만들기
 
        printf("출력할 달력의 년도와 월을 적으시오 : ");
        scanf_s(" %d %d"&year, &month);
 
        printf("=============================\n");
        printf("          %4d년 %2d월\n", year, month);
        printf("=============================\n");
        printf("  일  월  화  수  목  금  토 \n");
        printf("=============================\n");
 
// 1일이 출력될 요일의 위치를 맞추기 위해 1일의 요일만큼 반복하며 빈 칸을 출력한다.
        for (int i = 0; i < weekDay(year, month, 1); i++) {
            printf("    ");
        }
// 1일부터 달력을 출력할 달의 마지막 날짜까지 반복하며 날짜를 출력한다.
        for (int i = 1; i <= lastDay(year, month); i++) {
            printf(" %2d ", i);
//    출력할 날짜(i)가 토요일이고 그 달의 마지막 날짜가 아니면 줄을 바꾼다.
            if (weekDay(year, month, i) == 6) {
                printf("\n");
            }
 
        }
        printf("=============================\n");
}
cs

 

출력