Visual Studio/C 실전

C언어 도서관 좌석 예약 프로그램

낙락장송s 2015. 6. 19. 15:58

학교 과제로 하나 만들긴 했는데 소스가 2차원 배열 하나로 만들다보니 쓸 데 없이 길어졌습니다..

지적 달게 받고 코드 수를 줄일 수 있는 방안을 마련해주시면 적극 수렴하겠습니다. 감사합니다.

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

 void SYSTEM();
 void VIEW_SEAT(int chain[7][9]);
 void SEAT(int chain[7][9], int width, int height);
 void EXIT(int chain[7][9], int width, int height);

main(){
 srand(time(NULL));
 printf("□□□□□□□□□□□□□□□□□□\n□     좌석 예약 시스템 ver0.1    □\n□\t\t\t\t  □\n□   Press any key to continue    □\n□\t\t\t\t  □\n□\t\t\t\t  □\n□\t\t\t\t  □\n□□□□□□□□□□□□□□□□□□\n");
 getch();
 system("cls");
 SYSTEM();

}
void SYSTEM(){
 int i, j, select, width=0, height=0;
 int chain[7][9]={0};

 for(i=1;i<=6;i++)
  for(j=1;j<=8;j++)
   chain[i][j]=rand()%2;

 for(i=1;i<=6;i++){
  chain[i][3]=2;
  chain[i][6]=2;
 }

  while(1){
   VIEW_SEAT(chain);

   printf("\n1. 예약하기\n\n2.퇴실하기\n\n3. 종료\n\n번호 입력 후Enter>");
   scanf("%d", &select);
   
   if(select==1){
    SEAT(chain, width, height);
   }
   else if(select==2){
    EXIT(chain, width, height);
   }
   else if(select==3){
    break;
   }
   else{
    system("cls");
    printf("유효한 번호를 입력하세요.\n");
   }
 }
}
void VIEW_SEAT(int chain[7][9]){

 int width, height;

 printf("빈 좌석 :   □\n자리 있음 : ■\n\n");
 printf(" 1 2   3 4   5 6\n");
 for(height=1;height<=6;height++){
  for(width=1;width<=8;width++){
   if(chain[height][width]==0)
    printf("□");
   else if(chain[height][width]==1)
    printf("■");
   else if(chain[height][width]==2)
    printf("  ");
  }printf("\n");
 }

}

void SEAT(int chain[7][9], int width, int height){
 int cnt;
   while(1){
     system("cls");
     VIEW_SEAT(chain);

     printf("\n예약할 자리의 줄과 번호를 입력하시고 Enter\nex)3번째 줄 6번째 자리 : 3 6\n");
     scanf("%d %d", &height, &width);

    
     //---------------------------------------범위 체크------------------------------------------------
     if(height>6 || width>6){
      printf("\n범위를 넘어섰습니다. 다시 입력하세요. 아무 키나 누르면 다시 입력할 수 있습니다.\n\n");
      getch();
     }
     else if(height<=6 || width<=6){
      break;
     }
   }
     //---------------------------------------범위 체크------------------------------------------------
 
   for(cnt=1;cnt<=2;cnt++){
    if(width==cnt){
     if(chain[height][width]==1){
         system("cls");
         VIEW_SEAT(chain);
         printf("\n이미 예약되어 있는 좌석입니다. 아무 키나 누르면 다시 시작합니다.\n\n");
         getch();
        }
    }
   }


    if(width==3){
     width+=1;
     if(chain[height][width]==1){
      system("cls");
      VIEW_SEAT(chain);
      printf("\n이미 예약되어 있는 좌석입니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else{
     chain[height][width]=1;
     width-=1;
     }
    }
    else if(width==4){
     width+=1;
     if(chain[height][width]==1){
      system("cls");
      VIEW_SEAT(chain);
      printf("\n이미 예약되어 있는 좌석입니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else
     chain[height][width]=1;
    }
    else if(width==5){
     width+=2;
     if(chain[height][width]==1){
      system("cls");
      VIEW_SEAT(chain);
      printf("\n이미 예약되어 있는 좌석입니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else
     chain[height][width]=1;
    }
    else if(width==6){
     width+=2;
     if(chain[height][width]==1){
      system("cls");
      VIEW_SEAT(chain);
      printf("\n이미 예약되어 있는 좌석입니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else
     chain[height][width]=1;
    }
    else
     chain[height][width]=1;
    system("cls");

}

void EXIT(int chain[7][9], int width, int height){
 int cnt;
 while(1){
     system("cls");
     VIEW_SEAT(chain);
     printf("\n예약을 취소할 자리의 줄과 번호를 입력하시고 Enter\nex)3번째 줄 6번째 자리 : 3 6\n");
     scanf("%d %d", &height, &width);

    
     //---------------------------------------범위 체크------------------------------------------------
     if(height>6 || width>6){
      printf("\n범위를 넘어섰습니다. 다시 입력하세요. 아무 키나 누르면 다시 입력할 수 있습니다.\n\n");
      getch();
     }
     else if(height<=6 || width<=6){
      break;
     }
   }
     //---------------------------------------범위 체크------------------------------------------------
 
 for(cnt=1;cnt<=2;cnt++){
  if(width==cnt){
   if(chain[height][width]==1){
    system("cls");
    chain[height][width]=0;
    VIEW_SEAT(chain);
    printf("\n예약 취소가 완료되었습니다. 아무 키나 누르면 하위 메뉴로 넘어갑니다.\n\n");
    getch();
   }
   else if(chain[height][width]==0){
    printf("\n자리가 없는 곳입니다. 아무 키나 누르면 하위 메뉴로 넘어갑니다.\n\n");
    getch();
   }
  }
 }

    if(width==3){
     width+=1;
     if(chain[height][width]==1){
      system("cls");
      chain[height][width]=0;
      VIEW_SEAT(chain);
      printf("\n예약 취소가 완료되었습니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else if(chain[height][width]==0){
     printf("\n자리가 없는 곳입니다. 아무 키나 누르면 하위 메뉴로 넘어갑니다.\n\n");
     getch();
     }
     width-=1;
    }
    
    if(width==4){
     width+=1;
     if(chain[height][width]==1){
      system("cls");
      chain[height][width]=0;
      VIEW_SEAT(chain);
      printf("\n예약 취소가 완료되었습니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else if(chain[height][width]==0){
     printf("\n자리가 없는 곳입니다. 아무 키나 누르면 하위 메뉴로 넘어갑니다.\n\n");
     getch();
     }
     width=4;
     
    }

    if(width==5){
     width+=2;
     if(chain[height][width]==1){
      system("cls");
      chain[height][width]=0;
      VIEW_SEAT(chain);
      printf("\n예약 취소가 완료되었습니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else if(chain[height][width]==0){
     printf("\n자리가 없는 곳입니다. 아무 키나 누르면 하위 메뉴로 넘어갑니다.\n\n");
     getch();
     }
     width-=2;
    }

    if(width==6){
     width+=2;
     if(chain[height][width]==1){
      system("cls");
      chain[height][width]=0;
      VIEW_SEAT(chain);
      printf("\n예약 취소가 완료되었습니다. 아무 키나 누르면 다시 시작합니다.\n\n");
      getch();
     }
     else if(chain[height][width]==0){
     printf("\n자리가 없는 곳입니다. 아무 키나 누르면 하위 메뉴로 넘어갑니다.\n\n");
     getch();
     }
    }
    system("cls");