#pragma warning(disable:4996)
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#define SIZE 10
//입력 버퍼에 있는 값을 초기화시켜준다.
//입력 버퍼에 있는 \n값은 초기화 되지않아서 함수를 이용해 초기화 한다.
void Clear_Stdin()
{
int ch;
while ((ch = getchar()) != EOF&&ch != '\n')
{
}
}
//EOF 파일의 끝을 뜻함.
int main()
{
char seat[SIZE][SIZE];
char select = 0;
char width = 0;
int length = 0;
printf(" -------------------------------\n");
printf(" | 극장 좌석 예매 프로그램 |\n");
printf(" -------------------------------\n");
printf(" | |\n");
printf(" | --------스크린--------- |\n");
printf(" | |\n");
//문자 "O"로 초기화 작업
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++)
seat[i][j] = 'O';
}
//극장 좌석표 출력
printf(" | ");
for (int i = 0; i < 10; i++)
printf("%c ", i + 65);
printf(" |");
printf("\n");
printf(" | -------------------- |\n");
for (int i = 0; i < 10; i++)
{
printf(" ");
printf("| %2d| ", i + 1);
for (int j = 0; j < 10; j++)
{
printf("%c ", seat[i][j]);
}
printf(" |");
printf("\n");
}
printf(" -----------------------------\n");
printf(" -----------------------------\n");
while (select != 'X') //X(종료) 입력전까지 반복수행
{
printf("\n");
printf(" ex)------------------- \n | 예약 => +A2 |\n | 예약 취소 => -A2 |\n");
printf(" ---------------------");
printf("\n\n");
printf(" 메뉴)---------------------- \n | 현재 좌석현황 출력 : V |\n | 예매 종료 : X |\n");
printf(" --------------------------\n\n");
printf("=> ");
scanf(" %c", &select);
printf("\n");
//예약
if (select == '+') {
scanf("%c%d", &width, &length);
if (width - 65 >= 0 && width - 65 <= 9 && length - 1 >= 0 && length - 1 <= 10) {
if (seat[length - 1][width - 65] != 'X') {
seat[length - 1][width - 65] = 'X';
printf("좌석이 예약되었습니다.\n\n");
}
else
{
printf("이미 예약된 좌석입니다.");
}
}
else
{
printf("Error!!. \n\n");
}
}
//예약 취소
else if (select == '-')
{
scanf("%c%d", &width, &length);
if (width - 65 >= 0 && width - 65 <= 9 && length - 1 >= 0 && length - 1 <= 10) {
if (seat[length - 1][width - 65] = 'X') {
seat[length - 1][width - 65] = 'O';
printf("좌석이 취소되었습니다.\n\n");
}
else {
printf("좌석을 다시한번 확인하십시오.");
}
}
else {
printf("Error!! \n\n");
}
}
//현재 예약 현황 출력
else if (select == 'V') {
printf(" -------------------------------\n");
printf(" | |\n");
printf(" | --------스크린--------- |\n");
printf(" | |\n");
printf(" | ");
for (int i = 0; i < 10; i++)
printf("%c ", i + 65);
printf(" |");
printf("\n");
printf(" | -------------------- |\n");
for (int i = 0; i < 10; i++)
{
printf(" ");
printf("| %2d| ", i + 1);
for (int j = 0; j < 10; j++)
{
printf("%c ", seat[i][j]);
}
printf(" |");
printf("\n");
}
printf(" -------------------------------\n");
}
Clear_Stdin(); //입력버퍼에 있는 내가 이전에 입력했던 값을 지워줌 => 이전값을 초기화함
//scanf 변수를 하나만 넣을경우 scanf가 받는 변수는 원래 하난데 2개입력시 하나를 입력버퍼에 담아둔다. => 버퍼 오버플로우 공격의 원리
//입력버퍼에 \n 은 남아서 한번더 반복이 된다.
//특수문자를 대량으로 입력시 while문의 반복을 막기위해서 함수를 넣는다.
}
printf("\n이용해 주셔서 감사합니다.\n\n");
return 0;
}