1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng lập trình hướng đối tượng java kết nối cơ sở dữ liệu (p2) TS nguyễn mạnh hùng

37 886 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 540,31 KB

Nội dung

Bài toán đặt phòng khách sạn 2 Yêu cầu 1:  Thiết kế các bảng CSDL và quan hệ giữa các bảng cho bài toán  Định nghĩa các lớp đối tượng cho bài toán gọi là lớp thực thể  Cài đặt phươ

Trang 1

Lập trình hướng đối tượng

Java kết nối cơ sở dữ liệu

Giảng viên: TS Nguyễn Mạnh Hùng

Học viện Công nghệ Bưu chính Viễn thông (PTIT)

Trang 2

Case study

Trang 4

Bài toán đặt phòng khách sạn (2)

Yêu cầu (1):

 Thiết kế các bảng CSDL và quan hệ giữa

các bảng cho bài toán

 Định nghĩa các lớp đối tượng cho bài toán

(gọi là lớp thực thể)

 Cài đặt phương thức thêm một phòng vào

khách sạn, thêm một khách hàng, và thêm một phiếu đặt phòng vào CSDL

 Cài đặt phương thức cập nhật thông tin

của 1 khách sạn, 1 phòng, 1 khách hàng, 1 phiếu đặt phòng

Trang 5

Bài toán đặt phòng khách sạn (3)

Yêu cầu (2):

 Cài đặt phương thức tìm kiếm phòng trống

theo giá tiền, ngày check in, ngày check out

 Cài đặt phương thức tìm kiếm các phiếu

đặt phòng trong một của một ngày xác định

 Cài đặt phương thức tìm kiếm khách hàng

đặt phòng theo số phòng, hạng phòng

 Cài đặt phương thức tính tổng doanh thu

của khách sạn trong một khoảng thời gian nhất định

Trang 6

Thiết kế CSDL

Trang 7

Đặt phòng (booking):

ID RoomID CustomerID StartDate EndDate Note

Trang 8

Quan hệ giữa các bảng

Trang 9

Thiết kế các lớp thực thể

Trang 10

Đặt phòng (Booking):

id room customer startDate endDate note

Trang 11

Quan hệ giữa các lớp

Trang 12

Cài đặt các lớp thực thể

Trang 13

Lớp Hotel

public class Hotel{ // lớp khách sạn

private String id ; // mã khách sạn

private String name ; // tên khách sạn

private int level ; // hạng khách sạn

private String address ; // địa chỉ

private String description ; // giới thiệu

private Room[] rooms ; // các phòng của khách sạn

// các phương thức khởi tạo

// các phương thức get/set

}

Trang 14

Lớp Room

public class Room{ // lớp phòng khách sạn

private String id ; // mã phòng khách sạn

private String level ; // hạng phòng

private float price ; // giá phòng

private String description ; // giới thiệu

// các phương thức khởi tạo

// các phương thức get/set

}

Trang 15

Lớp Customer

public class Customer{ // lớp khách hàng(người đặt phòng)

private String id ; // mã khách

private String name ; // tên khách

private String note ; // ghi chú về khách

// các phương thức khởi tạo

// các phương thức get/set

}

Trang 16

Lớp Booking

public class Booking{ // lớp phiếu đặt phòng

private String id ; // mã phiếu

private Customer customer ; // khách hàng

private Room room ; // phòng được đặt

private Date startDate ; // ngày checkin

private Date endDate ; // ngày checkout

private String note ; // ghi chú

// các phương thức khởi tạo

// các phương thức get/set

}

Trang 17

Lớp ControlDB

Trang 18

 Các phương thức yêu cầu trong đề bài có

liên quan đến nhiều lớp thực thể khác nhau → không thể để chúng vào các lớp thực thể

 → cho các phương thức liên quan đến xử

lí dữ liệu vào một lớp thao tác với DB

Trang 19

Lớp ControlDB

public class ControlDB{ // lớp thao tác với DB

private Connection conn ; // connection đến DB

private PreparedStatement preStmt ; // câu lệnh Prepare SQL private Statement stmt ; // câu lệnh xử lí SQL

private ResultSet rs ; // chứa kết quả trả về

// các phương thức khởi tạo

// không cần các phương thức get/set vì không nên chia sẻ

connection ra khỏi phạm vi lớp này!

}

Trang 20

Phương thức nối dữ liệu

public void getConnection(String dbClass , String dbUrl ) {

Trang 21

Các phương thức thêm mớikhách sạn, phòng, khách hàng, phiếu đặt phòng

Trang 22

Thêm mới 1 khách sạn (1)

public int addHotel(Hotel hotel ) {

// insert vào một hàng mới vào bảng hotel

String addString = "INSERT INTO hotel(name, level, address, description) VALUES(?,?,?,?)" ;

try {

preStmt = conn prepareStatement( addString );

preStmt setString(1, hotel getName());

preStmt setInt(2, hotel getLevel());

preStmt setString(3, hotel getAddress());

preStmt setString(4, hotel getDescription());

Trang 23

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

Trang 24

Thêm mới 1 khách sạn (3)

// insert vào các phòng của hotel vào bảng room

for(int i=0; i< hotel getRooms().length; i++){

String addString = "INSERT INTO room(hotelID, level, price, description) VALUES(?,?,?,?)" ;

try {

preStmt = conn prepareStatement( addString );

preStmt setInt(1, hotelID);

preStmt setString(2, hotel getRooms()[i].getLevel());

preStmt setFloat(3, hotel getRooms()[i].getPrice());

preStmt setString(4, hotel getRooms() [i].getDescription());

Trang 26

Các phương thức cập nhậtkhách sạn, phòng, khách hàng, phiếu đặt phòng

Trang 27

Cập nhật 1 phiếu đặt phòng

public void updateBooking(Booking booking ) {

// cập nhật một hàng trong bảng booking với id có sẵn

String updateStr = "UPDATE booking SET CustomerID = ?,

RoomID = ?, startDate = ?, endDate = ?, note = ? WHERE ID = ?" ; try {

preStmt = conn prepareStatement( updateStr );

preStmt setInt(1, booking getCustomer().getID());

preStmt setInt(2, booking getRoom().getID());

preStmt setDate(3, booking getStartDate());

preStmt setDate(4, booking getEndDate());

preStmt setString(5, booking getNote());

preStmt setInt(6, booking getID());

Trang 28

Bài tập (2)

• Cài đặt phương thức cập nhật một khách hàng, một

khách sạn hoặc một phòng trong 1 khách sạn

Trang 29

Các phương thức tìm kiếmkhách sạn, phòng, khách hàng, phiếu đặt phòng

Trang 30

Tìm kiếm phòng trống (1)

public Room[] searchRoom(int starLevel , String roomLevel , float

maxPrice , Date startDate , Date endDate ) {

String searchStr = "SELECT r.ID, r.level, r.price,

r.description FROM hotel h INNER JOIN room r ON h.ID = r.hotelID WHERE h.level = ? AND r.level = ? AND r.price <= ? AND NOT

EXISTS (SELECT * FROM booking b WHERE b.roomID = r.ID AND ((?

BETWEEN b.startDate AND b.endDate) OR (? BETWEEN b.startDate AND b.endDate )))" ;

Room[] results = null;

try {

preStmt = conn prepareStatement( searchStr );

preStmt setInt(1, starLevel );

preStmt setString(2, roomLevel );

preStmt setFloat(3, maxPrice );

preStmt setDate(4, startDate );

preStmt setDate(5, endDate );

rs = preStmt executeQuery();

Trang 31

} catch (ClassNotFoundException e) { e.printStackTrace();

} catch (SQLException e) { e.printStackTrace();

}

return results;

}

Trang 32

Bài tập (3)

• Cài đặt phương thức tìm kiếm khách hàng, khách sạn

hoặc phiếu đặt phòng thỏa mãn một số tiêu chí tương ứng với thuộc tính của mỗi lớp

• Viết chương trình nhập các tiêu chí tìm kiếm, sau đó gọi

các phương thức tìm kiếm này, và cuối cùng là in kết quả tìm kiếm được ra màn hình

Trang 33

Tính tổng doanh thu (dự kiến)

theo thời gian, theo khách sạn, theo phòng

Trang 34

Dự kiến doanh thu của ks (1)

public float incomeHotel(int hotelID , Date startDate , Date

endDate ) {

String searchStr = "SELECT SUM(r.price*(DATEDIFF(« dd »,

b.startDate, b.endDate))) FROM room r INNER JOIN booking b ON

b.roomID = r.ID WHERE (r.hotelID = ?) AND (b.startDate BETWEEN ? AND ?)" ;

float result;

try {

preStmt = conn prepareStatement( searchStr );

preStmt setInt(1, hotelID );

preStmt setDate(2, startDate );

preStmt setDate(3, endDate );

rs = preStmt executeQuery();

Trang 36

Bài tập (4)

• Cài đặt phương thức tính doanh thu dự kiến cho mỗi

phòng theo khoảng thời gian cho trước

• Viết chương trình nhập các tiêu chí tính toán doanh thu

dự kiến theo thời gian, sau đó gọi các phương thức này,

và cuối cùng là in kết quả ra màn hình

Trang 37

Questions?

Ngày đăng: 03/12/2015, 18:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w