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

Đồ án xây dựng phần mềm quản lý khách sạn

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 (1.49 MB, 36 trang )

Báo cáo của pdkpro


Lời Cảm On


MỤC LỤC
I.

II.

III.

IV.

Giới Thiệu.
1. Tổng Quan Về Chương Trình.
2. Yêu Cầu Bài Toán.
3. Thuật Toán Quản Lý.
Giải Quyết Bài Toán :
1. Mô Hình DB Tổng Quát.
2. Cách Biểu Diển Dữ Liệu.
3. DaTa.
4. Phân Tích Xử Lý Yêu Cầu.
Các Lớp Xử Lý.
1. Sắp Xếp.
a. addSuKienChoTb
b. LocCacPhanTuNgay
c. LocCacPhanTuKhacNgay
d. AddLaiVaoHangNew
e. KiemTraCachSapXep


2. Các Lớp Tìm Kiếm.
a. Thuật Toán.
b. Cài Đặt.
Kết Luận.


Đề Bài
------------------------------------------------------------------------------------

Xây dựng phần mềm quản lý khách sạn
• Quản lý nhân viên.
• Quản lý các phòng.
• Quản lý khách.
• Quản lý các dịch vụ của khách.



Mô tả-yêu cầu:
o Đọc dữ liệu từ DB (sử dụng SQL Oracle).
o Hiển thị thông tin lên giao diện.
o Bổ sung thêm 1 đối tượng vào danh sách.
o Chỉnh sửa các đối tượng.
o Xóa 1 hay nhiều đối tượng.
o Sắp xếp các đối tượng.
o Tìm kiếm theo nhiều hướng.
o In ra hóa đơn, tính tiền của từng khách.
o Tính tiền dựa trên số ngày và dịch vụ mà khách hang yêu cầu.
o Các phòng được phân thành các loại với giá và sức chứa khác
nhau, yêu cầu tính tiền dựa trên giá của từng phòng.
o Có user đăng nhập.

o Tạo tài khoản quản lý.
o Thay đổi mật khẩu tài khoản quản lý.


Giới Thiệu:

I.

Tổng Quan Về Chương Trình.
Yêu Cầu Bài Toán.
Thuật Toán Quản Lý.
Dữ liệu:
Dữ liệu được đưa lên các mảng data nằm trong constant – “nhanVienAray,
phongAray, dichVuAray, khachAray” chúng là 1 mảng động dạng ArrayList.
Các thao tác được tiến hành trên “các mảng data” khi nào kết thúc hoặc người
dùng muốn lưu kết quả thì “các mảng data” sẽ được update vào lại DB.
 Xử Lý:
- Người dùng được thực hiện các thao tác xử lý: thêm, xóa, sửa,
chèn, tìm kiếm, sắp xếp … đảm bảo yêu cầu bài toán đặt ra.
- Các cấu hình mặc định đều lưu ở file ngoài “properties” ,lớp
constant có nhiệm vụ đọc chúng mỗi khi chạy.
1.
2.
3.


-

II.


Giải Quyết Bài Toán :
1. Mô hình DB tổng quát:

2.

Cách biểu diển dữ liệu:
• Trong DB các bảng được đặt tên có kèm _tbl phía sau. Vd
user_tbl.











3.
a.

Biến dữ liệu trong mỗi bảng được bắt đầu bởi ký tự đầu của tên
bảng. vd u_id, u_ten (trong bảng user_tbl).
Các biến liên kết bảng sẽ bắt đầu bằng ký tự của bảng cộng với
tên biến của bảng cần liên kết. vd kh_p_id (liên kết giữa bảng
khachhang_tbl và bảng phong_tbl).
Các biến trong Project được đặt tên với chữ cái đầu viết thường,
viết hoa các chữ cái đầu của các từ tiếp theo. Vd : findsPhong.
Các hàm sẽ viết hoa tất cả chữ cái đầu vd: AddDuLieuDau()

Các biến là Label,Button,…. Được đặt tên với tên componant
trước tiên, tên sẽ được cách ra bởi dấu gạch dưới. Vd Jbutton
-> Jbt_name.
Các hàm truy xuất dữ liệu trong DB được định nghĩa trong lớp
constant_Cls.
Lớp constant_Cls lấy dữ liệu từ file properties.properties được
định nghĩa bên ngoài.

Data:
user:

b.

nhân viên:

c.

phòng:


d.

khách hang:

e.

dịch vụ:


4. Phân Tích Xử Lý Yêu Cầu.


Đọc từ DB:
Sử dụng các hàm OpenConnect(), CloseConnect().. trong lớp
constant_Cls để mở và đóng các kết nối đến DB.
Sử dụng các hàm getDB…, CheckDB(), SetDB(), Update(), Delete(),
Save()… trong lớp Constant_Cls để tương tác với dữ liệu trong DB.
Có 4 Object tương ứng với 4 loại dữ liệu Phong_cls, NhanVien_Cls,
KhachHang_Cls, DichVu_Cls được định nghĩa để lấy DB thành từng đối tượng
và đưa vào mảng.

Hiển thị lên giao diện:
- Dùng panel hiển thị với kiểu layout cardLayout chứ 4 panel
PnQLNV, PnQLP3, PNQLKH, PnQLDV để hiển thị mỗi khi ta
chọn các button QLNhanVien, QLPhong, QLKhach Hang,
QLDdich Vu.
- Hiển thị được chia làm 2 loại: bảng (ql Nhan Vien, ql Khach
Hang, ql Dich VU) và liệt kê đối tượng tương tác (Phong).
- Ở phần bảng các dữ liệu sau khi load sẽ được đưa vào vector
“hang” nằm trong lớp QuanLyKhachSan để hiển thị lên thông qua
các hàm ShowPnQLKH(), ShowPnQLDV(), ShowPnQLNV().


-

-

Ở phần phòng thì các phòng sẽ được đưa load thành mảng rồi đưa
vào hàm ShowPnQLP() phân chia ra thành từng loại và show ra,



mỗi phòng là 1 đối tượng có thể tương tác trực tiếp không cần
thông qua các bảng.
-



Các hoạt động: thêm, sửa, xóa.
- Dữ liệu được chỉnh sửa ngay trên các mảng chứ trong
Constants, sau khi hoàn thành các chỉnh sửa chương trình
cho phép lưu lại vào DB bằng cách vào File -> save, hoặc
lúc tắt chương trình, thống sẽ hỏi “bạn có muốn lưu chỉnh
sửa k? ” lúc đó chúng ta có thể tương tác với nó.


-



Tìm kiếm: chương trình cung cấp nhiều loại tìm kiếm trên
khung tìm kiếm cho người dùng có thể lựa chọn:


Và mặc định sẽ là tìm với tất cả. Chương trình sẽ bắt đầu tìm kiếm khi có thay
đổi ký tự trên textFeild Tìm kiếm, và nó sẽ trả về 1 mảng các giá trị tìm
được dưới dang ArrayList<Object> và được giao diện hiển thị lên(đã nói
ở trên).
• Sắp Xếp:
- ở các bảng việc sắp xếp được modify từ cách sắp xếp
mặc định của Table. Muốn Sắp xếp trường vào thì kích
vào Colum của trường đó, dữ liệu sau khi sắp xếp được

trả về và modify lại vector hàng. Sau đó gọi các hàm
Show…() tương ứng để hiển thị lên lại trên bảng.
- Sắp xếp ở Phòng được chia làm 3 loại “có khách, còn
trống và bảo trì” -> được hiển thị ngay trên giao diện
phòng.




Hóa đơn tính tiền:
- Nếu trường “ngày đi “ còn trống thì hóa đơn sẽ tính là
chính thời điểm ta nhấn vào nút hóa đơn.
- Tiền sẽ tính bằng tổng tiền phòng + với tổng tiền dịch vụ
mà khách hàng sử dụng mà chưa thanh toán.


-

Chọn “xong” để thanh toán thành công “hoặc đóng cửa sổ” để thoát.
• User:
- Về phần User thì chỉ có User người dùng, không phân các
quyền khác.
- Có thể thực hiện các chức năng như thêm, chỉnh sửa mật khẩu,
thay đổi người dùng.
- (Phần này em chỉ làm thêm cho chương trình khỏi trống chứ
chưa hoàn thiện).


III.
a.


Các Lớp Xử Lý:
1. Sắp Xếp ( SapXep_Cls ):
AddSuKienChoTB:
public static void addSuKienChoTb(JTable fTable, int id) {
RowSorter<TableModel> fSorter = new
TableRowSorter<>(fTable.getModel());;
fTable.setRowSorter(fSorter);
fTable.getTableHeader().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int column = fTable.getColumnModel().getColumnIndexAtX(e.getX());
Vector<Vector> hangNew = new Vector<Vector>();
//lay cac phan tu cua cot ra de sap xep
Vector v = new Vector();
Vector<Vector> vNull = new Vector<Vector>();//vector chứa phần tử
null
if ((id == 1 && column == 4)||(id == 3 && column == 6)||id == 2 &&
(column == 8||column==9)) {
LocCacPhanTuNgay(v, vNull, column);
if (v.size() < 1)//neu null het thi khỏi sắp xếp
{
return;
}
} else {
LocCacPhanTuKhacNgay(v, vNull, column);
if (v.size() < 1)//neu null het thi khỏi sắp xếp
{


return;

}
Collections.sort(v);//sap xep
}
//reset lai hang vaf tạo 1 bảng coppy của hang để làm dk ss add vô lại
AddLaiVaoHangNew(hangNew, column, v, vNull);
qlks.getHang().removeAllElements();
//tiến hành kiểm tra và sắp xếp
KiemTraCachSapXep(hangNew);
for (int i = 0; i < hangNew.size(); i++) {
qlks.getHang().addElement(hangNew.get(i));
}
qlks.ShowSauKhiSX(id);
}
});
}
b. LocCacPhanTuNgay:

public static void LocCacPhanTuNgay(Vector v, Vector<Vector> vNull, int column)
{
Vector<Date> vNgay = new Vector<Date>();
try {
for (int i = 0; i < qlks.getHang().size(); i++) {
if (qlks.getHang().get(i).get(column) != null) {
vNgay.addElement(constant_Cls.formatTime.parse(qlks.getHang().get(i).get(colum
n).toString()));
} else {
vNull.addElement(qlks.getHang().get(i));
qlks.getHang().removeElementAt(i);
i--;//remove xg thì phai giảm i xún
}

}
Collections.sort(vNgay);
for (int i = 0; i < vNgay.size(); i++) {
v.addElement(constant_Cls.formatTime.format(vNgay.get(i)));
}
} catch (Exception e) {
System.out.println("sap xep loi date");
}
}
c. LocCacPhanTuKhacNgay:
public static void LocCacPhanTuKhacNgay(Vector v, Vector<Vector> vNull, int column)
{
for (int i = 0; i < qlks.getHang().size(); i++) {
if (qlks.getHang().get(i).get(column) != null) {
v.addElement(qlks.getHang().get(i).get(column));
} else {


vNull.addElement(qlks.getHang().get(i));
qlks.getHang().removeElementAt(i);
i--;//remove xg thì phai giảm i xún
}
}
}
d. AddLaiVaoHangNew:

public static void AddLaiVaoHangNew(Vector<Vector> hangNew, int column,
Vector v, Vector<Vector> vNull) {
for (int j = 0; j < v.size(); j++) {
for (int i = 0; i < qlks.getHang().size(); i++) {

if (qlks.getHang().get(i).get(column).toString().equals(v.get(j).toString())) {
if (hangNew.indexOf(qlks.getHang().get(i)) < 0) {//neu chua co thi them
tiep vo
hangNew.addElement(qlks.getHang().get(i));
}
}
}
}
//add vo đầu danh sách khách hang
if (vNull.size() > 0) {
for (int i = 0; i < vNull.size(); i++) {
hangNew.addElement((Vector) vNull.get(i));
}
}
}
e. KiemTraCachSapXep:
public static void KiemTraCachSapXep(Vector<Vector> hangNew) {
if (cfQLNV) {//kiem tra neu bam lan 1 thi cho no sx tang, bam lan 2 thi cho no sap
xep giam
cfQLNV = false;
} else {
//sx lai
Vector<Vector> temp = (Vector<Vector>) hangNew.clone();
hangNew.removeAllElements();//xoa tat ca phan tu va them theo chiều nguocj lại
int j = temp.size() - 1;
for (int i = 0; i < temp.size(); i++) {
hangNew.addElement(temp.get(j--));
if (j < 0) {
break;
}

}
//cho co lai bang true
cfQLNV = true;
}
}
2. Tim Kiếm:
a. Tim Dich Vu:
/*
* To change this license header, choose License Headers in Project Properties.


* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Actions;
import Objects.DichVu_cls;
import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import quanlykhachsan.constant_Cls;
/**
*
* @author pdkpro
*/
public class TimDichVu_Cls {
public static ArrayList<Integer> phanTu;
public String find;
public static ArrayList<DichVu_cls> fileTimKiem;

//public static int phanTu;
//public static boolean xoa = false;
public TimDichVu_Cls() {
}
public static void find_All(String tk) {
find_ID(tk);
find_Ten(tk);
find_Gia(tk);
find_IDKhach(tk);
find_IDPhong(tk);
find_PhongDat(tk);
find_PhongNhan(tk);
find_TenKhach(tk);
find_ThoiGian(tk);
}
public static void find_ID(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String nhanVien_id = hh.getId() + "";
if ((nhanVien_id.length() >= find.length()) && (nhanVien_id.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);


}
}
} catch (Exception e) {

}
i++;
}

}

public static void find_IDKhach(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String nhanVien_id = hh.getKh_id() + "";
if ((nhanVien_id.length() >= find.length()) && (nhanVien_id.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_IDPhong(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String nhanVien_id = hh.getP_id() + "";
if ((nhanVien_id.length() >= find.length()) && (nhanVien_id.indexOf(find) >= 0)) {

if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_Ten(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String ten = hh.getTen();
if ((ten.length() >= find.length()) && (ten.indexOf(find) >= 0)) {


if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}

}

}
} catch (Exception e) {
}
i++;


}
public static void find_TinhTrang(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String ten = hh.getTinhTrang();
if ((ten.length() >= find.length()) && (ten.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_TenKhach(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String ten = hh.getTenKhach();
if ((ten.length() >= find.length()) && (ten.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}

}
} catch (Exception e) {
}
i++;
}
}
public static void find_ThoiGian(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {


}

DichVu_cls hh = constant_Cls.dichVuAray.get(i);
Date date = hh.getThoiGian();
String dateString = constant_Cls.formatTime.format(date);
if ((dateString.length() >= find.length()) && (dateString.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;

}
public static void find_Gia(String find) {
int i = 0;

while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String gia = hh.getGia() + "";
if ((gia.length() >= find.length()) && (gia.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_PhongDat(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String diaChi = hh.getTenPhong();
if ((diaChi.length() >= find.length()) && (diaChi.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;

}
}


public static void find_PhongNhan(String find) {
int i = 0;
while (i < constant_Cls.dichVuAray.size()) {
try {
DichVu_cls hh = constant_Cls.dichVuAray.get(i);
String congViec = hh.getTenPhongNhan();
if ((congViec.length() >= find.length()) && (congViec.indexOf(find) >= 0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static ArrayList<DichVu_cls> get_File_Tim_Kiem() {
return fileTimKiem;
}
//kiem tra xem hanghoa da dc add vo chua, neu add vao roi thi tra ve true
public static boolean checkIn(int i) {
for (int j = 0; j < phanTu.size(); j++) {
if (i == phanTu.get(j)) {
return true;
}

}
return false;
}
}
b. Tim Khach Hang:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Actions;
import Objects.KhachHang_cls;
import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import quanlykhachsan.constant_Cls;
/**


*
* @author pdkpro
*/
public class TimKhachHang_Cls {
public static ArrayList<Integer> phanTu;
public String find;
public static ArrayList<KhachHang_cls> fileTimKiem;
//public static int phanTu;
//public static boolean xoa = false;

public TimKhachHang_Cls() {
}
public static void find_All(String tk) {
find_ID(tk);
find_Ten(tk);
find_GioiTinh(tk);
find_SDT(tk);
find_NgayDen(tk);
find_NgayDi(tk);
find_TinhTrang(tk);
find_SoNguoi(tk);
find_PhongThue(tk);
}
public static void find_ID(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
String Kh_id = hh.getId()+"";
if ((Kh_id.length() >= find.length()) && (Kh_id.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}

public static void find_Ten(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);


}

String ten = hh.getTen();
if ((ten.length() >= find.length())&&(ten.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;

}
public static void find_GioiTinh(String find) {
int i = 0;

}

while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
String gioiTinh = hh.getGioiTinh();

if ((gioiTinh.length() >= find.length()) && (gioiTinh.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}

public static void find_NgayDen(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
Date date = hh.getNgayDen();
String dateString = constant_Cls.formatTime.format(date);
if ((dateString.length() >= find.length()) && (dateString.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}



public static void find_SDT(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
String sdt = hh.getDienthoai()+"";
if ((sdt.length() >= find.length()) && (sdt.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_CMND(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
String sdt = hh.getCmnn()+"";
if ((sdt.length() >= find.length()) && (sdt.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}

} catch (Exception e) {
}
i++;
}
}
public static void find_NgayDi(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
Date date = hh.getNgayDi();
String dateString = constant_Cls.formatTime.format(date);
if ((dateString.length() >= find.length()) && (dateString.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}


i++;
}
}
public static void find_TinhTrang(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);

String tinhTrang = hh.getTinhTrang();
if ((tinhTrang.length() >= find.length()) && (tinhTrang.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_SoNguoi(String find) {
int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
String soNguoi = hh.getSoNguoi()+"";
if ((soNguoi.length() >= find.length()) && (soNguoi.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}
} catch (Exception e) {
}
i++;
}
}
public static void find_PhongThue(String find) {

int i = 0;
while (i < constant_Cls.khachAray.size()) {
try {
KhachHang_cls hh = constant_Cls.khachAray.get(i);
String phongThue = hh.getPhongThue();
if ((phongThue.length() >= find.length()) && (phongThue.indexOf(find)>=0)) {
if (!checkIn(i)) {
fileTimKiem.add(hh);
phanTu.add(i);
}
}


×