본문 바로가기

Java/실습

[Java] 예약하기

이전 실습에 이어서 1번 옵션인 예약하기 부분을 구현해보겠습니다.

Console(View) 부분에서 처음 보여질 메뉴부터 짜보겠습니다.

 

public void start() throws InterruptedException {

System.out.println();

System.out.println("식당 예약 시스템에 오신 것을 환영합니다");

System.out.println();

System.out.println("메뉴를 조회합니다.");

Thread.sleep(500);

System.out.println();

Scanner sc = new Scanner(System.in);

System.out.println("1. 예약하기");

System.out.println("2. 매장 등록");

System.out.println("3. 전체 예약 확인");

System.out.println("4. 전체 매장 조회");

System.out.println("5. 매장찾기");

System.out.println("6. 예약찾기");

System.out.println("7. 예약 정보 수정");

System.out.println("8. 예약 취소");

System.out.println("9. 프로그램 종료");}

 

먼저 기능에 대한 메뉴를 보여주는 Start 부분입니다.

Throw.sleep을 두어 메뉴가 0.5초 뒤에 나오도록 했습니다.

총 9개의 메뉴를 구현해 볼 예정입니다.

 

1번 메뉴는 예약하기입니다.

예약자 이름, 예약 날짜, 예약자 전화번호, 예약 식당 이름을

입력받아서 예약 테이블에 등록할 것입니다.

 

public void Reservation() throws SQLException, ParseException {

 

Scanner sc = new Scanner(System.in);

System.out.println("예약자 성함을 입력하세요");

String name = sc.next();

System.out.println("예약할 연-월-일/시:분을 입력하세요");

String date = sc.next();

System.out.println("예약자 전화번호를 입력하세요");

String phonenum = sc.next();

System.out.println("예약할 식당을 입력하세요");

String restaurant = sc.next();

}

 

 

그런데 입력받은 데이터 들을

어떻게 리턴할까요?

복수 개라 한꺼번에 리턴할 수 없습니다.

이때 사용하는 것이 DTO입니다.

DTO는 데이터를 옮기는 용도로 사용하는 클래스로

생성자를 통해 데이터를 넘겨주는 역할을 합니다.

DTO 클래스의 객체를 생성해서 객체를 리턴합니다.

 

 

package com.puft.franc.main;

//DTO, VO,

public class Reservation {

int number;

String name;

String s;

String Phonenumber;

String Restaurant;

public Reservation() {

// TODO Auto-generated constructor stub

}

public Reservation( String name, String s, String Phonenumber, String Restaurant) {

this.name = name;

this.s = s;

this.Phonenumber = Phonenumber;

this.Restaurant = Restaurant;}

 

public void printInfo() {

 

System.out.println(this.number);

System.out.println(this.name);

System.out.println(this.s);

System.out.println(this.Phonenumber);

System.out.println(this.Restaurant);

 

 

}

 

 

}

 

 

Reservation r = new Reservation(name, date, phonenum, restaurant);

return r;

 

다음은 기능을 구현한 DAO 클래스(Model) 에 대해서 살펴보겠습니다.

DAO는 Data Access Object의 줄임말로

M중에서 DB관련한 작업을 전담하고 있는 클래스입니다.

DAO 클래스에 있는 예약하는 메소드를 살펴보겠습니다.

 

public void Booking(String name, String time, String phonenum, String Restaurant ) throws SQLException, ParseException {

try {

con = PuftDBManager.connect();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/HH:mm");

Date utilDate = null;

utilDate = sdf.parse(time);

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

 

sql문에는 sql데이터가 필요하므로

sql 데이터로 변환하는 코드입니다.

 

 

String sql = "insert into jan07_book values(b_seq.nextval, ? ,?, ?, ?)";

 

pstmt = con.prepareStatement(sql);

pstmt.setString(1, name);

pstmt.setDate(2, sqlDate);

pstmt.setString(3, phonenum);

pstmt.setString(4, Restaurant);

 

sql문에 입력받은 데이터를 넣어줍니다.

 

 

if(pstmt.executeUpdate() == 1) {

System.out.println(name + " 매장이 등록되었습니다.");

}

 

예약이 성공하면 메세지를 출력합니다.

 

} catch (Exception e) {

e.printStackTrace() // TODO: handle exception

}

 

finally {

PuftDBManager.close(con, pstmt, rs);

}}

 

finally로 기능을 닫아줍니다.

 

public class PuftDBManager {

public static Connection connect() throws SQLException {

 

String addr = "jdbc:oracle:thin:@192.168.0.12:1521:xe";

return DriverManager.getConnection(addr, "ekdh3904", "fogus12");

 

}

public static void close(Connection con, PreparedStatement pstmt,

ResultSet rs) {

try {

rs.close(); //c,u,d 때는 필요없고, R 때만 필요

// insert하게 되면

//NULLPOINTER 에러 발생

//모든 Exception이 잡히도록 할 것!

//메시지는 안보려고!!

} catch (SQLException e) {

// TODO: handle exception

}

try {

pstmt.close();

} catch (SQLException e) {

// TODO: handle exception

e.printStackTrace();

}

try {

con.close();

} catch (SQLException e) {

 

e.printStackTrace();

// TODO: handle exception

}}

}

 

 

PuftDBManager는 Connect와 Close기능이 코드가 길어서

임의로 만들어 놓은 객체입니다.

 

마지막으로 Controller를 살펴보겠습니다.

 

DAO d = new DAO();

ConsoleScreen cs = new ConsoleScreen();

PuftDBManager PM = new PuftDBManager();

if(option == 1) {

cs.CheckRestaurant();

d.checkRestaurant();

Reservation r = cs.Reservation();

d.Booking(r.name, r.s, r.Phonenumber, r.Restaurant);}

 

옵션이 1번인 경우 예약 가능한 레스토랑을 먼저 확인하고 (3번 옵션)

예약에 대한 콘솔을 출력 (cs.Reservation)

예약을 진행(d.Booking)합니다.

'Java > 실습' 카테고리의 다른 글

[Java] 전체 확인  (0) 2025.01.08
[Java] 매장 등록  (0) 2025.01.08
[Java] 맛집 탐색  (2) 2024.12.20
[Java] 지하철 - JSON 실습  (0) 2024.12.19
[Java] 미세먼지 - 종합 실습  (0) 2024.12.18