상세 컨텐츠

본문 제목

영화 예매 프로그래밍(C언어)

프로그래밍/C언어

by RosetteNebula 2021. 1. 12. 20:27

본문

- 조건 -

 

1. 광해

2. 내부자들

영화별 좌석 예매 프로그램을 제작해주세요.

영화를 선택 후 각 영화에 대한 예매 프로그램을 제작합니다.

예매는 1인 또는 2인 또는 3인까지 동시에 예매가 가능합니다.

영화는 1인당 9000원이며, 할인권이 있을 경우 1명만 10% 할인이 가능합니다.

 

 

#include<stdio.h>
#include<string.h>
#include <stdlib.h>

typedef struct Movie{
	char m_name[20];    //영화명
	char seat[10];      //좌석현황(O, X로 표시하기 위하여 문자열로 지정)
	int s_count;        //좌석수
}Movie;

int c_movie, personnel, s_num[3];   //영화선택, 사람수, 좌석선택
int i;
Movie mv[2] = {{"어벤져스", "OOOOOOOOOO", 0}, {"내부자들", "OOOOOOOOOO", 0}};   //초기 세팅

//영화목록
void m_list()
{
    printf("\n");
    printf(" ----영화 리스트----\n");
    printf("|    1. 어벤져스    |\n");
    printf("|    2. 내부자들    |\n");
    printf("|    3. 종료        |\n");
    printf(" -------------------\n");

    printf("영화 선택 : ");
    scanf("%d", &c_movie);
    printf("\n");

    //1번 영화
    if(c_movie == 1)
    {
        mv[c_movie-1].s_count = 0;

        //매진 확인
        s_count();

        //영화 예매
        m_reservation();

    }//if(c_movie == 1)

    //2번 영화
    else if(c_movie == 2)
    {
        mv[c_movie-1].s_count = 0;

        //매진 확인
        s_count(mv, c_movie-1);

        //영화 예매
        m_reservation();
    }//else if(c_movie == 2)

    //종료
    else if(c_movie == 3)
    {
        exit(1);    //프로그램 종료
    }
    else
    {
        printf("잘못된 번호입니다.\n");
    }
    m_list();
}

//매진 확인
void s_count(){
    for(i=0; i<10; i++)
    {
        if(mv[c_movie-1].seat[i] == 'O')
        {
            mv[c_movie-1].s_count++;    //예매 가능한 좌석을 O으로 표시 했으며 O의 수를 카운트
        }
    }
}

//영화 예매
void m_reservation()
{

    //예매 가능
    if(mv[c_movie-1].s_count>0)
    {
        printf("인원을 입력하세요 : ");
        scanf("%d", &personnel);

        //예약 가능 인원 확인
        if(personnel <= mv[c_movie-1].s_count && personnel < 4 && personnel > 0)    //남은 좌석수, 최대인원 확인
        {
            for(;;)
            {
                s_list();

                //좌석 입력
                s_set();
                break;
            }//for(;;)좌석

            //할인권 유무
            payment();
        }//if(personnel <= mv[0].s_count && personnel < 4 && personnel > 0)
        else if(personnel > 3)
        {
            printf("최대 3명까지만 예약 가능합니다.\n\n");
            m_list();
        }//else if(personnel > 3)
        else if(personnel > mv[c_movie].s_count)
        {
            printf("좌석이 부족합니다.\n");
            printf("남은 좌석 %d\n", mv[0].s_count);

            m_list();
        }//else if(personnel > mv[0].s_count)
        else if(personnel < 1)
        {
            printf("최소 1명 이상 이어야 합니다.\n");

            m_list();
        }//else if(personnel < 1)
    }//if(mv[0].s_count>0)
    //1번 매진
    else
    {
        printf("해당 영화는 매진입니다.\n");

        m_list();
    }
}

//좌석현황
void s_list(){

	printf("\n");
	printf(" ------좌석현황------\n");
	printf("|좌석을 선택 하세요. |\n");
	printf("|1 2 3 4 5 6 7 8 9 10|\n");
    printf("|");
	for(i=0; i<10; i++){
		printf("%c ", mv[c_movie-1].seat[i]);
	}//for(i=0; i<10; i++)
	printf("|\n");
	printf(" --------------------\n");
	printf("\n");
}

//좌석선택
void s_set(){

	for(i=0; i<personnel; i++){
		printf("%d번째 좌석 ",i+1);
		scanf("%d", &s_num[i]);
		
		if(1 > s_num[i] || s_num[i] > 10){
			printf("없는 좌석입니다.\n");
			i--;
		}//if(1 > s_num[i] || s_num[i] > 10)
		else if(mv[c_movie-1].seat[s_num[i]-1] == 'X'){
			printf("해당 좌석은 예매 불가능 합니다.\n");
			i--;
			continue;
		}//else if(mv[c_movie-1].seat[s_num[i]-1] == 'X')
		else if(mv[c_movie-1].seat[s_num[i]-1] == 'O'){
			mv[c_movie-1].seat[s_num[i]-1] = 'X';
		}//else if(mv[c_movie-1].seat[s_num[i]-1] == 'O')
	}//for(i=0; i<personnel; i++)
	printf("\n");
}

//결제
void payment(){
	int price;
	char sale, c_pay;
	printf("할인권이 있습니까?(Y/N) ");
	scanf(" %c", &sale);
	if(sale == 'Y' || sale == 'y'){
		price = 9000*personnel-900;
		printf("\n결제 하실 금액은 %d원 입니다\n", price);
	}//if(sale == 'Y' || sale == 'y')
	else if(sale == 'N' || sale == 'n'){
		price = 9000*personnel;
		printf("\n결제 하실 금액은 %d원 입니다\n", price);
	}//else if(sale == 'N' || sale == 'n')


	printf("결제 하시겠습니까?(Y/N) ");
	scanf(" %c", &c_pay);
	if(c_pay == 'Y' || c_pay == 'y'){
		printf("예약 완료\n");
	}//if(c_pay == 'Y' || c_pay == 'y')
	else if(c_pay == 'N' || c_pay == 'n'){
        for(i=0; i<personnel; i++){
           mv[c_movie-1].seat[s_num[i]-1] = 'O';
        }//for(i=0; i<personnel; i++)
        printf("예약 취소\n");
	}//else if(c_pay == 'N' || c_pay == 'n')
}

int main(void){

    m_list();

    return 0;
}

 

'프로그래밍 > C언어' 카테고리의 다른 글

전화번호부 프로그램(C언어)  (0) 2021.01.12
직원 관리 프로그램(C언어)  (0) 2021.01.12
출입명부 프로그램(C언어)  (0) 2021.01.12

관련글 더보기