Tải bản đầy đủ (.pdf) (66 trang)

Phát Triển Ứng Dụng Đặt Phòng Dịch Vụ Du Lịch Homestay Trên Nền Tảng Android (Luận Văn Thạc Sĩ)

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.33 MB, 66 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

PHÁT TRIỂN ỨNG DỤNG ĐẶT PHÒNG DỊCH VỤ
DU LỊCH HOMESTAY TRÊN NỀN TẢNG ANDROID
Ngành: Công Nghệ Thông Tin
Mã số: 7.48.02.01

Sinh viên thực hiện:
Bùi Văn Phúc
Lớp: CT1B

Người hướng dẫn:
ThS. Nguyễn Văn Phác
Khoa Công nghệ thông tin - Học viện Kỹ thuật Mật mã

Hà Nội, 2022


MỤC LỤC
DANH MỤC HÌNH ẢNH ............................................................................... iii
LỜI CẢM ƠN .................................................................................................... v
Lời nói đầu ........................................................................................................ vi
CHƯƠNG 1. PHÂN TÍCH U CẦU HỆ THỐNG .......................................... 1
1.1

Tổng quan hệ thống đặt phòng dịch vụ du lịch HomeStay ............. 1


1.1.1

Đặt vấn đề .................................................................................... 1

1.1.2

Mô hình triển khai hệ thống ........................................................ 2

1.2

Yêu cầu hệ thống ............................................................................... 3

1.2.1

Yêu cầu chức năng ...................................................................... 3

1.2.2 Yêu cầu phi chức năng ..................................................................... 4
1.3 Các công nghệ và công cụ sử dụng ........................................................ 4
1.3.1 Hệ điều hành Android ...................................................................... 4
1.3.2 Ngôn ngữ Kotlin ............................................................................... 6
1.3.3 Dịch vụ Firebase ............................................................................. 10
1.3.4 Một số thư viện sử dụng ................................................................. 13
CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ HỆ THỐNG...................................... 16
2.1 Biểu đồ Use case .................................................................................... 16
2.1.1 Biểu đồ Use case tổng quát ............................................................. 16
2.1.2 Phân rã biểu đồ use case ................................................................ 19
2.2 Các biểu đồ tuần tự .............................................................................. 21
2.3 Thiết kế cơ sở dữ liệu............................................................................ 23
2.3.1 Realtime Database HomeStay ......................................................... 23
2.3.2 Lưu trữ ảnh Storage của HomeStay ............................................... 31

2.3.3 Xác thực Authentication ................................................................. 31
2.3.4 Push notification FCM ................................................................... 32
CHƯƠNG 3: TRIỂN KHAI HỆ THỐNG ........................................................ 33
3.1 Quá trình triển khai hệ thống .............................................................. 33
3.1.1 Tiến hành xây dựng ứng dụng trên nền tảng di động (Android) ... 33
3.1.2 Tích hợp các giải pháp an toàn vào ứng dụng ............................... 41
3.2 Giới thiệu một số giao diện của hệ thống ............................................. 45
i


3.2.1 Giao diện màn hình đăng nhập ........................................................ 45
3.2.2 Giao diện màn hình đăng kí ............................................................. 46
3.2.3 Màn hình home của tài khoản khách du lịch .................................... 47
3.2.4 Giao diện màn hình danh sách phịng............................................... 48
3.2.5 Giao diện danh sách địa điểm du lịch ............................................... 49
3.2.6 Giao diện bình luận phòng ............................................................... 50
3.2.7 Giao diện chức năng đặt phòng ........................................................ 51
3.2.8 Giao diện chức năng thêm phòng ..................................................... 52
3.2.9 Giao diện chức năng sửa phịng ....................................................... 53
3.2.10 Nhận thơng báo .............................................................................. 54
3.2.11 Giao diện màn hình google map .................................................... 54
3.2.12 Giao diện màn hình thời tiết ........................................................... 55
3.2.13 Hình ảnh giao diện tài khoản cá nhân............................................. 57
Kết luận ............................................................................................................ 58
TÀI LIỆU THAM KHẢO .............................................................................. 59

ii


DANH MỤC HÌNH ẢNH

Lời nói đầu ........................................................................................................ vi
Hình 1.1: Hình ảnh ví dụ mã nguồn Kotlin ......................................................... 8
Hình 1.2: Hình ảnh sơ lược Firebase ............................................................... 10
Hình 1.3 Push notification ................................................................................ 13
Hình 1.4 Sơ đồ mơ tả Rx ................................................................................... 14
Hình 1.5 Sơ đồ biểu diễn Dagger ..................................................................... 15
Hình 2.1 Biểu đồ Use case tổng quát của ứng dụng khách hàng ....................... 17
Hình 2.2 Biểu đồ Use case tổng quát của ứng dụng Admin .............................. 18
Hình 2.3 Biểu đồ phân rã use case quản lý tài khoản ....................................... 19
Hình 2.4 Biểu đồ phân rã use case quản lý book phịng .................................... 19
Hình 2.5 Biểu đồ phân rã use case quản lý phòng ............................................ 20
Hình 2.6 Biểu đồ phân rã use case quản lý tài khoản của Admin ...................... 21
Hình 2.7: Biểu đồ tuần tự chức năng đăng nhập tài khoản ............................... 21
Hình 2.8: Biểu đồ tuần tự chức năng chỉnh sửa thông tin cá nhân .................... 22
Hình 2.9: Biểu đồ tuần tự chức năng đánh giá ................................................. 22
Hình 2.10 Sơ đồ hệ thống database của dự án .................................................. 23
Hình 2.11 Hình ảnh chi tiết của Admin ............................................................. 24
Hình 2.12 Chi tiết của Account ......................................................................... 25
Hình 2.13 Hình ảnh chi tiết Comment .............................................................. 26
Hình 2.14 Hình ảnh chi tiết Report ................................................................... 26
Hình 2.15 Hình chi tiết TravelList .................................................................... 27
Hình 2.16 Hình chi tiết ListProvinces ............................................................... 28
Hình 2.17 Hình chi tiết DetailProvinces ........................................................... 29
Hình 2.18 Hình ảnh chi tiết ListRoom .............................................................. 30
Hình 2.19 Hình ảnh dịch vụ lưu trữ ảnh của HomeStay.................................... 31
Hình 2.20 Hình ảnh lưu trữ tài khoản xác thực bằng email .............................. 31
Hình 2.21 Hình ảnh dịch vụ Cloud Messaging Firebase ................................... 32
Hình 3.1 Hình ảnh kết nối với Firebase Database ............................................ 34
Hình 3.2 File json được nhúng vào hệ thống .................................................... 35
Hình 3.3 Hình ảnh cấu trúc project AdminHomeStay ....................................... 35

Hình 3.4 Hình ảnh xây dựng giao diện đăng kí................................................. 36
iii


Hình 3.5 Hình ảnh cấu trúc project của app HomeStay .................................... 38
Hình 3.6 Hình ảnh chức năng push notification ............................................... 40
Hình 3.7 Hình ảnh ví dụ minh họa về mã hóa thơng tin .................................... 41
Hình 3.8 Hình ảnh mã hóa password ............................................................... 41
Hình 3.9 Hình ảnh mã hóa key ......................................................................... 42
Hình 3.10 Hình ảnh giải mã key để sử dụng ..................................................... 42
Hình 3.11 Hình ảnh cấu hình ProGuard trong ứng dụng ................................. 44
Hình 3.12 Hình ảnh giao diện đăng nhập ......................................................... 45
Hình 3.13 Màn hình giao diện đăng kí ............................................................. 46
Hình 3.14 Giao diện màn hình home ................................................................ 47
Hình 3.15 Giao diện danh sách phịng ............................................................. 48
Hình 3.16 Giao diện danh sách địa điểm du lịch .............................................. 49
Hình 3.17 Giao diện đánh giá phịng ................................................................ 50
Hình 3.18 Giao diện chức năng đặt phịng ....................................................... 51
Hình 3.19 Giao diện chức năng thêm phịng..................................................... 52
Hình 3.20 Giao diện chức năng sửa phịng....................................................... 53
Hình 3.21 Nhận thơng báo khi có phịng được đặt............................................ 54
Hình 3.22 Hình ảnh google map của hệ thống.................................................. 55
Hình 3.23 Hình ảnh giao diện thời tiết ............................................................. 56
Hình 3.24 Hình ảnh tab tài khoản của khách hàng ........................................... 57

iv


LỜI CẢM ƠN
Trong quá trình thực hiện đồ án tốt nghiệp cuối khóa này, em đã nhận được

sự giúp đỡ tận tình của cán bộ hướng dẫn là ThS– Nguyễn Văn Phác, Giảng viên
Khoa Công Nghệ Thông Tin Học viện Kỹ thuật mật mã. Sự quan tâm sâu sát của
cán bộ Hệ quản lý học viên, sinh viên, sự động viên của người thân và bạn bè.
Xin cảm ơn tất cả các Thầy và các bạn đã tạo những điều kiện tốt nhất để
em hoàn thành đề tài này!

v


LỜI NÓI ĐẦU
Ngày nay với sự bùng nổ mạnh mẽ của ngành cơng nghệ thơng tin, chúng
ta khơng cịn xa lạ với những chiếc điện thoại thông minh và việc sử dụng phần
mềm để tìm kiếm địa điểm du lịch và book phịng khá dễ dàng. Thay vì chúng ta
phải đến tận nơi để xem địa điểm ở đâu, tìm phịng nghỉ ở đâu thì ứng dụng đã
đáp ứng cho khách du lịch chỉ với một vài thao tác click.
Lý do chọn đề tài:
- Mong muốn việc xây dựng một ứng dụng phù hợp với thời đại công nghệ
thông tin đang ngày càng phát triển để giúp người dùng giảm bớt thời gian và tiếp
cận xu thế của hiện tại cũng như tương lai qua internet.
Mục đích:
- Đáp ứng cho nhu cầu đi du lịch, nghỉ dưỡng.
Phạm vi nghiên cứu:
- Các ứng dụng trên cửa hàng ứng dụng Android CH Play.
Ý nghĩa khoa học:
- Thấy được cái nhìn tổng quan về quy trình xây dựng ứng dụng trên nền
tảng Android, thiết kế giao diện, phân tích và thiết kế hệ thống, sử dụng Firebase
Ý nghĩa thực tiễn:
- Thúc đẩy sự phát triển sử dụng công nghệ cho phù hợp với thời đại công
nghệ thông tin đang ngày càng phát triển.
Sau thời gian sáu tháng thực hiện đồ án, các mục tiêu về cơ bản đã đạt được.

Tuy nhiên công nghệ thông tin là lĩnh vực rộng lớn, phức tạp, thời gian thực hiện
đồ án tương đối ngắn nên chắc chắn khơng tránh khỏi thiếu sót. Rất mong được
sự góp ý của các thầy cô, cũng như các bạn học viên để đồ án này được hoàn thiện
hơn.
SINH VIÊN THỰC HIỆN ĐỒ ÁN

Bùi Văn Phúc
vi


CHƯƠNG 1. PHÂN TÍCH YÊU CẦU HỆ THỐNG
1.1 Tổng quan hệ thống đặt phòng dịch vụ du lịch HomeStay
1.1.1 Đặt vấn đề
Hiện nay, các công nghệ tiên tiến phát triển ngày càng mạnh mẽ và được
ứng dụng trên mọi lĩnh vực kinh tế, chính trị, xã hội cũng như đời sống thường
nhật của con người. Ứng dụng của công nghệ thơng tin và tin học hố được xem
là một trong những yếu tố mang tính quyết định trong hoạt động của quốc gia, tổ
chức. Nó giúp cho các cơng việc được thực hiện nhanh, chính xác và đạt kết quả
cao hơn nhiều.
Kinh tế ngày càng phát triển thì nhu cầu du lịch đi đây đi đó khám phá, nghỉ
dưỡng, mở mang kiến thức của con người ngày càng lớn. Cùng với đó là sự bùng
nổ mạnh mẽ của Cơng nghệ thơng tin ở trên thế giới nói chung và nước ta nói
riêng.
Đối với việc đi du lịch hiện nay thì khách du lịch thường phải tìm địa điểm
thơng qua bạn bè người thân hay những người đã đi, sau đó đến nơi đi du lịch và
tìm chỗ để ở lại tham quan nghỉ dưỡng. Tuy nhiên, với cuộc sống bận rộn hiện
nay thì khơng phải ai cũng có thời gian và điều kiện sử dụng máy tính hay đến tận
nơi tìm phịng và chưa tính rủi ro là đến nơi thì hết phịng và bị lỡ kế hoạch đặt ra
của khách.
Song song với khách du lịch thì các nhà chủ kinh doanh phịng trọ, nhà nghỉ

cho khách cũng có nhu cầu cho th, đặt phịng. Việc chờ khách tìm đến nơi đặt
phịng gây lãng phí thời gian của hai bên cũng như rủi ro về cạnh tranh tiêu cực
lẫn nhau giữa các nhà chủ.
Cùng với các lý do nêu trên, qua tìm hiểu và khảo sát khách du lịch cùng
với thị trường cho thuê phòng gần điểm du lịch, em được biết việc có một ứng
dụng đặt dịch vụ du lịch trên các thiết bị di động sẽ giúp khách và chủ cho thuê
phòng giảm bớt được thời gian và công sức khi phải đến tận nơi để đặt chỗ và chủ
nhà cũng dễ dàng cho thuê. Muốn lựa chọn địa điểm du lịch phù hợp thì khách
hàng chỉ cần sử dụng smartphone có kết nối mạng internet, sau đó tìm chỗ nghỉ
1


ngơi gần địa điểm đó và tiến hành đặt phịng với chủ nhà. Chủ nhà cũng dễ dàng
cập nhật phòng cho khách để khách dễ dàng đặt phịng. Do đó, em đã quyết định
chọn đề tài: ‘Phát triển ứng dụng đặt phòng dịch vụ du lịch Homestay trên nền
tảng Android’.
1.1.2 Mơ hình triển khai hệ thống
Hệ thống sẽ bao gồm 2 phần dành cho Client (gọi là app HomeStay) và
Admin (gọi là app Admin).
Trong app HomeStay sẽ tiếp tục phân quyền dành cho “khách du lịch” và
“chủ nhà”.
- Phía Khách du lịch
+ Đăng ký và xác minh bằng email
+ Chức năng chỉnh sửa thông tin cá nhân, quên mật khẩu, đổi mật
khẩu
+ Xem danh sách điểm du lịch nổi tiếng của các tỉnh trên cả nước
+ Tìm kiếm địa điểm du lịch cần đến theo mong muốn
+ Xem thông tin tất cả Homestay, tình trạng của phịng
+ Xem chi tiết các địa điểm du lịch đồng thời có thể tìm kiếm
+ Homestay gần đó để book phịng cho chuyến du lịch đó

+ Tìm kiếm địa chỉ HomeStay cần đến
+ Quản lý các phịng mình đã book, xem chi tiết phịng, xem
được chi tiết chủ phòng cho thuê
+ Xem bản đồ, thời tiết để đảm bảo an tồn cho khách có chuyến đi an
tồn
+ Xem các đánh giá của phịng, đồng thời có thể tự comment đánh giá
trên phịng đó
+ Xem được chi tiết chủ cho thuê đảm bảo tính chính xác
- Phía Chủ nhà
+ Đăng ký và xác minh bằng email
+ Chức năng chỉnh sửa thông tin cá nhân, quên mật khẩu, đổi mật khẩu

2


+ Chức năng chính là tạo phịng, thêm, sửa, xóa phịng, cập nhật tình
trạng khách book phịng và khi trả phịng.
+ Quản lý các phịng của mình, xem thơng tin khách hàng đặt phòng
để dễ liên hệ
+ Chức năng report khi khách hàng đặt phịng và khơng nhận hoặc lí
do khác
+ Xem đánh giá của khách hàng về phòng của mình để cải thiện dịch
vụ
-Phía Admin quản lý
+ Đăng kí và xác minh bằng email.
+ Quản lý tài khoản của chủ nhà và khách đặt phòng.
+ Chức năng block tài khoản khi bị report quá nhiều, mở tài khoản khi
có phản hồi.
+ Xem các đánh giá của khách hàng để đưa ra quyết định block chính
xác.

1.2 Yêu cầu hệ thống
1.2.1 Yêu cầu chức năng
1. App HomeStay
- Đối với khách du lịch
Khách hàng đăng nhập vào app sẽ sử dụng các chức năng như sau:
+ Tìm kiếm địa điểm du lịch muốn đi
+ Tìm kiếm phịng muốn đặt
+ Tiến hành đặt phịng, hủy phịng, bình luận về phịng
- Đối với chủ nhà có phịng cho th
Chủ nhà sẽ đăng nhập vào app sẽ sử dụng những chức năng như sau:
+ Đăng phòng của chủ nhà cho khách hàng thấy
+ Quản lý phịng của mình theo tình trạng đặt phịng
+ Đánh giá khách hàng sử dụng phòng với hệ thống

3


-

2. App Admin
Admin sẽ đăng nhập vào app và sử dụng những chức năng như sau:
Xem danh sách user bao gồm tất cả khách du lịch và chủ nhà
- Xem đánh giá của từng tài khoản khi sử dụng dịch vụ
- Block tài khoản nếu vi phạm nội quy, quy định hoặc do bị phản ánh
quá nhiều
- Mở khóa cho tài khoản khi nhận được phản hồi từ người dùng

1.2.2 Yêu cầu phi chức năng
Dành cho cả app HomeStay và Admin
- Là ứng dụng di động chạy trên nền tảng Android

- Yêu cầu về sản phẩm: Sử dụng được từ Android 7.0 trở lên
- Giao diện đơn giản, thân thiện, dễ sử dụng
- Có tính thực tiễn cao
- Khơng để lộ thông tin người dùng
1.3 Các công nghệ và công cụ sử dụng
1.3.1 Hệ điều hành Android
Android là một hệ điều hành dựa trên nền tảng Linux và được thiết kế dành
cho các thiết bị di động màn hình cảm ứng như điện thoại thơng minh và máy tính
bảng. Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ
tài chính từ Google và sau này được chính Google mua lại vào năm 2005. Android
ra mắt năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một
hiệp hội gồm các công ty phần cứng, phần mềm, và viễn thông với mục tiêu đẩy
mạnh các tiêu chuẩn mở cho các thiết bị di động.
Giao diện người dùng của Android dựa trên nguyên tắc tác động trực tiếp,
sử dụng cảm ứng chạm tương tự như những động tác ngoài đời thực như vuốt,
chạm, kéo giãn và thu lại để xử lý các đối tượng trên màn hình. Những thiết bị
phần cứng bên trong như gia tốc kế, con quay hồi chuyển và cảm biến khoảng
cách được một số ứng dụng sử dụng để phản hồi một số hành động khác của người
dùng, ví dụ như điều chỉnh màn hình từ chế độ hiển thị dọc sang chế độ hiển thị
ngang tùy theo vị trí của thiết bị, hoặc cho phép người dùng lái xe đua bằng xoay
4


thiết bị, giống như đang điều khiển vôlăng. Các thiết bị Android sau khi khởi động
sẽ hiển thị màn hình chính, điểm khởi đầu với các thơng tin chính trên thiết bị,
tương tự như khái niệm desktop (bàn làm việc) trên máy tính để bàn. Màn hính
chính Android thường gồm nhiều biểu tượng (icon) và tiện ích (widget); biểu
tượng ứng dụng sẽ mở ứng dụng tương ứng, cịn tiện ích hiển thị những nội dung
sống động, cập nhật tự động như dự báo thời tiết, hộp thư của người dùng, hoặc
những mẩu tin thời sự ngay trên màn hình chính. Màn hình chính có thể gồm

nhiều trang xem được bằng cách vuốt ra trước hoặc sau, mặc dù giao diện màn
hình chính của Android có thể tùy chỉnh ở mức cao, cho phép người dùng tự do
sắp đặt hình dáng cũng như hành vi của thiết bị theo sở thích. Những ứng dụng
do các hãng thứ ba có trên Google Play và các kho ứng dụng khác còn cho phép
người dùng thay đổi "chủ đề" của màn hình chính, thậm chí bắt chước hình dáng
của hệ điều hành khác như Windows Phone chẳng hạn. Phần lớn những nhà sản
xuất, và một số nhà mạng, thực hiện thay đổi hình dáng và hành vi của các thiết
bị Android của họ để phân biệt với các hãng cạnh tranh. Ở phía trên cùng màn
hình là thanh trạng thái, hiển thị thơng tin về thiết bị và tình trạng kết nối. Thanh
trạng thái này có thể "kéo" xuống để xem màn hình thơng báo gồm thông tin quan
trọng hoặc cập nhật của các ứng dụng, như email hay tin nhắn SMS mới nhận, mà
không làm gián đoạn hoặc khiến người dùng cảm thấy bất tiện. Trong các phiên
bản đời đầu, người dùng có thể nhấn vào thông báo để mở ra ứng dụng tương ứng,
về sau này các thông tin cập nhật được bổ sung theoe tính năng, như có khả năng
lập tức gọi ngược lại khi có cuộc gọi nhỡ mà khơng cần phải mở ứng dụng gọi
điện ra. Thông báo sẽ ln nằm đó cho đến khi người dùng đã đọc hoặc xóa nó
đi.
Ưu điểm
- Giao diện dễ sử dụng, khả năng tùy biến cao, bạn có thể tùy ý chỉnh sửa
mọi thứ trên hệ điều hành android, trừ các phân vùng trong hệ thống
- Android có sự phổ biến rất cao bởi hệ điều hành này len lỏi ở mọi thiết bị di
động, từ điện thoại cao cấp, trung cấp cho đến những sản phẩm có giá phổ thơng
- Giá thành phải chăng, rẻ hơn so với dòng cao cấp như Iphone
5


- Sử dụng nhiều ứng dụng cùng lúc, đa nhiệm cao
Nhược điểm
- Dễ bị nhiễm các phần mềm độc hại cùng các mã độc, do hệ điều hành
Android cho phép bạn cài đặt các ứng dụng bên ngoài Google Play

- Quá nhiều ứng dụng trên Google Play dẫn đến kiểm sốt chất lượng rất
khó
- Sự phân mảnh lớn của hệ điều hành android
- Khả năng cập nhật hệ điều hành chậm chạp
- Thường xuyên bị đầy bộ nhớ đệm RAM
Phần cứng
Android sử dụng ARM cho nền tảng phần cứng; các phiên bản sau của hệ
điều hành Android hỗ trợ kiến trúc x86 và x86-64. Bắt đầu từ năm 2012, các nhà
sản xuất thiết bị đã phát hành điện thoại thông minh và máy tính bảng Android
với bộ vi xử lý Intel.
Yêu cầu phần cứng tối thiểu của Android phụ thuộc vào kích thước màn
hình của thiết bị, loại và mật độ CPU. Ban đầu, Google yêu cầu bộ xử lý 200MHz,
32MB bộ nhớ và 32 MB RAM
Phần mềm
Để tạo ra một ứng dụng android thì chúng ta cần cài phần mềm Android
Studio và sử dụng một trong hai ngôn ngữ là Java hoặc Kotlin để lập trình ứng
dụng.
1.3.2 Ngơn ngữ Kotlin
a. Giới thiệu ngôn ngữ Kotlin
Kotlin là một ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (JVM) và
có thể biên dịch sang mã nguồn Java hay sử dụng cơ sở hạ tầng trình biên dịch
LLVM. Nó được phát triển bởi JetBrains. Mặc dù cú pháp không tương thích với
Java nhưng ava, nhưng hiện thực JVM của thư viện chuẩn Kotlin được thiết kế để
tương tác với mã Java và dựa vào mã Java từ Java Class Library có sẵn, ví dụ như
collections framework.

6


Kể từ Android Studio 3.0 (phát hành vào tháng 10 năm 2017), Kotlin được

Google hỗ trợ đầy đủ để sử dụng cho việc lập trình ứng dụng cho hệ điều hành
Android của họ và được nhúng trực tiếp vào trong gói cài đặt của IDE đó để thay
thế cho trình biên dịch Java tiêu chuẩn. Trình biên dịch Android Kotlin cho phép
người dùng chọn lựa giữa hướng đến mã bytecode tương thích với Java 6, hay
Java 8.
Ban đầu Kotlin là một ngơn ngữ lập trình chạy trên máy ảo Java, tương tự
ngôn ngữ Java, tương tự như ngôn ngữ Java, Scala, hay Groovy. Đến nay Kotlin
đã mở rộng thành một ngơn ngữ lập trình đa mục tiêu và đa nền tảng. Có thể sử
dụng ngơn ngữ Kotlin để phát triển ứng dụng Windows, Linux …Ngồi ra Kotlin
cũng có thể sử dụng như một ngơn ngữ lập trình cho server (Kotlin for Server
Side) bao gồm:
- Chương trình Server cho lại ứng dụng web truyền thống
- Web API backend cho ứng dụng mobile
- Microservice với RPC
b. Các đặc điểm của Kotlin và ưu điểm so với Java
Kotlin nới lỏng các giới hạn của Java vốn chỉ cho phép phương thức và
biến tĩnh tồn tại trong thân hàm. Đối tượng và hàm tĩnh có thể được định nghĩa ở
mức cao nhất (top level) của gói (package) mà khơng cần một mức của lớp dư
thừa. Để tương thích với Java, Kotlin cung cấp chú thích JvmName để đặc tả một
tên lớp được sử dụng khi gói được xem từ một dự án Java ví dụ: @file:JvmName
(“JavaClassName”).
Ngồi việc cú pháp các dịng lệnh (code) của mình ngắn hơn, súc tích hơn
so với Java thì Kotlin cịn có một số ưu thế tốt hơn: Phương thức mở rộng, hàm
lồng nhau, shell tương tác, An toàn, tránh lỗi NullPointerException kinh điển.
Phương thức mở rộng: Tương tự như C# hay Swift, Kotlin cho phép lập
trình viên bổ sung các phương thức vào bất cứ lớp nào mà không cần phải tạo một
lớp dẫn xuất từ lớp đó với các phương thức mới.

7



Hình 1.1: Hình ảnh ví dụ mã nguồn Kotlin
Bằng cách cài đặt mã trên ở mức cao nhất của gói, lớp String được mở rộng
để thêm vào phương thức lastChar vốn không tồn tại trong định nghĩa ban đầu của
lớp String.
Hàm lồng nhau: Kotlin cho phép các hàm cục bộ (local function) có thể
được định nghĩa bên trong các hàm hoặc phương thức khác, gọi là hàm lồng nhau.
Về cơ bản một ứng dụng Android sẽ được xây dựng dựa trên bốn thành
phần chính đó là: Activity, Service, BroadCast Receiver và Content Provider
- Activity
Trong ứng dụng Android, Activity đóng một phần vô cùng quan trọng, là
nơi giúp người dùng tương tác trực tiếp với ứng dụng. Thành phần này được coi
là xương sống của một ứng dụng, một ứng dụng có thể có một hoặc nhiều Activity
Activity có thể hiển thị ở chế độ màn hình, dạng cửa sổ, hoặc với một kích
thước nhất định. Một Activity có thể gọi đến một Activity khác, Activity được gọi
đến sẽ tương tác với người dùng tại thời điểm được gọi tới.
Một ứng dụng bên ngồi có thể gọi tới bất kỳ Activity nào trong ứng dụng
(nếu được cấp quyền). Ví dụ: Một ứng dụng chụp ảnh sau khi chụp ảnh xong, sẽ
gửi yêu cầu để start một activity có chức năng soạn e-mail trong ứng dụng email
nhằm mục đích gửi ảnh vừa chụp đi.
- Service

8


Service là một thành phần ứng dụng chạy ngầm trên hệ điều hành ví dụ như
nghe nhạc, hoặc tương tác với một content provider. Service không tương tác trực
tiếp với người dùng, khi service chạy thì người dùng vẫn có thể tương tác với một
thành phần khác trong ứng dụng hoặc có thể tương tác với một ứng dụng khác
trong hệ thống.

Ví dụ: Chúng ta có thể vừa nghe nhạc, vừa lướt facebook là do ứng dụng
nghe nhạc có một service chạy ngầm trong background để phát nhạc trong khi
người dùng đang tương tác với ứng dụng facebook.
Theo trang chủ Android, Service trong Android được chia thành 3 loại đó
là: Foreground Service, Background Servie và Bound Service.
- BroadCast Receiver
Broadcast Receiver là một thành phần của ứng dụng giúp lắng nghe các sự
kiện mà hệ thống phát ra thông qua Intent, hệ thống có thể truyền phát ngay cả
khi app khơng chạy. Broadcast Receiver khơng có giao diện cụ thể nhưng nó có
thể thực hiện thơng báo thơng qua thanh Notification. Có rất nhiều broadcast được
phát ra từ hệ thống, chúng ta có thể lấy ví dụ như một broadcast thơng báo rằng
màn hình điện thoại đã tắt, hay điện thoại đang ở trạng thái “Battery Low”, “Power
Connected”, “Power Disconnected” hoặc một bức ảnh đã được chụp.
Cũng có những broadcast được phát ra từ ứng dụng như sau khi download một
tệp, ví dụ: Sau khi hồn thành download một tệp tin, ứng dụng A phát ra thông
báo là dữ liệu đã download xong, tệp đã sẵn sàng cho các ứng dụng khác có thể
sử dụng.
- Content Provider
Content Provider là một thành phần giúp các một ứng dụng có thể đọc và
ghi dữ liệu từ một file hoặc từ SQLite của một ứng dụng khác trong cùng một hệ
thống. Bất kỳ ứng dụng nào có quyền (permisson) đều có thể truy xuất, chỉnh sửa
dữ liệu của một ứng dụng khác. Content Provider được chia thành 2 loại:
Native Content Provider: Là những Content Provider có sẵn, được tạo ra bởi hệ
thống, ví dụ như Contacts, Message …

9


Custom Content Provider: Bao gồm các Content Provider được tạo ra bởi các
developer phụ thuộc vào đặc điểm của từng ứng dụng.

1.3.3 Dịch vụ Firebase
Firebase là một nền tảng để phát triển ứng dụng di động và trang web, bao
gồm các API đơn giản, mạnh mẽ mà không cần backend hay server. Firebase cung
cấp rất nhiều công cụ và dịch vụ để phát triển ứng dụng chất lượng, rút ngắn thời
gian phát triển và phát triển cơ sở mà người dùng khơng cần quan tâm đến hạ tầng
phần cứng

Hình 1.2: Hình ảnh sơ lược Firebase
Firebase là dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây cloud.
Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google. Chức năng chính
là giúp người dùng lập trình ứng dụng bằng cách đơn giản hóa các thao tác với cơ
sở dữ liệu. Cụ thể là những giao diện lập trình ứng dụng API đơn giản. Mục đích
nhằm tăng số lượng người dùng và thu lại nhiều lợi nhuận hơn.
Đặc biệt, còn là dịch vụ đa năng và bảo mật cực tốt. Firebase hỗ trợ cả hai
nền tảng Android và iOS. Khơng có gì khó hiểu khi nhiều lập trình viên chọn
Firebase làm nền tảng đầu tiên để xây dựng ứng dụng cho hàng triệu người dùng
trên toàn thế giới.
Hiện nay Firebase cung cấp rất nhiều dịch vụ từ hệ thống chat thời gian
thực đến A/B testing và cả ML KIT. Dưới đây là một số các dịch vụ nổi trội và
phổ biến của Firebase được nhiều lập trình viên sử dụng
a. Realtime
Firebase Realtime Database là kiểu dữ liệu NoSQL được lưu trữ trên cloud,
cho phép bạn lưu trữ và đồng bộ dữ liệu người dùng theo thời gian thực. Thực
10


chất, dữ liệu của bạn được lưu dưới dạng JSON object, và developer có thể quản
lý theo thời gian thực. Realtime syncing (đồng bộ theo thời gian thực) giúp người
dùng truy cập vào dữ liệu của họ ở bất kỳ thiết bị nào.
Có một ưu điểm của Realtime Database là Firebase sẽ cung cấp cho bạn

một bộ SDK để bạn dễ dàng xây dựng ứng dụng mobile, web mà không cần một
server. Khi thiết bị ngoại tuyến, Realtime Database SDK sẽ sử dụng bộ nhớ của
thiết bị. Ứng dụng vẫn tương tác với người dùng như bình thường. Đến khi thiết
bị online trở lại, nó tự động đồng bộ lên server.
b. Firebase Authentication
Với dịch vụ này, lập trình viên sẽ dễ dàng xây dựng tính năng login mà
khơng cần phải sử dụng dữ liệu đăng ký riêng. Firebase cung cấp các phương thức
authenticate cho ứng dụng như: Email & Password, Phone Numbers, Google,
Facebook, Twitter ….
c. Firebase Database Query
Bình thường, khi làm việc với database như MySQL, SQL Server… muốn
lấy dữ liệu ra thì sẽ cần phải query vào database với câu lệnh SQL rất phức tạp.
Fireabase database query giúp đơn giản hóa q trình này.
Firebase có 4 kiểu sắp xếp
- orderByKey()
- orderByChild(‘child’)
- orderByValue()
- orderByPriority()
- Hay như một số câu lệnh query lấy dữ liệu có giới hạn như:
- startAt(‘value’)
- endAt(‘value’)
- equalTo(‘child_key’) limitToFirst(10) . Remote Config
Thông thường, các ứng dụng sẽ có mục Setting được lưu trữ ở từng thiết
bị. Nếu người dùng mà gỡ ứng dụng thì lần sau cài đặt lại, ứng dụng sẽ mất các
thiết lập trước đó. Hoặc trường hợp khác, nếu người dùng cài đặt ứng dụng trên

11


nhiều thiết bị khác nhau. Họ sẽ phải tự cấu hình thiết lập bằng tay trên từng thiết

bị sao cho giống nhau.
Về phía nhà phát hành, nếu bạn muốn cập nhập thiết lập ứng dụng từ xa
như: đến một ngày nào đặc biệt nào đó (Nghỉ lễ tết, ngày quốc tế phụ nữ…), bạn
muốn đổi màu ứng dụng, muốn hiển thị Promotion nào đó để quảng cáo. Và
Remote Config là giải pháp giúp bạn thực hiện điều đó. Bạn sẽ chỉ phải cập nhật
trên Fireabase mà ứng dụng phía người dùng sẽ tự đổi theo.

12


d. FCM (Firebase Cloud Message)
Đây chính là tính năng mới của Firebase giúp chúng ta xây dựng ứng dụng
chat- trò chuyện mà có thơng báo lập tức khi nhận được tin nhắn. Giờ đây, nó cịn
cho phép bạn đẩy thơng báo (push notification) tới nhiều thiết bị Android, IOS
hay Web. Lập trình viên có thể gửi thơng báo (tối đa 2KB) hay tin nhắn (giới hạn
4KB) với độ tin cậy cao và được tối ưu cho Battery. Với FCM, lập trình viên có
thể tích hợp với Firebase Analytics để có thể dễ dàng phân tích người dùng, từ đó
đưa ra chiến lược marketing hợp lý.

Hình 1.3 Push notification
1.3.4 Một số thư viện sử dụng
a. RX
RxJava là một trong những Reactive Extension, dành cho ngơn ngữ Java:
- Về cơ bản nó là một thư viện follow theo Observer Pattern.
- Bạn có thể tạo ra bất kì luồng dữ liệu khơng đồng bộ trên bất kỳ thread nào,
chuyển đổi dữ liệu và dữ liệu này được sử dụng bởi Observer trên bất kỳ thread
nào. Thư viện này cung cấp nhiều toán tử tuyệt vời như Map, Combine, Merge,
Filter, có thể áp dụng cho một luồng dữ liệu.
Rx Kotlin là tập hợp các phương thức bổ sung thêm (extension methods) của
RxJava cho Kotlin. Sẽ có các phương thức giúp bạn dễ dàng tạo ra code reactive

programming hơn, chuyển đổi, kết hợp các kiểu phát dữ liệu, ...
RxAndroid là một loại Rx dành cho nền tảng Android. Nó được hình thành từ
RxJava với vài lớp được thêm vào, giúp áp dụng reactive programming trong
Android dễ dàng, hiệu quả hơn

13


Các thành phần cơ bản của RX

Hình 1.4 Sơ đồ mô tả Rx
-

Observable
Là một luồng dữ liệu (data stream) làm cơng việc nào đó và phát ra dữ liệu
(data). Theo hình vẽ thì đó là đường mũi tên ở trên, thực hiện xử lý gì đó và phát
ra các dữ liệu là các khối hình.
- Observer
Là những đối tượng lắng nghe Observable. Nó nhận dữ liệu từ Observable phát
ra. Theo hình vẽ thì nó là đường mũi tên ở dưới, nhận dữ liệu từ Observer là các
khối hình sau khi đã được xoay.
- Subscription
Sự liên kết giữa Observable và Observer được gọi là Subscription. Có thể có
nhiều Observers đăng ký (subscribed) tới chỉ một Observable.
- Schedulers
Schedulers quyết định thread mà trên đó Observable sẽ phát ra dữ liệu và
trên Observer sẽ nhận được dữ liệu.
- Operator / Transformation
Operator cịn có thể gọi là Transformation bởi vì nó là các tốn tử có nhiệm
vụ biến đổi dữ liệu được phát ra bởi Observable trước khi một Observer nhận

chúng (nhận dữ liệu).
b. Dagger2
Là một dependency injector, khác với các dependency injector dành cho
việc triển khai ứng dụng Enterprise như Spring IoC hay JavaEE CDI. Dagger
Được thiết kế cho các thiết bị low-end, nhỏ gọn nhưng vẫn đầy đủ tính năng.
14


Hầu hết các dependency injector sử dụng reflection để tạo ra và inject các
module. Reflection nhanh và thích hợp cho các version Android cũ nhưng
reflection gây ra khó khăn rất lớn trong việc debug hay tracking khi gặp lỗi.
Thay bằng việc sử dụng reflection Dagger sử dụng một trình biên dịch trước
(pre-compiler), trình biên dịch này tạo ra tất cả các lớp, các module cần thiết để
làm việc.
Dagger ít mạnh mẽ so với các dependency injector khác nhưng thay vào đó
Dagger lại nhẹ nhàng và dễ dàng sử dụng cũng như gần như bỏ đi được điểm yếu
của dependency injector là khả năng tracking bug.
Dagger 2 sử dụng chủ yếu các anotation sau:
@Module & @Provides: Sử dụng để định nghĩa class và method cần cung
cấp sự phụ thuộc.
@Inject : request 1 dependencies. Có thể sử dụng với 1 constructor, 1 field
hoặc 1 method.
@Component:Nó là 1 interface dùng để làm cầu nối giữa module và
injection .

Hình 1.5 Sơ đồ biểu diễn Dagger

15



CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ HỆ THỐNG
2.1 Biểu đồ Use case
2.1.1 Biểu đồ Use case tổng quát
Qua quá trình phân tích ở chương I chúng ta sẽ phân tích thiết kế hệ thống
như sau:
2.1.1.1 Ứng dụng dành cho khách hàng - HomeStay
User bao gồm khách du lịch và chủ nhà
* Các Actor gồm có:
- Khách có nhu cầu đi du lịch, nghỉ dưỡng.
- Chủ nhà có phịng cho th dịch vụ nghỉ dưỡng.
* Các Use case chính gồm có:
- Đăng kí tài khoản.
- Đăng nhập tài khoản.
- Quản lý tài khoản cá nhân của user.
- Quản lý danh sách phòng đã book của khách.
- Quản lý danh sách phòng đã thêm của chủ nhà.
- Bình luận phịng của khách.
- Report khách hàng của chủ nhà.
- Xem thời tiết để lựa chọn phù hợp chuyển đi.
- Xem bản đồ để lựa chuyến đi an toàn.

16


Hình 2.1 Biểu đồ Use case tổng quát của ứng dụng khách hàng

17


2.1.1.2 Ứng dụng dành cho Admin - AdminHomeStay

* Actor gồm có: Admin là người quản trị của hệ thống HomeStay.
* Use case chính:
- Quản lý tài khoản cá nhân Admin,
- Quản lý tài khoản user bao gồm tài khoản
khách du lịch và tài khoản chủ nhà cho thuê dịch vụ
- Quản lý việc khóa tài khoản, mở tài khoản
- Cập nhật điểm du lịch cho hệ thống

Hình 2.2 Biểu đồ Use case tổng quát của ứng dụng Admin

18


×