주제 정하기

 

  수업시간에서 예제로 다루었던 수강,수업관리 프로그램은 접근성이 높아서 쇼핑몰 등 구매 프로그램을 하려했으나 1인당 1테이블(우리팀은 총 5분)을 전담하여 만들어야 하기에 영화예약프로그램을 하기로 결정.

 DAO와 SERVICE를 정하기에 앞서 기능을 먼저 정했다.

  • 회원가입(개인정보 확인, 수정, 삭제 등. 로그인, 로그아웃도 포함)
    • 영화(영화 정보: 영화명, 개봉일, 감독, 배우)
    • 상영관(상영관 정보: 상영관명, 상영시간)    
    • 자리(상영관마다 10개의 자리보유(좌석마다 금액의 차등을 줌), 자리선점의 유무)
    • 예약(영화선택, 시간선택(또는 상영관선택), 자리선택, 결제)

 

테이블 만들기(ER-Diagram)

ER-Diagram

 테이블은 인원에 맞춰 5개가 만들어졌다. ER다디어그램에서 보다시피 예약(reserve)테이블이 모든 테이블과 조인이 되어있는 상태... 그나마 조인이 적은 영화(movie) 테이블을 맡게 되었으나 상영관(theater)와 조인이 되어있는 상황이라 영화를 수정하고 삭제하는 것이 다소 염두해야할 부분이었다.

 

5조project (최종).pdf
1.62MB

클래스 다이어그램

 

 

 

기능 명세화

 

1. 메뉴

  메뉴를 짜면서 기능을 명세화 시키는 것이 훨씬 빠르고 수월했다. (아주 효율적인 방법이라고 생각한다)

 기본 메뉴는 위와 같은 구성으로 짜기로 결정하였다.

 

 

2. Member  

  가입정보 : 아이디, pwd, 이름, 핸드폰번호, 포인트(예매 후에 포인트가 쌓이는 방식)

 

이번 팀플젝에서 가장 포인트로 생각했던 것은 일반 사용자와 관리자 모두 사용할 수 있는 프로그램을 만들고 싶었다. 그래서 Member테이블의 service를 사용자와 관리자모드 두개로 나누어 만들었다.

 

가입 후 사용자가 로그인을 하면 아래와 같은 메뉴들을 선택할수 있도록 구현했고,

 

 

관리자 메뉴를 따로 만들어서 

 

회원관리가 가능하도록 구현했다. 당연히 관리자메뉴는 관리자 아이디로만 로그인해서 접근할 수 있게!

하지만 회원과 관리자가 이용하는 Dao는 겹치는 메소드가 많았기 때문에 공통으로 사용했다.

 

 

 

 3. Movie

 영화 테이블은 관리자모드로만 접근이 가능하게 했다. (위의 관리자 메뉴를 참고)

코드 영화명 개봉일 감독 배우
1 aaa 2021.7.1 감독1 배우1
2 bbb 2021.6.29 감독2 배우2
3        

영화테이블은 이런식으로 영화명, 개봉일, 감독, 배우의 정보를 담고 있어야하고 상영관과 조인을 하기 위해 코드를 auto increment로 자동으로 배정되게 해서 외래키로 사용하게 했다.
추후에 구현을 돌려보며 오류를 잡아낼 때 참조값 무결성 문제가 발생해 테이블을 다시 갈아엎었다는 전설이...

on delete cascade로 해결!

 

영화메뉴는 이렇게 구성이 되었고, 영화검색, 수정,삭제에서 영화명에 찾고자 하는 단어가 들어가있는 영화를 모두 출력하게끔 코딩했다. 나중에 수정과 삭제를 위해 영화명을 검색했을 때 찾은 단어가 들어가있는 모든 영화들의 정보가 바뀌게 되는 것을 방지하기 위함이었다.

 

Dao에서 select 메소드를 이렇게 짜서

검색해서 수정,삭제할 영화의 코드를 선택하여 안전하게 정보변경이 되게끔 코딩했다.

우선 단어를 검색하여 모두다 출력하게 한 것과 if문으로 오류를 줄인 것이 뿌듯하다. (물론 조원의 도움이 있었다. len(movie)로 검색한 영화가 참인 상태로 if를 짠 것이 새로운 방법의 제시라 신세계였다)

 

영화를 등록하고 검색하면 '해리포터' 단어가 들어간 영화가 출력된다.

 

수정도 이런식으로~

 

6번의 영화자동등록은 크롤링으로 박스오피스 5위까지 해당하는 영화를 자동으로 영화테이블에 추가하는 건데 조원이 짠 코드이고 내가 완벽하게 공부하지 않은 부분이라서 우선 추후에 크롤링 공부 후 포스팅하겠다.

 

 

4. Theater

상영관도 역시 관리자모드로만 접근이 가능.

코드 이름 영화 코드 (영화테이블) 상영시간
1 A관 10:00
2 B관 19:00

영화테이블처럼 코드를 auto increment로 자동배정하게 테이블을 만들었고 영화코드와 서로 참조되어있는 상태다.

 

상영관 메뉴는 위와 같이 구성되어있고

 

 

시어터는 movie_code를 파라미터로 받아 선택, 수정이 되게 하였다.  

 



5. Seat 

코드 좌석명 상영관 코드(상영관테이블) 가격 자리선점
1 A1 1 10000 Y,N
2 A5 1 10000  
3 A6 2 15000  
4 A10 2 15000  

시트 테이블은 파이썬에서 상영관을 등록하면 그 상영관에 자동으로 좌석 20개가 만들어지고 1번좌석~5좌석은 10,000원, 6번좌석~10좌석은 15,000으로 가격의 차등을 두었다.

예매시 이미 자리가 선점되어있는지 확인 후 좌석을 고르게끔 자리선점 컬럼도 보이게 하였다.

 

6. Reserve   

  이 프로그램의 핵심 예약 테이블.

코드 영화(코드) 상영관(코드) 자리(코드) 회원정보(코드) 결제방식
(카드,현금)
1 1번영화 2번상영관 1번자리 1번회원 1카드
2 2번영화 1번상영관 2번자리 2번회원 2현금
3 1번영화 2번상영관 2    

영화, 상영관, 자리, 회원정보 모두와 조인이 되어있어 다 코드를 외래키로 참조하고 있다.

 

무슨_코드가 계속 보이는게 눈이 아프다.

 

예약을 진행해본 화면이다.

 

 

 

후기

 

각자 코드를 구현한 뒤 최종적으로 합치는 과정이 가장 떨렸다. 얼레벌레 조장이 되어버려서 추합하여 메뉴를 굴리게 되었는데 그 와중에 잠깐씩 나오던 에러들을 수정하고 다시 진행하는 것이 떨렸지만 짜릿했던 순간이었다. 

참조값 때문에 삭제 에러가 나 테이블도 다시 만들고, 일반 사용자로 로그인해 관리자모드로 접근을 해본다던가 검색명을 엉뚱하게 하던가 최대한 여러 에러들을 염두하여 실행하고 고쳐나갔다. 분명 완벽하다 생각했는데 발표 준비를 하다가 발견하는 에러들도 수두룩했다. 아직 못찾아낸 에러들도 존재하겠지만 뭐... except Exception as e로 대충 흐린눈하기...^^

첫 팀플임에도 완성도가 매우 높았다. 좋은 조원덕에 첫 단추를 잘 꽨느낌이다. 다음 프로젝트도 좋은 퀄이 나오기를!

 

 

 

+ Recent posts