Tải bản đầy đủ (.docx) (22 trang)

Báo cáo môn Hệ quản trị cơ sở dữ liệu oracle, đề tài quản lý khách sạn trên oracle

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (483.59 KB, 22 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG
QUẢN LÝ THUÊ TRẢ PHÒNG KHÁCH SẠN
GVHD: TS. Nguyễn Thành Sơn
Sinh viên thực hiện:
Trần Nhật Tiền 11110143
Cáp Thị Hằng 11110039
1
LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn TS. Nguyễn Thành Sơn đã tận tình hướng dẫn chúng
em qua từng buổi học trên lớp cũng như những buổi nói chuyện, thảo luận về các vấn đề
liên quan đến môn học cũng như những hành trang cần thiết mà em cần phải trang bị cho
con đường vào đời của mình. Nếu không có những lời hướng dẫn, dạy bảo của thầy thì
em nghĩ bài thu hoạch này của em rất khó có thể hoàn thiện được. Một lần nữa, em xin
chân thành cảm ơn thầy.
Lời cuối cùng, chúng em xin kính chúc Thầy TS. Nguyễn Thành Sơn thật dồi dào sức
khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức
cho thế hệ mai sau.
Trân trọng.
TP.HCM, ngày 02 tháng 12 năm 2014
Nhóm sinh viên thực hiện
Trần Nhật Tiền 111110143
Cáp Thị Hăng 11110039
2
MỤC LỤC
3
NỘI DUNG THỰC HIỆN


1. Database diagram:
Cơ sở dữ liệu gồm có 8 bảng: KHACHHANG (khách hàng), PHIEUTHUEPHONG
(phiếu thuê phòng), CHITIETTHUEPHONG (chi tiết thuê phòng), PHONG (phòng),
LOAIPHONG (Loại phòng), DICHVU (dịch vụ), CHITIETSUDUNGDICHVU (chi tiết
sử dụng dịch vụ), HOADON (Hoá đơn). Quan hệ giữa các bảng được thể hiện như hình
trên.
4
2. Contsraints (Ràng buộc)
2.1. Ràng buộc trên bảng KhachHang:
 Câu lệnh
CONSTRAINT "KHACHHANG_CHK_GIOITINH" CHECK (
GioiTinh ='Nam' or GioiTinh='Nu')
 Giải thích
Ràng buộc này chỉ cho phép trường “GioiTinh” nhận hai giá trị là “Nam”,
“Nu”
2.2. Ràng buộc trên bảng Phong:
 Câu lệnh
CONSTRAINT PHONG_CHK1 CHECK (TinhTrang=1 or TinhTrang =0)
 Giải thích:
Ràng buộc này chỉ cho phép trường “TinhTrang” nhận giá trị 1 hoặc 0.
2.3. Ràng buộc trên bảng PhieuThuePhong:
 Câu lệnh:
CONSTRAINT "PHIEUTHUEPHONG_CHK_TRANGTHAI"
CHECK (TrangThai=0 or TrangThai=1)
 Giải thích: (tương tự mục 2.1. và 2.2.);
3. Triggers
3.1. Trigger trên bảng HoaDon
Tạo sequence: identity3_Seq
create sequence IDENTITY3_SEQ
start with 1 increment by 1 nomaxvalue;

Tạo trigger:
Giải thích: trigger tạo trường MaHoaDon tự tăng giá trị. Mỗi khi một thêm một hoá
đơn mới, thì trigger sẽ thực hiện tạo một MaHoaDon mới tăng một đơn vị trước ghi
câu lệnh insert được thực hiện.
5
CREATE OR REPLACE TRIGGER IDENTITY_HOADON
BEFORE INSERT ON HOADON
FOR EACH ROW
BEGIN
SELECT IDENTITY3_SEQ.nextval INTO :NEW.MAHOADON FROM DUAL;
END;
4. Stored procedures
4.1. Thêm khách hàng mới

4.2. Cập nhập thông tin khách hàng
4.3. Thêm phòng mới:
6
CREATE OR REPLACE PROCEDURE SPTHEMKHACHHANG
( p_TenKH IN VARCHAR2,
p_GioiTinh IN VARCHAR2,
p_CMND IN VARCHAR2,
p_SDT IN VARCHAR2
) IS
BEGIN
insert into KhachHang(TenKH,GioiTinh,CMND,SDT)
values (p_TenKH,p_GioiTinh,p_CMND,p_SDT);
END SPTHEMKHACHHANG;
CREATE OR REPLACE PROCEDURE spCapNhatKhachHang (
p_MaKH in NUMBER,
p_TenKH in VARCHAR2,

p_GioiTinh in VARCHAR2,
p_CMND in CHAR,
p_SDT in VARCHAR2)
IS
BEGIN
Update KhachHang set
TenKH=p_TenKH,
GioiTinh=p_GioiTinh,
CMND=p_CMND,
SDT= p_SDT
where MaKH=p_MaKH;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE spThemPhong (
p_MaPhong IN NUMBER,
p_MaLoaiPhong IN NUMBER,
p_TinhTrang IN NUMBER)
IS
BEGIN
insert into Phong(MaPhong,MaLoaiPhong,TinhTrang)
values (p_MaPhong,p_MaLoaiPhong,p_TinhTrang);
COMMIT;
END;
4.4. Cập nhập thông tin phòng:
7
CREATE OR REPLACE PROCEDURE spCapNhatPhong (
p_MaPhong IN NUMBER,
p_MaLoaiPhong IN NUMBER,
p_TinhTrang IN NUMBER)
IS

BEGIN
Update Phong set MaLoaiPhong=p_MaLoaiPhong,
TinhTrang=p_TinhTrang
where MaPhong=p_MaPhong;
COMMIT;
END;
4.5. Xoá thông tin phòng:
4.6. Thêm loại phòng:
8
CREATE OR REPLACE PROCEDURE spXoaPhong (
p_MaPhong IN NUMBER
)
IS
BEGIN
Delete From Phong where MaPhong=p_MaPhong;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE spThemLoaiPhong (
p_MaLoaiPhong in number,
p_LoaiPhong in VARCHAR2,
p_GiaPhong in FLOAT)
IS
BEGIN
insert into LoaiPhong(maloaiphong,LoaiPhong, giaphong)
values (p_MaLoaiPhong,p_LoaiPhong,p_GiaPhong);
COMMIT;
END;
4.7. Cập nhập loại phòng:
4.8. Xoá loại phòng:
9

CREATE OR REPLACE PROCEDURE spCapNhatLoaiPhong (
p_MaLoaiPhong in number,
p_LoaiPhong in VARCHAR2,
p_GiaPhong in FLOAT)
IS
BEGIN
Update LoaiPhong set
LoaiPhong=p_LoaiPhong,
giaphong=p_GiaPhong
where MaLoaiPhong=p_MaLoaiPhong;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE spXoaLoaiPhong (
p_MaLoaiPhong in number)
IS
BEGIN
Delete From LoaiPhong
where MaLoaiPhong=p_MaLoaiPhong;
COMMIT;
END;
4.9. Thêm phiếu thuê phòng:
4.10. Thêm chi tiết thuê phòng
10
CREATE OR REPLACE PROCEDURE SPThemPhieuThuePhong (
p_MaPhong in NUMBER,
p_NgayThue in DATE,
p_TinhTrang in NUMBER)
IS
BEGIN
SAVEPOINT AA;

INSERT INTO phieuthuephong(maphong, ngaythue, trangthai)
VALUES (p_maphong, p_ngaythue, p_tinhtrang);
UPDATE Phong SET TinhTrang= 1 WHERE
MaPhong=p_MaPhong;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO AA;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE
SPTHEMCHITIETTHUEPHONG (
p_MaSoPhieu in NUMBER,
p_MaKH in NUMBER
)
IS
BEGIN
insert into ChiTietThuePhong(masophieu,MaKH)
values (p_MaSoPhieu,p_MaKH);
COMMIT;
END;
4.11. Thêm sử dụng dịch vụ:
4.12. Xoá sử dụng dịch vụ:
11
CREATE OR REPLACE PROCEDURE spThemSuDungDichVu (
p_MaSoPhieu in number,
p_MaDichVu in number,
p_NgaySuDung date,
p_Soluong number
)
IS

BEGIN
insert into ChiTietSuDungDichVu(MaSoPhieu,MaDichVu,NgaySuDung,SoLuong)
values (p_MaSoPhieu,p_MaDichVu,p_NgaySuDung,p_Soluong);
END;
CREATE OR REPLACE PROCEDURE spXoaSuDungDichVu (
P_MaSoPhieu in NUMBER,
P_MaDichVu in NUMBER
)
IS
BEGIN
delete from ChiTietSuDungDichVu
where masophieu=P_MaSoPhieu
and madichvu = p_madichvu;
COMMIT;
END;
4.13. Xác nhận trả phòng:
12
CREATE OR REPLACE PROCEDURE SPXacNhanTraPhong (
p_MaSoPhieu in NUMBER,
p_MaPhong in NUMBER,
p_MaHoaDon in date,
p_TienPhong in float,
p_TienDichVu in float)
IS
BEGIN
SAVEPOINT AA;
update PhieuThuePhong set TrangThai=1,NgayTra = SYSDATE
where MaSoPhieu=p_MaSoPhieu;

update Phong set TinhTrang= 0 where MaPhong=p_MaPhong;


insert into HoaDon(MaSoPhieu,NgayLapHD,TienPhong, TienDichVu)
values(p_MaSoPhieu,p_MaHoaDon,p_TienPhong,p_TienDichVu);

EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO AA;
COMMIT;
END;
4.14. Thêm dịch vụ mới:
13
CREATE OR REPLACE PROCEDURE spThemDichVu (
p_MaDichVu in number,
p_TenDichVu in VARCHAR2,
p_DonGia in float)
IS
BEGIN
insert into DichVu(MaDichVu,TenDichVu,DonGia)
values (p_MaDichVu,p_TenDichVu,p_DonGia);
COMMIT;
END;
4.15. Cập nhật thông tin dịch vụ:
4.16. Xoá dịch vụ
14
CREATE OR REPLACE PROCEDURE spCapNhatDichVu (
p_MaDichVu in number,
p_TenDichVu in VARCHAR2,
p_DonGia in float)
IS
BEGIN

Update DichVu SET
TenDichVu=p_TenDichVu,
DonGia=p_DonGia
where MaDichVu=p_MaDichVu;
COMMIT;
END;
CREATE OR REPLACE PROCEDURE spXoaDichVu (
p_MaDichVu in number)
IS
BEGIN
Delete From dichvu
where madichvu=p_MaDichVu;
COMMIT;
END;
4.17. Thống kê
Lưu ý: Trong stored procedure này có gọi một function tên là “tinhtongngay(param)” ở
mệnh đề select.
15
CREATE OR REPLACE PROCEDURE spThongKe (
p_NgayLapHD in DATE,
o_SoLuotKhach out Number,
o_TongTienPhong out Number,
o_TongTienDichVu out Number,
o_TongDoachThu out Number)
IS
BEGIN
SELECT COUNT(mahoadon) ,SUM(tienphong) ,SUM(tiendichvu),
tinhtongtien(p_NgayLapHD)
INTO o_SoLuotKhach,o_TongTienPhong,o_TongTienDichVu,o_TongDoachThu
FROM HoaDon

WHERE NgayLapHD LIKE p_NgayLapHD ;
COMMIT;
END;
5. Create Function
Tạo một function tính tổng tiền theo một ngày lập hoá đơn.
Câu lệnh:
Demo function:
16
CREATE OR REPLACE FUNCTION TINHTONGTIEN (p_NgayLapHD DATE)
RETURN FLOAT
IS
v_TongTien Float;
BEGIN
SELECT SUM(TienPhong+TienDichVu) into v_tongtien
FROM HoaDon
WHERE ngaylaphd like p_ngaylaphd;
RETURN v_TongTien;
END TINHTONGTIEN;
6. Create Transaction
Giải thích:
Trong stored procedure “spxacnhantraphong” ta thực hiện 3 câu lệnh truy vấn như
hình trên. Ba câu lệnh này phải nằm trong một transaction. Ta đặt một điểm
“SavePoint” là “AA”. Nếu tất cả các câu lệnh đều hoàn tất thì “commit” không thì ta
sẽ “Rollback” lại vị trí “AA”.
17
CREATE OR REPLACE PROCEDURE SPXacNhanTraPhong (
p_MaSoPhieu in NUMBER,
p_MaPhong in NUMBER,
p_MaHoaDon in date,
p_TienPhong in float,

p_TienDichVu in float)
IS
BEGIN
SAVEPOINT AA;
update PhieuThuePhong set TrangThai=1,NgayTra = SYSDATE
where MaSoPhieu=p_MaSoPhieu;

update Phong set TinhTrang= 0 where MaPhong=p_MaPhong;

insert into HoaDon(MaSoPhieu,NgayLapHD,TienPhong, TienDichVu)
values(p_MaSoPhieu,p_MaHoaDon,p_TienPhong,p_TienDichVu);

EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO AA;
COMMIT;
END;
7. Create View
7.1. View chi tiết thuê phòng
Giải thích:
Tạo view có tên là V_CHITIETTHUEPHONG. View này sẽ hiển thị thông tin
chi tiết về các phòng đang thuê gồm mã phòng, mã phiếu, tên khách hàng, số
CMND, ngày thuê phòng, và giá phòng.
7.2. View chi tiết dịch vụ phòng
Giải thích :
Tạo view có tên là V_CHITIETDICHVUPHONG. View này sẽ hiển thị chi tiết
thông tin sử dụng dịch vụ của các phòng đang thuê.
18
CREATE VIEW V_CHITIETTHUEPHONG ("TENKH", "CMND", "MAPHONG",
"MASOPHIEU", "NGAYTHUE", "GIAPHONG")

AS
Select
TenKH,CMND,PhieuThuePhong.MaPhong,ChiTietThuePhong.masophieu,NgayThue,GiaPhong
from KhachHang,ChiTietThuePhong,PhieuThuePhong,Phong,LoaiPhong
where KhachHang.MaKH=ChiTietThuePhong.MaKH
and ChiTietThuePhong.masophieu=PhieuThuePhong.masophieu
and PhieuThuePhong.MaPhong=Phong.MaPhong
and Phong.MaLoaiPhong=LoaiPhong.MaLoaiPhong
and trangthai=0;
CREATE VIEW V_CHITIETDICHVUPHONG ("MAPHONG", "MASOPHIEU",
"TENDICHVU", "NGAYSUDUNG", "SOLUONG", "DONGIA")
AS
select MaPhong,PhieuThuePhong.masophieu,TenDichVu,NgaySuDung,SoLuong,DonGia
from ChiTietSuDungDichVu, PhieuThuePhong,DichVu
where ChiTietSuDungDichVu.masophieu=PhieuThuePhong.masophieu
and DichVu.MaDichVu=ChiTietSuDungDichVu.MaDichVu
and trangthai=0;
8. Create index
Tạo một index trên cột Tên khách hàng trong bảng khách hàng để tăng tốc độ truy
vấn.
Câu lệnh:
CREATE INDEX INDEX_TENKHACHHANG
ON KHACHHANG (TENKH);
Demo index vừa tạo:
19
9. Phân quyền user:
Tạo user:
CREATE USER nhattien IDENTIFIED BY 123456 ;
Cấp quyền cho user:
- GRANT create session to nhattien;

Giải thích: cấp quyền này để user ‘nhattien’ có thể truy cập vào database
Tạo role:
CREATE ROLE role_khachhang;
Cấp quyền cho role:
GRANT SELECT, UPDATE, INSERT, DELETE ON KhachHang To
role_khachhang;
GRANT SELECT ON V_KHACHHANG To role_khachhang;
Giải thích: cấp các quyền select, update, insert, delete trên bảng khách hàng, cấp
quyền select trên view ‘V_khachHang’ cho role ‘role_khachhang’.
Gán role cho user:
GRANT role_khachhang TO nhattien;
20
10. Kết nối hai máy
Bước 1: Tiến hành đặt địa chỉ IP tĩnh cho hai máy và Ping kết nối để kiểm tra kết nối
thành công hay không.
Bước 2: Oracle của máy client truy cập vào cơ sở dữ liệu của máy server, các bước
được mô tả trong hình bên dưới
21
Mặt khác: Khi ta muốn kết nối máy client đến database của máy server thông qua ứng
dụng đã xây dưng. Ta chỉ cần gán địa chỉ IP máy server, tên user, mật khẩu bên server
đã cấp cho vào chuỗi kết nối như sau:
"Data Source=(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=192.168.1.3)(PORT=1521))) (CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=orcl)));" + "User Id= Hang1;Password=capthihang;”
22

×