Skip to content

Instantly share code, notes, and snippets.

@surinoel
Last active July 4, 2019 11:32
Show Gist options
  • Save surinoel/34b2af520fd436a7fc827ecce3708107 to your computer and use it in GitHub Desktop.
Save surinoel/34b2af520fd436a7fc827ecce3708107 to your computer and use it in GitHub Desktop.
static int display_movie_list(void)
{
int movienumber;
while (1) {
system("cls"); // 화면 초기화
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t\t "); printf(" 상영중인 영화리스트입니다 \n");
printf("\t\t\t "); printf(" 원하시는 영화 번호를 선택해주세요 \n");
printf("\t\t\t "); printf(" ================================================================= \n");
printf("\t\t\t "); printf("|| 1- 알라딘 ||\n");
printf("\t\t\t "); printf("|| 2- 스파이더맨 ||\n");
printf("\t\t\t "); printf("|| 3- 토이스토리 ||\n");
printf("\t\t\t "); printf("|| 4- 기생충 ||\n");
printf("\t\t\t "); printf("||=================================================================||\n");
printf("\t\t\t "); printf(" 뒤로 가려면 0번을 눌러주세요 \n");
printf("\t\t\t "); printf(" 번호를 선택해주세요: ");
scanf("%d", &movienumber);
if (movienumber == 1 || movienumber == 2 || movienumber == 3 || movienumber == 4 || movienumber == 0) {
return movienumber;
} // 위의 값이 아니라면 재입력 핸들러
error_handler(5, "사용자 입력을 다시 확인해주세요", "재입력으로 넘어갑니다");
}
}
static void display_movietime_list(int movienum)
{
int ret;
Movie **ptr = movielist; // movielist에 대한 이중포인터
system("cls");
printf("\n\n\n\n\n\n");
printf("\t\t %s의 상영 시간표입니다\n\n", ptr[movienum - 1]->movieTitle); // movienum이라는 인덱스를 활용
for (int i = 0; i < _msize(ptr[movienum - 1]) / sizeof(*ptr[movienum - 1]); i++) { // 해당 영화의 상영관 갯수만큼 forloop
printf("\t\t [%d]\n", i + 1);
printf("\t\t 시작시간 : %d:00 | 종료시간 : %d:00 | 러닝타임 : %d분\n", ptr[movienum - 1][i].startTime, ptr[movienum - 1][i].exitTime, ptr[movienum - 1][i].runningTime);
printf("\t\t 남은여석 : %d\n\n", ptr[movienum - 1][i].emptyseatcnt);
}
int selecttime;
printf("\t\t 원하시는 시간에 대한 번호를 입력하세요 : ");
scanf("%d", &selecttime); // 시간에 대한 입력, 아닐시 에러 핸들러
if (!(selecttime - 1 >= 0 && selecttime - 1 < _msize(ptr) / sizeof(*ptr))) goto err;
ret = display_seat(movienum - 1, selecttime - 1);
if (ret == -1) goto err;
else if (ret == 1) goto err2;
system("pause");
return;
err:
error_handler(5, "사용자 입력을 다시 확인해주세요", "메뉴로 넘어갑니다");
return;
err2:
error_handler(5, "돈이 없습니다 ㅠㅠ", "프로그램이 종료됩니다");
return;
}
static int display_seat(int movienum, int stime)
{
Movie ptr = movielist[movienum][stime]; // 선택한 영화와 이의 시간정보에 맞는 상영 시간표
system("cls");
printf("\n\n");
printf("\t\t 시작시간 : %d:00 | 종료시간 : %d:00 | 러닝타임 : %d분\n", ptr.startTime, ptr.exitTime, ptr.runningTime);
printf("\t ================================================================= \n");
printf("\t\t\t\t\t SCREEN\t\t\t\t\n");
printf("\t ================================================================= \n\n");
for (int j = 0; j < _msize(ptr.seat) / sizeof(*ptr.seat); j++) { // 좌석 정보 출력
for (int k = 0; k < _msize(ptr.seat[j]) / sizeof(*ptr.seat[j]); k++) {
printf("\t%d", j * 10 + k + 1);
}
printf("\n");
for (int k = 0; k < _msize(ptr.seat[j]) / sizeof(*ptr.seat[j]); k++) {
if (ptr.seat[j][k] == 1) printf("\to");
else printf("\tx");
}
printf("\n\n");
}
int hnum;
printf("\t\t\t\tx가 예매할 수 있는 자리입니다\n\n");
printf(" 인원 수를 입력해주세요 (최대 4인) : "); scanf("%d", &hnum);
if (hnum > 4 || hnum + ptr.emptyseatcnt > 100) return -1; // 인원이 4명이 넘거나, 총 합해서 100명이 넘었을 때
printf(" 원하시는 좌석 번호 공백을 두고 입력해주세요 (선택한 갯수 만큼 입력) : ");
int *seatbuf = (int *)malloc(sizeof(int) * hnum);
int ssize = _msize(seatbuf) / sizeof(*seatbuf);
for (int i = 0; i < _msize(seatbuf) / sizeof(*seatbuf); i++) {
scanf("%d", &seatbuf[i]); // 원하는 좌석 정보 입력
if (!(seatbuf[i] - 1> 0 && seatbuf[i] - 1 < 100)) { // 좌석 입력이 범위를 벗어났을 때
return -1;
}
int x, y;
x = (seatbuf[i] - 1) / 10, y = (seatbuf[i] - 1) % 10;
if (ptr.seat[x][y] == 1) { // 이미 예매된 좌석이라면
return -1;
}
else {
ptr.seat[x][y] = 1; // 좌석 1로 만듬
ptr.emptyseatcnt -= 1; // 여석 1 감소
}
}
int idx = -1;
char name[20];
printf(" 회원 이름을 입력하세요 : "); scanf("%s", name);
for (int i = 0; i < _msize(user) / sizeof(*user); i++) {
if (!strcmp(user[i].name, name)) {
idx = i;
int pswd;
printf(" %s님! 비밀번호를 입력하세요 : ", user[i].name); scanf("%d", &pswd);
if (user[i].password == pswd) {
if (user[i].money > ssize * ptr.ticketprice) { // 회원 정보 초기화
strcpy(user[i].mt->movieTitle, ptr.movieTitle);
user[i].mt->seatcnt = ssize;
user[i].mt->runningTime = ptr.runningTime; user[i].mt->startTime = ptr.startTime; user[i].mt->exitTime = ptr.exitTime;
user[i].mt->ticketprice = ptr.ticketprice;
user[i].mt->seatnum = (int *)malloc(sizeof(int) * ssize);
memcpy(user[i].mt->seatnum, seatbuf, sizeof(seatbuf) * ssize);
display_bookingticket_info(ptr, user[i]);
}
else { // 돈이 부족할 때
return 1;
}
}
else {
return -1;
}
}
}
if (idx == -1) return -1;
return 0;
}
void display_bookingticket_info(Movie ptr, User us)
{
system("cls");
long long curtimetick, flagtick;
curtimetick = clock();
flagtick = curtimetick / CLOCKS_PER_SEC;
while ((clock() - curtimetick) / CLOCKS_PER_SEC < 5) {
if (flagtick != (clock() - curtimetick) / CLOCKS_PER_SEC) {
flagtick = (clock() - curtimetick) / CLOCKS_PER_SEC;
system("cls");
printf("\n\n\n\n");
printf("\t 예매가 성공적으로 완료됐습니다 ! \n\n\n");
printf("\t------------------------------영화 예매 티켓 정보----------------------------\n");
printf("\t=============================================================================\n");
printf("\t 영화 : %s \t\t\t 감독 : %s\n", ptr.movieTitle, ptr.movieDirector);
printf("\t 회원정보 : %s\n", us.name);
printf("\t 날짜 : 29-07-2019\n");
printf("\t 상영시간 : %d:00 ~ %d:00\n", ptr.startTime, ptr.exitTime);
printf("\t 총상영시간 : %d분\n", ptr.runningTime);
for (int i = 0; i < us.mt->seatcnt; i++) {
printf("\t 좌석정보 No. : %d \n", us.mt->seatnum[i]);
}
printf("\t 가격 : %d \n\n", us.mt->ticketprice * us.mt->seatcnt);
printf("\t=============================================================================\n\n");
printf("\t %lld초 안에 메인메뉴로 돌아갑니다 ! \n", 5 - (clock() - curtimetick) / CLOCKS_PER_SEC);
}
}
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment