You are on page 1of 38

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC KINH TẾ - LUẬT

BÁO
BÁO CÁO
CÁO
ĐỒ
ĐỒ ÁN
ÁN
CUỐI
CUỐI KHÓA
KHÓA

Phần mềm
QUẢN LÝ KHÁCH SẠN

Môn học: KỸ THUẬT


LẬP TRÌNH
Giảng viên hướng dẫn:
NGUYỄN QUANG PHÚC

Mã lớp học phần:

212IS4901
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC KINH TẾ - LUẬT

BÁO CÁO ĐỒ ÁN CUỐI KHÓA


Học kỳ 2: 2021 - 2022
KỸ THUẬT LẬP TRÌNH
Mã lớp học phần: 212IS4901

PHẦN MỀM
QUẢN LÝ KHÁCH SẠN
Giảng viên hướng dẫn: NGUYỄN QUANG PHÚC
Nhóm: BDORM

ST Họ và tên MSSV
T

1 La Thế Anh K214060389

2 Trần Thị Vân Anh K214061734

3 Trương Kiến Duy K214061260

4 Nguyễn Thị Ái Nhi K214060407

5 Đoàn Hoa Kỳ K214061740

6 Nguyễn Quốc Việt K214061752

Thành phố Hồ Chí Minh, ngày 24 tháng 05 năm 2022


NHẬN XÉT CỦA GIẢNG VIÊN

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………

Điểm …… Ký tên
LỜI CẢM ƠN

Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến Ban giám hiệu trường
Đại học Kinh tế - Luật vì đã tạo điều kiện cho chúng em tiếp cận môn “Kỹ thuật lập
trình”, cũng như cung cấp cơ sở vật chất với hệ thống thư viện hiện đại, đa dạng các
loại sách, tài liệu thuận lợi cho việc tìm kiếm, nghiên cứu thông tin. Đặc biệt, chúng
em xin gửi lời cảm ơn sâu sắc nhất đến giáo viên bộ môn – Thầy Nguyễn Quang Phúc
đã giảng dạy tận tình, chi tiết để chúng em có đủ kiến thức và vận dụng chúng vào bài
tiểu luận này.

Trong quá trình hoàn thành đồ án cuối kỳ, giảng viên Nguyễn Quang Phúc đã
giúp chúng em có được kiến thức nền tảng về phương pháp làm bài đồ án và định
hướng đúng đắn những cách thức tiến hành một chương trình quản lý trên ngôn ngữ
lập trình Python. Tuy nhiên, do sự hạn chế về thời gian và kiến thức, cũng như chúng
em vẫn còn thiếu kinh nghiệm thực tiễn nên sai sót là điều không thể tránh khỏi.
Chúng em rất mong sẽ nhận được những ý kiến đóng góp từ quý thầy cô và các bạn để
hoàn thiện bài đồ án nhất có thể.

Kính chúc cô thật nhiều sức khỏe và thành công trên sự nghiệp giảng dạy.

Chúng em xin chân thành cảm ơn!

Nhóm sinh viên thực hiện đồ án

Thành phố Hồ Chí Minh, ngày tháng năm 2022.


LỜI MỞ ĐẦU

Ngày nay, chúng ta đã bước vào thế kỉ 21 - một thế kỷ được đánh giá là bước
ngoặt to lớn về sự bùng nổ của khoa học kĩ thuật cũng như là kỷ nguyên của công
nghệ thông tin. Vai trò của công nghệ và kiến thức dường như đã trở thành yếu tố
quan trọng nhất quyết định sự thành công của mọi lĩnh vực trên thế giới. Công nghệ
thông tin đã và đang làm thay đổi cuộc sống của chúng ta, nó giúp ta nắm bắt kịp
những xu hướng, những đổi mới, những phát triển hiện đại của cuộc sống. Nếu không
có sự trợ giúp của nó, con người không thể nào bắt kịp vận hành của thế giới hiện đại
và tất nhiên chúng ta sẽ trở nên lạc hậu, chậm tiến, và đi thụt lùi. Bên cạnh đó, công
nghệ thông tin cũng có ý nghĩa to lớn giúp nhân loại chinh phục mọi tầm cao của sự
tiến bộ. Đặc biệt là với sự phát triển mạnh mẽ của các công nghệ phần mềm nên việc
ứng dụng tin học vào đời sống thực tiễn đang rất phát triển và được phổ biến rộng rãi.
Tất cả các ngành như y tế, giáo dục, thương mại điện tử,... đều được tin học hóa một
cách hữu dụng và rộng rãi, nó giúp ngành quản lý trở nên có hiệu quả, giảm được tối
đa việc lãng phí thời gian và công sức để hoàn thành công việc. Vì vậy có thể thấy
được rằng, công nghệ dường như đã trở thành một phần không thể thiếu trong mọi
hoạt động xã hội và đời sống của con người.
Thêm vào đó, sức mạnh của một nền kinh tế phụ thuộc rất lớn vào các hoạt
động trong nước của các doanh nghiệp. Do đó, sự thành công trong kinh doanh của
doanh nghiệp không những là mục tiêu mà còn là nhân tố quyết định vị thế của đất
nước trên thị trường quốc tế. Trong thời đại 4.0, cuộc sống của con người ngày càng
được nâng cao và phát triển, các mô hình dịch vụ liên tiếp được ra đời nhằm mục đích
phục vụ con người. Không chỉ nằm ngoài quy luật đó, hệ thống dịch vụ khách sạn,
nhà nghỉ cũng ngày càng được phát triển.
Tại Việt Nam, nhà nước cũng đang đi vào phát triển dịch vụ và đầu tư lớn cho
du lịch. Vì thế, ngành kinh doanh khách sạn cũng đang được chú trọng để thu hút
khách trong và ngoài nước tới tham quan. Tuy nhiên, do ảnh hưởng của đại dịch
COVID-19 trong vài năm gần đây đã khiến cho kinh doanh của ngành du lịch giảm
sút, điều đó đã ảnh hưởng không nhỏ tới doanh thu của các doanh nghiệp cũng như là
sự phát triển của đất nước. Nhà nước cũng đã tìm ra nhiều cách để giải quyết vấn đề
này, và cuối cùng có lẽ việc sống chung với dịch bệnh trong thời đại này là một điều
dễ hiểu và là cách giải quyết thông minh nhất. 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ình độ quản lý
hiện đại, đạt hiệu quả cao, giảm bớt chi phí quản lí mà còn giúp cho khách hàng thuận
tiện trong việc đặt phòng, thanh toán. Có thể nói rằng, phần mềm quản lý khách sạn sẽ
giúp đơn giản hóa, tiết kiệm chi phí và quản lý một cách hiệu quả nhất.
MỤC LỤC

LỜI CẢM ƠN.............................................................................................................. 1

LỜI MỞ ĐẦU.............................................................................................................. 2

MỤC LỤC...................................................................................................................4

DANH MỤC HÌNH ẢNH...........................................................................................6

DANH MỤC BẢNG BIỂU.........................................................................................6

A. GIỚI THIỆU.........................................................................................................1

1. Tên dự án...........................................................................................................1

2. Lý do chọn dự án...............................................................................................1

3. Mục đích dự án..................................................................................................1

4. Phạm vi thực hiện.............................................................................................2

5. Phương pháp nghiên cứu thực hiện.................................................................2

B. NỘI DUNG...........................................................................................................2

1. Cơ sở lý thuyết...................................................................................................2

1.1. Ngôn ngữ lập trình Python...........................................................................2

1.2. Môi trường lập trình Pycharm......................................................................2

1.3. Thư viện trong lập trình................................................................................2

1.4. Cơ sở quản trị dữ liệu MongoDB.................................................................9

2. Cơ sở thực tiễn.................................................................................................10

2.1. Xây dựng dữ liệu trong một tổ chức...........................................................10

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ý..................11

2.3. Phương thức tính toán doanh thu và báo cáo kết quả kinh doanh...............12

3. Quy trình thực hiện.........................................................................................12

3.1. Tổ chức dữ liệu...........................................................................................12


3.2. Xử lý dữ liệu...............................................................................................13

3.3. Công cụ chính hỗ trợ thiết kế giao diện......................................................14

3.4. Thiết kế giao diện.......................................................................................15

4. Hệ thống liên kết dữ liệu của dự án...............................................................19

4.1. Biểu đồ ngữ cảnh........................................................................................19

4.2. Biểu đồ luồng dữ liệu.................................................................................21

4.3. Mô hình quan hệ.........................................................................................21

4.4. Tổ chức thư mục.........................................................................................22

5. Thuật toán chương trình................................................................................24

C. KẾT QUẢ - ĐÁNH GIÁ....................................................................................25

1. Kết quả............................................................................................................. 25

1.1. Thử nghiệm................................................................................................25

1.2. Kết quả đạt được........................................................................................27

2. Đánh giá...........................................................................................................27

2.1. Ưu điểm......................................................................................................27

2.2. Nhược điểm................................................................................................27

2.3. Hướng phát triển.........................................................................................27

D. KẾT LUẬN.........................................................................................................28

E. TÀI LIỆU THAM KHẢO..................................................................................29


DANH MỤC HÌNH ẢNH

Hình 1. Giao diện trang chủ........................................................................................15

Hình 2. Giao diện đăng ký..........................................................................................15

Hình 3. Giao diện đăng nhập.......................................................................................16

Hình 4. Giao diện chính..............................................................................................16

Hình 5. Giao diện nhập thông tin................................................................................17

Hình 6. Giao diện phòng ở..........................................................................................18

Hình 7. Giao diện doanh thu.......................................................................................18

Hình 8. Giao diện báo cáo hoạt động kinh doanh........................................................19

Hình 9. Biểu đồ ngữ cảnh............................................................................................19

Hình 10. Sơ đồ luồng dữ liệu trong chương trình........................................................21

Hình 11. Sơ đồ mối quan hệ của các đối tượng...........................................................21

Hình 12. Sơ đồ mối liên kết thư mục trong chương trình............................................22

Hình 13. Thuật toán của toàn bộ chương trình............................................................24

Hình 14. Lưu trữ tài khoản đăng nhập.........................................................................25

Hình 15. Quản lý thông tin giao dịch..........................................................................26

Hình 16. Lưu trữ doanh thu.........................................................................................26

DANH MỤC BẢNG BIỂU

Bảng 1. Dữ liệu thông tin đăng nhập...........................................................................12

Bảng 2. Dữ liệu thông tin khách hàng.........................................................................13

Bảng 3. Dữ liệu thông tin phòng ở..............................................................................13


A. GIỚI THIỆU

1. Tên dự án

Phần mềm quản lý khách sạn (Hotel Management)

2. 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.

3. 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
1
nghiệp, công ty góp phần nâng cao trình độ chuyên môn của mỗi cá nhân.

4. 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.

5. 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ế.

B. NỘI DUNG

1. 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

2
quản lý khách sạn, nhóm chúng em đã tham khảo và sử dụng một số chương
trình sau:

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.

3
- Dễ tiếp cận, dễ đào sâu.

1.3.2. Thư viện: Pymongo (mg)

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ữ
liệu MongoDB từ Python.

Cài đặt:

- 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]

Sử dụng:
- 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

4
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.
1.3.3. Thư viện: Pandas (DataFrame)

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.

Cài đặt:
- 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.

1.3.4. Thư viện: Json

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.

5
- 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.
Sử dụng: import json
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.

1.3.5. Module trong Tkinter

- 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=10, y=10)

6
button2 = ttk.Button(self, text="ROOM STATE",
width='30', command=lambda:
controller.show_frame(Room))
button2.place(x=10, y=60)

- Messagebox

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")

- Canvas

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, width=30, height=600)
canvas.place(x=230, y=0)
canvas.create_line(30, 0, 30, 600)

- tkcalendar (DateEntry)

Tkcalendar là một mô-đun python cung cấp các tiện ích


Lịch và DateEntry cho Tkinter. Tiện ích DateEntry tương tự

7
như Combobox, nhưng menu thả xuống không phải là danh
sách mà là Lịch để chọn ngày. Các sự kiện có thể được hiển thị
trong Lịch với màu sắc tùy chỉnh và chú giải công cụ hiển thị
danh sách sự kiện cho một ngày nhất định.
Cài đặt: pip install tkcalendar
Sử dụng: from tkcalendar import DateEntry

- tkinter.font
Mô-đun tkinter.font cung cấp lớp Phông chữ để tạo và sử dụng
phông chữ được đặt tên.
Sử dụng: import tkinter.font as font
Một vài option tùy chọn cho font:
+ family: tên font chữ dưới dạng một chuỗi
+ size: chiều cao font chữ tính bằng điểm, để có font chữ
có chiều cao n pixels, ta sử dụng -n.
+ weight: “bold” cho chữ in đậm, “normal” đối với chữ
bình thường.
+ slant – “italic” cho chữ nghiêng, “roman”.
+ underline − 1 đối với văn bản gạch chân, 0 đối với văn
bản thường.
+ verstrike − 1 đối với văn bản quá tải, 0 đối với văn bản
bình thường.

1.3.6. Thư viện Datetime

Thư viện Datetime dùng để làm việc và xử lý ngày giờ


cùng các mốc thời gian.
Sử dụng: from datetime import datetime
Ví dụ: Trả về ngày giờ hiện tại
import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)

8
1.4. Cơ sở quản trị dữ liệu MongoDB

1.4.1. Giới thiệu MongoDB

MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn


mở đa nền tảng viết bằng C++, được bắt đầu phát triển vào đầu năm
2007 khi công ty 10gen đang phát triển một nền tảng tương tự dịch vụ
Azure của Microsoft. Bản ghi trong MongoDB được lưu trữ dạng một
dữ liệu văn bản (Document), là một cấu trúc dữ liệu bao gồm các cặp
giá trị và trường tương tự như các đối tượng JSON. MongoDB được
phát triển bởi MongoDB Inc. dưới dạng giấy phép Server Side Public
License (SSPL).

Các phiên bản của MongoDB:


- MongoDB Atlas: MongoDB cung cấp phiên bản chạy
trên nền tảng điện toán đám mây (cloud) gọi là MongoDB
Atlas, đây là gói sản phẩm dịch vụ tích hợp cơ sở dữ liệu
đám mây và các dịch vụ dữ liệu. MongoDB Atlas hỗ trợ
các nền tảng AWS, Microsoft Azure, và Google Cloud
Platform.
- MongoDB Community Server: Phiên bản cài đặt máy chủ
địa phương (on-premises) bao gồm 2 phiên bản là
MongoDB Enterprise Advance và MongoDB Community
Server. Trong đó, phiên bản Enterprise Advanced là
phiên bản trả phí còn phiên bản Community Server là
phiên bản Cộng đồng của cơ sở dữ liệu. Phiên bản
MongoDB Community min phí trên các hệ điều hành
Windows, Linux, và macOS.
- MongoDB Enterprise Server: MongoDB Enterprise
Server là phiên bản thương mại của MongoDB, tính phí
theo chương trình thuê bao MongoDB Enterprise
Advanced.

9
1.4.2. Ưu điểm và khuyết điểm khi dùng MongoDB

- Ưu điểm:
+ Là phần mềm mã nguồn mở miễn phí, có cộng đồng
phát triển rất lớn.
+ Hiệu năng cao: Tốc độ truy vấn (find, update, insert,
delete) của MongoDB nhanh hơn hẳn so với các hệ
quản trị cơ sở dữ liệu quan hệ.
+ Dữ liệu linh hoạt: MongoDb là document Database,
dữ liệu dưới dạng JSON, không bị bó buộc về số
lượng field, kiểu dữ liệu… bạn có thể insert thoải mái
dữ liệu mà mình muốn.
+ Tính sẵn có
+ Là một Rich Query Language: MongoDB có sẵn các
method để thực hiện create, read, update, delete dữ
liệu.
- Nhược điểm:
+ Bị giới hạn kích thước bản ghi: Mỗi document không
được có kích thước lớn hơn 16MB và không mức độ
các document con trong một document không được
lớn hơn 100.
+ Sử dụng nhiều bộ nhớ.
+ Nguy cơ gây mất dữ liệu khi chưa hoàn thành bản lưu.

2. 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

10
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.
- 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àm việ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.

11
+ 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/”)
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
MongoDB.
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áo kế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.

3. Quy trình thực hiện

3.1. Tổ chức dữ liệu


3.1.1. Dữ liệu truy cập hệ thống

Bảng 1. Dữ liệu thông tin đăng nhập

12
STT Tên đối tượng Miêu tả Kiểu dữ liệu
1 username Tên đăng nhập string
2 password Mật khẩu string

Dữ liệu này sẽ được lưu trữ trên file JSON admin[‘admin’]

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
3 Gender Giới tính string
4 Date birth Ngày, tháng, năm sinh string
5 Phone number Số điện thoại string
6 Address Địa chỉ 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


1 Type Loại phòng int
2 Room Số phòng int
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

3.2. Xử lý dữ liệu

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ức năng:

13
- 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.
+ 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


- Tkinter
- 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.
- PyMongo
- Read file.json

14
3.4. Thiết kế giao diện

Hình 1. Giao diện trang chủ

Hình 2. Giao diện đăng ký

15
Hình 3. Giao diện đăng nhập

Hình 4. Giao diện chính

16
Hình 5. Giao diện nhập thông tin

17
Hình 6. Giao diện phòng ở

Hình 7. Giao diện doanh thu

18
Hình 8. Giao diện báo cáo hoạt động kinh doanh

4. Hệ thống liên kết dữ liệu của dự án

4.1. Biểu đồ ngữ cảnh

Hình 9. Biểu đồ ngữ cảnh

Mô tả:
- 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.

19
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.

20
4.2. Biểu đồ luồng dữ liệu

Hình 10. Sơ đồ luồng dữ liệu trong chương trình

4.3. Mô hình quan hệ

Hình 11. Sơ đồ mối quan hệ của các đối tượng

21
4.4. Tổ chức thư mục

- 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

Hình 12. Sơ đồ mối liên kết thư mục trong chương trình

22
23
5. Thuật toán chương trình

Hình 13. Thuật


toán của toàn
bộ chương trình

24
C. KẾT QUẢ - ĐÁNH GIÁ

1. Kết quả

1.1. Thử nghiệm

- Đă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ó.

25
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
"./picture/final_logo_2.png"

26
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"))

1.2. Kết quả đạt được

- Các thao tác đều được thực hiện thành công.


- Đánh giá đồ án: HOÀN THÀNH

2. Đánh giá

2.1. Ưu điểm

- 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ể.

2.2. Nhược điểm

- Còn thiếu nhiều chức năng cho một phần mềm quản lý chuyên
nghiệp.
- Bảo mật chưa cao.

2.3. Hướng phát triển

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

27
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,
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.

D. KẾT LUẬN

Đồ án “Phần mềm quản lý khách sạn (Hotel Management)” là một chương


trình được xây dựng trên nền tảng Pycharm bằng ngôn ngữ lập trình Python. Chương
trình là sự kết hợp của ba yếu tố quan trọng chủ yếu đó là thuật toán, dữ liệu và giao
diện. Đây cũng chính là ba nội dung chính trong bộ môn “Kỹ thuật lập trình”. Xét về
mặt thực tiễn, đồ án là một sản phẩm có thể sử dụng giúp cho các khách sạn tổ chức
quản lý hiệu quả hơn quá trình kinh doanh của mình. Xét về mặt chuyên môn thì
thông qua đồ án, chúng em được củng cố kiến thức về lập trình, khả năng xử lý thuật
toán, sử dụng thư viện, liên kết dữ liệu và đặc biệt là chúng em được nâng cao khả
năng vận dụng giao diện GUI vào lập trình và được tiếp xúc với các cơ sở quản trị dữ
liệu MongoDB. Chính những kiến thức, kỹ năng này sẽ là hành trang, nền tảng vững
chắc cho chúng em phát triển bản thân theo hướng mà mình đã chọn.

28
E. TÀI LIỆU THAM KHẢO

[1] Consine1509, How to embed Matplotlib charts in Tkinter GUI?,


https://rgl.mobi/ZlhnC, 10/07/2020.

[2] Jess Feldman, Intro to 3 Data Viz Tools: Matplotlib, Seaborn, and
Plotly, https://rgl.mobi/vsaRa, 15/06/2021.

[3] Priya Pedamkar, JSON and CSV, Know the top 6 important
comparison, https://rgl.mobi/AOwSO, 08/04/2022

[4] ZetCode, PyMongo - Python MongoDB programing,


https://rgl.mobi/sidLn, 29/11/2021

[5] MongoDB, PyMongo - MongoDB Drivers, https://rgl.mobi/bJrUh.

[6] github.com, Flask - PyMongo, https://rgl.mobi/UkdGG, 21/12/2011.

[7] python.org, tkinter.ttk — Tk themed widgets, https://rgl.mobi/QlONP,


23/05/2022.

[8] pypi.org, Tklendar, https://rgl.mobi/rgnOA, 29/12/2019.

[9] bastelflp, Tkinter error: Couldn't recognize data in image file,


https://rgl.mobi/NKqXF, 17/11/2017.

[10] Karlijn Willems, Matplotlib Tutorial: Python Plotting,


https://rgl.mobi/KggjB, 12/12/2019.

29

You might also like