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

đồ án 2 xây dựng ứng dụng mobile đặt phòng 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 (957.1 KB, 50 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>GV HƯỚNG DẪN:TS. Đỗ Thị Thanh TuyềnSV THỰC HIỆN: Lưu Kim Triều</b>

<b>MÃ SỐ SINH VIÊN:20520941</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>LỜI CẢM ƠN</b>

Lời đầu tiên, em xin gửi lời cảm ơn chân thành nhất đến TS. Đỗ Thị ThanhTuyền, giảng viên đã hướng dẫn em trong bộ môn Đồ án 2. Trong quá trình học tập vàthực hiện đồ án, em đã nhận được sự quan tâm giúp đỡ, hướng dẫn rất tận tình, tâmhuyết của Cơ. Q trình thực hiện Đồ án 2 là một quá trình đầy thử thách, địi hỏi phảidành nhiều thời gian, cơng sức để nghiên cứu, tìm tịi và xây dựng. Vì thế, đây cũng làcơ hội để em được rèn luyện, hồn thiện bản thân bằng những kĩ năng tích lũy đượctrong suốt q trình học. Chính nhờ những sự góp ý, động viên hết sức quý báu khôngchỉ là động lực trong q trình thực hiện đồ án mơn học này mà cịn là hành trang đểem có thể vững bước sau này.

Do vốn kiến thức vẫn còn nhiều hạn chế và khả năng tiếp thu còn nhiều giớihạn, em khơng tránh khỏi có những thiếu sót. Em rất mong nhận được những góp ý, sựquan tâm đến từ Cơ để đồ án của em được hoàn thiện hơn.

Lời cuối cùng, em xin chân thành cảm ơn Cô và xin kính chúc Cơ nhiều sứckhỏe, hạnh phúc và thành cơng trên con đường sự nghiệp giảng dạy.

30 tháng 12 năm 2023

Sinh viên

<b>Lưu Kim Triều</b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Chương 3. PHÂN TÍCH THIẾT KẾ HỆ THỐNG...19

3.1. Đối tượng và phạm vi nghiên cứu và lựa chọn giải pháp công nghệ...19

3.1.1. Đối tượng nghiên cứu...19

3.1.2. Phạm vi nghiên cứu...19

3.1.3. Lựa chọn giải pháp cơng nghệ...19

3.2. Mơ hình Use Case...20

3.2.1. Sơ đồ Use Case...20

3.3. Phân rã và đặc tả Use Case...21

3.3.1. Use Case “Tìm khách sạn”...21

3.3.2. Use Case “Đăng nhập”...25

3.3.3. Use Case “Đặt phịng”...28

3.3.4. Use Case “Tạo danh sách u thích”...30

3.4. Thiết kế cơ sở dữ liệu...33

Chương 4. TRIỂN KHAI ỨNG DỤNG...38

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

KẾT LUẬN...49 Kết quả đạt được

 Kết quả đạt được ...49  Kết quả đạt đượcƯu điểm và nhược điểm...49

Ưu điểm

➢ Ưu điểm ...49 Nhược điểm

➢ Ưu điểm ...49 Hướng phát triển

 Kết quả đạt được ...50TÀI LIỆU THAM KHẢO...51

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>DANH MỤC BẢNG</b>

Bảng 3.1. Danh sách Use Case...21

Bảng 3.2. Đặc tả Use Case “Tìm kiếm khách sạn theo tên”...22

Bảng 3.3. Đặc tả Use Case “Tìm kiếm khách sạn theo khu vực”...22

Bảng 3.4. Đặc tả Use Case “Xem thông tin chi tiết”...23

Bảng 3.5. Đặc tả Use Case “Đánh giá, bình luận”...24

Bảng 3.6. Danh sách Use Case...25

Bảng 3.7. Đặc tả Use Case “Đăng ký”...26

Bảng 3.8. Đặc tả Use Case “Đăng nhập”...26

Bảng 3.9. Đặc tả Use Case “Đăng xuất”...27

Bảng 3.10. Danh sách Use Case...28

Bảng 3.11. Đặc tả Use Case “Đặt phòng”...28

Bảng 3.12. Đặc tả Use Case “Xem lại hóa đơn”...29

Bảng 3.13. Danh sách Use Case...30

Bảng 3.14. Đặc tả Use Case “Thêm vào danh sách yêu thích”...31

Bảng 3.15. Đặc tả Use Case “Xóa khỏi danh sách yêu thích”...31

Bảng 3.16. Đặc tả Use Case “Xem danh sách u thích”...32

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>DANH MỤC HÌNH ẢNH</b>

Hình 2.1. Kotlin...14

Hình 2.2. Firebase...15

Hình 2.3. Mơ hình Model-View-ViewModel...17

Hình 3.1. Sơ đồ Use Case mức tổng quát...20

Hình 3.2. Sơ đồ Use Case “Tìm khách sạn”...21

Hình 3.3. Sơ đồ Use Case “Đăng nhập”...25

Hình 3.4. Sơ đồ Use Case “Đặt phịng”...28

Hình 3.5. Sơ đồ Use Case “Tạo danh sách u thích”...30

Hình 3.6. Lược đồ cơ sở dữ liệu...33

Hình 4.1. Màn hình bắt đầu...38

Hình 4.2. Màn hình đăng nhập...39

Hình 4.3. Màn hình đăng ký...40

Hình 4.4. Màn hình Home...41

Hình 4.5. Màn hình thơng tin chi tiết (1)...42

Hình 4.6. Màn hình thơng tin chi tiết (2)...42

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>TÓM TẮT ĐỒ ÁN</b>

Trong xã hội hiện đại, nhu cầu đi lại, du lịch của con người là một điều tất yếu của cuộc sống. Song song với sự phát triển của cơ sở hạ tầng, đường sá đi lại, phương tiện giao thơng thì chỗ ở cũng bắt buộc phải được nâng cấp để theo kịp những địi hỏi của con người. Do đó sự xuất hiện của những công cụ, ứng dụng giúp con người dễ dàng tìm kiếm và đặt chỗ ở cho chuyến đi của mình cũng là điều hiển nhiên. Ứng dụng mobile GoGo được xây dựng mục đích chính là đáp ứng nhu cầu đó của xã hội. Một trong những tiêu chí ban đầu khi bắt đầu xây dựng ứng đó là giúp người dùng dễ dàng tìm được những khách sạn ở nơi mình đến, đáp ứng được những yêu cầu cá nhân của người dùng.

Báo cáo trình bày dưới đây bao gồm 4 chương chính bao gồm:

● Chương 1: Tổng quan: trình bày tổng quan về đồ án, giới thiệu về các ứngdụng đặt phòng khách sạn hiện có, khảo sát các chức năng của các ứng dụng tương tự.

● Chương 2: Cơ sở lý thuyết: trình bày các cơ sở lý thuyết liên quan đến đề tàinhư công nghệ và kiến trúc liên quan.

● Chương 3: Phân tích thiết kế hệ thống: trình bày q trình phân tích và thiếtkế hệ thống qua các mơ hình use case và thiết kế cơ sở dữ liệu.

● Chương 4: Triển khai ứng dụng: thiết kế và đặc tả màn hình.

● Kết luận: tổng kết các kết quả đạt được trong quá trình nghiên cứu và đưa racác kết luận tổng quát về đề tài.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

Để đáp ứng nhu cầu ở lại của khách du lịch mà vô số các khách sạn, nhà nghỉ đã mọc lên khắp nơi. Như trước đây, khi mà mạng Internet và các thiết bị di động vẫn chưa đáp ứng được nhu cầu của người sử dụng thì các khách du lịch sẽ rất khó khăn để lựa chọn khách sạn. Một vài bất cập phổ biến đó là họ phải đến tận nơi, hỏi giá và phòng trống từng khách sạn ở địa điểm du lịch để lựa chọn được nơi ở phù hợp với nhucầu của mình. Họ sẽ khơng thể đặt phịng trước cũng như khơng thể biết được chất lượng phục vụ có thật sự tốt như chủ khách sạn đã quảng cáo hay không.

Nhưng với sức mạnh của công nghệ và Internet hiện tại có thể dễ dàng giải quyết các vấn đề trên một cách nhanh chóng. Chính vì để giải quyết những khó khăn trên và cải thiện chất lượng du lịch của mọi người nên em quyết định thực hiện đề tài Xây dựng ứng dụng mobile đặt phòng khách sạn. Thơng qua ứng dụng, mọi người có thể tìm và khảo sát trước các khách sạn ở khu vực du lịch cũng như đặt phòng trước cho chuyến đi sắp tới. Bên cạnh đó người dùng cũng có thể tự mình đánh giá nhận xét về chất lượng dịch vụ của khách sạn đồng thời xem những nhận xét của người khác về khách sạn.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<small></small> Dịch vụ đặt phòng khách sạn, khu nghỉ dưỡng, nhà trọ,... .<small></small> Ln cập nhật các chương trình ưu đãi hấp dẫn, thường xuyên.

<small></small> Hệ thống thanh toán đa dạng, phong phú phù hợp với nhu cầu của người dùng.

<small></small> Mạng lưới đối tác rộng lớn, uy tín.

<small></small> Giao diện Tiếng Việt thân thiện, trực quan.

<small></small> Tương thích với cả 2 nền tảng di động lớn iOS và Android.

<b>1.3.2. Booking.com</b>

Booking.com là một nền tảng cung cấp dịch vụ đặt phịng trực tuyến. Qua đó, nhà cung cấp chỗ nghỉ (khách sạn, nhà nghỉ, căn hộ) có thể chào bán các sản phẩm và dịch vụ đặt phịng của họ. đồng thời khách hàng có thể sử dụng để thực hiện đặt phịng.

Nói cho dễ hiểu, Booking.com đóng vai trị như một đại lý trung gian kết nối nhà cung cấp và khách hàng. Khi khách hàng đặt phịng thành cơng, nhà cung cấp sẽ mất một khoản phí “hoa hồng” cho Booking.com (tùy từng khách sạn).

<b>1.3.3. Traveloka</b>

Traveloka là một ứng dụng booking trực tuyến hàng đầu của Indonesia Kết hợpvới hơn 120.000 khách sạn trong khu vực và trên toàn thế giới, cùng hơn 100.000

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

đường bay khắp châu Á, Châu Âu và châu Mỹ. Hiện nay, Traveloka đã có mặt tại hầu hết quốc gia Đông Nam Á, như Thái Lan, Singapore, Malaysia, Philippine và cả nước ta.

Khi được thành lập vào năm 2012, Traveloka chỉ hoạt động trong lĩnh vực cungcấp dịch vụ đặt vé máy bay online. Dịch vụ đặt phòng khách sạn trực tuyến được Traveloka cung cấp từ Tháng 7 năm 2014, nhằm đáp ứng nhu cầu của khách hàng là mỗi khi đặt vé máy bay xong họ thường cần đặt luôn cả khách sạn.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Kotlin do Kotlin Foundation quản lý, một nhóm do JetBrains và Google tạo ra với nhiệm vụ thúc đẩy và tiếp tục phát triển ngôn ngữ này. Google chính thức hỗ trợ Kotlin trong hoạt động phát triển Android, nghĩa là việc thiết kế tài liệu và công cụ của Android luôn chú ý đến Kotlin.

<b>2.1.2. Tại sao lại là Kotlin? </b>

Một số API của Android (như Android KTX) chỉ dành riêng cho Kotlin nhưng hầu hết đều được viết bằng Java và có thể gọi qua Java hoặc Kotlin. Khả năng tương tác của Kotlin với Java là yếu tố cốt lõi tạo ra sự tăng trưởng của mã này. Tức là bạn cóthể gọi mã Java qua Kotlin và ngược lại, tận dụng tất cả thư viện Java hiện có. Sự phổ biến của Kotlin mang lại trải nghiệm phát triển tốt hơn trên Android, nhưng việc phát triển khung Android vẫn tiếp tục chú ý đến cả Kotlin và Java.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Những điểm mạnh của ngơn ngữ Kotlin có thể kể đến như:

<small></small> Kotlin biên dịch tới JVM bytecode: giống như Java, Bytecode ở đây nghĩa là sau khi biên dịch code sẽ được chạy qua một máy ảo thay vì là bộ vi xử lý của máy tính. Bằng cách này thì source code có thể chạy trên mọi nền tảng. Sau khi chương trình Kotlin được convert thành bytecode, nó sẽ được tải qua network và thực thi bởi JVM(Java Virtual Machine).

<small></small> Kotlin có thể sử dụng tồn bộ những Framework và thư viện sẵn có của Java. Điểm đặc biệt nhất về Kotlin là nó có thể dễ dàng kết hợp với Maven, Gradle và các hệ thống build khác.

<small></small> Kotlin là một ngôn ngữ rất dễ học, cú pháp rất trong sách và dễ hiểu. Kotlincó nét giống như Scala nhưng đơn giản hơn.

<small></small> JetBrains cũng đã đính kèm tính năng tự động chuyển đổi Java thành Kotlin, qua đó tiết kiệm được rất nhiều thời gian cho lập trình viên.

<small></small> Giống như Swift, thì Kotlin cũng là một ngơn ngữ an tồn, với cơ chế safety, sẽ khơng cịn khái niệm NullPointerExceptions nữa.

<small>null-</small> Sử dụng mã nguồn mở: không tốn kém dung lượng cho người dùng.

<b>2.2. Firebase</b>

<b>2.2.1. Firebase là gì?</b>

<i>Hình 2.2. Firebase.</i>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Firebase là một nền tảng giúp phát triển các ứng dụng di động trong web. Bên cạnh đó, Firebase cịn được hiểu là một dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây cloud với hệ thống máy chủ mạnh mẽ của Google.

Firebase chứa cơ sở dữ liệu mang đến khả năng code nhanh và thuận tiện hơn. Lập trình viên có thể dễ 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 sẵn có.

<b>2.2.2. Lịch sử hình thành và phát triển</b>

<small></small> Vào năm 2011, James Tamplin và Andrew Lee đã cho ra mắt Evolve. Đây là một nền tảng có cấu trúc khá đơn giản chuyên cung cấp các API cần thiết để tích hợp tính năng trị chuyện vào các trang web. Tuy nhiên, họ nhận ra rằng nền tảng này đang được sử dụng để truyền dữ liệu ứng dụng chứ không đơn giản là chat. Sau đó,họ đã phát triển Envole và tạo nên Firebase.

<small></small> Đến tháng 4 năm 2012, Firebase đã được công bố trên tồn cầu dưới dạng một cơng ty riêng biệt. Những năm sau đó, Firebase đã thực hiện nhiều cuộc huy động vốn và ra mắt các sản phẩm mới.

<small></small> Đến tháng 10 năm 2014, Firebase đã chính thức được Google mua lại và trở thành một ứng dụng đa năng trên nền tảng di động và website.

<b>2.2.3. Lợi ích khi sử dụng Firebase:</b>

<small></small> Sử dụng miễn phí và thuận tiện. Firebase có giao diện trực quan và thân thiện. Sau khi đăng ký tài khoản, bạn chỉ cần đăng nhập vào là đã có thể sử dụng các tính năng của Firebase. Ngồi ra, Firebase có một kho backend với giao diện đa dạng, phong phú giúp bạn thoải mái lựa chọn.

<small></small> Dễ sử dụng và tích hợp. Firebase có giao diện trực quan và thân thiện. Sau khi đăng ký tài khoản, bạn chỉ cần đăng nhập vào là đã có thể sử dụng các tính năng của Firebase. Ngồi ra, Firebase có một kho backend với giao diện đa dạng, phong phú giúp bạn thoải mái lựa chọn.

<small></small> Đáp ứng nhu cầu người dùng. Firebase chính là một phần của Google. Vì vậy, Google đã khơng ngừng khai thác và phát triển triệt để những điểm mạnh và các

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<b>2.3. Android Jetpack2.3.1. Mô hình MVVM</b>

<i>Hình 2.3. Mơ hình Model-View-ViewModel.</i>

<small></small> <b>Model chứa tất cả các data classes, database classes, API và repository.</b>

<small></small> <b>View là thành phần UI đại diện cho trạng thái hiện tại cảu thơng tin mà người dùng</b>

có thể nhìn thấy.

<small></small> <b>ViewModel chứa data cần thiết trong View và chuyển dịch data được lưu trữ </b>

trong Model mà sau đó có thể có trong View. ViewModel và View được kết thơng thơng qua Databiding và observable Livedata

Đa số các ứng dụng thuộc bất kì nền tảng nào cũng có thể chia thành hai phần: giao diện (View) và dữ liệu (Model). Vì việc tách riêng các phần này, cần phải có một phần trung gian nào đó nối kết hai phần này lại, và chúng tạo nên một mơ hình

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<small></small> Vì chúng ta sử dụng ViewModel và LivaData để nhận biết vịng đời của Activity, nó sẽ dẫn đến ít crashes và memory leaks.

<b>2.3.2. Live Data</b>

LiveData là observable data holder class. Không giống như các observables khác, nó nhận thức được vịng đời, tức là nhận nhận thức được vòng đời của các components như là activity, fragment hay services. Điều này có nghĩa là nó chỉ cập nhật các component observers khi chúng ở trạng thái vòng đời hoạt động.

<b>2.3.3.Data Binding</b>

Là library hỗ trợ cho phép chúng ta liên kết với các thành phần UI của mình từ layout với data source trong ứng dụng của chúng ta bằng cách khai báo thay vì lập trình. Chúng ta định nghĩa tồn bộ XML trong thẻ <layout> </ layout>. Chúng ta dùng thẻ <variable></variable> để xác định các custom object mà sau đó có thể được sử dụng bên trong các layout views.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<b>Chương 3. PHÂN TÍCH THIẾT KẾ HỆ THỐNG</b>

<b>3.1. Đối tượng và phạm vi nghiên cứu và lựa chọn giải pháp công nghệ3.1.1. Đối tượng nghiên cứu</b>

- Những người dùng thường xuyên đi lại, công tác, du lịch.

<b>3.1.2. Phạm vi nghiên cứu</b>

- Phạm vi môi trường: Triển khai ứng dụng trên thiết bị di động hệ điều hành android.

- Phạm vi chức năng:

<small>Ç</small> Quản lý tài khoản và dữ liệu các khách sạn.

<small>Ç</small> Tìm kiếm khách sạn phù hợp với u cầu của người dùng.<small>Ç</small> Người dùng có thể nhận xét, đánh giá về khách sạn.

<b>3.1.3. Lựa chọn giải pháp công nghệ</b>

- Ngôn ngữ: Kotlin.- Database: Firebase.

- Quản lý source code: Github.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<b>3.3. Phân rã và đặc tả Use Case3.3.1. Use Case “Tìm khách sạn”</b>

<i>Hình 3.2. Sơ đồ Use Case “Tìm khách sạn”.</i>

<small></small> <b>Danh sách Use Case</b>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<small></small> <b>Đặc tả Use Case “Tìm kiếm khách sạn theo tên”</b>

<i>Bảng 3.2. Đặc tả Use Case “Tìm kiếm khách sạn theo tên”</i>

<b>Use Case ID</b> UC-1.1

<b>Tên Use Case</b> Tìm kiếm khách sạn theo tên

<b>Tác nhân</b> Người dùng

<b>Sự kiện kích hoạt</b> Người dùng có nhu cầu tìm kiếm một khách sạn.

<b>Luồng chính</b> 1. Người dùng đăng nhập vào ứng dụng.2. Người dùng bấm chọn Seach.

3. Người dùng nhập tên của khách sạn.

<b>Điều kiện trước</b> Điện thoại phải có kết nối mạng.

<b>Điều kiện sau</b> Hiển thị khách sạn đúng như tên đã nhập.

<small></small> <b>Đặc tả Use Case “Tìm kiếm khách sạn theo khu vực”</b>

<i>Bảng 3.3. Đặc tả Use Case “Tìm kiếm khách sạn theo khu vực”</i>

<b>Use Case ID</b> UC-1.2

<b>Tên Use Case</b> Tìm kiếm khách sạn theo khu vực

<b>Tác nhân</b> Người dùng

<b>Sự kiện kích hoạt</b> Người dùng có nhu cầu tìm kiếm một khách sạn ở khu vực nào đó

<b>Luồng chính</b> 1. Người dùng đăng nhập vào ứng dụng.2. Người dùng bấm chọn Seach.

3. Người dùng nhập tên khu vực muốn tìm khách sạn.

<b>Điều kiện trước</b> Điện thoại phải có kết nối mạng.

<b>Điều kiện sau</b> Hiển thị khách sạn có ở khu vực đã nhập.

<small></small> <b>Đặc tả Use Case “Xem thông tin chi tiết”</b>

<i>Bảng 3.4. Đặc tả Use Case “Xem thông tin chi tiết”</i>

<b>Use Case ID</b> UC-1.3

<b>Tên Use Case</b> Xem thông tin chi tiết

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<b>Tác nhân</b> Người dùng

<b>Sự kiện kích hoạt</b> Người dùng có nhu cầu xem thơng tin chi tiết của một khách sạn.

<b>Luồng chính</b> 1. Người dùng đăng nhập vào ứng dụng.2. Người dùng bấm chọn Search.

3. Người dùng nhập tên của khách sạn.

4. Người dùng bấm vào ảnh để xem thông tin chi tiết của khách sạn.

<b>Điều kiện trước</b> Điện thoại phải có kết nối mạng.

<b>Điều kiện sau</b> Hiển thị đúng thông tin chi tiết của khách sạn.

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<small></small> <b>Đặc tả Use Case “Đánh giá, bình luận”</b>

<i>Bảng 3.5. Đặc tả Use Case “Đánh giá, bình luận”</i>

<b>Use Case ID</b> UC-1.4

<b>Tên Use Case</b> Đánh giá, bình luận

<b>Tác nhân</b> Người dùng

<b>Sự kiện kích hoạt</b> Người dùng có nhu cầu đánh giá một khách sạn.

<b>Luồng chính</b> 1. Người dùng đăng nhập vào ứng dụng.2. Người dùng bấm chọn Search.

3. Người dùng chọn khách sạn mình muốn nhận xét.4. Người dùng bấm vào Comment.

5. Người dùng nhập bình luận, đánh giá số sao và xác nhận.

<b>Điều kiện trước</b> Điện thoại phải có kết nối mạng.

<b>Điều kiện sau</b> Hiển thị đúng thông tin chi tiết của khách sạn.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>3.3.2.Use Case “Đăng nh p”ập”</b>

<i>Hình 3.3. Sơ đồ Use Case “Đăng nhập”.</i>

<small></small> <b>Danh sách Use Case</b>

<i>Bảng 3.6. Danh sách Use Case</i>

1 Đăng ký2 Đăng nhập3 Đăng xuất

</div>

×