회원제로 관리되는 영화 예매 프로그램이다.
프로그램을 시작하여 예매 버튼을 누르면 영화를 선택할 수 있다. 상영관은 각 영화마다 정해져 있다. 상영일정 역시 정해져 있어서 고르지 않는다. 영화 선택 후, 영화 관람 인원 수 (예매할 티켓의 매수)를 정해야 한다. 정한 인원 수 만큼 예매가 가능한 좌석을 선택할 수 있다.
영화 종류/좌석 선택 이후, 간식(팝콘과 음료)과 기념품을 구매할 수 있다. 구매하지 않아도 된다. 간식(팝콘과 음료)과 종류와 개수를 선택할 수 있다.
마지막으로 고객은 결제 방법(3가지)을 선택한다. 결제 완료 이후, 고객은 결제된내용을 다시 확인이 가능하다.
/* 참고 사항 */회원가입 할 때 아이디, 비밀번호, 이름, 전화번호정보가 필요하다.좌석은 한번에 최대 4자리 씩만 선택할 수 있다.
회원제로 관리되는 영화 예매 프로그램이다.
프로그램을 시작하여 예매 버튼을 누르면 영화를 선택할 수 있다. 상영관은 각 영화마다 정해져 있다. 상영일정 역시 정해져 있어서 고르지 않는다. 영화 선택 후, 영화 관람 인원 수 (예매할 티켓의 매수)를 정해야 한다. 정한 인원 수 만큼 예매가 가능한 좌석을 선택할 수 있다.
영화 종류/좌석 선택 이후, 간식(팝콘과 음료)과 기념품을 구매할 수 있다. 구매하지 않아도 된다. 간식(팝콘과 음료)과 종류와 개수를 선택할 수 있다.
마지막으로 고객은 결제 방법(3가지)을 선택한다. 결제 완료 이후, 고객은 결제된내용을 다시 확인이 가능하다.
/* 참고 사항 */회원가입 할 때 아이디, 비밀번호, 이름, 전화번호정보가 필요하다.좌석은 한번에 최대 4자리 씩만 선택할 수 있다.
2. DB 설계
8
회원제로 관리되는 영화 예매 프로그램이다.
프로그램을 시작하여 예매 버튼을 누르면 영화를 선택할 수 있다. 상영관은 각 영화마다 정해져 있다. 상영일정 역시 정해져 있어서 고르지 않는다. 영화 선택 후, 영화 관람 인원 수 (예매할 티켓의 매수)를 정해야 한다. 정한 인원 수 만큼 예매가 가능한 좌석을 선택할 수 있다.
영화 종류/좌석 선택 이후, 간식(팝콘과 음료)과 기념품을 구매할 수 있다. 구매하지 않아도 된다. 간식(팝콘과 음료)과 기념품은 종류와 개수를 선택할 수 있다.
마지막으로 고객은 결제 방법(3가지)을 선택한다. 결제 완료 이후, 고객은 결제된내용을 다시 확인이 가능하다.
/* 참고 사항 */회원가입 할 때 아이디, 비밀번호, 이름, 전화번호정보가 필요하다.좌석은 한번에 최대 4자리 씩만 선택할 수 있다.
9
개체 명 속성
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자예매한 티켓번호와 수량, 주문한 간식/기념품번호와 수량
티켓 #티켓번호, 언제, 어떤 영화, 어디서, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수, #좌석번호, 좌석 배정 여부
상영일정 #상영일정번호, 상영일자, 어떤 영화, 어디 상영관
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격
10
# : primary key
개체 명 속성
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자예매한 티켓번호와 수량, 주문한 간식/기념품번호와 수량
티켓 #티켓번호, 상영일정번호, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수, #좌석번호, 좌석 배정 여부
상영일정 #상영일정번호, 상영일자, 영화번호, 상영관번호
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격
11
# : primary key
개체 명 속성
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자예매한 티켓번호와 수량, 주문한 간식/기념품번호와 수량
티켓 #티켓번호, 상영일정번호, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수, #좌석번호, 좌석 배정 여부
상영일정 #상영일정번호, 상영일자, 영화번호, 상영관번호
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격
12
# : primary key
개체 명 속성
회원(고객) #회원번호, 아이디, 비밀번호, 이름, 전화번호
결제 #결제번호, 회원번호, 결제방법, 총 가격, 결제일자,예매번호, 주문번호
티켓예매 #예매번호, 티켓번호, 수량
간식/기념품 주문 #주문번호, 주문한 간식/기념품 번호, 수량
티켓 #티켓번호, 상영일정번호, 상영관번호, 좌석번호, 가격
영화 #영화번호, 제목, 내용, 감독, 출연배우, 등…
상영관 #상영관번호, 총 좌석 수
좌석 #상영관번호, #좌석번호, 좌석 배정 유무
상영일정 #상영일정번호, 상영일자, 영화번호, 상영관번호
간식 #간식번호, 종류, 이름, 가격
기념품 #기념품번호, 이름, 가격 13
# : primary key
2-3. DB설계
15
/* 고객 테이블 생성 */CREATE TABLE customer(
customer_UID NUMBER(6) NOT NULL,customer_id VARCHAR2(30),customer_pw VARCHAR2(30),customer_name VARCHAR2(20),customer_tel NUMBER(12),
CONSTRAINT customer_customer_UID_pk PRIMARY KEY(customer_UID));
2-3. DB설계
16
/* 간식 테이블 생성*/CREATE TABLE snack(
snack_UID NUMBER(6) NOT NULL,type varchar2(10),name VARCHAR2(20),price number(6),
CONSTRAINT snack_snack_UID_pk PRIMARY KEY(snack_UID));
/*기념품 테이블 생성 */CREATE TABLE memento(
memento_UID NUMBER(4) NOT NULL,name VARCHAR2(21),price number(6),CONSTRAINT memento_memento_UID_pk PRIMARY KEY(memento_UID)
);
2-3. DB설계
17
/* 기념품 주문 테이블 생성 */create table memento_order(
m_order_uid number(6) not null,memento_UID number(6),order_quantity number(4),
constraint memento_m_order_UID_pk primary key(m_order_uid),constraint memento_memento_uid_fk foreign key(memento_uid) references memento(memento_uid));
/* 간식 주문 테이블 생성 */create table snack_order(
s_order_uid number(6) not null,p_snack_uid number(6),p_order_quantity number(4),j_snack_uid number(6),j_order_quantity number(4),
constraint snack_s_order_uid_pk primary key(s_order_uid),constraint snack_p_snack_uid_fk foreign key(p_snack_uid) references snack(snack_uid),constraint snack_j_snack_uid_fk foreign key( j_snack_uid) references snack(snack_uid));
2-3. DB설계
18
/* 상영관 테이블 생성*/CREATE TABLE theater(
theater_UID NUMBER(6) NOT NULL,total_seat_number NUMBER(10),
CONSTRAINT theater_theater_UID_pk PRIMARY KEY(theater_UID));
/*좌석 테이블 생성*/CREATE TABLE seat(
theater_UID number(4) NOT NULL,seat_UID varchar2(10) NOT NULL,issue NUMBER(6) not null default 0,
CONSTRAINT seat_pk PRIMARY KEY(seat_UID, theater_UID),constraint seat_theater_UID_fk foreign key(theater_UID) references theater(theater_UID));
/*영화 테이블 생성*/CREATE TABLE movie(
movie_UID NUMBER(6) NOT NULL,title VARCHAR2(20),
CONSTRAINT movie_movie_UID_pk PRIMARY KEY(movie_UID));
2-3. DB설계
19
/* 상영일정 테이블 생성 */CREATE TABLE schedule(
schedule_UID NUMBER(6) NOT NULL,schedule_date DATE,movie_UID NUMBER(4),theater_UID NUMBER(4),
CONSTRAINT schedule_schedule_UID_pk PRIMARY KEY(schedule_UID),CONSTRAINT schedule_movie_UID_fk FOREIGN KEY(movie_UID) REFERENCES movie(movie_UID),CONSTRAINT schedule_theater_UID_fk FOREIGN KEY(theater_UID) REFERENCES theater(theater_UID));
/* 티켓 테이블 생성 */CREATE TABLE ticket(
ticket_UID NUMBER(6) NOT NULL,schedule_UID NUMBER(2),theater_UID NUMBER(4),seat_UID varchar2(10),price number(6),
CONSTRAINT ticket_ticket_UID_pk PRIMARY KEY(ticket_UID),CONSTRAINT ticket_schedule_UID_fk FOREIGN KEY(schedule_UID) REFERENCES schedule(schedule_UID),constraint ticket_seat_fk foreign key(theater_UID, seat_UID) references seat(theater_UID, seat_UID));
2-3. DB설계
20
/* 티켓 예매 테이블 생성 */create table reservation(
reservation_UID number(6) not null,ticket1_uid number(6),ticket2_uid number(6),ticket3_uid number(6),ticket4_uid number(7),
constraint reservation_reservation_UID_pk primary key(reservation_UID),constraint reservation_ticket1_uid_fk foreign key(ticket1_uid) references ticket(ticket_uid),constraint reservation_ticket2_uid_fk foreign key(ticket2_uid) references ticket(ticket_uid),constraint reservation_ticket3_uid_fk foreign key(ticket3_uid) references ticket(ticket_uid),constraint reservation_ticket4_uid_fk foreign key(ticket4_uid) references ticket(ticket_uid));
/* 결제 테이블 생성 */create table payment (
payment_UID number(6) not null,total_price number(8),payment_option varchar2(20),payment_date date,customer_UID number(6),m_order_UID number(6),s_order_UID number(6),reservation_UID number(6),
constraint payment_payment_UID_pk primary key(payment_UID),constraint payment_customer_uid_fk FOREIGN KEY(customer_UID)REFERENCES customer(customer_UID),CONSTRAINT payment_m_order_UID_fk FOREIGN KEY(m_order_UID)REFERENCES memento_order(m_order_UID),CONSTRAINT payment_s_order_UID_fk FOREIGN KEY(s_order_UID)REFERENCES snack_order(s_order_UID),CONSTRAINT payment_reservation_UID_fk FOREIGN KEY(reservation_UID)REFERENCES reservation(reservation_UID));
3. 프로그램 – DB연결
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 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);
/* 간식 (정보) 삽입 */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);
/* 기념품 (정보) 삽입 */insert into memento values (1, '모자', 10000);insert into memento values (1, '담요', 10000);insert into memento values (1, '슬리퍼', 10000);
3. 프로그램 – DB연결
22
/* 영화 (정보) 삽입 */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 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);
/* 간식 (정보) 삽입 */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);
/* 기념품 (정보) 삽입 */insert into memento values (1, '모자', 10000);insert into memento values (1, '담요', 10000);insert into memento values (1, '슬리퍼', 10000);
영화번호 영화제목
1 interstellar
2 Killyourdarlings
3 frank
상영관번호 총 좌석 수
1 69
2 69
3 69
상영관번호 좌석번호 예약여부
1 A-1 0
2 A-2 0
3 A-3 0
…. ….. ……
상영일정번호 상영일자 영화번호 상영관번호
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
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;
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
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;
}
public boolean 회원가입창아이디중복검사(String 아이디) {try {
String query = "select * from customer where customer_id='"+아이디+"'";Statement statement = con.createStatement();ResultSet resultSet = statement.executeQuery(query);
if(resultSet.next()) {try {
con.close();} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}return true;
}} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}try {
con.close();} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}return false;
}
3-2. 프로그램 – DB연결
26
3-2. 프로그램 – DB연결
27
public void signUp(String id, String pw, String name, String telStr) {StringTokenizer st = new StringTokenizer(telStr, "-");String str = "";while(st.hasMoreTokens()) {
str += st.nextToken();}int tel = Integer.parseInt(str);
try {
String query = "insert into customer values (customer_uid.nextval, '"+id+"', '"+pw+"', '"+name+"', "+tel+")";
Statement statement = con.createStatement();ResultSet resultSet = statement.executeQuery(query);
} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();
}
try {con.close();
} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();
}}
3-2. 프로그램 – DB연결
28
public boolean 로그인창아이디검사(String 아이디) {
try {
String query = "select * from customer where customer_id='"+아이디+"'";Statement statement = con.createStatement();ResultSet resultSet = statement.executeQuery(query);
if(resultSet.next()) {try {
con.close();} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}return true;
}} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}
try {con.close();
} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();
}return false;
}
3-2. 프로그램 – DB연결
29
public boolean 로그인창비밀번호검사(String 비밀번호) {
try {
String query = "select * from customer where customer_pw='"+비밀번호+"'";Statement statement = con.createStatement();ResultSet resultSet = statement.executeQuery(query);
if(resultSet.next()) {try {
con.close();} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}return true;
}} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}try {
con.close();} catch (SQLException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}return false;
}
3-2. 프로그램 – DB연결
30
/* 로그인 되면 제일 먼저 회원 번호 가져오기! */try {
String query = "select customer_UID from customer where customer_id = '" + id +"'";Statement statement = con.createStatement();ResultSet rs = statement.executeQuery(query);
while(rs.next()) {myPayment.my_UID = rs.getInt(1);}
System.out.println("my_UID : " + myPayment.my_UID);} catch (SQLException e) {e.printStackTrace();
}
/* 영화정보 가져오기! */try {
String query = "select title from movie";Statement statement = con.createStatement();ResultSet rs = statement.executeQuery(query);
while(rs.next()) {MovieInfo mi = new MovieInfo();mi.title = rs.getString(1);mi.image = "./images/" + mi.title + ".png";
movieInfo.add(mi);}
} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();
}
3-2. 프로그램 – DB연결
31
/* 상영관정보 가져오기! */try {
String query = "select theater_UID from schedule where movie_UID = (select movie_UID from movie where title = '" + selected.movie_title +"')";
Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {selected.theater = rs.getInt(1);
}
System.out.println(selected.movie_title + ", " + selected.theater);
} catch (SQLException e1) {e1.printStackTrace();
}
3-2. 프로그램 – DB연결
32
/* 좌석 정보(예약 여부) 가져오기! */try {
String query = "select seat_UID, issue from seat where theater_UID = " + selected.theater;Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs = stmt.executeQuery(query);
rs.last();seatInfo = new SeatInfo[rs.getRow()];rs.beforeFirst();while(rs.next()){
char[] tmp_uid = rs.getString(1).toCharArray();String tmpStr = "";for (int i = 2; i < tmp_uid.length; i++) {
tmpStr += tmp_uid[i];}
int seatInfoIndex = (int)((tmp_uid[0])-'A')*24 + Integer.parseInt(tmpStr);
seatInfo[seatInfoIndex] = new SeatInfo();seatInfo[seatInfoIndex].seat_UID = rs.getString(1);seatInfo[seatInfoIndex].issue = rs.getInt(2);
}
// 예약 좌석에 해당하는 JCheckBox 끄기!for (int i = 0; i < seatInfo.length; i++) {
if (seatInfo[i].issue == 1) {seat[(int)(i/24)][i%24].setEnabled(false);
}}
} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();
}
3-2. 프로그램 – DB연결
33
// 간식 (팝콘류, 음료류) 가져오기!try {
String query = "select name, price from snack where type = '팝콘'";Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs = stmt.executeQuery(query);
rs.last();listP = new String[rs.getRow() + 1];popcornPrice = new int[rs.getRow() + 1];rs.beforeFirst();
listP[0] = "팝콘";popcornPrice[0] = 0;
int listIndex = 0;while(rs.next()) {
listP[++listIndex] = rs.getString(1);popcornPrice[listIndex] = rs.getInt(2);
}
query = "select name, price from snack where type = '음료'";rs = stmt.executeQuery(query);
rs.last();listJ = new String[rs.getRow() + 1];juicePrice = new int[rs.getRow() + 1];rs.beforeFirst();
listJ[0] = "음료";juicePrice[0] = 0;
listIndex = 0;while(rs.next()) {
listJ[++listIndex] = rs.getString(1);juicePrice[listIndex] = rs.getInt(2);
}} catch(SQLException e) {
e.printStackTrace();}
3-2. 프로그램 – DB연결
34
// 기념품 가져오기!try {
String query = "select name from memento";Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs = stmt.executeQuery(query);
rs.last();listS = new String[rs.getRow() + 1];rs.beforeFirst();
listS[0] = "기념품";int listIndex = 1;while(rs.next()) {
listS[listIndex++] = rs.getString(1);}
} catch(SQLException e) {e.printStackTrace();
}
3-2. 프로그램 – DB연결
35
if ((selected.p_snack >0 || selected.j_snack >0)){
String p_order = (selected.p_snack>0?""+selected.p_snack:"null") + ", null";String j_order = (selected.j_snack>0?""+selected.j_snack:"null") + ", null";
// 스낵 주문정보를 DB에 추가
query = "insert into snack_order values “ + "(snack_order_uid.nextVal, " + p_order + ", " + j_order + ")";
rs = stmt.executeQuery(query);
// 주문번호 바로 가져오기!
query = "select s_order_uid from snack_order";rs = stmt.executeQuery(query);
rs.last();myPayment.s_order_uid = rs.getInt(1);
} else {myPayment.s_order_uid = -1;
}
3-2. 프로그램 – DB연결
36
if ((selected.p_snack >0 || selected.j_snack >0)){
String p_order = (selected.p_snack>0?""+selected.p_snack:"null") + ", null";String j_order = (selected.j_snack>0?""+selected.j_snack:"null") + ", null";
// 스낵 주문정보를 DB에 추가
query = "insert into snack_order values “ + "(snack_order_uid.nextVal, " + p_order + ", " + j_order + ")";
rs = stmt.executeQuery(query);
// 주문번호 바로 가져오기!
query = "select s_order_uid from snack_order";rs = stmt.executeQuery(query);
rs.last();myPayment.s_order_uid = rs.getInt(1);
} else {myPayment.s_order_uid = -1;
}
주문번호 팝콘간식번호 팝콘주문수량 음료간식번호 음료주문수량
141201 001 2 002 3
4. 조원 역할
37
if (selected.memento >0){
// 기념품 주문정보를 DB에 추가
query = "insert into memento_order values "+ "(memento_order_uid.nextVal, " + selected.memento + ", " + selected.memento_quantity +")";
rs = stmt.executeQuery(query);
// 주문정보 바로 가져오기!
query = "select m_order_uid from memento_order";rs = stmt.executeQuery(query);
rs.last();myPayment.m_order_uid = rs.getInt(1);
} else {myPayment.m_order_uid = -1;
}
4. 조원 역할
38
if (selected.memento >0){
// 기념품 주문정보를 DB에 추가
query = "insert into memento_order values "+ "(memento_order_uid.nextVal, " + selected.memento + ", " + selected.memento_quantity +")";
rs = stmt.executeQuery(query);
// 주문정보 바로 가져오기!
query = "select m_order_uid from memento_order";rs = stmt.executeQuery(query);
rs.last();myPayment.m_order_uid = rs.getInt(1);
} else {myPayment.m_order_uid = -1;
}
주문번호 기념품번호 기념품주문수량
241217 002 3
4. 조원 역할
39
// 예약할 좌석을 예약상태로 바꾼 뒤, 티켓번호를 알아낸다.
int[] ticket_UID = new int[4];for (int i = 0; i < selected_seat.length; i++) {
System.out.println(selected.theater + ", " + selected_seat[i]);
query = "update seat set issue = 1 where theater_UID = " + selected.theater + " and seat_UID = '" + selected_seat[i]+ "'";rs = stmt.executeQuery(query);
/* 커밋한번 해준다. */query = "commit";rs = stmt.executeQuery(query);
query = "select ticket_UID from ticket where theater_UID = " + selected.theater + " and seat_UID = '" + selected_seat[i] + "'";rs = stmt.executeQuery(query);
while(rs.next()) ticket_UID[i] = rs.getInt(1);}
4. 조원 역할
40
// 예매정보를 DB에 추가하고 예매번호를 확인한다.
query = "insert into reservation values "+ "(reservation_uid.nextval, " + ticket_UID[0] +", “+ (ticket_UID[1]>0?ticket_UID[1]:null) +", " + (ticket_UID[2]>0?ticket_UID[2]:null) +", “+ (ticket_UID[3]>0?ticket_UID[3]:null) +")";
rs = stmt.executeQuery(query);
/* 커밋한번 해준다. */query = "commit";rs = stmt.executeQuery(query);
query = "select reservation_uid from reservation";rs = stmt.executeQuery(query);
rs.last();myPayment.reservation_UID = rs.getInt(1);
4. 조원 역할
41
// 예매정보를 DB에 추가하고 예매번호를 확인한다.
query = "insert into reservation values "+ "(reservation_uid.nextval, " + ticket_UID[0] +", “+ (ticket_UID[1]>0?ticket_UID[1]:null) +", " + (ticket_UID[2]>0?ticket_UID[2]:null) +", “+ (ticket_UID[3]>0?ticket_UID[3]:null) +")";
rs = stmt.executeQuery(query);
/* 커밋한번 해준다. */query = "commit";rs = stmt.executeQuery(query);
query = "select reservation_uid from reservation";rs = stmt.executeQuery(query);
rs.last();myPayment.reservation_UID = rs.getInt(1);
예매 번호 티켓1 번호 티켓2 번호 티켓3 번호 티켓4 번호
371217 1001 1010 1011 1100
4. 조원 역할
42
// 최종 결제 정보를 DB에 추가
try {
String query = "insert into payment values (payment_uid.nextVal, " + myPayment.total_price + ", '" + myPayment.option+ "', to_date('" + today + "', 'MM-DD-YYYY'), "+ myPayment.my_UID + ", " + (myPayment.m_order_uid>0?myPayment.m_order_uid:null) + ", " + (myPayment.s_order_uid>0?myPayment.s_order_uid:null) + ", " + myPayment.reservation_UID + ")";
Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(query);
} catch(SQLException exception) {exception.printStackTrace();
}
4. 조원 역할
43
// 최종 결제 정보를 DB에 추가
try {
String query = "insert into payment values (payment_uid.nextVal, " + myPayment.total_price + ", '" + myPayment.option+ "', to_date('" + today + "', 'MM-DD-YYYY'), "+ myPayment.my_UID + ", " + (myPayment.m_order_uid>0?myPayment.m_order_uid:null) + ", " + (myPayment.s_order_uid>0?myPayment.s_order_uid:null) + ", " + myPayment.reservation_UID + ")";
Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(query);
} catch(SQLException exception) {exception.printStackTrace();
}
결제번호 총 가격 결제 방법 결제 일자 회원 번호 기념품주문번호 간식주문번호 예매번호결제번호 총 가격 결제 방법 결제 일자 회원 번호 기념품주문번호 간식주문번호 예매번호
941214 27000 카드 20141207 0 241217 141201 371217
5. 연동하면서 특별히 어려웠던 점
45
1. 자바 연동 전, 테이블에 대량의 데이터를 삽입할 때
→ Excel을 이용하여 데이터 삽입! (정보 링크 : here)
2. Oracle DB와 JAVA간의 한글 깨짐 현상과 날짜형식이 맞지 않았다.
→ 캐릭터 셋을 확인하고 변경!
(NLS_CHARACTERSET이 KO16KSC5601인지 확인!)
→ 날짜 형식 변경
(alter session set nls_date_format='yyyymmdd hh24:mi:ss';)
6. 각조원의역할은?
46
1. 최명근 : 프로그램 작성, DB 테이블 작성
2. 서진영 : DB 설계 공부
3. 이성광 : DB 설계 공부 & 테이블 작성
4. 방소영 : 프로그램 작성, PPT 작성
5. 전유진 : DB설계, 프로그램-DB연동, PPT 작성