Trong khoảng thời gian phục hồi lại đại dịch, liên tiếp những mô hình doanh nghiệp về khách sạn, nhà nghỉ được mở ra, việc xây dựng một phần mềm quản lý khách sạn không những nâng cao tr
GIỚI THIỆU
Tên dự án
Phần mềm quản lý khách sạn (Hotel Management)
Lý do chọn dự án
Hiện nay, ngành dịch vụ được xem là một trong những ngành có tiềm năng phát triển mạnh mẽ Do đó kinh doanh khách sạn cũng là một loại hình dịch vụ đang được chú trọng để phục vụ con người đồng thời vừa thu hút lượng khách du lịch đến Việt Nam, vừa tận dụng được những thuận lợi từ vị trí nước ta (danh lam thắng cảnh, địa danh nổi tiếng, ) và đặc biệt, vừa thu được lợi nhuận kinh tế cao.
Trong thực tế, hầu hết các khách sạn lớn mới có phần mềm quản lý còn các khách sạn vừa và nhỏ thì hầu như công việc đang phải làm một cách thủ công như sử dụng sổ sách, giấy tờ kết hợp với Microsoft Excel, để tính toán Và những phương pháp quản lý đó tốn khá nhiều thời gian, thất toán doanh thu, chi phí tốn kém
Sử dụng hệ thống quản lý khách sạn là giải pháp đang được rất nhiều nhà quản lý khách sạn tin tưởng sử dụng và nó cũng đã trở thành một trong những lợi thế cạnh tranh hiện nay
Xuất phát từ thực tế đó, nhóm chúng em đã quyết định lựa chọn đề tài “Phần mềm quản lý khách sạn” với hy vọng rằng nó sẽ góp phần giúp công việc quản lý trở nên hiệu quả hơn.
Mục đích dự án
Xây dựng một phần mềm giúp cho việc theo dõi, quản lý kinh doanh khách sạn trở nên nhanh hơn về mặt thời gian, tiết kiệm chi phí và đạt được sự chính xác cao trong việc tính toán doanh thu
Giúp sinh viên vừa nắm vững được kiến thức môn vừa học, vừa bồi dưỡng cho bản thân thêm kiến thức về nghiệp vụ quản lý trong các doanh nghiệp, công
2 ty góp phần nâng cao trình độ chuyên môn của mỗi cá nhân.
Phạm vi thực hiện
Dự án được thiết kế dành cho đối tượng sử dùng là chủ sở hữu khách sạn nhằm mục đích quản lý khách hàng và theo dõi hoạt động kinh doanh của tổ chức.
Phương pháp nghiên cứu thực hiện
Đọc một số tài liệu về phương pháp lập trình Python, trên cơ sở đó tiến hành phân tích thiết kế hệ thống quản lý khách sạn
Tham khảo, quan sát các phần mềm quản lý khách sạn trong thực tế.
NỘI DUNG
Cơ sở lý thuyết
1.1 Ngôn ngữ lập trình Python
Ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991, được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ Ban đầu, Python được phát triển để chạy trên nền Unix Nhưng rồi theo thời gian, Python dần mở rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix
1.2 Môi trường lập trình Pycharm
Có sẵn dưới dạng ứng dụng đa nền tảng, PyCharm tương thích với các nền tảng Linux, macOS và Windows Ngồi duyên dáng trong số các IDEs Python tốt nhất, PyCharm cung cấp hỗ trợ cho cả hai phiên bản Python 2 (2.7) và Python 3 (3.10 trở lên)
1.3 Thư viện trong lập trình Để thuận tiện hơn trong việc tiến hành thực hiện chương trình tổ chức quản lý khách sạn, nhóm chúng em đã tham khảo và sử dụng một số chương
1.3.1 Thư viện: Matplotlib (matplotlib.pyplot)
Matplotlib là một trong những thư viện Python phổ biến nhất được sử dụng để trực quan hóa dữ liệu bằng cách vẽ biểu đồ hướng đối tượng Nó cũng mở các số liệu trên màn hình và hoạt động như trình quản lý GUI
Với Matplotlib, có rất nhiều đồ thị được vẽ với nhiều phương thức khác nhau, với chương trình của chúng em, chúng em thực hiện vẽ biểu đồ đường và tích hợp vào giao diện của Tkinter
Thành phần chính của Matplotlib figure là Figure - một cái cửa sổ chứa tất cả những gì ta sẽ vẽ trên đó Pyplot là một module của Matplotlib cung cấp các hàm đơn giản để thêm các thành phần plot Một canvas Tkinter (chứa hình vẽ) được tạo bằng cách sử dụng lớp FigureCanvasTkAgg() Chúng ta chuyển hai mảng làm đối số đầu vào cho phương thức plot() và sử dụng phương thức show() để gọi biểu đồ được yêu cầu Mảng đầu tiên xuất hiện trên trục x và mảng thứ hai xuất hiện trên trục y của biểu đồ
Cài đặt: pip install matplotlib (với môi trường nếu Anaconda chỉ cần gõ conda install matplotlib)
Sử dụng: import matplotlib.pyplot as plt| from matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg Ưu điểm khi sử dụng Matplotlib:
- Có nhiều nguồn tài liệu tham khảo để tìm kiếm.
- Dễ tiếp cận, dễ đào sâu.
Pymongo là trình điều khiển chính thức của MongoDB cho các ứng dụng Python đồng bộ, chứa các công cụ để tương tác với cơ sở dữ
- Lệnh để cài đặt phiên bản mới nhất của mô-đun bằng dòng lệnh: pip install pymongo hoặc conda install pymongo từ môi trường Anaconda
- Nếu cần cài đặt một phiên bản cụ thể pymongo, hãy chỉ định phiên bản trong lệnh Ví dụ cài đặt phiên bản PyMongo 3.11: pip install pymongo[srv]==3.11
- Nếu bạn đã cài đặt PyMongo và cần nâng cấp lên phiên bản mới nhất, hãy sử dụng pip lệnh sau: pip install upgrade pymongo[srv]
- Khai báo thư viện: import pymongo as mg
Với việc sử dụng hệ CSDL MongoDB, để kết nối với nó thì ta cần phải sử dụng Pymongo hoặc Flask - Pymongo Lựa chọn sử dụng Pymongo bởi nó có nhiều tài liệu tìm hiểu và là trình điều khiển chính thức được xuất bản bởi các nhà phát triển Mongo
Thư viện này cho phép python kết nối với MongoDB bằng ứng dụng khách db Sau khi kết nối, chọn tên db sẽ được sử dụng cho các hoạt động khác nhau:
- Chèn dữ liệu - Cập nhật dữ liệu - Xóa dữ liệu
Sử dụng các phiên bản MongoDB, Pymongo, Python tương thích với nhau Cụ thể là MongoDB 5.3, Pymongo 4.1, Python 3.10 tương ứng với Pycharm
Pandas là một thư viện Python cung cấp các cấu trúc dữ liệu nhanh, mạnh mẽ, linh hoạt và mang hàm ý Tên thư viện được bắt nguồn từ panel data (bảng dữ liệu) Pandas được thiết kế để làm việc dễ dàng và trực quan với dữ liệu có cấu trúc (dạng bảng, đa chiều, có tiềm năng không đồng nhất) và dữ liệu chuỗi thời gian.
Pandas DataFrames là cấu trúc dữ liệu chứa:
- Dữ liệu được tổ chức theo không gian 2 chiều bao rows và columns
- Các Labels tương ứng với rows và columns
- Sử dụng pip và gõ lệnh: pip install pandas - Hoặc bằng Anaconda, dùng lệnh: conda install pandas
Sử dụng: Khai báo thư viện: import pandas as pd Ưu điểm của Data Frame: Trong nhiều trường hợp, DataFrame nhanh hơn, dễ sử dụng hơn và mạnh hơn bảng hoặc spreadsheets vì chúng là một phần không thể thiếu của hệ sinh thái Python và NumPy
Với việc sử dụng lưu trữ dữ liệu trên hệ CSDL MongoDB (MongoDB xử lý file với json và csv) thì việc lựa chọn json là một nền tảng tất yếu để xử lý file vì một số lý do sau:
- Nhẹ, nhỏ gọn và linh hoạt.
- Json có nhiều khả năng mở rộng về mặt thêm và chỉnh sửa nội dung.
- Json hiển thị dữ liệu các phân cấp và quan hệ tốt hơn.
- Json làm việc bên trong dễ dàng hơn đáng kể và chủ yếu được sử dụng cho các ngôn ngữ lập trình
Trình tự xử lý của thư viện: Ta mở (open) và đọc (read) file Json để đọc dữ liệu Json từ file với hàm json.load() with open(file, 'r+') as file: file = json.load(file)
('r' mở để đọc (mặc định) 'w' mở để ghi, cắt bớt tệp trước 'x' tạo một tệp mới và mở nó để viết 'a' mở để viết, nối vào cuối tệp nếu nó tồn tại) dump()ghi dữ liệu vào tệp, có hai đối số vị trí: (1) đối tượng dữ liệu được tuần tự hóa và (2) đối tượng giống tệp mà các byte sẽ được ghi vào. truncate()cắt gọn kích cỡ file, không làm việc với file được mở trong chế độ read-only, không trả về bất cứ giá trị nào seek()thiết lập vị trí hiện tại của file, không trả về bất cứ giá trị nào
- Ttk: Mô-đun tkinter.ttk cung cấp quyền truy cập vào bộ widget theo chủ đề Tk
Sử dụng: Để bắt đầu sử dụng Ttk, hãy nhập mô-đun của nó from tkinter import ttk button1 = ttk.Button(self, text="PROFILE CLIENT", width='30', command=lambda: controller.show_frame(Working)) button1.place(x, y) button2 = ttk.Button(self, text="ROOM STATE", width='30', command=lambda: controller.show_frame(Room))
Mô-đun tkinter.messagebox cung cấp một lớp cơ sở mẫu cũng như nhiều phương thức tiện lợi cho các cấu hình thường được sử dụng.Mô-đun này được sử dụng để hiển thị các hộp thông báo trong các ứng dụng
Sử dụng: from tkinter import messagebox messagebox.showwarning("Error", "Confirm Password is incorrect") messagebox.showwarning("Error", "Username or Password is incorrect")
Sử dụng để vẽ các hình dạng, chẳng hạn như đường thẳng, hình bầu dục, đa giác và hình chữ nhật, trong ứng dụng.
Sử dụng: from tkinter import Canvas canvas = Canvas(self, width0, height`0) canvas.place(x#0, y=0) canvas.create_line(30, 0, 30, 600)
Cơ sở thực tiễn
2.1 Xây dựng dữ liệu trong một tổ chức
Trong một tổ chức sẽ tồn tại hai dữ liệu chính đó chính là dữ liệu lưu trữ và dữ liệu sử dụng:
- Dữ liệu lưu trữ là dữ liệu đầu vào, được dùng để truy xuất một cách dễ dàng những dữ liệu đang được sử dụng ứng với khách hàng đó, đồng thời được dùng để lưu trữ làm báo cáo hoạt động kinh doanh của tổ chức
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
- Dữ liệu sử dụng là dữ liệu đầu ra, được sử dụng để thực hiện tính toán, phân tích hoạt động kinh doanh
2.2 Các công việc, chức năng cần thiết của một ứng dụng quản lý
Một ứng dụng quản lý phải đảm bảo thực hiện được 4 tính năng chính theo cơ chế CRUD CRUD là viết tắt của 4 từ tiếng Anh: Create, Read, Update, Delete CRUD là 4 tính năng quan trọng nhất để làmviệc với Database.
- Tạo thông tin (Create): là quá trình lưu trữ một bản ghi mới lên Database
+ Ví dụ minh họa: Người dùng đăng một bình luận trên Facebook, Facebook phải tạo mới một dòng dữ liệu trên Database của họ
- Đọc dữ liệu (Read): là quá trình đọc bản ghi từ Database lấy ra
+ Ví dụ minh họa: Người dùng xem thông tin chi tiết sản phẩm, bao gồm kích thước sản phẩm, giá tiền sản phẩm,…
- Cập nhật dữ liệu (Update): là cập nhật thông tin bản ghi đã được lưu trữ từ trước
+ Cập nhật thông tin trong Database sẽ dựa trên một số đặc điểm Có thể dựa trên id, hoặc những đặc tính chung như cùng chuyên mục,…
+ Update dữ liệu trong Database có thể update một hoặc nhiều bản ghi, tùy thuộc vào tính năng của Website
+ Ví dụ minh họa: Người dùng Facebook chỉnh sửa bài đăng
- Xóa dữ liệu (Delete): là loại bỏ đi dữ liệu đã tồn tại, dữ liệu được tạo ra từ Create
+ Ví dụ minh họa: Người dùng facebook xóa đi bình luận của chính họ, quản trị viên Website xóa đi bài viết đã đăng.
Ngoài ra, khi kết nối với MongoDB: mongo_client = mg.MongoClient(“mongodb:// localhost : 27017/”)
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
12 db = mongo_client [“example”] col = db [“clients”]
Tạo một bộ sưu tập dữ liệu trên hệ quản trị cơ sở dữ liệu
Mongoclient được sử dụng để giao tiếp với MongoDB
2.3 Phương thức tính toán doanh thu và báo cáokết quả kinh doanh
Dựa vào giá một ngày sử dụng tương ứng đối với mỗi loại phòng, số lượng phòng được đặt, số ngày sử dụng tương ứng với mỗi phòng Số liệu sẽ được ghi nhận vào doanh thu khi khách hàng thanh toán Đối với những khách sử dụng phòng trên một ngày, thì sẽ tính vào ngày trả phòng
Doanh thu ngày = ∑ thời hạn sử dụng loại phòng 1 x giá tiền loại 1 + ∑ thời hạn sử dụng loại phòng 2 x giá tiền loại 4 + ∑ thời hạn sử dụng loại phòng 4 x giá tiền loại 4
Doanh thu tháng = ∑ Doanh thu ngày trong tháng Doanh thu năm = ∑ Doanh thu các tháng trong năm Sau khi có kết quả doanh thu thì đưa xuống phòng kế toán làm báo cáo kết quả hoạt động kinh doanh.
Quy trình thực hiện
3.1.1 Dữ liệu truy cập hệ thống
Bảng 1 Dữ liệu thông tin đăng nhập
STT Tên đối tượng Miêu tả Kiểu dữ liệu
1 username Tên đăng nhập string
Dữ liệu này sẽ được lưu trữ trên file JSON admin[‘admin’]
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
3.1.2 Dữ liệu thông tin khách hàng Đối với khách hàng khi thực hiện giao dịch với khách sạn thì sẽ cung cấp một số thông tin như:
Bảng 2 Dữ liệu thông tin khách hàng
STT Tên đối tượng Miêu tả Kiểu dữ liệu
1 Full name Tên khách hàng string
2 ID Số CMND/ CCCD/ Hộ chiếu string
4 Date birth Ngày, tháng, năm sinh string
5 Phone number Số điện thoại string
3.1.3 Dữ liệu thông tin phòng ở
Bảng 3 Dữ liệu thông tin phòng ở
STT Tên đối tượng Miêu tả Kiểu dữ liệu
3 Date start Ngày vào string
4 Date end Ngày ra string
5 Date Revenue Ngày nhập dữ liệu string
Sau khi thiết lập dữ liệu thì toàn bộ dữ liệu đã tạo sẽ được lưu trên CSDL MongoDB để thực hiện xử lý dữ liệu, biểu hiện các chứcnăng:
- Hiển thị danh sách khách hàng:
+ Mục đích: Nhân viên khách sạn, quản lý cũng như ban quản lý khách sạn sẽ biết thông tin những khách hàng đang ở trong khách sạn của mình
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
+ Cơ chế hoạt động: Lấy dữ liệu thông tin từ MongoDB
- Hiển thị phòng ở đối với từng loại phòng:
+ Mục đích: Dựa vào chức năng này, người quản lý/ giám sát có thể biết được phòng nào đã có người đặt và phòng nào còn trống
+ Cơ chế hoạt động: Lấy dữ liệu Room từ thông tin phòng ở - Tính toán doanh thu theo từng ngày:
+ Mục đích: Tính toán doanh thu theo từng ngày và theo cụ thể từng loại phòng của mỗi ngày có doanh thu
+ Cơ chế hoạt động: Lấy dữ liệu Type, Date start, Date end, Date revenue từ thông tin phòng ở và sẽ được lưu trữ vào file JSON admin[‘Revenue’]
- Biểu diễn tình hình hoạt động kinh doanh:
+ Mục đích: Quan sát, đánh giá tổng thể tình hình kinh doanh hiện tại của khách sạn
+ Cơ chế thực hiện: Lấy dữ liệu doanh thu từng ngày từ file JSON Admin[‘revenue’] để biểu diễn trên đồ thị
3.3 Công cụ chính hỗ trợ thiết kế giao diện
- PLT: là module của Matplotlib cung cấp giao diện cho người dùng nhằm trực quan hoá dữ liệu Mục đích sử dụng: trực quan hoá dữ liệu từ đó giúp khách sạn có thể nắm rõ tình hình biến động về doanh thu
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 1 Giao diện trang chủ
Hình 2 Giao diện đăng ký
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 3 Giao diện đăng nhập
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 5 Giao diện nhập thông tin
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 7 Giao diện doanh thu
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 8 Giao diện báo cáo hoạt động kinh doanh
Hệ thống liên kết dữ liệu của dự án
Hình 9 Biểu đồ ngữ cảnh
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
- Khách hàng: Khách hàng khi đến khách sạn muốn thuê phòng trước hết phải cung cấp các thông tin cá nhân cho nhân viên lễ tân Sau khi kiểm tra các thông tin hợp lệ có đủ điều kiện để thuê phòng thì Lễ tân sẽ cập nhật thông tin khách vào hệ thống
- Phòng khách sạn: Sau khi đã kiểm tra thông tin của khách hợp lệ thì Lễ tân sẽ sắp xếp phòng cho khách nghỉ vào phòng theo yêu cầu của khách đã chọn hoặc được đặt từ trước Tuy nhiên, có thể thay đổi theo yêu cầu của Khách và phù hợp với tình trạng các phòng của khách sạn Chức năng này cũng quản lý tình trạng của các phòng trong khách sạn
- Nhân viên: Trong thời gian nghỉ lại khách sạn, nếu như nhân viên muốn kiểm tra các thông tin của khách hàng, cũng như khách hàng đã làm mất thẻ phòng và muốn được vào lại phòng thì nhân viên sẽ tìm kiếm, yêu cầu xử lý đến hệ thống
- Quản lý khách sạn: Khi ban lãnh đạo khách sạn có yêu cầu báo cáo thì nhân viên quản lý tiến hành yêu cầu hệ thống đưa ra các thông tin về tình hình kinh doanh của khách sạn hay thông tin về một khách hàng nào đó rồi báo cáo chi tiết cho ban lãnh đạo
Chức năng cơ bản: Thống kê số lượng khách, tình trạng phòng trong khách sạn, thống kê doanh thu
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
4.2 Biểu đồ luồng dữ liệu
Hình 10 Sơ đồ luồng dữ liệu trong chương trình
Hình 11 Sơ đồ mối quan hệ của các đối tượng
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
- GUI.py: file chương trình chính, lưu trữ toàn bộ các thuật toán khi khởi chạy chương trình
- mini_win.py: file lưu trữ những giao diện hỗ trợ
- function.py: file lưu trữ những thuật toán của chương trình, hàm chức năng thực hiện các điều kiện, tính toán doanh thu.
- new_client.py: file lưu trữ giao diện nhập thông tin khách hàng
- admin.json: lưu trữ thông tin tài khoản đăng nhập và doanh thu của khách sạn
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 12 Sơ đồ mối liên kết thư mục trong chương trình
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Thuật toán chương trình
Hình 13 Thuật toán của toàn bộchương trình
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
KẾT QUẢ - ĐÁNH GIÁ
Kết quả
- Đăng ký/ Đăng nhập: Khởi tạo và lưu trữ thành công
Hình 14 Lưu trữ tài khoản đăng nhập
- Giao dịch với khách hàng: Thực hiện tốt theo cơ chế CRUD bao gồm tạo khách hàng, lưu trữ thông tin khách hàng, xóa, cập nhật thông tin giao dịch và xóa toàn bộ dữ liệu hiện có
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Hình 15 Quản lý thông tin giao dịch
- Các chức năng kiểm tra: Thực hiện tốt, lưu trữ thành công doanh thu
Hình 16 Lưu trữ doanh thu
- Ngoài ra, trong quá trình thực hiện chạy thử nghiệm chương trình trên nhiều máy khác nhau thì chương trình có xuất hiện nhiều lỗi khác nhau Tuy nhiên, lỗi đặc trưng là: couldn't recognize data in image file
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
Có những máy sẽ chạy được đường dẫn ảnh và nhận được file, tuy nhiên sẽ có một số máy không được Theo tham khảo và tìm hiểu thì tkinter chỉ hoạt động với ảnh gif (hoặc file ảnh nhỏ như gif) vậy nên phải sử dụng thông qua thư viện PIL thay thế.
Khai báo thư viện: from PIL import ImageTk, Image Cú pháp: photo = tk.PhotoImage(file="./picture/final_logo_2.png") được thay thế thành: photo ImageTk.PhotoImage(Image.open("./picture/final_logo_2.png"))
- Các thao tác đều được thực hiện thành công
- Đánh giá đồ án: HOÀN THÀNH
Đánh giá
- Tiết kiệm chi phí, thời gian, tiện lợi
- Dễ dàng, linh hoạt trong việc cập nhật thông tin và các chức năng mới phù hợp với mục đích, yêu cầu kinh doanh cụ thể.
- Còn thiếu nhiều chức năng cho một phần mềm quản lý chuyên nghiệp
Hiện tại chương trình còn khá đơn giản, nếu muốn chương trình được ứng dụng cao hơn ở mọi mô hình khách sạn từ trung cấp đến cao cấp thì cần tối ưu hóa chương trình, bổ sung thêm nhiều chức năng nữa cho phần mềm quản lý khách sạn (quản lý nhân viên, quản lý tiền lương,
Downloaded by ng?c trâm (ngoctram201217@gmail.com)
28 quản lý lịch làm việc, ) và xây dựng hệ thống cung cấp thông tin để khách hàng có thể đặt phòng online và sử dụng các dịch vụ khác của khách sạn
Ngoài ra có mở rộng chương trình này thành một chương trình chủ và nhiều chương trình con khác tương ứng với một hệ thống khách sạn với nhiều chi chi nhánh.