본문 바로가기

Programming Languge/Python

영화 예매 프로그램

1. 기능

- 영화 예매 기능 : 영화 및 상영시간 선택, 예매인원 파악 및 좌석 선택, 메뉴 화면으로 돌아감.

- 영화 시간표 확인 기능 : 하나의 영화를 선택 후 그에 해당하는 상영시간표 출력, 다른 영화 시간표를 보거나 영화 시간표 확인 기능을 종료하는 기능

- 총 수입을 보여주는 기능 : 사용자가 예매하여 얻은 수익의 합을 구하여 총 수입을 화면에 출력

- 프로그램 종료 기능 : 영화 예매 프로그램 종료

 

2. 코드

class movieTheater(object):
    def __init__(self, name, time, money):
        self.name = name
        self.time = time
        self.money = money


    def showTime(self):
        print(self.time)

    def earnMoney(self, newMoney):
        self.money = self.money + newMoney


class Seat(object):
    def __init__(self, seat):
        self.seat = seat

    def showSeat(self):
        print("X는 예매가 완료된 좌석입니다.")
        for i in range(5):
            for j in range(5):
                if self.seat[i][j] == 0:
                    if i == 0:
                        print('A'+ str(j+1) + ' ', end='')
                    if i == 1:
                        print('B'+ str(j+1) + ' ', end='')
                    if i == 2:
                        print('C'+ str(j+1) + ' ', end='')
                    if i == 3:
                        print('D'+ str(j+1) + ' ', end='')
                    if i == 4:
                        print('E'+ str(j+1) + ' ', end='')
                elif self.seat[i][j] == 1:
                    print("X  ", end='')
            print("\n")


    def reserveSeat(self):
        flag = 1
        for i in range(5):
            for j in range(5):
                flag = self.seat[i][j]*flag
        if flag == 1:
            print("모든 좌석이 예매되었습니다.")
            return 0
        n = int(input("예약할 표의 수를 입력하세요\n"))
        if n<0 or n>25 :
            print("음수와 25보다 큰 수는 입력하지 마세요. 다시 예매를 진행하세요.")
            money = self.reserveSeat()
            return money
        junior = int(input("어린이는 몇명입니까?\n"))
        if junior < 0 or junior > n:
            print("인원이 맞지 않습니다. 음수는 입력하지 마세요. 다시 예매를 진행하세요.")
            money = self.reserveSeat()
            return money
        senior = int(input("청소년은 몇명입니까?\n"))
        if senior < 0 or senior > n:
            print("인원이 맞지 않습니다. 음수는 입력하지 마세요. 다시 예매를 진행하세요.")
            money = self.reserveSeat()
            return money
        adult = n - junior - senior
        if adult < 0 :
            print("인원이 맞지 않습니다. 다시 예매를 진행하세요.")
            money = self.reserveSeat()
            return money
        else:
            for k in range(n):
                i = int(input("예약할 좌석의 열(1, 2, 3, 4, 5)를 입력하세요. 1열은 A를 의미합니다.\n"))
                j = int(input("예약할 좌석의 행(1, 2, 3, 4, 5)을 입력하세요\n"))
                if self.seat[i-1][j-1] == 1:
                    print("이미 예매된 좌석입니다. 다시 예매를 진행하세요.")
                    money = self.reserveSeat()
                    return money
                else:
                    self.seat[i-1][j-1] = 1
        print("예매가 완료되었습니다.")
        money = junior*5000 + senior*8000 + adult*10000
        return money


def main():
    TRUE = 1
    FALSE = 0
    BOOL = TRUE
    benefit = 0

    while BOOL:
        print("1. 영화 예매")
        print("2. 영화 시간표 확인")
        print("3. 영화 좌석 확인")
        print("4. 총 수입 보기")
        print("5. 시스템 종료")
        choiceMenu = input("실행할 것을 선택하세요\n")

        if choiceMenu == '1':
            print("1. "+movie1.name)
            print("2. "+movie2.name)
            print("3. "+movie3.name)
            choiceMovie = input("몇 번째 영화를 보시겠습니까\n")

            if choiceMovie == '1':
                movie1.showTime()
                choiceTime = input("영화의 상영 순서를 선택해주세요\n")
                if choiceTime == '1':
                    movie1_time1.showSeat()
                    benefit = movie1_time1.reserveSeat()
                    movie1.earnMoney(benefit)
                elif choiceTime == '2':
                    movie1_time2.showSeat()
                    benefit = movie1_time2.reserveSeat()
                    movie1.earnMoney(benefit)
                elif choiceTime == '3':
                    movie1_time3.showSeat()
                    benefit = movie1_time3.reserveSeat()
                    movie1.earnMoney(benefit)
                elif choiceTime == '4':
                    movie1_time4.showSeat()
                    benefit = movie1_time4.reserveSeat()
                    movie1.earnMoney(benefit)
                else:
                    print("해당 시간은 존재하지 않습니다. 1에서 4사이의 시간을 입력해주세요. 프로그램을 다시 시작합니다.")

            elif choiceMovie == '2':
                movie2.showTime()
                choiceTime = input("영화의 상영 순서를 선택해주세요\n")
                if choiceTime == '1':
                    movie2_time1.showSeat()
                    benefit = movie2_time1.reserveSeat()
                    movie2.earnMoney(benefit)
                elif choiceTime == '2':
                    movie2_time2.showSeat()
                    benefit = movie2_time2.reserveSeat()
                    movie2.earnMoney(benefit)
                elif choiceTime == '3':
                    movie2_time3.showSeat()
                    benefit = movie2_time3.reserveSeat()
                    movie2.earnMoney(benefit)
                elif choiceTime == '4':
                    movie2_time4.showSeat()
                    benefit = movie2_time4.reserveSeat()
                    movie2.earnMoney(benefit)
                else:
                    print("해당 시간은 존재하지 않습니다. 1에서 4사이의 시간을 입력해주세요. 프로그램을 다시 시작합니다.")

            elif choiceMovie == '3':
                movie3.showTime()
                choiceTime = input("영화의 상영 순서를 선택해주세요\n")
                if choiceTime == '1':
                    movie3_time1.showSeat()
                    benefit = movie3_time1.reserveSeat()
                    movie3.earnMoney(benefit)
                elif choiceTime == '2':
                    movie3_time2.showSeat()
                    benefit = movie3_time2.reserveSeat()
                    movie3.earnMoney(benefit)
                elif choiceTime == '3':
                    movie3_time3.showSeat()
                    benefit = movie3_time3.reserveSeat()
                    movie3.earnMoney(benefit)
                elif choiceTime == '4':
                    movie3_time4.showSeat()
                    benefit = movie3_time4.reserveSeat()
                    movie3.earnMoney(benefit)
                else:
                    print("해당 시간은 존재하지 않습니다. 1에서 3사이의 시간을 입력해주세요. 프로그램을 다시 시작합니다.")

            else:
                print("없는 영화입니다. 1에서 3사이의 정수를 입력해주세요. 프로그램을 다시 시작합니다.")

        elif choiceMenu == '2':
            choiceMovie = input("어느 영화의 상영시간표를 보시겠습니까? Inception(1), Harry Porter(2), Dunkirk(3)")
            BOOL2 = TRUE
            while BOOL2:
                if choiceMovie == '1':
                    movie1.showTime()
                elif choiceMovie == '2':
                    movie2.showTime()
                elif choiceMovie == '3':
                    movie3.showTime()
                else:
                    print("없는 영화입니다. 1에서 3사이의 정수를 입력해주세요. 프로그램을 다시 시작합니다.")

                choice = input("다른 영화의 상영 시간표를 보시려면 1, 시간표 확인 기능을 종료하시려면 2를 누르세요")
                if choice == '1' :
                    choiceMovie = input("어느 영화의 상영시간표를 보시겠습니까? Inception(1), Harry Porter(2), Dunkirk(3)")
                elif choice == '2':
                    BOOL2 = FALSE
                else:
                    print("1과 2만 입력하세요. 프로그램을 다시 시작합니다.")

        elif choiceMenu == '3':
            print("1. "+movie1.name)
            print("2. "+movie2.name)
            print("3. "+movie3.name)
            choiceMovie = input("몇 번째 영화의 좌석을 보시겠습니까?\n")

            if choiceMovie == '1':
                movie1.showTime()
                choiceTime = input("영화의 상영 순서를 선택해주세요.\n")
                if choiceTime == '1':
                    movie1_time1.showSeat()
                elif choiceTime == '2':
                    movie1_time2.showSeat()
                elif choiceTime == '3':
                    movie1_time3.showSeat()
                elif choiceTime == '4':
                    movie1_time4.showSeat()
                else:
                    print("해당 시간은 존재하지 않습니다. 1에서 4사이의 정수를 입력해주세요. 프로그램을 다시 시작합니다.")

            elif choiceMovie == '2':
                movie2.showTime()
                choiceTime = input("영화의 상영 순서를 선택해주세요\n")
                if choiceTime == '1':
                    movie2_time1.showSeat()
                elif choiceTime == '2':
                    movie2_time2.showSeat()
                elif choiceTime == '3':
                    movie2_time3.showSeat()
                elif choiceTime == '4':
                    movie2_time4.showSeat()
                else:
                    print("해당 시간은 존재하지 않습니다. 1에서 4사이의 정수를 입력해주세요. 프로그램을 다시 시작합니다.")

            elif choiceMovie == '3':
                movie3.showTime()
                choiceTime = input("영화의 상영 순서를 선택해주세요\n")
                if choiceTime == '1':
                    movie3_time1.showSeat()
                elif choiceTime == '2':
                    movie3_time2.showSeat()
                elif choiceTime == '3':
                    movie3_time3.showSeat()
                elif choiceTime == '4':
                    movie3_time4.showSeat()
                else:
                    print("해당 시간은 존재하지 않습니다. 1에서 3사이의 정수를 입력해주세요. 프로그램을 다시 시작합니다.")

            else:
                print("해당 영화는 존재하지 않습니다. 1에서 3사이의 정수를 입력해주세요. 프로그램을 다시 시작합니다.")

        elif choiceMenu == '4':
            allBenefit = movie1.money+movie2.money+movie3.money
            print("총 수입: ")
            print(allBenefit)

        elif choiceMenu == '5':
            print("시스템을 종료합니다")
            BOOL = FALSE

        else:
            print("1에서 5까지의 정수만 입력해주세요")


if __name__ == '__main__':
    movie1 = movieTheater("Inception",'9:00     12:00     15:00     18:00', 0)
    movie1_time1 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie1_time2 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie1_time3 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie1_time4 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])

    movie2 = movieTheater("Harry Porter", '10:15     13:30     16:45     20:00', 0)
    movie2_time1 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie2_time2 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie2_time3 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie2_time4 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])

    movie3 = movieTheater("Dunkirk", '10:00     11:40     15:00     22:00', 0)
    movie3_time1 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie3_time2 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie3_time3 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])
    movie3_time4 = Seat([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]])

    main()

 

3. 결 과

 영화 예매 프로그램 실행

실행하면 메인 메뉴가 화면에 출력되며 5개의 선택지 중에서 실행할 것을 선택하는 입력창이 나타난다.

영화 예매 (1번 메뉴)

사용자가 세 영화 중 몇 번째 영화를 볼 것인지 선택하는 입력창이 나타난다 . 

1번 영화인 “Inception” 영화를 선택한 후 [OK]를 클릭한 아래와 같은 화면이 나타난다

“Inception”  영화의  4 개의 상영시간이 화면에 출력되며 ,  사용자에게 상영 순서를 선택하라는 입력창이 나타난다 .

 “15:00” 상영시간을 선택하기 위해서 입력창에 “3”을 입력한다.

화면에 보여진 좌석 중  “X”  표시는 완료된 좌석임을 알리며 선택할 좌석이 화면에 출력된다

사용자로부터 예약할 표의 수를 입력받는 창이 나타나면 영화표 4장을 예약하기 위해서 “4”를 입력한다.

수익을 계산하기 위해 어린이, 청소년의 수를 입력한다. 어른의 수는 묻지 않고 자동으로 남은 인원 수 만큼 계산한다. 여기서는 어린이 1, 청소년 2, 성인 1명으로 한다.

예약할 표의 수만큼 좌석을 선택하는 입력창이 뜬다. 먼저 좌석의 열에 해당하는 A~E 열을 선택한 후 좌석의 행에 해당하는 1~5를 선택한다. 여기서는 총 4개의 좌석을 입력한다. A2, B5, C4, E3의 좌석을 선택한다.

좌석 선택을 마쳤으면 화면에  “ 예매가 완료되었습니다 .” 라는 문구가 출력된다 . 

예매가 완료되고, 다시 메인메뉴로 돌아가 사용자가 다른 메뉴를 선택할 수 있도록 한다.

영화 시간표 확인 (2번 메뉴)

메인 메뉴에서 2번 메뉴인 영화 시간표 확인을 입력하면 위의 그림처럼 세 영화중에서 사용자가 원하는 영화를 입력하는 창이 나타난다.

첫 번째 영화인 “Inception” 의 상영시간표가 화면에 출력되는 것을 볼 수 있다. 또한 다른 영화의 상영 시간표를 볼지, 시간표 확인 기능을 종료할지 선택하는 입력창이 나타난다.

다른 영화의 상영 시간표를 보려면 “1”를 입력하여 다시 원하는 영화를 선택하면 시간표가 화면에 출력되며, 시간표 확인 기능을 종료하려고 “2”를 입력하면 메인메뉴로 돌아간다.

영화 좌석 확인 (3번 메뉴)

메인메뉴에서 영화 좌석을 확인하기 위해서 3번 메뉴를 선택하면 위의 그림과 같이 어떤 영화의 좌석을 볼지 선택할 입력창이 나타난다. 여기서는 처음에 예매했던 “Inception” 영화의 좌석을 보기 위해서 “1”을 입력한다.

“Inception” 영화의 상영 순서는 “15:00”으로 예매했었으니 “3”을 입력한다.

“Inception” 영화를 예매할 때 A2, B5, C4, E3의 좌석을 예매했기 때문에 이 자리는 “X”로 표시되어 좌석이 화면에 출력된다. 그 후 다시 메인메뉴로 돌아간다.

 

총 수입 보기 (4번 메뉴)

총 수입을 보기 위해서 메인메뉴의 4번 메뉴를 선택하면 위의 그림처럼 화면에 총 수입의 액수가 출력되는 것을 확인할 수 있고, 다시 메인메뉴로 돌아간다. 현재까지의 총 수입은 어린이 1, 청소년 2, 어른 1명으로 총 수입은 5000 + 8000*2 + 10000 = 31000원이 나온다.

다른 영화를 어린이 2, 청소년 0, 어른 3명을 추가로 예매한 후 다시 총 수입을 확인하면 아래의 그림이 화면에 출력된다.

처음 예매한 31000원의 수익에 다른 영화를 예매한 40000원의 수익을 더한 71000원의 총 수입이 출력된다.

 

시스템 종료 (5번 메뉴)

영화 예매 프로그램을 종료하기 위해서 메인메뉴에서 5번 메뉴를 선택하면 위의 그림과 같은 문구가 화면에 출력되고 프로그램이 종료된다.

 

4. 참고 사이트

http://edu.goorm.io/lecture/3493/%EB%B0%94%EB%A1%9C-%EC%8B%A4%ED%96%89%ED%95%B4%EB%B3%B4%EB%A9%B4%EC%84%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%ED%8C%8C%EC%9D%B4%EC%8D%AC3

 

바로 실행해보면서 배우는 파이썬3 - 구름EDU

이미 모두 갖추어진 실습환경에서 직접 코드를 작성하고 실행하며 파이썬3의 기본을 다질 수 있는 프로그래밍 강좌입니다.

edu.goorm.io

'Programming Languge > Python' 카테고리의 다른 글

HTML Parse  (0) 2019.09.11