실습과제 모음

달력 만들기 실습 결과

TanSanC 2013. 12. 15. 11:22
#include 
#include 
using namespace std;

int leapYear(int year);
// 리턴값 1 : 윤년
// 리턴값 0 : 평년

int dayByYear(int year);
//  0    1    2   3    4    5   6
// "일","월","화","수","목","금","토"

int dayByMonthYear(int year, int month);
//  0    1    2   3    4    5   6
// "일","월","화","수","목","금","토"

int totalDayCountByMonthYear(int year, int month);

int main()
{
	char* week[7] = {"일","월","화","수","목","금","토"};	
	int year, month;
	printf("연도를 입력하세요 : ");
	scanf("%d", &year);
	printf("월을 입력하세요 : ");
	scanf("%d", &month);
	printf("%s\n", week[dayByMonthYear(year, month)]);
	
	printf("%5s%5s%5s%5s%5s%5s%5s\n", 
		"일","월","화","수","목","금","토");
	for( int i = 0 ; i < dayByMonthYear(year, month) ; i++ )
	{
		printf("     ");
	}
	int wcount = dayByMonthYear(year, month);
	for ( int i = 1 ; i <= totalDayCountByMonthYear(year, month) ; i++ )
	{
		
		printf("%5d", i);
		if( wcount%7 == 6)
		{
			printf("\n");
		}
		wcount++;
	}

	return 0; 
}
int totalDayCountByMonthYear(int year, int month)
{
	switch(month)
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		return 31;
	case 2:
		if( leapYear(year) )
		{
			return 29;
		}
		else
		{
			return 28;
		}
	default:
		return 30;
	}
}
int dayByMonthYear(int year, int month)
{	
	int wcount=0;
	wcount=(365*year + year/4 - year/100 + year/400)%7;
	// 0 ~ 6
	for( int i = 1 ; i < month ; i++ )
	{
		wcount += totalDayCountByMonthYear(year, i);
	}
	// 30 ~ 300
	wcount %= 7;
	return wcount;
}
int dayByYear(int year){
	int wcount=0;
	wcount=(365*year + year/4 - year/100 + year/400)%7;
	return wcount;
}
int leapYear(int year)
{
	if( year % 4 == 0)
	{
		if( year % 100 == 0)
		{
			if( year % 400 == 0 )
			{
				return 1;
				// 윤년
			}
			else
			{
				return 0;
				// 평년
			}
		}
		else
		{
			return 1;
			// 윤년
		}
	}
	else
	{
		return 0;
		// 평년
	}
}