GIỚI THIỆU
Đặt vấn đề
Ngày nay, các dịch vụ về du lịch là 1 nhu cầu thiết yếu, ai cũng cần đi du lịch và ai cũng muốn trải nghiệm những dịch vụ du lịch trở nên tiện lợi dù bạn đang ở nơi đâu Bên cạnh đó, chúng ta cũng có những nhóm nguời muốn được tự mình khám phá tự mình lên kế hoạch để đi nhưng chưa biết bắt đầu từ đâu nên đã gây khá nhiều bất tiện trong việc du lịch tự túc.
Cách giải quyết
Sau khi hiểu đuợc tình hình trên, nhóm em đã lên ý tưởng xây dựng 1 ứng dụng
“Booking khách sạn và xe kết hợp với review du lịch” Ứng dụng này ra đời nhằm đáp ứng các nhu cầu thực hiện hoá việc đi chơi tự túc trở nên dễ dàng hơn đối với mọi nguời, và cũng như cho các chủ khách sạn có thể dễ dàng tiếp cận với khách hàng hơn thông qua ứng dụng này để cung cấp dịch vụ cho khách hàng của mình thông qua 1 ứng dụng.
Lý do chọn đề tài này
Lý do bọn em chọn đề tài này là để cung cấp 1 công cụ có thể giúp cho ngời dùng có thể dễ dàng chủ động trong việc du lịch tự túc cũng như bản thân của bọn em và có thể dễ dàng hơn trong việc lên kế hoạch và booking trong việc du lịch tự túc và cũng thuận tiện hơn cho các chủ doanh nghiệp giới thiệu dịch vụ của mình đến người dùng.
Đối tượng
Nhóm đối tượng mà bọn em hướng đến đó là nhóm người dùng muốn đi du lịch tự túc và nhóm chủ khách sạn hoặc chủ xe muốn cung cấp dịch vụ cho người du lịch tự túc nhằm tạo ra cầu nối những các chủ dịch vụ với khách hàng.
Mục tiêu
Xây dựng ứng dụng hỗ trợ cho người dùng muốn trải nghiệm du lịch tự túc, đồng thời cũng cung cấp 1 ứng dụng hoạt động như một nơi chia sẽ các kế hoạch du lịch tự túc của mọi người với nhau, một cầu nối giữa các doanh nghiệp với người dùng để tiện lợi hơn trong các việc đặt phòng khách sạn hoặc thuê xe cho du lịch.
Xây dựng 1 giao diện phần mềm một cách trực quan, sinh động, thân thiện với ngời dùng hơn Các xử lý thành phần hoạt động một cách thực tế và mượt mà hơn để đem lại trải nghiêm thú vị và đồng thời tiện ích cho người dùng lẫn các doanh nghiệp.
TỔNG QUAN
Tổng quan về đồ án
Tên tiếng việt: Xây dựng ứng dụng booking khách sạn và xe kết hợp với review du lịch.
2.1.2 Link github quản lý source code:
- Link github ứng dụng mobile dành cho nguời dùng lẫn doanh nghiệp: https://github.com/20520327/DA1_Front_end
- Link github server backend: https://github.com/Dcode-D/Do_an_1
Cơ sở lý thuyết
Đồ án được xây dựng dựa trên những cơ sở lý thuyết sau:
“Trong công nghệ điện toán, đa nền tảng (tiếng Anh: cross-platform hay multiplatform) là một thuật ngữ chỉ các phần mềm máy tính hay các phương thức điện toán và cáckhái niệm được thực thi đầy đủ và vận hành cùng nhau trên nhiều nền tảng máy tính Phần mềm đa nền tảng có thể được chia thành hai loại; một loại yêu cầu phải thiết kế hoặc biên dịch từng phiên bản cho mỗi nền tảng nó hỗ trợ; loại kia có thể chạy trực tiếp trên bất cứ nềntảng nào mà không cần sự chuẩn bị thêm đặc biệt nào - chẳng hạn như phần mềm được viết bằng một ngôn ngữ thông dịch hay được biên dịch trước sang mã bytecode có khả năng di động bằng một trình thông dịch hay các gói run-time thường dùng hoặc là thành phần tiêu chuẩn trên mọi nền tảng”.
Cross Platform hay Multi Platform là thuật ngữ được sử dụng để chỉ các ứng dụng đa nền tảng Hiểu đơn giản, chỉ với một bản code, bạn có thể phiên dịch và sử dụng trên nhiều nền tảng hệ điều hành khác nhau, các môi trường lập trình khác nhau hoặc thậm chí là trên các loại thiết bị phần cứng vật lý khác nhau Điều này sẽ giúp lập trình viên tiết kiệm được rất nhiều công sức và thời gian đáng kể.
Chính vì điều đó mà Cross Platform thường được các lập trình viên ưa chuộng Tuy nhiên, dựa vào các ưu và nhược điểm của các Framework bởi Cross Platform sử dụng Framework đa nền tảng để áp dụng vào công việc của mình.
Cho đến thời điểm hiện tại, React-Native, Xamarin và Flutter đang được xem là 3 nền tảng phổ biến nhất được cho phép phát triển ứng dụng trên smartphone với các hệ điều hành khác nhau (cross-platform mobile development) Chỉ cần với 1 chương trình đuợc viết thì có thể chạy trên hầu hết tất cả nền tảng; Cụ thể hơn đó là 1 project nhưng có thể tạo ra ứng dụng chạy trên các smartphone có hệ điều hành khác nhau.
Hình 2 Cross-platform mobile development
2.2.1.2 Ưu điểm, hạn chế của Cross Platform:
Khi bạn dùng Cross platform ở nhiều phiên bản khác bạn vẫn có thể sử dụng một bản code.
Khi sử dụng Cross platform bạn sẽ tiết kiệm được nhiều chi phí và công sức ngồi viết code.
Cross platform rất phù hợp cho những dự án lớn và đòi hỏi tính linh hoạt đa dạng.
Cross Platform không có khả năng khai thác thư viện của Android hoặc IOS
Việc cấp phép cho công nghệ của ứng dụng Cross Platform phức tạp và khó khăn
RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng
Nó chú trọng vào tài nguyên hệ thống (tệp văn bản, ảnh, âm thanh, video, hoặc dữ liệu động…), bao gồm các trạng thái tài nguyên được định dạng và được truyền tải qua HTTP.
API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML.
REST (REpresentational State** T**ransfer) là một dạng chuyển đổi cấu trúc dữ liệu, một kiểu kiến trúc để viết API Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếp giữa các máy Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông tin người dùng, REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một URL để xử lý dữ liệu.
RESTful API là một tiêu chuẩn dùng trong việc thiết kế các API cho các ứng dụng web để quản lý các resource RESTful là một trong những kiểu thiết kế API được sử dụng phổ biến ngày nay để cho các ứng dụng (web, mobile…) khác nhau giao tiếp với nhau.
2.2.2.2 Hoạt động của restful API:
REST hoạt động chủ yếu dựa vào giao thức HTTP Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng.
+ GET (SELECT): Trả về một Resource hoặc một danh sách Resource. + POST (CREATE): Tạo mới một Resource.
+ PUT (UPDATE): Cập nhật thông tin cho Resource.
+ DELETE (DELETE): Xoá một Resource.
Những phương thức hay hoạt động này thường được gọi là CRUD tương ứng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa.
Hiện tại đa số lập trình viên viết RESTful API giờ đây đều chọn JSON là format chính thức nhưng cũng có nhiều người chọn XML làm format, nói chung dùng thế nào cũng được miễn tiện và nhanh.
Expressjs là một framework được xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile. Expressjs hỗ trợ các method HTTP và midleware tạo ra API vô cùng mạnh mẽ và dễ sử dụng.
Tổng hợp một số chức năng chính của Expressjs như sau:
+ Thiết lập các lớp trung gian để trả về các HTTP request.
+ Define router cho phép sử dụng với các hành động khác nhau dựa trên phương thức HTTP và URL.
+ Cho phép trả về các trang HTML dựa vào các tham số.
WebSocket là một giao thức truyền tải dữ liệu hai chiều (full-duplex) trên web, cho phép truyền tải dữ liệu trong thời gian thực giữa trình duyệt web và máy chủ WebSocket cho phép một kết nối duy trì giữa máy khách và máy chủ, vì vậy các thông tin có thể được gửi đi và nhận lại một cách hiệu quả và nhanh chóng mà không cần phải thiết lập kết nối mới mỗi khi truyền tải thông tin.
WebSocket thường được sử dụng để phát triển các ứng dụng web thời gian thực như trò chơi trực tuyến, ứng dụng trò chuyện và các ứng dụng cập nhật dữ liệu trực tiếp WebSocket được thiết kế để thay thế các giải pháp truyền tải dữ liệu trực tiếp khác như Ajax hoặc Comet, vì nó có hiệu suất cao hơn và tiết kiệm năng lượng hơn.
2.2.3.2 Ưu và nhược điểm: Ưu điểm: o Giao tiếp hai chiều: WebSocket cung cấp khả năng giao tiếp hai chiều giữa trình duyệt và máy chủ, cho phép gửi và nhận dữ liệu thực như trò chơi trực tuyến, ứng dụng trò chuyện và cập nhật dữ liệu trực tiếp. o Hiệu suất cao: WebSocket có hiệu suất cao hơn so với các giải pháp truyền tải dữ liệu trực tiếp khác như Ajax hoặc Comet Với WebSocket, không có độ trễ trong quá trình thiết lập kết nối và truyền tải dữ liệu nhanh chóng. o Tiết kiệm năng lượng: WebSocket sử dụng kết nối duy trì, cho phép truyền tải dữ liệu mà không cần gửi các yêu cầu HTTP không cần thiết Điều này giúp tiết kiệm băng thông mạng và năng lượng của máy khách và máy chủ.
Nhược điểm: o Hạn chế tương thích: Mặc dù hầu hết các trình duyệt hiện đại đều hỗ trợ WebSocket, nhưng vẫn có một số trình duyệt cũ hơn không hỗ trợ giao thức này Điều này có thể gây ra sự không tương thích giữa các phiên bản trình duyệt và yêu cầu sử dụng các giải pháp thay thế cho các trình duyệt không hỗ trợ WebSocket. o Thiết lập kết nối ban đầu phức tạp: Trong quá trình thiết lập kết nối ban đầu, WebSocket sử dụng một số yêu cầu HTTP để thiết lập kênh truyền thông Điều này có thể tạo ra một số độ trễ ban đầu và tác động đến hiệu suất trong giai đoạn khởi đầu.
Flutter được phát triển nhằm giải quyết bài toán thường gặp trong mobile là Fast Development và Native Performance Nếu như React Native chỉ đảm bảo Fast Development và code native thuần chỉ đảm bảo Native Performance thì Flutter làm được cả 2 điều trên.
2.3.1.2 Flutter giúp phát triển ứng dụng như thế nào ?
Phát triển ứng dụng gốc so với phát triển ứng dụng đa nền tảng
PHÂN TÍCH, THIẾT KẾ
Cơ sở dữ liệu
Biểu đồ 1 Sơ đồ lớp cơ sở dữ liệu
3.1.2 Mô tả cơ sở dữ liệu:
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của người dùng
2 Username String Username người dùng
3 Password String Mật khẩu người dùng
4 Gender Number Giới tính nguời dùng
5 Email String Email của người dùng
6 First Name String Tên của người dùng
7 Last Name String Họ của người dùng
8 Address String Địa chỉ của người dùng
9 Phonenumber String Số điện thoại của người dùng
Bảng 1 Bảng các thuộc tính của model User
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Tour
2 User String Foreign key Id của người tạo ra tour
3 Name String Tên của tour
4 Description String Miêu tả về tour
5 Destinations List Foreign Key Danh sách các địa điểm của tour
6 Price Number Mức tiền của tour
7 Rating Number Đánh giá của
8 Duration Number Số ngày của tour
Number Số người phù hợp cho tour
Bảng 2 Bảng các thuộc tính của model Tour
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Rating
2 User String Foreign Key Id của người đánh giá
3 Service String Foreign Key Id của dịch vụ được đánh giá
4 Comment String Nội dung đánh giá
5 Type String Thể loại của dịch vụ được đánh giá
Bảng 3 Bảng các thuộc tính của model Rating
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Json web token
2 Jwtdata String Dữ liệu của json web token
4 Userid String Id của người dùng
5 expireAt Date Ngày hết hạn của token
Bảng 4 Bảng các thuộc tính của model JWT
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Hotel room
3 Hotel String Foreign Key Id của hotel
4 adultCapacity Number Số người lớn phòng chứa được
5 childrenCapacity Number Số con nít phòng chứa được
9 CheckOutHour Number Giờ Check Out
Bảng 5 Bảng các thuộc tính của model Hotel Room
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Hotel
2 Name String Tên của Hotel
3 Address String Địa chỉ của
4 Owner String Foreign Key Id của chủ
5 Description String Mô tả Hotel
6 Images List Foreign Key Danh sách hình ảnh hotel
7 Province String Tỉnh của hotel
8 City String Thành phố của hotel
Bảng 6 Bảng các thuộc tính của model Hotel
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của File
3 Path String Đường dẫn của file
4 Description String Mô tả của file
5 attachedId String Foreign Key Id service
7 publishedBy String Foreign Key Id người upload
Bảng 7 Bảng các thuộc tính của model Files
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Favorite
2 User String Foreign Key Id của người yêu thích
3 Element String Foreign Key Id của service yêu thích
4 Type String Thể loại dịch vụ yêu thích
Bảng 8 Bảng các thuộc tính của model Favorite
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Date
2 startDate Date Ngày bắt đầu booking
3 endDate Date Ngày kết thúc booking
4 User String Foreign Key Id người book
6 Approved Boolean Trạng thái chấp nhận đơn
7 Suspended Boolean Trạng thái huỷ đơn
8 Type String Thể loại book
9 attachServices List Foreign Key Danh sách dịch vụ được book
Bảng 9 Bảng các thuộc tính của model DateBooking
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Car
3 Seats Number Số lượng người xe có thể chứa
4 pricePerDay Number Giá xe theo ngày
6 Images List Foreign Key Danh sách hình xe
7 Description String Mô tả xe
8 Owner String Foreign Key Id của chủ xe
9 Province String Phường của xe
10 City String Thành phố của xe
11 Address String Địa chỉ của xe
12 licensePlate String Biển số xe
Bảng 10 Bảng các thuộc tính của model Car Service
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của Avatar
2 Path String Đường dẫn file hình
3 createdDate Date Ngày tạo hình
Bảng 11 Bảng các thuộc tính của model Avatar
STT Thuộc tính Kiểu dữ liệu Ràng buộc Chú thích
1 _id String Primary Key Id của
2 Description String Mô tả địa điểm
3 City String Thành phố của địa điểm
4 Province String Phường của địa điểm
5 Address String Địa chỉ địa điểm
6 Name String Tên của địa điểm
7 Title String Tựa đề địa điểm
9 publishedBy String Foreign Key Id người upload
Bảng 12 Bảng các thuộc tính của model Destination
Danh sách yêu cầu
3.2.1 Danh sách các chức năng chính:
STT Chức năng Nguời dùng Hệ thống Ghi chú
Người dùng sẽ nhập thông tin của tài khoản mình vào những hàng thông tin cần để tạo tài khoản
Hệ thống sẽ thu nhập thông tin của người dùng đã nhập vào người dùng và gửi request lên server với thông tin của bạn để tạo dữ liệu lưu vào cơ sở dữ liệu
2 Đăng nhập Người dùng sẽ nhập Hệ thống sẽ thu thập thông tin tài khoản của mình tài khoản bạn nhập vào và gửi lên request lên server để yêu cầu đăng nhập để cấp token và quyền truy cập cho bạn
3 Chỉnh sửa tài khoản Người dùng sẽ nhập thông tin cần thay đổi vào trong những hàng mình muốn thay đổi
Hệ thống sẽ thu thập và gửi request cập nhật vào tài khoản của bạn dựa vào Id người dùng của bạn
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
Người dùng sẽ nhập mật khẩu mới cần được cập nhật vào tài khoản
Hệ thống sẽ thu thập thông tin và gửi request cập nhật mật khẩu cho tài khoản theo id người dùng
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
5 Thay đổi avatar Nguời dùng sẽ truy cập vào phương thức để lấy hình ảnh và chọn cho mình 1 bức ảnh
Hệ thống sẽ thu thập và gửi thông tin kèm theo file để cập nhật ảnh đại diện
6 Đăng xuất Người dùng sẽ ấn vào nút đăng xuất
Hệ thống sẽ nhận và bỏ token hiện tại đi và đưa về màn hình chính
7 Tạo tour Người dùng sẽ nhập những thông tin cần để tạo thành thông tin cho tour
Hệ thống sẽ thu thập và gửi request lên server để tạo dữ liệu trong cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin tour thông tin cần thay đổi của tour thông tin đó rồi gửi lên server để cập nhật vào cơ sở dữ liệu trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
9 Xoá tour Người dùng sẽ nhấp vào nút xoá của tour họ muốn xoá
Hệ thống sẽ gửi request xoá lên server và xoá trong cơ sở dữ liệu
10 Tạo destination Người dùng sẽ nhập những thông tin cần để tạo thành thông tin cho destination
Hệ thống sẽ thu thập và gửi request lên server để tạo dữ liệu trong cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
Người dùng sẽ nhập thông tin cần thay đổi của destination
Hệ thống sẽ thu thập thông tin đó rồi gửi lên server để cập nhật vào cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
12 Xoá destination Người dùng sẽ nhấp vào nút xoá của destination họ muốn xoá
Hệ thống sẽ gửi request xoá lên server và xoá trong cơ sở dữ liệu
13 Tạo hotel Người dùng sẽ nhập những thông tin cần để tạo thành thông tin cho hotel
Hệ thống sẽ thu thập và gửi request lên server để tạo dữ liệu trong cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
Người dùng sẽ nhập thông tin cần thay đổi
Hệ thống sẽ thu thập thông tin đó rồi gửi
Nếu để trống thì sẽ của hotel lên server để cập nhật vào cơ sở dữ liệu hiện thông báo yêu cầu người dùng nhập thông tin
15 Xoá hotel Người dùng sẽ nhấp vào nút xoá của hotel họ muốn xoá
Hệ thống sẽ gửi request xoá lên server và xoá trong cơ sở dữ liệu
Người dùng sẽ nhập những thông tin cần để tạo thành thông tin cho hotel room
Hệ thống sẽ thu thập và gửi request lên server để tạo dữ liệu trong cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
17 Chỉnh sửa hotel room Người dùng sẽ nhập thông tin cần thay đổi của hotel room
Hệ thống sẽ thu thập thông tin đó rồi gửi lên server để cập nhật vào cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
Người dùng sẽ nhấp vào nút xoá của hotel room họ muốn xoá
Hệ thống sẽ gửi request xoá lên server và xoá trong cơ sở dữ liệu
19 Tạo vehicle Người dùng sẽ nhập những thông tin cần để tạo thành thông tin cho vehicle
Hệ thống sẽ thu thập và gửi request lên server để tạo dữ liệu trong cơ sở dữ liệu
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
20 Chỉnh sửa vehicle Người dùng sẽ nhập thông tin cần thay đổi Hệ thống sẽ thu thập thông tin đó rồi gửi Nếu để trống thì sẽ nhật vào cơ sở dữ liệu báo yêu cầu người dùng nhập thông tin
21 Xoá vehicle Người dùng sẽ nhấp vào nút xoá của vehicle họ muốn xoá
Hệ thống sẽ gửi request xoá lên server và xoá trong cơ sở dữ liệu
22 Quản lý booking của dịch vụ của mình
Người dùng sẽ nhận được mỗi khi có đơn đến (nếu mình có tạo dịch vụ) và tuỳ vào quyết định của mình để chấp thuận đơn đó hoặc chọn huỷ đơn
Khi một hành động được thực hiện trong quản lý dịch vụ thì hệ thống sẽ gửi yêu cầu theo hành động của nguời dùng lên server để thực hiện
23 Booking dịch vụ Người dùng sẽ cần nhập những thông tin để tạo nên đơn cho mình
Hệ thống sẽ lắng nghe yêu cầu và gửi yêu cầu lên server để tạo đơn cho chúng ta
Nếu để trống thì sẽ hiện thông báo yêu cầu người dùng nhập thông tin
24 Quản lý booking của bản thân
Người dùng sẽ tự quan sát trạng thái đơn của mình và có thể chủ động huỷ và xoá nếu không cần đơn đó
Hệ thống sẽ lắng nghe yêu cầu và gửi yêu cầu lên server để thực hiện
25 Thêm vào yêu thích Người dùng sẽ có thể lưu tại những dịch vụ hoặc tour bạn yêu thích lên hệ thống
Hệ thống sẽ gửi yêu cầu lên server để lưu lại mục yêu thích của nguời dùng
26 Tìm kiếm dịch vụ hoặc tour
Người dùng sẽ nhập tên mình muốn tìm kiếm vào mục tìm kiếm
Hệ thống sẽ lấy thông tin cần tìm kiếm gửi yêu cầu lên server để lấy thông tin theo yêu cầu tìm kiếm của người dùng
27 Đánh giá tour hoặc dịch vụ
Người dùng nhập đánh giá của mình vào Hệ thống sẽ dựa trên mục người dùng chọn để gửi yêu cầu về server tạo đánh giá cho mục người dùng đánh giá
Bảng 13 Bảng các chức năng chính của ứng dụng
Danh sách usecase
Biểu đồ 2 Sơ đồ usecase của ứng dụng
STT Tên tác nhân Mô tả
1 Người dùng Người dùng sử dụng để sử dụng booking và xem và tạo các tour cũng như các địa danh
2 Chủ dịch vụ Quản lí dịch vụ và các đơn booking của mình cũng đồng thời đăng quảng cáo về các địa danh nơi mình
Bảng 14 Bảng mô tả tác nhân
STT Tên chức năng Mô tả
1 Đăng ký Đăng ký tài khoản mới
2 Đăng nhập Đăng nhập vào ứng dụng
3 Thay đổi mật khẩu Đổi mật khẩu đăng nhập vào tài khoản ứng dụng
4 Thiết lập tài khoản Người dùng cập nhật các thông tin cá nhân của mình, ảnh đại diện
5 Tra cứu tour hoặc dịch vụ
Người tìm kiếm tour hoặc dịch vụ theo từ khoá của mình
6 CRUD Tour Người dùng có thể tạo, xoá ,sửa tour mình muốn đăng lên
7 CRUD Destination Người dùng có thể tạo, xoá, sửa thông tin địa danh mình muốn đăng lên
8 Booking Nguời dùng có thể thực hiện đặt khách sạn hoặc thuê xe
9 Thêm vào mục yêu thích
Người dùng có thể thêm các dịch vụ hoặc tour mình yêu thích vào danh mục của mình.
10 Đánh giá Người dùng có thể đánh giá tour hoặc dịch vụ
11 CRUD hotel Cho phép chủ dịch vụ thêm, xoá, sửa hotel
12 CRUD hotel room Cho phép chủ dịch vụ thêm, xoá, sửa hotel room
13 CRUD vehicle Cho phép chủ dịch vụ thêm, xoá, sửa vehicle
14 Cập nhật trạng thái Cho phép chủ dịch vụ duyệt các booking dịch vụ
Bảng 15 Bảng mô tả use case
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng đăng ký tài khoản sử dụng
Tác nhân Khách hàng Điều kiện trước Truy cập vào ứng dụng Điều kiện sau Một tài khoản mới được tạo và gửi thông tin lên server để lưu vào database Luồng chính 1 Hệ thống hiển thị trang đăng nhập
2 Người dùng bấm vào “Đăng ký”
3 Hệ thống hiển thị trang đăng ký
4 Người dùng nhập toàn bộ thông tin cần cho tài khoản mới và bấm đăng ký.
5 Hệ thống sẽ kiểm tra định dạng và gửi lên server
6 Hệ thống sẽ thông báo thành công và quay về màn hình đăng nhập Luồng thay thế 5.a Hệ thống sẽ thông báo sẽ định dạng và bắt nhập lại Luồng ngoại lệ 5.b Hệ thống sẽ thông báo tạo không thành công Các yêu cầu đặc biệt Email phải đúng định dạng
Password phải có từ 8 ký tự đổ lên, gồm các chữ cái từ A-Z, các số và có thể có kí tự đặc biệt Phải tick vào checkbox chấp nhận điều khoản
Retype password phải giống với confirm password
Bảng 16 Bảng mô tả use case đăng ký
Biểu đồ 3 Sơ đồ hoạt động UC1_đăng ký
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng đăng nhập tài khoản sử dụng Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Người dùng đã có tài khoản ứng dụng Điều kiện sau Hiển thị “Trang chủ”
Luồng Chính 1 Hệ thống sẽ hiển thị trang đăng nhập
2 Người dùng sẽ nhập thông tin tài khoản và bấm đăng ký
3 Hệ thống sẽ xác thực thông tin của nguời dùng và gửi token về để cho hệ thống xác thực
4 Hệ thống chuyển hướng sang trang Home Luồng thay thế Nếu nhập sai tài khoản hoặc mật khẩu sẽ được yêu cầu nhập lại.
Luồng ngoại lệ Không có
Các yêu cầu đặc biệt Không có
Bảng 17 Bảng mô tả use case Đăng nhập
Biểu đồ 4 Sơ đồ hoạt động UC2_đăng nhập
UC3_Thay đổi mật khẩu
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng đổi mật khẩu tài khoản ứng dụng Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đã đăng nhập vào ứng dụng Điều kiện sau Cập nhật mới vào database
Luồng chính 1 Người dùng truy cập vào thiết lập tài khoản
2 Chọn mục đổi mật khẩu
3 Nhập mật khẩu mới và bấm đổi mật khẩu
4 Hệ thống sẽ thông báo đổi mật khẩu thành công quay trở về màn hình thiết lập tài khoản Luồng thay thế 4.a Hệ thống thông báo mật khẩu quá ngắn và yêu cầu nhập lại Luồng ngoại lệ 4.b Hệ thông thông báo đổi mật khẩu thất bại Các yêu cầu đặc biệt Không có
Bảng 18 Bảng mô tả use case thay đổi mật khẩu
Biểu đồ 5 Sơ đồ hoạt động UC3_Thay đổi mật khẩu
UC4_Thiết lập tài khoản
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng thiết lập tài khoản ứng dụng Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đã đăng nhập vào ứng dụng Điều kiện sau Thông tin tài khoản được cập nhật
Luồng chính 1 Người dùng truy cập vào thiết lập tài khoản
2 Người dùng nhập lại những thông tin cần thay đổi của tài khoản.
3 Bấm vào dấu check để lưu những thay đổi.
4 Hệ thống sẽ kiểm tra định dạng các thông tin thay đổi và gửi thông báo cập nhật thành công và quay về màn hình profile.
Luồng thay thế 4.a Hệ thống sẽ thông báo sai định dạng và yêu cầu nhập lại Luồng ngoại lệ 4.b Hệ thống sẽ thông báo cập nhật thất bại và yêu cầu thử lại Các yêu cầu đặc biệt Không có
Bảng 19 Bảng mô tả use case thiết lập tài khoản
Biểu đồ 6 Sơ đồ hoạt động của UC4_Thiết lập tài khoản
UC5_Tra cứu tour hoặc dịch vụ
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng tìm kiếm tour hoặc dịch vụ Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Người dùng nhập thông tin tìm kiếm Điều kiện sau Hiển thị nội dung đã được lọc theo tìm kiếm của người dùng Luồng chính 1 Truy cập vào màn hình tìm kiếm
2 Chọn mục mình muốn tìm kiếm.
3 Nhập thông tin cần tìm kiếm và bấm tìm kiếm
4 Hệ thống sẽ trả về thông tin tìm kiếm được dựa vào tìm kiếm của mình.
Luồng thay thế Nếu tìm không thành công thì sẽ trả về màn hình trống dữ liệu Luồng ngoại lệ Không có
Các yêu cầu đặc biệt Không có
Bảng 20 Bảng mô tả use case tra cứu tour hoặc dịch vụ
Biểu đồ 7 Sơ đồ hoạt động của UC5_Tìm kiếm tour hoặc dịch vụ
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng có thể thêm, xoá, sửa tour Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Cập nhật thông tin lên database
Luồng chính * Xem chi tiết tour:
1 Truy cập vào mục tour.
2 Người dùng chọn tour họ muốn xem
3 Hệ thống sẽ trả về màn hình với thông tin của tour đó.
1 Truy cập vào trang tạo tour
2 Nhập thông tin để tạo tour
3 Bấm check để nộp thông tin tour
4 Hệ thống sẽ kiểm tra định dạng thông tin và lưu vào cơ sở dữ liệu
5 Hệ thống thông báo tạo thành công và cập nhật dữ liệu
1 Truy cập vào màn hình quản lý tour
2 Chọn mục tour người dùng muốn chỉnh sửa
3 Nhập những thông tin cần chỉnh sửa
4 Bấm check để lưu lại dữ liệu.
5 Hệ thống sẽ cập nhật lại dữ liệu vừa cập nhật.
1 Truy cập vào màn hình quản lý tour
2 Chọn mục tour người dùng muốn xoá
4 Hệ thống sẽ hỏi lại có thật sự muốn xoá
5 Hệ thống sẽ xoá và cập nhật lại dữ liệu Luồng thay thế * Xem chi tiết tour:
3.a Hệ thống không trả về dữ liệu và để màn hình loading.
4.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại
5.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại Luồng ngoại lệ *Tạo tour:
4.b Hệ thống báo lỗi tạo không thành công và báo thử lại.
5.b Hệ thống báo lỗi cập nhật không thành công và báo thử lại.
5.a Hệ thống xoá không thành công và báo lỗi Các yêu cầu đặc biệt Không có
Bảng 21 Bảng mô tả use case CRUD_tour
Biểu đồ 8 Sơ đồ hoạt động của UC6_CRUD Tour
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng có thể thêm, xoá, sửa destination Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Cập nhật thông tin lên database
Luồng chính * Xem chi tiết destination:
1 Truy cập vào mục destination.
2 Người dùng chọn destination họ muốn xem
3 Hệ thống sẽ trả về màn hình với thông tin của destination đó.
1 Truy cập vào trang tạo destination
2 Nhập thông tin để tạo destination
3 Bấm check để nộp thông tin destination
4 Hệ thống sẽ kiểm tra định dạng thông tin và lưu vào cơ sở dữ liệu
5 Hệ thống thông báo tạo thành công và cập nhật dữ liệu
1 Truy cập vào màn hình quản lý destination
2 Chọn mục destination người dùng muốn chỉnh sửa
3 Nhập những thông tin cần chỉnh sửa
4 Bấm check để lưu lại dữ liệu.
5 Hệ thống sẽ cập nhật lại dữ liệu vừa cập nhật.
1 Truy cập vào màn hình quản lý destination
2 Chọn mục destination người dùng muốn xoá
5 Hệ thống sẽ xoá và cập nhật lại dữ liệu Luồng thay thế * Xem chi tiết destination:
3.a Hệ thống không trả về dữ liệu và để màn hình loading.
4.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại
5.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại Luồng ngoại lệ *Tạo destination:
4.b Hệ thống báo lỗi tạo không thành công và báo thử lại.
5.b Hệ thống báo lỗi cập nhật không thành công và báo thử lại.
5.a Hệ thống xoá không thành công và báo lỗi Các yêu cầu đặc biệt Không có
Bảng 22 Bảng mô tả use case CRUD destination
Biểu đồ 9 Sơ đồ hoạt động của UC7_CRUD Destination
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng đặt booking cho dịch vụ mình muốn Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Trả về kết quả đặt hàng, lưu đơn hàng vào database Luồng chính 1 Nguời dùng sẽ truy cập vào dịch vụ họ muốn đặt
3 Thiết lập thông tin cho booking
4 Hệ thống sẽ kiểm tra lại thông tin
5 Hệ thống sẽ chuyển sang màn hình đặt thành công.
Luồng thay thế 4.a Hệ thống sẽ yêu cầu bổ sung thông tin thiếu Luồng ngoại lệ 4.b Hệ thống sẽ thông báo rằng đặt thất bại và thử lại.
Các yêu cầu đặc biệt Không có
Bảng 23 Bảng mô tả use case Booking
Biểu đồ 10 Sơ đồ hoạt động của UC8_Booking
UC9_Thêm vào mục yêu thích
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng đặt booking cho dịch vụ mình muốn Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Trả về kết quả đặt hàng, lưu đơn hàng vào database Luồng chính 1 Người dùng truy cập vào thông tin tour hoặc dịch vụ họ muốn thêm vào yêu thích
2 Chọn nút “yêu thích”. thích đó.
4 Nút yêu thích của mục đó sẽ thành nút “bỏ yêu thích”.
Luồng thay thế 4.a Nút yêu thích của mục đó sẽ vẫn thành nút “yêu thích”.
Luồng ngoại lệ Không có
Các yêu cầu đặc biệt Không có
Bảng 24 Bảng mô tả use case thêm vào mục ưa thích
Biểu đồ 11 Sơ đồ hoạt động của UC9_Thêm vào mục yêu thích
Tên use case Đăng ký
Mô tả Use case cho phép khách hàng có thể thêm, xoá, sửa rating Tác nhân Khách hàng, chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Cập nhật thông tin lên database
Luồng chính * Xem chi tiết rating:
1 Truy cập vào mục dịch vụ hoặc tour.
2 Hệ thống sẽ trả về màn hình với thông tin của các rating của dịch vụ đó.
1 Truy cập vào mục dịch vụ hoặc tour muốn đánh giá.
2 Nhập thông tin để tạo rating.
3 Bấm Submit để nộp thông tin rating.
4 Hệ thống sẽ kiểm tra định dạng thông tin và lưu vào cơ sở dữ liệu
1 Truy cập vào mục dịch vụ hoặc tour muốn đánh giá.
2 Chọn mục rating người dùng muốn chỉnh sửa
3 Nhập những thông tin cần chỉnh sửa
4 Bấm Submit để nộp thông tin rating.
5 Hệ thống sẽ cập nhật lại dữ liệu vừa cập nhật.
1 Truy cập vào màn hình quản lý rating
2 Chọn mục rating người dùng muốn xoá
4 Hệ thống sẽ xoá và cập nhật lại dữ liệu Luồng thay thế * Xem chi tiết rating :
2.a Hệ thống không trả về dữ liệu và để màn hình loading.
* Tạo rating : 4.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại
* Chỉnh sửa rating :5.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại thử lại.
* Chỉnh sửa rating : 5.b Hệ thống báo lỗi cập nhật không thành công và load lại dữ liệu.
*Xoá rating : 4.a Hệ thống xoá không thành công và giữ nguyên dữ liệu cũ Các yêu cầu đặc biệt Không có
Bảng 25 Bảng mô tả use case CRUD đánh giá
Biểu đồ 12 Sơ đồ hoạt động của UC10_CRUD Đánh giá
Tên use case Đăng ký
Mô tả Use case cho phép chủ dịch vụ có thể thêm, xoá, sửa hotel
Tác nhân Chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Cập nhật thông tin lên database
Luồng chính * Xem chi tiết hotel:
1 Truy cập vào mục hotel.
2 Người dùng chọn hotel họ muốn xem
3 Hệ thống sẽ trả về màn hình với thông tin của hotel đó.
1 Truy cập vào trang tạo hotel
2 Nhập thông tin để tạo hotel
3 Bấm check để nộp thông tin hotel
4 Hệ thống sẽ kiểm tra định dạng thông tin và lưu vào cơ sở dữ liệu
5 Hệ thống thông báo tạo thành công và cập nhật dữ liệu
1 Truy cập vào màn hình quản lý hotel
2 Chọn mục hotel người dùng muốn chỉnh sửa
3 Nhập những thông tin cần chỉnh sửa
4 Bấm check để lưu lại dữ liệu.
5 Hệ thống sẽ cập nhật lại dữ liệu vừa cập nhật.
1 Truy cập vào màn hình quản lý hotel
2 Chọn mục hotel người dùng muốn xoá
4 Hệ thống sẽ hỏi lại có thật sự muốn xoá
5 Hệ thống sẽ xoá và cập nhật lại dữ liệu Luồng thay thế * Xem chi tiết hotel:
3.a Hệ thống không trả về dữ liệu và để màn hình loading.
4.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại
5.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại Luồng ngoại lệ *Tạo hotel:
4.b Hệ thống báo lỗi tạo không thành công và báo thử lại.
5.b Hệ thống báo lỗi cập nhật không thành công và báo thử lại.
Bảng 26 Bảng mô tả use case CRUD hotel
Biểu đồ 13 Sơ đồ hoạt động của UC11_CRUD hotel
Tên use case Đăng ký
Mô tả Use case cho phép chủ dịch vụ có thể thêm, xoá, sửa hotel room
Tác nhân Chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Cập nhật thông tin lên database
Luồng chính * Xem chi tiết hotel room:
2 Truy cập vào danh sách phòng
3 Hệ thống sẽ trả về màn hình với danh sách hotel room của hotel đó.
1 Truy cập vào trang tạo hotel room
2 Nhập thông tin để tạo hotel room
3 Bấm check để nộp thông tin hotel room
4 Hệ thống sẽ kiểm tra định dạng thông tin và lưu vào cơ sở dữ liệu
5 Hệ thống thông báo tạo thành công và cập nhật dữ liệu
1 Truy cập vào màn hình danh sách cái hotel room
2 Chọn nút chỉnh sửa tại mục hotel room người dùng muốn chỉnh sửa
3 Nhập những thông tin cần chỉnh sửa
4 Bấm check để lưu lại dữ liệu.
5 Hệ thống sẽ cập nhật lại dữ liệu vừa cập nhật.
1 Truy cập vào màn hình danh sách cái hotel room
2 Chọn nút xoá tại mục hotel room người dùng muốn chỉnh sửa
3 Hệ thống sẽ hỏi lại có thật sự muốn xoá
4 Hệ thống sẽ xoá và cập nhật lại dữ liệu Luồng thay thế * Xem chi tiết hotel room:
3.a Hệ thống không trả về dữ liệu và để màn hình loading.
4.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại
5.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại Luồng ngoại lệ *Tạo hotel room:
4.b Hệ thống báo lỗi tạo không thành công và báo thử lại.
5.b Hệ thống báo lỗi cập nhật không thành công và báo thử lại.
4.a Hệ thống xoá không thành công và báo lỗi Các yêu cầu đặc biệt Không có
Bảng 27 Bảng mô tả use case CRUD hotel room
Biểu đồ 14 Sơ đồ hoạt động của UC12_CRUD hotel room
Tên use case Đăng ký
Mô tả Use case cho phép chủ dịch vụ có thể thêm, xoá, sửa vehicle
Tác nhân Chủ dịch vụ Điều kiện trước Đăng nhập vào ứng dụng Điều kiện sau Cập nhật thông tin lên database
Luồng chính * Xem chi tiết vehicle:
1 Truy cập vào mục vehicle.
2 Người dùng chọn vehicle họ muốn xem
3 Hệ thống sẽ trả về màn hình với thông tin của vehicle đó.
1 Truy cập vào trang tạo vehicle
2 Nhập thông tin để tạo vehicle
3 Bấm check để nộp thông tin vehicle
4 Hệ thống sẽ kiểm tra định dạng thông tin và lưu vào cơ sở dữ liệu
5 Hệ thống thông báo tạo thành công và cập nhật
1 Truy cập vào màn hình quản lý vehicle
2 Chọn mục hotel người dùng muốn chỉnh sửa
3 Nhập những thông tin cần chỉnh sửa
4 Bấm check để lưu lại dữ liệu.
5 Hệ thống sẽ cập nhật lại dữ liệu vừa cập nhật.
1 Truy cập vào màn hình quản lý vehicle
2 Chọn mục vehicle người dùng muốn xoá
4 Hệ thống sẽ hỏi lại có thật sự muốn xoá
5 Hệ thống sẽ xoá và cập nhật lại dữ liệu Luồng thay thế * Xem chi tiết vehicle:
3.a Hệ thống không trả về dữ liệu và để màn hình loading.
4.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại
5.a Hệ thống báo lỗi định dạng và đưa về màn hình nhập lại Luồng ngoại lệ *Tạo vehicle:
4.b Hệ thống báo lỗi tạo không thành công và báo thử lại.
5.b Hệ thống báo lỗi cập nhật không thành công và báo thử lại.
5.a Hệ thống xoá không thành công và báo lỗiCác yêu cầu đặc biệt Không có
Bảng 28 Bảng mô tả use case CRUD vehicle
Biểu đồ 15 Sơ đồ hoạt động của UC13_CRUD vehicle
UC14_Thay đổi trạng thái booking
Tên use case Đăng ký
Mô tả Use case cho phép chủ dịch vụ thay đổi trạng thái booking của dịch vụ họ
Tác nhân Chủ dịch vụ Điều kiện trước Đã đăng nhập vào ứng dụng Điều kiện sau Trạng thái booking được cập nhật
Luồng chính 1 Chủ dịch vụ truy cập vào Check booking
2 Chủ dịch vụ chọn đơn họ muốn duyệt.
3 Chủ dịch vụ chọn “Approve” để duyệt cho đơn
4 Đơn được cập nhật trạng thái là đã được duyệt.
3 Chủ dịch vụ chọn “Reject” để duyệt cho đơn.
4 Đơn được cập nhật trạng thái là đã được huỷ và được quyền xoá đơn.
Luồng thay thế *Duyệt đơn:
3.a Duyệt không thành công sẽ không làm thay đổi trạng thái đơn.
*Huỷ đơn không thành công sẽ không làm thay đổi trạng thái đơn.
Luồng ngoại lệ Không có
Các yêu cầu đặc biệt Không có
Bảng 29 Bảng mô tả use case thay đổi trạng thái booking
Thiết kế giao diện
Hình 4.Giao diện đăng nhập
Hình 5 Giao diện đăng ký
Hình 7 Giao diện xem danh sách tour
Hình 8 Giao diện xem danh sách hotel
Hình 9 Giao diện xem danh sách xe
Hình 10 Giao diện xem danh sách xe
3.4.8 Giao diện xem lịch sử đơn
Hình 11 Giao diện xem lịch sử booking
3.4.9 Giao diện thông tin tài khoản
Hình 12 Giao diện thông tin tài khoản
3.4.10.Giao diện thiết lập tài khoản
Hình 13 Giao diện thiết lập tài khoản
3.4.11.Giao diện quản lý dịch vụ
3.4.12.Giao diện quản lý bài đăng
Hình 15 Giao diện quản lý bài đăng
3.4.13.Giao diện quản lý đơn booking
Hình 16 Giao diện quản lý đơn booking
Hình 18 Giao diện tạo xe
Hình 19 Giao diện tạo tour
3.4.18.Giao diện chỉnh sửa hotel
Hình 21 Giao diện chỉnh sửa hotel
3.4.19.Giao diện chỉnh sửa xe
Hình 22 Giao diện chỉnh sửa xe
3.4.20.Giao diện chỉnh sửa destination
Hình 23 Giao diện chỉnh sửa destination
3.4.21.Giao diện chỉnh sửa tour
Hình 25 Giao diện booking hotel
Hình 26 Giao diện booking xe
3.4.24.Giao diện đặt đơn thành công của xe và hotel
Hình 27 Giao diện booking thành công
3.4.25.Giao diện danh sách yêu thích
Hình 28 Giao diện danh sách yêu thích
PHÂN CÔNG CÔNG VIỆC
BẢNG PHÂN CÔNG THỰC HIỆN ĐỒ ÁN MÔN HỌC
Họ tên SV1: Trần Hữu Trí
Họ tên SV2: Nguyễn Huy Trí Dũng MSSV: 20520459
Thiết kế, xây dựng UI, UX Lên ý tưởng các chức năng
Xây dựng view logic, logic app và áp dụng design pattern Bloc Thiết kế components
Lên ý tưởng các chức năng Thiết kế và xây dựng server ExpressJS
Nghiên cứu và triển khai các biểu đồ Duy trì các phương pháp hữu ích nhằm cải thiện giao diện
Thiết kế use-case Xây dựng logic app
Kiểm thử và fix bug Kiểm thử và fix bug
Làm báo cáo Hỗ trợ làm báo cáo
Thiết kế animation Xây dựng base instance
Vẽ sơ đồ cho báo cáo Tối ưu các event handle
Thiết kế cơ sở dữ liệu Thiết lập kết nối RealTime ĐÁNH GIÁ