-
-
Save surinoel/34b2af520fd436a7fc827ecce3708107 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, "사용자 입력을 다시 확인해주세요", "재입력으로 넘어갑니다"); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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