2010년 4월 17일 토요일

한 달 치 달력 출력하기~

#include
#include
void gotoxy(int x, int y);

int yearcheck(int);

void main()
{
int year, mon, day=1; //년월일을 입력받을 변수선언
int totdate=0; // 총일수 저장 변수
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //각월별 일수선언 배열
int i,j,k,l=9; //loop제어 변수 선언 l는 개행좌표변수 처음에 요일 출력을 8라인에 했기때문에 9라인부터 날출력
int leap; // yearcheck함수 반환값 저장 변수

printf("* 년월을 입력하시오 : ");
scanf("%d %d",&year,&mon); //년월일을 입력받는다

system("cls");

/*달력 윗부분 출력 */

gotoxy(34,6); //6라인 32번째 부터 출력
printf("%d년%2d월 ",year,mon);
gotoxy(20,8); //8라인 20번째 부터 출력
printf(" sun mon tue wed thu fri sat \n");

for(i = 1 ; i <= year-1 ; i++){ //전년도 까지 날수를 계산

leap = yearcheck(i);

if(leap == 1){
totdate +=366; //윤년이면 366일을 더한다
}
else{
totdate +=365;
} //평년이면 365일을 더한다
}

for(j = 0 ; j <= mon-2 ; j++){ //전달까지 날수 계산 배열첨자와 같이 돌릴려고하니까 시작이 0이대어1을더 감소

totdate += month[j]; //해달 월까지의 일수를 더한다.
}

leap = yearcheck(year);

if(leap == 1 && mon >=3) { totdate+=1; } //윤년이고 3월이 넘어가면 하루를 더한다

totdate += 1;

switch(totdate%7){

case 0 :{ gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==0) // 1일이 일요일이면 토요일날자의나머지가 0이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}
break;
case 1 :{ gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

printf("%5c",' '); // 그달시작이 월요일이므로 앞요일부분은 공백
for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==6) // 1일이 월요일이면 토요일날자의나머지가 6이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}

break;

case 2 :{ gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

printf("%10c",' '); // 그달시작이 화요일이므로 앞요일부분은 공백
for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==5) // 1일이 화요일이면 토요일날자의나머지가 5이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}

break;

case 3 :{ gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

printf("%15c",' '); // 그달시작이 수요일이므로 앞요일부분은 공백
for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==4) // 1일이 수요일이면 토요일날자의나머지가 4이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}

break;

case 4 : { gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

printf("%20c",' '); // 그달시작이 목요일이므로 앞요일부분은 공백
for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==3) // 1일이 목요일이면 토요일날자의나머지가 3이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}

break;

case 5 : { gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

printf("%25c",' '); // 그달시작이 금요일이므로 앞요일부분은 공백
for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==2) // 1일이 금요일이면 토요일날자의나머지가 2이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}

break;

case 6 : { gotoxy(20,l); //요일 라인 다음라인부터 찍어야한다.

if(leap == 1){
month[1]=29;
} //윤달이면 그해 2월은 29일까지 이다.

printf("%30c",' '); // 그달시작이 토요일이므로 앞요일부분은 공백
for(k=1 ; k <= month[mon-1]; k++){

printf("%5d",k);

if(k%7==1) // 1일이 수요일이면 토요일날자의나머지가 1이다
{
printf("\n");
l++;
gotoxy(20,l);
}
}
printf("\n");
}

break;
}

}

int yearcheck(int year)
{

if(year%4 != 0){

return 0; //4로 나누어 떨어지지않으면 평년 0을 반환
}

else if(year%100 != 0){

return 1;//4로 나누어떨어지고 100으로 나누어떨어지지않으면 윤년 1을 반환
}

else if(year%400 != 0){

return 0; //4로 나누어 떨어지고 100으로 나누어 떨어지고 400으로 떨어지지않으면 평년 0을 반환
}

else {

return 1;//4로 나누어 떨어지고 100으로 나누어 떨어지고 400으로 떨어지면 윤년 1을 반환
}

}


void gotoxy(int x, int y) //좌표 이동 함수
{
COORD Pos = {x - 1, y - 1};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}

댓글 없음:

댓글 쓰기