이전 실습에 이어서 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 |