8. 2. DB 설계
회원제로 관리되는 영화 예매 프로그램이다.
프로그램을 시작하여 예매 버튼을 누르면 영화를 선택할 수 있다. 상영관은 각 영
화마다 정해져 있다. 상영일정 역시 정해져 있어서 고르지 않는다. 영화 선택 후, 영
화 관람 인원 수 (예매할 티켓의 매수)를 정해야 한다. 정한 인원 수 만큼 예매가 가
능한 좌석을 선택할 수 있다.
영화 종류/좌석 선택 이후, 간식(팝콘과 음료)과 기념품을 구매할 수 있다. 구매하
지 않아도 된다. 간식(팝콘과 음료)과 종류와 개수를 선택할 수 있다.
마지막으로 고객은 결제 방법(3가지)을 선택한다. 결제 완료 이후, 고객은 결제된
내용을 다시 확인이 가능하다.
/* 참고 사항 */
회원가입 할 때 아이디, 비밀번호, 이름, 전화번호정보가 필요하다.
좌석은 한번에 최대 4자리 씩만 선택할 수 있다.
8
9. 회원제로 관리되는 영화 예매 프로그램이다.
프로그램을 시작하여 예매 버튼을 누르면 영화를 선택할 수 있다. 상영관은 각 영
화마다 정해져 있다. 상영일정 역시 정해져 있어서 고르지 않는다. 영화 선택 후, 영
화 관람 인원 수 (예매할 티켓의 매수)를 정해야 한다. 정한 인원 수 만큼 예매가 가
능한 좌석을 선택할 수 있다.
영화 종류/좌석 선택 이후, 간식(팝콘과 음료)과 기념품을 구매할 수 있다. 구매하
지 않아도 된다. 간식(팝콘과 음료)과 기념품은 종류와 개수를 선택할 수 있다.
마지막으로 고객은 결제 방법(3가지)을 선택한다. 결제 완료 이후, 고객은 결제된
내용을 다시 확인이 가능하다.
/* 참고 사항 */
회원가입 할 때 아이디, 비밀번호, 이름, 전화번호정보가 필요하다.
좌석은 한번에 최대 4자리 씩만 선택할 수 있다.
9
10. 개체 명 속성
# : primary key
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자
예매한 티켓번호와 수량, 주문한 간식/기념품번호와 수량
티켓 #티켓번호, 언제, 어떤 영화, 어디서, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수, #좌석번호, 좌석 배정 여부
상영일정 #상영일정번호, 상영일자, 어떤 영화, 어디 상영관
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격
10
11. 개체 명 속성
# : primary key
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자
예매한 티켓번호와 수량, 주문한 간식/기념품번호와 수량
티켓 #티켓번호, 상영일정번호, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수, #좌석번호, 좌석 배정 여부
상영일정 #상영일정번호, 상영일자, 영화번호, 상영관번호
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격
11
12. 개체 명 속성
# : primary key
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자
예매한 티켓번호와 수량, 주문한 간식/기념품번호와 수량
티켓 #티켓번호, 상영일정번호, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수, #좌석번호, 좌석 배정 여부
상영일정 #상영일정번호, 상영일자, 영화번호, 상영관번호
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격
12
13. 개체 명 속성
# : primary key
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자,
예매번호, 주문번호
티켓예매 #예매번호, 티켓번호, 수량
간식/기념품 주문 #주문번호, 주문한 간식/기념품 번호, 수량
티켓 #티켓번호, 상영일정번호, 상영관번호, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수
좌석 #상영관번호, #좌석번호, 좌석 배정 유무
상영일정 #상영일정번호, 상영일자, 영화번호, 상영관번호
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격 13
21. 3. 프로그램 – DB연결
/* 간식 (정보) 삽입 */
insert into snack values (1, '팝콘', '치즈맛팝콘', 5000);
insert into snack values (2, '팝콘', '양파맛팝콘', 5000);
insert into snack values (3, '팝콘', '코소한맛팝콘', 5000);
insert into snack values (4, '팝콘', '카라멜맛팝콘', 5000);
insert into snack values (5, '음료', '콜라', 3000);
insert into snack values (6, '음료', '사이다', 3000);
insert into snack values (7, '음료', '에이드', 3000);
21
/* 영화 (정보) 삽입 */
insert into movie values(1, 'interstellar');
insert into movie values(2, 'killyourdarlings');
insert into movie values(3, 'frank');
/* 상영관 (정보) 삽입 */
insert into theater values(1, 69);
insert into theater values(2, 69);
insert into theater values(3, 69);
/* 좌석 (정보) 삽입 */
// 엑셀을 통해 삽입
insert into seat values(1, 'A-1', 0);
insert into seat values(1, 'A-2', 0);
......
insert into seat values(1, 'A-23', 0);
......
insert into seat values(3, 'C-23', 0);
/* 기념품 (정보) 삽입 */
insert into memento values (1, '모자', 10000);
insert into memento values (1, '담요', 10000);
insert into memento values (1, '슬리퍼', 10000);
/* 상영일정 (정보) 삽입 */
insert into schedule values(1, to_date(20141231, 'yyyy-mm-dd'), 1, 1);
insert into schedule values(2, to_date(20140101, 'yyyy-mm-dd'), 2, 2);
insert into schedule values(3, to_date(20140102, 'yyyy-mm-dd'), 3, 3);
22. 3. 프로그램 – DB연결
/* 간식 (정보) 삽입 */
insert into snack values (1, '팝콘', '치즈맛팝콘', 5000);
insert into snack values (2, '팝콘', '양파맛팝콘', 5000);
insert into snack values (3, '팝콘', '코소한맛팝콘', 5000);
insert into snack values (4, '팝콘', '카라멜맛팝콘', 5000);
insert into snack values (5, '음료', '콜라', 3000);
insert into snack values (6, '음료', '사이다', 3000);
insert into snack values (7, '음료', '에이드', 3000);
22
/* 영화 (정보) 삽입 */
영화번호 영화제목
insert into movie values(1, 'interstellar');
insert into movie values(2, 'killyourdarlings');
insert into movie values(3, 'frank');
1 interstellar
2 Killyourdarlings
3 frank
/* 상영관 (정보) 삽입 */
insert into theater values(1, 69);
상영관번호 총 좌석 수
insert into theater values(2, 69);
insert into theater values(3, 69);
1 69
2 69
3 69
/* 좌석 (정보) 삽입 */
// 엑셀을 통해 삽입
insert into seat values(1, 'A-1', 0);
insert into seat values(1, 'A-2', 0);
......
insert into seat values(1, 'A-23', 0);
......
insert into seat values(3, 'C-23', 0);
/* 기념품 (정보) 삽입 */
insert into memento values (1, '모자', 10000);
insert into memento values (1, '담요', 10000);
insert into memento values (1, '슬리퍼', 10000);
상영관번호 좌석번호 예약여부
1 A-1 0
2 A-2 0
3 A-3 0
…. ….. ……
/* 상영일정 (정보) 삽입 */
insert 상영일정번호 into schedule 상영일자 values(영화번호 1, to_date(상영관번호
20141231, 'yyyy-mm-dd'), 1, 1);
insert into schedule values(2, to_date(20140101, 'yyyy-mm-dd'), 2, 2);
insert into schedule values(3, to_date(20140102, 'yyyy-mm-dd'), 3, 3);
1 20141231 1 1
2 20140101 2 2
간식번호 종류 이름 가격
1 팝콘 치즈맛팝콘 5000
2 팝콘 양파맛팝콘 5000
3 팝콘 고소한맛팝콘 5000
4 팝콘 카라멜맛팝콘 5000
5 음료 콜라 3000
6 음료 사이다 3000
7 음료 에이드 3000
기념품번호 이름 가격
1 모자 10000
2 담요 10000
3 슬리퍼 10000
23. 2-3. DB설계
23
/* customer_UID를 위한 sequence 생성 */
create sequence customer_UID;
/* ticket_UID를 위한 sequence 생성 */
create sequence ticket_UID;
/* 티켓 생성! */
// 자바 코드를 통해 생성
try {
String query = "select schedule_uid, seat.theater_uid, seat_uid from schedule, seat where
schedule.theater_uid = seat.theater_uid";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next()){
String inQuery = "insert into ticket values (ticket_uid.nextval, "
+ rs.getInt(1) + ", " + rs.getInt(2) + ", '" + rs.getString(3) + "', 8000)";
Statement inStmt = con.createStatement();
ResultSet inRs = inStmt.executeQuery(inQuery);
}
} catch(SQLException e) {
e.printStackTrace();
}
/* 예매를 위한 sequence 생성 */
create sequence reservation_uid;
/* 결제를 위한 sequence 생성 */
create sequence payment_UID;
24. 2-3. DB설계
24
/* customer_UID를 위한 sequence 생성 */
create sequence customer_UID;
/* ticket_UID를 위한 sequence 생성 */
create sequence ticket_UID;
/* 티켓 생성! */
// 자바 코드를 통해 생성
try {
String query = "select schedule_uid, seat.theater_uid, seat_uid from schedule, seat where
schedule.theater_uid = seat.theater_uid";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next()){
String inQuery = "insert into ticket values (ticket_uid.nextval, "
+ rs.getInt(1) + ", " + rs.getInt(2) + ", '" + rs.getString(3) + "', 8000)";
Statement inStmt = con.createStatement();
ResultSet inRs = inStmt.executeQuery(inQuery);
}
} catch(SQLException e) {
e.printStackTrace();
}
/* 예매를 위한 sequence 생성 */
create sequence reservation_uid;
/* 결제를 위한 sequence 생성 */
create sequence payment_UID;
티켓번호 상영일정번호 상영관번호 좌석번호 가격
1 1 1 A-1 8000
25. 3. 프로그램 – DB연결
25
class MovieInfo {
String title;
String image;
}
DB와 정보를 주고받을 객체 생성!
class SeatInfo {
String seat_UID;
int issue;
}
class MyPayment {
int total_price;
String option;
java.sql.Date date;
int my_UID;
int reservation_UID;
int m_order_uid;
int s_order_uid;
}
class Customer {
String id;
String pw;
String name;
int tel;
}
class Selected {
String movie_title;
int theater;
int num_of_person;
String seat;
int p_snack;
int p_snack_quantity;
int j_snack;
int j_snack_quantity;
int memento;
int memento_quantity;
String payment_option;
}
45. 5. 연동하면서 특별히 어려웠던 점
45
1. 자바 연동 전, 테이블에 대량의 데이터를 삽입할 때
→ Excel을 이용하여 데이터 삽입! (정보 링크 : here)
2. Oracle DB와 JAVA간의 한글 깨짐 현상과 날짜형식이 맞지 않았다.
→ 캐릭터 셋을 확인하고 변경!
(NLS_CHARACTERSET이 KO16KSC5601인지 확인!)
→ 날짜 형식 변경
(alter session set nls_date_format='yyyymmdd hh24:mi:ss';)
46. 6. 각 조원의 역할은?
46
1. 최명근 : 프로그램 작성, DB 테이블 작성
2. 서진영 : DB 설계 공부
3. 이성광 : DB 설계 공부 & 테이블 작성
4. 방소영 : 프로그램 작성, PPT 작성
5. 전유진 : DB설계, 프로그램-DB연동, PPT 작성