Skip to content

leejaeseung/Tickecter

Repository files navigation

MovieTicketer

영화 예매프로그램


프로젝트 개발 기간 및 환경

  • 기간: 2019.9.25~2019.12.20

  • OS: WINDOW10

  • LANGUAGE: Python

  • Tools: PyCharm

  • 실행환경: Window PowerShell


1차 기획서

2019 전공 기초 프로젝트 2 1차 기획서

영화 예매 프로그램

목차

[1.   개요]{.underline} 3

[2.   메뉴]{.underline} 3

[2.1 시간 입력 메뉴]{.underline} 3

[2.2 로그인 메뉴]{.underline} 3

[2.3 메인 메뉴]{.underline} 3

[3.   기본 사항]{.underline} 4

[3.1 작동 환경]{.underline} 4

[3.2 프로그램 구성 및 실행]{.underline} 4

[3.3 프로그램 사용 흐름]{.underline} 6

[4.   메뉴 별 사용법(메뉴 별 입력과 출력)]{.underline} 10

[4.1 시간 입력 메뉴]{.underline} 10

[4.2 로그인 메뉴]{.underline} 10

[4.3 메인 메뉴]{.underline} 13

[4.3.1 영화 예매]{.underline} 13

[4.3.2 예매 내역 조회 및 취소]{.underline} 16

[4.3.3 영화 시간표 조회]{.underline} 18

[5. 기타 사항]{.underline} 19

[5.1 예매 코드 형식]{.underline} 19

[5.2 입출력 형식]{.underline} 19

1.   개요

사용자가 회원 및 비회원으로  영화 예매, 예매 내역 조회, 예매 취소, 영화 리스트 조회 등의 기능을 사용할 수 있는 프로그램. 입력한 시간으로부터 7일 후 23:59 까지의 영화정보를 가져옵니다.
입력할 수 있는 시간은 2019년 10월 20일 00:00 부터 2019년 11월 20일 23:59 까지입니다.

2.   메뉴

2.1 시간 입력 메뉴

  • 다음과 같이 출력됩니다.
  1. 현재 날짜와 시간을 입력해 주세요.

2.2 로그인 메뉴

  • 다음과 같이 출력됩니다.
  1.  회원 로그인

  2.  회원 가입

  3.  비회원 로그인

2.3 메인 메뉴

  • 다음과 같이 출력됩니다.
  1. 영화 예매

  2. 예매 내역 조회 및 취소

  3. 영화 시간표 조회

3.   기본 사항

3.1 작동 환경

  • MS Windows 10의 PowerShell 창에서 작동합니다.

  • 다른 버전의 윈도우에서도 작동할 수도 있지만, 보장되지 않습니다.

  • cmd 창에서도 작동할 수도 있지만, 보장되지 않습니다.

  • 마우스 입력을 받지 않으나, PowerShell의 닫기 버튼 클릭 시 프로그램이 종료됩니다.

3.2 프로그램 구성 및 실행

  • 프로그램의 실행 파일은 Ticketer.py 입니다.

  • 프로그램이 정상적으로 실행되기 위해선 다음과 같은 파일들이 Ticketer.py와 같은 폴더 내에 존재해야 합니다. 파일이 존재하지 않는 경우 실행이 되지 않습니다.

  • 파일을 불러올 때마다 정해진 형식과 맞지 않다면 "파일 형식이 맞지 않습니다."를 출력하고 프로그램이 종료됩니다.

  • UserList.csv : 한 행에 ID(5.2 입출력 형식 5번), Password(5.2 입출력 형식 5번), 카드번호(음이 아닌 12자리 정수), 마일리지 잔액(음이 아닌 정수)이 저장되어 있다.

  • MovieList.csv: 각 행마다 영화 상영일정 정보가 저장되어 있습니다. 각 열 에는 영화코드(대문자 알파벳 두개), 영화제목(5.2 입출력 형식 7번), 영화 시작시간(5.2 입출력 형식 3번), 끝나는 시간(5.2 입출력 형식 3번), 좌석 정보(다음 줄에 형식 기술)가 들어있습니다. 좌석 정보는 상영 일정의 좌석 행x열 형식으로 표기되어 있고 그 행의 갯수만큼 좌석의 행마다의 예약 정보(0또는1의연속)가 저장되어 있습니다. 

  • CardList.csv : 각 줄마다 카드 번호(12자리의 음이 아닌 정수), 카드 등록 여부(0또는1)가 저장되어있습니다.

  • ReservationList.csv : 각 행 마다 예약 정보가 들어 있습니다. 회원여부(0 또는 1), ID(5.2 입출력 형식 5번), 예매코드(5.1 예매코드 형식), 예약좌석(5.2 입출력 형식 7번), 취소여부(0 또는 1)로 구성되어 있습니다. 비회원 일경우 아이디는 저장되어 있지 않습니다.

  • 프로그램을 실행시키려는 컴퓨터에 표준 Python 인터프리터가 설치되어 있어야 합니다.

  • 확장자 .csv 파일 이외에 수정되거나 삭제되면 프로그램이 동작하지 않습니다.

3.3 프로그램 사용 흐름

  • 프로그램은 실행 시 처음 로그인 메뉴부터 출력되고, 4번 메뉴 별 사용법에 따라 입력을 받아가며 진행됩니다.

  • 전체적인 흐름도 

아래 흐름도는 프로그램의 흐름만 중점적으로 나타냈기 때문에 기획서의 내용과 다소 차이가 있을 수 있습니다. 내용적인 부분은 기획서를 따릅니다.

프로그램 실행 -> 메인 메뉴 전까지의 흐름도.

메인 메뉴에서의 흐름도

4.   메뉴 별 사용법(메뉴 별 입력과 출력)

  • 언제든지 "EXIT"만을 입력하면 프로그램이 종료됩니다.

  • 시간 입력 메뉴 이후부턴 언제든 "RESTART"만을 입력하면 로그인 메뉴로 돌아갑니다. 

  • 로그인 메뉴 이후부턴 언제든 "BACK"만을 입력하면 메인 메뉴로 돌아갑니다.

  • 입력 형식이 맞지 않을 경우 해당 메뉴를 다시 띄우고 재입력을 받습니다.

4.1 시간 입력 메뉴

  • 현재 시간을 12자리의 음이 아닌 정수로 입력받습니다.(5.2입출력 형식 1번)

ex) 201909291200

4.2 로그인 메뉴

  • 로그인 메뉴 상태에서 입력을 받아(5.2 입출력 형식 4번) 그 입력에 해당하는 메뉴에 대한 진행을 합니다. 

  • 입력 형식에 맞지 않는 입력을 받은 경우 로그인 메뉴를 다시 출력하고 다시 입력을 받습니다.

  • 입력 후 나타나는 각 메뉴에 대한 설명은 후술합니다.

4.2.1 회원 로그인

다음 순서대로 진행됩니다.

  1. ID 입력
  • 출력 : "ID를 입력해 주세요. (되돌아가려면 "RESTART" 입력)"

  • 입력 :  (5.2 입출력 형식 5번)

(존재하지 않는 ID인 경우)

  • 출력 : "존재하지 않는 ID입니다. 다시 입력해 주세요."

  • 재입력 받습니다.

(존재하는 ID인 경우)

  • Password를 입력 받습니다.

    1. Password 입력
    • 출력 :"Password을 입력해 주세요. (되돌아가려면 "RESTART" 입력)"

    • 입력 : (5.2 입출력 형식 5번)

(일치하지 않는 Password인 경우)

  • 출력 : "일치하지 않는 Password입니다. 다시 입력해 주세요."

  • 재입력 받습니다.

(일치하는 Password인 경우)

  • 회원 상태로 메인 메뉴로 진입합니다.

4.2.2 회원 가입
다음 순서대로 진행됩니다.

  1. ID 입력
  • 출력 : "ID를 입력해 주세요. (되돌아가려면 "RESTART" 입력)"

  • 입력 :  (5.2 입출력 형식 5번)

(이미 존재하는 ID인 경우)

  • 출력 : "이미 존재하는 ID입니다. 다시 입력해 주세요."

  • 재입력 받습니다.

(존재하지 않는 ID인 경우)

  • Password를 입력 받습니다.

    1. Password 입력

      • 출력 : "Password을 입력해 주세요. (되돌아가려면 "RESTART" 입력) "

      • 입력 : (5.2 입출력 형식 5번)

    2. 카드번호 입력

  • 출력 : "등록된 카드 번호를 입력해 주세요.(되돌아가려면 "RESTART" 입력) "

  • 입력 : (음이 아닌 정수 12자리)

(이미 등록된 카드 번호인 경우)

  • 출력 : "이미 등록된 카드 번호입니다. 다시 입력해 주세요."

  • 재입력 받습니다.

(존재하지 않는 카드 번호인 경우)

  • 출력 : "존재하지 않는 카드 번호입니다. 다시 입력해 주세요."

  • 재입력 받습니다.

(유효한 카드 번호인 경우)

  • UserList를 update합니다.

  • 로그인 메뉴로 돌아갑니다.

4.2.3 비회원 로그인
비회원 로그인을 선택하면 비회원 상태로 바로 메인 메뉴로 진입합니다.

4.3 메인 메뉴

  • 메인 메뉴 상태에서 입력을 받아 그 입력에 해당하는 메뉴에 대한 진행을 합니다.(5.2입출력 형식 4번) 

  • 입력 형식에 맞지 않는 다른 입력을 받은 경우 메인 메뉴를 다시 출력하고 다시 입력을 받습니다. 

  • 입력 후 나타나는 각 메뉴에 대한 설명은 후술합니다.

4.3.1 영화 예매

다음 순서대로 진행됩니다.

1. 원하는 예매 날짜 선택 

  • 출력 : (오늘 날짜로부터 달력 형식으로 10일 후 까지의 달력  출력) 

  • 출력 : "상영을 원하는 날짜를 8자리로 입력해주세요."

  • 입력: 8자리의 숫자(5.2 입출력 형식 2번)

ex) 20190930

  • 현재 날짜보다 이전 날짜이면 재입력을 받습니다.

2. 원하는 영화 선택

  • 출력 : (상영중인 영화를 각각 한 줄 씩 출력 - 알파벳 순서로)

ex)

1.aaaaa

2.vvvv

3.aa aa

4.ddddd

  • 출력 : "예매할 영화를 선택하세요.(숫자.영화명 입력)"

  • 입력: (양의 정수).(영화 제목)(5.2 입출력 형식 6번)(숫자와 영화 제목을 '.'를 사이에 두고 입력) 

ex) 1.aaaaa

(입력한 영화가 존재하지 않는 영화인 경우) 

  • 재입력을 받습니다.

(입력한 영화가 존재하는 경우)

  • 좌석을 선택합니다.

3. 영화관 좌석 선택

  • (고른 영화 일정의 좌석 표를 출력)

  • 출력 : "예약 할 좌석을 고르십시오." 

  • 입력: (5.2 입출력 형식 7번)

  • (존재하지 않는 좌석 번호인 경우) 

  • 재입력을 받습니다.

4. 결제 시스템

  • 결제 금액은 00:00~11:59 시작 영화는 7000원, 12:00~23:59 시작 영화는 10000원 입니다.

  • 출력 : (좌석 예매 가격 출력)  

ex) "결제금액은 7000원 입니다."

4-1. 회원인 경우

  • 출력 : (회원의 보유 마일리지를 출력) 

  • 출력 : "회원님께서 보유하신 마일리지는 (음이 아닌 정수)입니다. 얼마를 사용하시겠습니까?"

  • 입력: (음이 아닌 정수)

(회원 정보에 남은 마일리지보다 큰 값이 입력된 경우)

  • 출력: "초과된 마일리지 금액입니다. 다시 입력해 주세요."
  • 재입력을 받습니다.

(회원 정보에 남은 마일리지보다 작은 값이 입력된 경우)

  • 출력 : "나머지 결제 금액은 (음이 아닌 정수)입니다. 등록된 카드로 결제 하겠습니다 ."

  • 최종 결제 금액의 10%가 마일리지로 저장됩니다.

  • 결제를 진행합니다.

4-2. 비회원인 경우

  • 비회원은 카드결제만 가능합니다. 카드 번호를 묻는 메시지가 출력되면 카드번호를 12자리 숫자로 입력하여 주시면 됩니다. 유효한 카드번호일 경우 입력 후 Enter를 누름과 동시에 결제가 완료됩니다.\

    출력 : "결제하실 카드 번호를 입력해주세요." 

  • 입력: (음이 아닌 정수 12자리)  

ex)123456787654

  • 출력:\

    (존재하지 않는 카드 번호인 경우)
    "카드번호가 일치하지 않습니다. 다시 입력해 주세요."

  • 재입력을 받습니다.

(등록 되어 있는 카드 번호인 경우)  

출력:"다른 회원 정보에 등록되어 있는 카드이므로 사용이 제한됩니다. 다시 입력해 주세요."

  • 재입력을 받습니다.

(유효한 카드번호인 경우)

결제를 진행합니다.

5. 회원 및 비회원 결제 진행

  • UserList, ReservationList, MovieList를 update합니다.

  • 출력 : "결제가 완료되었습니다."

  • 예매가 완료되며, 1초 뒤 메인 메뉴로 되돌아 갑니다.

4.3.2 예매 내역 조회 및 취소

다음 순서대로 진행됩니다.

1. 예매 내역 조회

1-1. 회원인 경우

  • 출력 : 해당 회원의 모든 예매 내역(5.2 입출력 형식 8번)을 한 줄에 한 정보씩 출력, 영화는 먼저 상영하는 순서대로 출력

ex) harry potter 4 2019년 10월 20일 13:30 A7
      lion king 2019년 10월 23일 16:40 F7
      harry potter  2019년 10월 25일 12:10 F2~F4

1-2. 비회원인 경우 

  • 출력 : "예매 코드를 입력하여 주세요."

  • 입력 : 비회원으로 예매한 영화의 예매 코드(5.1 예매 코드 형식)

(존재하지 않는 예매 코드인 경우)

  • 출력: "존재하지 않는 예매 코드입니다.다시 입력해 주세요."

  • 재입력을 받습니다.

(존재하는 예매 코드인 경우)

  • 비회원으로 예매 내역 조회 : 입력한 예매 코드에 해당하는 영화 1개만 예매 내역(5.2 입출력 형식 8번)을 출력

ex) lion king  2019년 10월 23일 16:40 F7

2. 예매 취소

예매 내역 조회가 완료되어 영화 정보가 출력된 상태에서 취소하려는 영화의 예매 코드를 입력하라는 메시지가 출력 되며(취소를 하지 않을 수 있습니다.), 취소하려는 영화의 예매코드를 입력하면 해당 영화의 예매가 취소됩니다. 취소가 완료되면 영화의 제목과 함께 예매가 취소되었음을 알리는 메시지가 출력됩니다.

  • 출력 : "취소하시려는 영화의 예매 코드를 입력하여 주세요.(취소하지 않고  메인 메뉴로 돌아가시려면 "BACK"을 입력해주세요)"

  • 입력 : 취소하려는 영화의 예매코드(5.1 예매 코드 형식)

(존재하지 않는 예매 코드인 경우)

  • 출력 : "존재하지 않는 예매 코드입니다. 다시 입력해 주세요."

  • 재입력을 받습니다.

(존재하는 예매 코드인 경우)

취소를 진행합니다.

3. 취소 진행

  • ReservationList, MovieList를 update합니다.
  • 출력 : "(영화 제목)의 예매가 취소되었습니다."\

    1초 뒤 메인 메뉴로 되돌아갑니다.

4.3.3 영화 시간표 조회

  • 현재 날짜의 가장 인기있는 영화 5개를 출력하고, 해당 목록에 있는 영화나 상영중인 다른 영화의 시간표를 볼 수 있습니다.

  • 다음 순서대로 진행됩니다.

  • 시간표 조회

- 출력 : (현재 날짜에 가장 많이 예매된 5개 영화의 제목, 가장 많이 예매된 순서대로 "(1~5중 하나의 숫자)." 을 붙여 출력)

- 출력 : "조회하고자 하는 영화 제목 혹은 1~5중 하나의 숫자를 입력해 주세요."

ex)
1.harry potter
2.mad max
3.bad boys
4.joker
5.harry potter 2

입력 : 영화 제목(5.2 입출력 형식 6번)  or (1~5 사이의 양의 정수)

  • 숫자로 입력할 경우 입력 숫자 n일때 n번째로 많이 예매된 영화의 시간표를 볼 수 있습니다. 예를 들면 2를 입력하였을 경우 두번째로 많이 예매된 영화의 시간표를 볼 수 있습니다.

ex) harry potter  or 3

(상영중인 영화의 제목이 아닌 문자열을 입력한 경우)
출력 : "해당 영화는 상영하지 않습니다.다시 입력해 주세요"

  • 재입력을 받습니다.

(해당 영화가 상영중일 경우)

출력 :
사용자가 선택한 영화의 영화 제목(5.2 입출력 형식 6번)과  현재 시간 이후 상영 시간(시간(00~23):분(00~59))을 현재 시간에서 가까운 순서대로 가로로 출력합니다.(공백을 사이에 두고 출력)

ex) harry potter 12:15 15:30 21:05 

  • 3초뒤 메인 메뉴로 돌아갑니다.

5. 기타 사항

5.1 예매 코드 형식

  • 예매 코드는 음이아닌 정수 8개 + 대문자 알파벳 두개 + 음이아닌 정수 4개 +  대문자 알파벳 하나 + 숫자1~9 중 하나

  • 따라서  네가지 정보가 공백없이 이어진 형태로 이루어 집니다.

ex) 20190929AA0930F1

5.2 입출력 형식

특별한 경우 입출력 단계 혹은 파일 update, load 간 지켜져야 하는 입출력 형식입니다. 지켜지지 않을 경우 정상적인 실행을 보장하지 않습니다.

  1. 날짜 시간 입력 형식

총 12자리의 음이 아닌 정수, 왼쪽부터 년도(4자리) :0000~9999, 월(2자리) : 01~12, 일(2자리) :(5.2 입출력 형식 9번), 시(2자리) : 00~23, 분(2자리) : 00~59

  1. 날짜 입력 형식

총 8자리의 음이 아닌 정수, 왼쪽부터 년도(4자리) :0000~9999,월(2자리) : 01~12,일(2자리) : (5.2 입출력 형식 9번))

  1. 시간 입력 형식

총 4자리의 음이 아닌 정수, 왼쪽부터(2자리) 시 : 00~23, 분(2자리) : 00~59

  1. 메뉴 입력 형식

1,2,3 중 하나의 숫자

  1. ID,Password 형식

알파벳 소문자(a~z)와 숫자(0~9)로만 이루어진 4자리 이상,10자리 이하의 단어 - 단어라 함은 공백이나 개행문자를 포함하지 않은 문자열

  1. 영화 제목 형식

알파벳 소문자(a~z)와 숫자(0~9)와 공백으로만 이루어진 1자리 이상 20자리 이하의 문자열, 단 공백으로만 이루어질 수 없고, 공백으로 시작할 수 없고, 공백이 연속으로 있을 수 없다.

  1. 좌석 번호 형식

좌석 번호 : (대문자 알파벳)(양의 정수) or  좌석 번호~좌석 번호

1. 좌석 번호→ 좌석이 하나일 때 ex) F1

2. 좌석 번호, 좌석 번호, 좌석 번호 .... → 연속되지 않은 좌석이 여러개 일 때 ex) F1,B2,G3

3. 좌석 번호~좌석 번호 → 연속된 여러개의 좌석(이 때 좌석 번호의 대문자 알파벳은 서로 같아야 함) ex) A1~A5

  1. 예매 내역 형식

"영화 제목(5.2 입출력 형식 6번)" "(0000~9999)년" "(01~12)월" "(5.2 입출력 형식 9번)일" "(00~23):(00~59)" "(5.2 입출력 형식 7번)"

  1. 일 계산 형식

1,3,5,7,8,10,12 월인 경우 : 00~31일

4,6,,9,11월인 경우 : 00~30일

2월인 경우 : 00~28일

 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •