#include <stdio.h>

struct user_info {
	int id_num;
	int password;
};

struct user_info user[16];

int print_seats(int s_array[3][5]);
int reserve(int s_array[3][5], int row, int col);
int cancle(int s_array[3][5], int row, int col);
int load_user_info();
int check_login(int id, int passwd);

int main() {
	int id, passwd;
	int s[3][5] = { 0 };
	int select;
	load_user_info();
	do {
		printf("로그인을 하세요.\n");
		printf("id_num : ");
		scanf("%d", &id);
		printf("password : ");
		scanf("%d", &passwd);
		printf("%d",check_login(id, passwd));

		if (check_login(id, passwd) == id) {
			printf("로그인 성공\n");
		}
		else if (check_login(id, passwd) == -1) {
			printf("아이디가 존재하지 않습니다.\n");
		}
		else if (check_login(id, passwd) == -2) {
			printf("아이디는 맞으나 패스워드가 틀렸습니다.\n");
		}
	} while (check_login(id, passwd) != id);




	do {
		load_user_info();
		printf("1---좌석확인하기\n");
		printf("2--예약하기\n");
		printf("3--예약취소하기\n");
		printf("4--종료하기\n");
		printf("메뉴를 선택하시요:");
		scanf("%d", &select);

		if (select == 1)
		{
			printf("선택된 메뉴=좌석확인하기\n\n");
			print_seats(s);
		}

		else if (select == 2)
		{
			int i, j;
			printf("선택된 메뉴=예약하기\n\n");
			printf("예약을 원하는 자리는?(행 열)?");
			scanf("%d %d", &i, &j);
			reserve(s, i, j);
		}

		else if (select == 3)
		{
			int i, j;
			printf("선택된 메뉴=예약취소하기\n\n");
			printf("예약취소를 원하는 자리는(행 열)?\n");
			scanf("%d %d", &i, &j);
			cancle(s, i, j);
		}

	} while (select != 4);

	printf("선택된 메뉴=종료하기\n\n");
	printf("이용해 주셔서 감사합니다.\n\n");

	return 0;
}

int print_seats(int s_array[3][5])
{
	int i, j, k;
	printf("   |");
	for (k = 0; k < 5; k++) {
		printf(" %d", k);
	}
	printf("\n");
	printf(" ---------------\n");
	for (i = 0; i < 3; i++) {
		printf(" %2d|", i);
		for (j = 0; j < 5; j++) {
			printf("%2d", s_array[i][j]);
		}
		printf("\n");
	}
	return 0;
}

int reserve(int s_array[][5], int row, int col)
{
	if (s_array[row][col] == 0) {
		s_array[row][col] = 1;
		printf("예약이 완료되었습니다.\n");
		print_seats(s_array);
		return 1;
	}
	else if (s_array[row][col] == 1) {
		printf("이미 예약된 자리입니다.\n");
		return -1;
	}
	else {
		printf("행은 0~2, 열은 0~4사이의 숫자만 입력하세요\n");
	}
	return 0;
}

int cancle(int s_array[][5], int row, int col)
{
	if (s_array[row][col] == 1) {
		s_array[row][col] = 0;
		printf("예약이 취소되었습니다.\n");
		print_seats(s_array);
		return 1;
	}
	else if (s_array[row][col] == 0) {
		printf("이미 취소된 자리입니다.\n");
		return -1;
	}
	else {
		printf("행은 0~2, 열은 0~4사이의 숫자만 입력하세요\n");
	}
	return 0;
}



int load_user_info() {
	for (int i = 0; i < 16; i++) {
		user[i].id_num = 10 + (i * 10);
		user[i].password = 1004 + (i * 1000);
	}

	return 0;
}

int check_login(int id, int passwd) {
	int low, high, middle;
	low = 0;
	high = 15;
	while (low <= high) {
		middle = (low + high) / 2;
		if (id == user[middle].id_num) {

			middle = (low + high) / 2;
			if (passwd == user[middle].password) {
			}

			else if (passwd > user[middle].password) {
	
				low = middle + 1;
			}
			else {
				high = middle + 1;
			}
		}
		else if (id > user[middle].id_num) {
			low = middle + 1;
		}

		else {
			high = middle - 1;
		}	
	}


	return 0;

	
}