Bối cảnh và vấn đề nghiên cứu

Đề tài "Xây dựng ứng dụng web đặt phòng trọ trên địa bàn Hà Nội" được sinh viên Nguyễn Thị Giang (lớp D17CNPM3, khóa D17 2017–2022, Khoa Công nghệ Thông tin, Học viện Công nghệ Bưu chính Viễn thông) thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thị Thanh Thủy, hoàn thành vào tháng 1 năm 2022.

Bối cảnh thực tiễn của nghiên cứu xuất phát từ sự bùng nổ của mạng Internet, công nghệ thông tin và sự phổ biến của các thiết bị thông minh (smartphone, máy tính bảng kết nối 3G/4G), thúc đẩy xu hướng giao dịch trực tuyến và thanh toán qua ngân hàng, mã QR, chuyển khoản. Đặc biệt, trong bối cảnh đại dịch Covid-19, việc di chuyển trực tiếp để tìm kiếm phòng trọ gặp nhiều khó khăn và tiềm ẩn rủi ro lây nhiễm. Mặt khác, các nền tảng đặt phòng trực tuyến hiện hành như Agoda hay Ivivu chủ yếu tập trung vào phân khúc khách du lịch ngắn hạn, trong khi nhu cầu thuê trọ dài hạn của sinh viên, công nhân và các hộ gia đình tại các đô thị lớn như Hà Nội là rất lớn và mang tính thường xuyên.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:

  1. Nghiên cứu, tìm hiểu nhu cầu thực tế và xác định các yêu cầu nghiệp vụ của hệ thống web đặt phòng trọ.
  2. Phân tích hệ thống hướng đối tượng thông qua việc xác định tác nhân, xây dựng biểu đồ ca sử dụng (Use Case), viết kịch bản chi tiết và thiết lập biểu đồ lớp phân tích.
  3. Thiết kế hệ thống thông qua các mô hình tuần tự (Sequence Diagram), phân bổ thuộc tính, phương thức cho các lớp và thiết kế cơ sở dữ liệu.
  4. Cài đặt và thử nghiệm ứng dụng web hoàn chỉnh phục vụ nhu cầu đăng tin, tìm kiếm, đặt phòng và quản lý phòng trọ trực tuyến.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Quy trình nghiệp vụ quản lý, tìm kiếm, đăng bài, cho thuê và đặt phòng trọ; các phương pháp phân tích thiết kế hướng đối tượng và công nghệ phát triển ứng dụng web.
  • Phạm vi không gian: Tập trung phục vụ nhu cầu thuê và cho thuê phòng trọ trên địa bàn thành phố Hà Nội, hỗ trợ tìm kiếm phòng lân cận trong bán kính 10 km.
  • Phạm vi thời gian: Đồ án được nghiên cứu và hoàn thành vào tháng 01/2022.

Cơ sở lý thuyết và phương pháp

Đồ án vận dụng quy trình phân tích thiết kế hướng đối tượng (OOAD) kết hợp cùng các công nghệ phát triển web hiện đại.

Khung lý thuyết và mô hình công nghệ:

  • Mô hình ứng dụng web (Web Application): Phân tích ưu thế của web app như khả năng tương thích đa nền tảng qua trình duyệt, loại bỏ yêu cầu cài đặt trên ổ cứng máy khách, giảm chi phí vận hành và bảo trì theo mô hình phần mềm dịch vụ (SaaS).
  • Kiến trúc phát triển MERN-stack: Ngăn xếp công nghệ bao gồm MongoDB, Express, React và Node.js, cung cấp giải pháp toàn diện cho việc xây dựng ứng dụng web phân tách giữa tầng giao diện và tầng máy chủ.
  • Các giao thức và giải pháp kỹ thuật bổ trợ:
    • Socket.IO: Hỗ trợ truyền thông hai chiều thời gian thực cho tính năng trò chuyện (chat).
    • GeoJSON: Định dạng chuẩn biểu diễn dữ liệu vị trí địa lý, hỗ trợ truy vấn không gian phục vụ tính năng tìm phòng trọ gần vị trí người dùng.
    • JSON Web Token (JWT): Xác thực phiên làm việc và phân quyền truy cập an toàn cho từng nhóm tác nhân.
    • CronJob: Thiết lập các tác vụ định kỳ tự động hóa trên máy chủ.

Phương pháp nghiên cứu:

  • Phương pháp phân tích - tổng hợp tài liệu: Thu thập thông tin từ các báo cáo thị trường (trích dẫn số liệu từ Tạp chí Tài chính doanh nghiệp về hành vi tìm kiếm và đặt phòng trực tuyến).
  • Phương pháp phân tích thiết kế hệ thống hướng đối tượng (OOAD/UML):
    • Xây dựng bảng thuật ngữ và trích xuất danh từ từ kịch bản để nhận diện các lớp thực thể.
    • Mô hình hóa chức năng hệ thống qua 3 tác nhân, 27 kịch bản Use Case, các biểu đồ phân rã Use Case, biểu đồ lớp phân tích/thiết kế và biểu đồ tuần tự.

Nguồn dữ liệu: Dữ liệu thực nghiệm của hệ thống được tổ chức và lưu trữ trên hệ quản trị cơ sở dữ liệu NoSQL MongoDB, bao gồm thông tin tài khoản người dùng, dữ liệu phòng trọ, đơn đặt phòng, chi phí thuê phòng và tin nhắn trò chuyện.


Thiết kế và triển khai hệ thống

Hệ thống được thiết kế theo kiến trúc hướng đối tượng, phân định rõ ràng giữa các tầng giao diện (Form/Boundary), tầng điều khiển (Controller) và tầng dữ liệu (Model).

[Trình duyệt / Client] <---> [Express/Node.js Server] <---> [MongoDB Database]
                                  |            |
                             [Socket.IO]   [GeoJSON & CronJob]

Kiến trúc các lớp thực thể

Dựa trên kỹ thuật trích danh từ, hệ thống xác định 9 lớp thực thể chính:

  1. Account: Lưu trữ thông tin tài khoản, tên đăng nhập, mật khẩu, phân quyền.
  2. User: Quản lý hồ sơ cá nhân của người dùng (họ tên, số điện thoại, số CMT, ngày sinh, địa chỉ).
  3. Room: Lưu trữ dữ liệu phòng trọ (tên phòng, giá thuê, giá điện, giá nước, giá mạng, số người tối đa, địa chỉ, vị trí tọa độ).
  4. Image: Quản lý đường dẫn (URL) và định danh hình ảnh tải lên.
  5. Carousel: Quản lý danh sách slide hình ảnh hiển thị trên trang chủ do Admin điều hành.
  6. Order: Quản lý thông tin đơn đặt phòng (khách hàng, cửa hàng, phòng, thời gian bắt đầu, tổng tiền, trạng thái, ghi chú).
  7. RentalFee: Quản lý bảng tính chi phí thuê hàng tháng (tiền phòng, tiền điện, tiền nước, tiền mạng, giảm giá, tháng/năm, trạng thái thanh toán).
  8. Message: Quản lý nội dung tin nhắn giữa các bên.
  9. RoomChat: Quản lý các phòng trò chuyện trực tuyến kết nối khách hàng và chủ trọ.

Triển khai công nghệ và phân hệ giao diện

  • Cơ sở dữ liệu: Cài đặt lược đồ CSDL trên MongoDB, tích hợp cấu trúc dữ liệu GeoJSON để xử lý tọa độ vị trí của từng phòng trọ.
  • Tính năng không gian: Tính năng "Tìm kiếm phòng gần nhất" tính toán khoảng cách tọa độ, lọc và hiển thị danh sách phòng trọ trong bán kính tối đa 10 km so với vị trí hiện tại của người dùng, sắp xếp theo thứ tự từ gần đến xa.
  • Giao diện chức năng: Triển khai 4 nhóm giao diện chính:
    • Giao diện chung: Trang chủ, slide trình chiếu, giao diện đăng ký/đăng nhập, trang chi tiết phòng trọ, bộ lọc tìm kiếm theo khu vực và số người.
    • Giao diện Quản trị viên (Admin): Trang quản lý danh sách tài khoản (thêm, sửa, xóa), trang quản lý slide giao diện.
    • Giao diện Cửa hàng (Store): Bảng điều khiển (Dashboard), form đăng tin và chỉnh sửa bài đăng, danh mục quản lý đơn thuê, quản lý phòng đang thuê, trang thống kê doanh thu theo tháng, giao diện chat.
    • Giao diện Khách hàng (Customer): Form gửi yêu cầu nâng cấp tài khoản lên Cửa hàng, form đặt phòng hẹn ngày xem, danh sách lịch sử đặt phòng, quản lý phòng đang thuê và chi phí phát sinh, giao diện chat với chủ trọ.

Nội dung chính theo từng chương

Chương Tên chương trong đồ án Nội dung cốt lõi và phát hiện kỹ thuật
Chương 1 Tìm hiểu yêu cầu hệ thống của ứng dụng web đặt phòng trọ - Phân tích nhu cầu xã hội về ứng dụng web trong thời đại 4.0 và bối cảnh dịch bệnh Covid-19.
- Trích dẫn số liệu từ Tạp chí "Tài chính doanh nghiệp": 80% khách du lịch quốc tế tra cứu thông tin trên Internet trước khi chọn khách sạn và 50% có nhu cầu đặt trực tuyến; chỉ ra sự khác biệt giữa mô hình ngắn hạn (Agoda, Ivivu) và nhu cầu thuê phòng trọ dài hạn của sinh viên, công nhân, hộ gia đình.
- Xác định các nhóm chức năng cho 3 vai trò (Admin, Store, Customer) và yêu cầu phi chức năng về thao tác, hiệu năng (thời gian thực) và bảo mật phân quyền.
Chương 2 Phân tích thiết kế hệ thống - Xác định 3 tác nhân chính: Quản trị hệ thống (Admin), Khách hàng (Customer), Cửa hàng (Store).
- Xây dựng Bảng thuật ngữ gồm 10 hạng mục định nghĩa tiền dữ liệu.
- Xây dựng biểu đồ Use Case tổng quát và 4 biểu đồ phân rã Use Case (Quản lý người dùng, Quản lý giao diện, Quản lý bài đăng, Quản lý phòng đang thuê cho Store).
- Xây dựng chi tiết 27 kịch bản (Scenario) từ Bảng 2.7 đến Bảng 2.33, mô tả luồng sự kiện chính và luồng ngoại lệ cho toàn bộ chức năng.
- Sử dụng kỹ thuật trích danh từ để thiết lập Biểu đồ lớp phân tích gồm 9 lớp thực thể.
Chương 3 Thiết kế hệ thống - Thiết kế các biểu đồ tuần tự (Sequence Diagram) chi tiết cho các ca sử dụng của User, Admin, Customer và Store (Đăng ký, Đăng nhập, Quản lý tài khoản, Tìm kiếm phòng, Tìm kiếm phòng gần nhất, Thêm/Sửa/Xóa người dùng, Thêm/Xóa slide, Thuê phòng, Quản lý phòng đang thuê, Xem lịch sử đặt phòng, Chat, Thêm/Sửa/Xóa bài đăng, Quản lý đơn thuê, Xem thống kê doanh thu).
- Xác định thuộc tính và gán phương thức chi tiết cho các lớp đối tượng.
- Xây dựng Biểu đồ lớp thiết kế và thiết kế Lược đồ cơ sở dữ liệu MongoDB.
Chương 4 Cài đặt hệ thống - Cài đặt cơ sở dữ liệu NoSQL MongoDB.
- Lựa chọn và cài đặt các công nghệ thành phần: Mô hình MERN-stack, Socket.IO, GeoJSON, JWT và CronJob.
- Hiện thực hóa và chụp minh chứng các giao diện thực tế của hệ thống: Giao diện chung (Đăng ký, Đăng nhập, Trang chủ, Xem chi tiết, Quản lý thông tin tài khoản), Giao diện Admin (Quản lý tài khoản, Quản lý giao diện slide), Giao diện Customer (Đặt phòng, Lịch sử đặt phòng, Quản lý phòng đang thuê), Giao diện Store (Tổng quan bảng điều khiển, Quản lý bài đăng, Quản lý đơn thuê, Quản lý phòng đang thuê, Thống kê doanh thu, Chat).

Kết quả và đóng góp

Kết quả chính:

  • Đồ án đã hoàn thành quy trình xây dựng phần mềm hoàn chỉnh theo phương pháp hướng đối tượng, từ khâu khảo sát yêu cầu, mô hình hóa nghiệp vụ đến cài đặt mã nguồn và giao diện.
  • Xác định và đặc tả đầy đủ 3 tác nhân tương tác, 27 kịch bản ca sử dụng cùng 9 lớp thực thể dữ liệu nghiệp vụ.
  • Thiết kế hệ thống biểu đồ tuần tự chi tiết mô tả rõ ràng sự tương tác giữa các thành phần giao diện, bộ điều khiển và mô hình dữ liệu.
  • Xây dựng thành công ứng dụng web đặt phòng trọ trên ngăn xếp MERN-stack với các tính năng hoạt động thực tế:
    • Cho phép người dùng tìm kiếm phòng trọ lân cận trong bán kính 10 km thông qua truy vấn GeoJSON.
    • Tích hợp khung chat thời gian thực giữa người thuê và chủ nhà bằng Socket.IO.
    • Thiết lập cơ chế phân quyền bảo mật qua JWT và quản lý chi phí thuê, doanh thu theo tháng.

Giải pháp và kiến nghị tác giả đề xuất:

  • Ứng dụng công nghệ web và giao dịch trực tuyến nhằm số hóa quy trình tìm kiếm và thuê phòng trọ, giảm thiểu chi phí đi lại và tiếp xúc trực tiếp.
  • Tích hợp các công cụ tự động hóa và quản lý tập trung giúp chủ trọ kiểm soát số lượng phòng, duyệt đơn đặt phòng và theo dõi dòng tiền hàng tháng một cách minh bạch.

Đóng góp tự nêu của tác giả:

  • Vận dụng và củng cố toàn diện kiến thức chuyên ngành công nghệ phần mềm vào giải quyết một bài toán thực tế.
  • Xây dựng một sản phẩm ứng dụng có tiềm năng mở rộng sang các loại hình dịch vụ trực tuyến tương tự như đặt vé, thuê xe đi lại.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế: Do giới hạn về thời gian thực hiện đồ án tốt nghiệp và năng lực nghiên cứu của sinh viên, hệ thống chủ yếu được khảo sát và thử nghiệm dữ liệu trong phạm vi địa bàn Hà Nội. Các kịch bản kiểm thử và một số tính năng nâng cao vẫn dừng ở mức đáp ứng yêu cầu cơ bản của đồ án đại học.
  • Hướng phát triển: Mở rộng phạm vi địa lý phục vụ ra ngoài địa bàn Hà Nội; nghiên cứu mở rộng mô hình kiến trúc của ứng dụng để hỗ trợ thêm các dịch vụ bổ trợ như đặt vé xe, dịch vụ thuê phương tiện di chuyển và tối ưu hóa trải nghiệm người dùng trên các thiết bị di động.

Giá trị tham khảo

Tài liệu đồ án này có giá trị tham khảo thiết thực đối với:

  • Sinh viên ngành Công nghệ phần mềm và Công nghệ thông tin: Cung cấp tài liệu mẫu chuẩn mực về việc áp dụng quy trình phân tích thiết kế hệ thống hướng đối tượng (OOAD) sử dụng UML, từ việc mô hình hóa Use Case, viết Scenario chi tiết, vẽ Sequence Diagram cho đến thiết kế Class Diagram.
  • Người phát triển ứng dụng web Fullstack: Tham khảo kiến trúc tích hợp MERN-stack với các module chức năng đặc thù như xử lý vị trí không gian (GeoJSON bán kính 10 km), truyền thông thời gian thực (Socket.IO chat) và xác thực phân quyền bằng JWT.
  • Nội dung nổi bật đáng tham khảo: Hệ thống 27 kịch bản Use Case chi tiết tại Chương 2 và các mô hình biểu đồ tuần tự tương tác đa tầng tại Chương 3.

Câu hỏi thường gặp

1. Hệ thống phân chia người dùng thành những tác nhân (actor) nào và quyền hạn ra sao?

Hệ thống xác định 3 tác nhân chính:

  • Admin (Quản trị hệ thống): Có quyền cao nhất, quản lý tài khoản người dùng (thêm, sửa, xóa), phê duyệt yêu cầu mở cửa hàng và quản lý slide giao diện trang chủ.
  • Customer (Khách hàng): Tìm kiếm và xem chi tiết phòng, tìm phòng gần vị trí hiện tại, gửi yêu cầu nâng cấp lên tài khoản cửa hàng, đặt lịch hẹn thuê phòng, quản lý phòng đang thuê, xem lịch sử đặt phòng và chat với chủ trọ.
  • Store (Cửa hàng/Chủ trọ): Đăng tin phòng mới, quản lý bài đăng (sửa, xóa), quản lý và phê duyệt đơn thuê phòng, quản lý danh sách phòng đang thuê và trạng thái đóng tiền, theo dõi thống kê doanh thu theo tháng và chat với khách hàng.

2. Tính năng "Tìm kiếm phòng gần nhất" hoạt động theo cơ chế và phạm vi nào?

Tính năng này cho phép người dùng truy cập từ trang chủ mà không bắt buộc phải đăng nhập. Hệ thống yêu cầu quyền truy cập vị trí của người dùng, sau đó sử dụng công nghệ GeoJSON trên cơ sở dữ liệu MongoDB để lọc tất cả các phòng trọ có tọa độ nằm trong bán kính 10 km so với vị trí hiện tại của người dùng, tự động sắp xếp danh sách kết quả theo thứ tự từ gần nhất đến xa nhất.

3. Những công nghệ chính nào được sử dụng để xây dựng và cài đặt hệ thống?

Hệ thống được phát triển trên nền tảng MERN-stack kết hợp cơ sở dữ liệu NoSQL MongoDB, giao thức truyền thông hai chiều thời gian thực Socket.IO (phục vụ tính năng chat), công nghệ định dạng dữ liệu không gian GeoJSON (xử lý tọa độ phòng trọ), cơ chế xác thực phân quyền JSON Web Token (JWT) và CronJob để lập lịch các tác vụ tự động trên máy chủ.

4. Dữ liệu nghiệp vụ của hệ thống được tổ chức thông qua các lớp thực thể nào?

Dựa trên kỹ thuật phân tích trích danh từ, hệ thống tổ chức dữ liệu qua 9 lớp thực thể: Account (tài khoản), User (thông tin người dùng), Room (thông tin phòng trọ), Image (hình ảnh), Carousel (slide trình chiếu), Order (đơn đặt phòng), RentalFee (phí thuê và dịch vụ), Message (tin nhắn) và RoomChat (phòng trò chuyện).

5. Khách hàng thông thường có thể chuyển đổi thành tài khoản chủ phòng trọ (Store) bằng cách nào?

Khách hàng sau khi đăng nhập có thể thực hiện ca sử dụng "Yêu cầu mở cửa hàng" (Scenario Bảng 2.21). Khi người dùng gửi yêu cầu, hệ thống sẽ lưu nhận và thông báo trạng thái chờ. Quản trị viên (Admin) sẽ truy cập phân hệ quản lý để kiểm tra và phê duyệt yêu cầu, sau đó tài khoản người dùng sẽ được nâng cấp quyền hạn lên tài khoản Store để sử dụng các chức năng đăng tin, quản lý đơn thuê và thống kê doanh thu.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng web đặt phòng trọ trên địa bàn Hà Nội" của tác giả Nguyễn Thị Giang đã hoàn thành đầy đủ các mục tiêu đề ra theo đúng quy trình phát triển phần mềm chuẩn mực. Công trình thể hiện rõ ràng các bước từ khảo sát yêu cầu, phân tích thiết kế hướng đối tượng qua hệ thống biểu đồ UML chi tiết đến việc cài đặt ứng dụng thực tế trên nền tảng MERN-stack tích hợp Socket.IO và GeoJSON. Đây là tài liệu học thuật có cấu trúc chặt chẽ, mang lại giá trị tham khảo hữu ích cho sinh viên chuyên ngành Công nghệ thông tin trong việc phân tích và triển khai các dự án web dịch vụ trực tuyến.