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

Giao thông vận tải đường bộ, đặc biệt là hình thức vận chuyển hành khách bằng xe liên tỉnh, đóng vai trò chủ đạo trong nhu cầu di chuyển giữa các địa phương tại Việt Nam. Cùng với sự phát triển của công nghệ thông tin và xu hướng vạn vật kết nối Internet (IoT), nhu cầu tra cứu và giao dịch trực tuyến ngày càng gia tăng. Phương thức mua vé truyền thống trực tiếp tại quầy hoặc đại lý bộc lộ hạn chế về thời gian, công sức và khả năng cập nhật tình trạng chuyến đi. Đồ án "Xây dựng ứng dụng đặt vé xe online" của nhóm tác giả Phạm Ngọc Diêu và Nguyễn Thanh Tân, dưới sự hướng dẫn của ThS. Mai Tuấn Khôi tại Khoa Công nghệ Thông tin – Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (năm 2020), được thực hiện nhằm giải quyết bài toán đặt vé xe khách liên tỉnh trên nền tảng di động kết hợp hệ thống quản trị trực tuyến.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định cụ thể như sau:

  1. Nhiệm vụ 1: Tìm hiểu quy trình xây dựng ứng dụng di động đa nền tảng sử dụng công nghệ React Native và Expo.
  2. Nhiệm vụ 2: Nghiên cứu nền tảng Node.js, framework ExpressJS, thư viện Mongoose và hệ quản trị cơ sở dữ liệu MongoDB nhằm thiết kế hệ thống vận hành và xây dựng giao diện lập trình ứng dụng (RESTful API).
  3. Nhiệm vụ 3: Xây dựng ứng dụng di động dành cho hành khách phục vụ tìm kiếm tuyến xe, chọn vị trí ghế theo sơ đồ thực tế, quản lý lịch sử giao dịch và thanh toán trực tuyến.
  4. Nhiệm vụ 4: Xây dựng trang web quản trị (Admin) dành cho ban điều hành và các đơn vị nhà xe nhằm quản lý tuyến xe, hành trình, danh sách phương tiện, thông tin đặt chỗ và phân quyền quản lý.

Đối tượng nghiên cứu của đề tài là hệ thống nghiệp vụ thương mại điện tử trong lĩnh vực vận tải hành khách đường bộ, bao gồm luồng dữ liệu giữa hành khách, nhà xe và người quản trị. Phạm vi nghiên cứu tập trung vào việc mô hình hóa yêu cầu, thiết kế cơ sở dữ liệu NoSQL, xây dựng RESTful API và phát triển hệ thống giao diện người dùng trên hai nền tảng (Mobile App và Web Admin). Thời gian thực hiện đồ án diễn ra trong 15 tuần (từ ngày 30/03/2020 đến ngày 19/07/2020).

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

Đề tài áp dụng các lý thuyết và kỹ thuật công nghệ phần mềm hiện đại để thiết kế và hiện thực hóa hệ thống:

  • Mô hình kiến trúc và phân tích: Sử dụng ngôn ngữ mô hình hóa thống nhất (UML) để phân tích ca sử dụng (Use Case Diagram), đặc tả yêu cầu chức năng cho từng tác nhân (Guest, User, Admin), mô hình hóa luồng nghiệp vụ (Data Flow) và biểu đồ tuần tự (Sequence Diagram).
  • Hệ thống cơ sở dữ liệu NoSQL: Áp dụng hệ quản trị cơ sở dữ liệu phi quan hệ MongoDB kết hợp Object Data Modeling (ODM) Mongoose, lưu trữ dữ liệu dưới dạng cấu trúc tài liệu JSON/BSON linh hoạt.
  • Kiến trúc dịch vụ web: Xây dựng dịch vụ theo kiến trúc RESTful API trên nền tảng môi trường thực thi Node.js và framework ExpressJS, đảm bảo khả năng mở rộng và giao tiếp dữ liệu giữa máy chủ và các ứng dụng đầu cuối.
  • Phương pháp nghiên cứu và khảo sát thực tế: Tiến hành khảo sát đối chuẩn (benchmarking) 5 hệ thống và ứng dụng đặt vé xe đang hoạt động tại thị trường Việt Nam (VeXeRe, XeCa, FUTA Bus Line, click1BUS, An Vui) nhằm phân tích ưu điểm, nhược điểm và yêu cầu nghiệp vụ thực tiễn.
  • Phương pháp kiểm thử: Áp dụng phương pháp kiểm thử chức năng (Functional Testing) theo kỹ thuật hộp đen (Black-box Testing) với các bộ dữ liệu kiểm thử (Test Data) và kịch bản chi tiết (Test Cases) trên từng phân hệ màn hình.
Nguồn dữ liệu Mục đích sử dụng trong đồ án
Dữ liệu khảo sát hiện trạng Phân tích 5 ứng dụng thương mại (VeXeRe, XeCa, FUTA Bus Line, click1BUS, An Vui) để xác định tiêu chí thiết kế
Dữ liệu nghiệp vụ vận tải Thiết lập 18 cấu trúc bảng dữ liệu (nhà xe, phương tiện, tuyến đường, điểm đón/trả, sơ đồ ghế, đơn đặt chỗ, mã giảm giá)
Dữ liệu phản hồi kiểm thử 4 nhóm ca kiểm thử chức năng (Trang chủ, Đăng nhập, Đăng ký, Đặt vé) dùng để phát hiện và sửa lỗi phần mềm

Thiết kế và triển khai

Hệ thống được thiết kế hoàn chỉnh từ kiến trúc cơ sở dữ liệu, giao diện lập trình ứng dụng đến ứng dụng người dùng và trang quản trị:

[Mobile App: React Native / Expo]  <--HTTP/JSON-->  [Backend: Node.js / ExpressJS / Mongoose]  <--NoSQL-->  [Database: MongoDB]
[Web Admin: React / .NET Core]     <--HTTP/JSON-->  [Backend: Node.js / ExpressJS / Mongoose]

Cấu trúc cơ sở dữ liệu gồm 18 bảng/bộ sưu tập (collection) liên kết logic chặt chẽ:

  • Phân hệ người dùng và quản trị: tbl.Admin (tài khoản quản trị), tbl.User (thông tin khách hàng), tbl.Management (quản lý phân quyền), tbl.Agent (thông tin nhà xe), tbl.Agent Detail (chi tiết liên hệ và hình ảnh đại diện của nhà xe).
  • Phân hệ tuyến đường và phương tiện: tbl.Vehicle (danh sách phương tiện, loại xe), tbl.Location (địa điểm đón/trả, tỉnh/thành phố), tbl.Station (bến xe), tbl.Route (tuyến đường), tbl.Route Detail (chi tiết lịch trình, giá vé), tbl.Route Schedule (lịch khởi hành định kỳ), tbl.Route Departure (chuyến khởi hành cụ thể).
  • Phân hệ đặt chỗ và thanh toán: tbl.Map (bản đồ tuyến), tbl.SeatMap (sơ đồ bố trí và trạng thái ghế ngồi), tbl.Booking (phiếu đặt chỗ), tbl.Payment (thông tin giao dịch thanh toán), tbl.Coupon (chương trình ưu đãi), tbl.Coupon Code (mã giảm giá), tbl.Const (các hằng số cấu hình hệ thống).

Quy trình xử lý nghiệp vụ chính:

  • Quy trình đặt vé và chọn ghế: Hệ thống cho phép chọn tối đa 6 ghế trong một giao dịch. Khi người dùng xác nhận thông tin đặt vé, hệ thống kích hoạt cơ chế giữ chỗ tạm thời trong thời hạn 10 phút. Nếu quá thời gian quy định mà người dùng chưa hoàn tất thanh toán, trạng thái đặt chỗ sẽ tự động bị hủy và ghế được mở lại cho người dùng khác.
  • Quy trình xác thực và khôi phục tài khoản: Hỗ trợ đăng nhập qua số điện thoại, tài khoản Facebook hoặc tài khoản Google. Chức năng quên mật khẩu xác thực qua mã OTP gửi về số điện thoại đăng ký.
  • Thuật toán tìm kiếm: Lọc và truy vấn các chuyến xe thỏa mãn đồng thời các điều kiện điểm đi, điểm đến, ngày khởi hành; hỗ trợ sắp xếp linh hoạt theo thời gian khởi hành hoặc mức giá vé.

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

Chương 1: Khảo sát hiện trạng

Chương này khảo sát chi tiết 5 ứng dụng đặt vé xe khách trực tuyến tiêu biểu trên thị trường:

  • VeXeRe: Giao diện trực quan, luồng đặt vé hợp lý, bộ lọc chi tiết theo giờ chạy, giá vé, đánh giá; hạn chế ở việc chưa tối ưu hóa không gian hiển thị và chưa hỗ trợ lưu trữ thông tin vé cho khách vãng lai (Guest).
  • XeCa: Menu chức năng rõ ràng, hỗ trợ thanh toán đa kênh (ví điện tử, ATM, trả sau); hạn chế về độ ổn định (còn hiện tượng treo ứng dụng), thiếu hụt dữ liệu nhà xe liên kết.
  • FUTA Bus Line: Tốc độ truy cập nhanh (dưới 4 giây), tích hợp ví FutaBusID, dịch vụ taxi và chuyển hàng; hạn chế là chưa có tính năng đánh giá và sơ đồ ghế hiển thị nhỏ.
  • click1BUS: Thao tác tra cứu đơn giản, đường truyền ổn định; hạn chế là giao diện cũ, khó khăn trong việc chọn vị trí ghế và thiếu bản cập nhật.
  • An Vui: Đồ họa đẹp, có tính năng theo dõi vị trí xe trực tiếp trên bản đồ ("chờ xe"); hạn chế là giao diện chưa responsive và tính năng đăng ký tài khoản chưa hoàn thiện.

Từ kết quả khảo sát, nhóm tác giả rút ra các tiêu chí kỹ thuật: ứng dụng cần có giao diện thân thiện, luồng đặt vé tối ưu (chọn ngày -> chọn tuyến -> chọn ghế -> điền thông tin -> thanh toán), thuật toán tìm kiếm và lọc dữ liệu nhanh, hỗ trợ đa dạng phương thức đăng nhập và tính năng đánh giá chất lượng nhà xe.

Chương 2: Mô hình hóa yêu cầu và thiết kế cơ sở dữ liệu

Chương này tập trung xác định 3 nhóm tác nhân (Actor) và mô hình hóa chi tiết các nghiệp vụ:

  • Tác nhân Guest (Khách vãng lai): Thực hiện 15 nghiệp vụ, bao gồm đăng nhập/đăng ký (qua SĐT, Facebook, Google), tìm tuyến xe, chọn tuyến, chọn ghế ngồi (tối đa 6 ghế), hoàn tất đặt vé, xác nhận thanh toán (thời hạn 10 phút), sắp xếp tuyến theo thời gian/giá vé, tìm kiếm nâng cao và quên mật khẩu.
  • Tác nhân User (Thành viên đã đăng nhập): Kế thừa toàn bộ quyền của Guest và bổ sung 7 nghiệp vụ: quản lý thông tin tài khoản cá nhân, đổi mật khẩu, xem danh sách vé cá nhân (phân chia theo 3 tab: "Đã đi", "Chưa đi", "Đã hủy"), hủy vé (áp dụng cho vé chưa đi đã thanh toán), đánh giá chất lượng nhà xe sau chuyến đi.
  • Tác nhân Admin (Quản trị viên hệ thống và quản lý nhà xe): Thực hiện 23 nghiệp vụ, bao gồm quản lý thông tin đặt chỗ, xác nhận thanh toán vé, hủy vé, xem báo cáo thống kê doanh thu và lượng vé bán ra, quản lý thông tin điều hành xe, quản lý nhà xe, quản lý danh sách xe, quản lý tài khoản admin và phân quyền quản trị theo từng nhà xe.

Chương cũng trình bày đầy đủ sơ đồ luồng dữ liệu (DFD), thuật toán xử lý từng bước, sơ đồ tuần tự và đặc tả 18 bảng cơ sở dữ liệu hoàn chỉnh.

Chương 3: Thiết kế giao diện và thiết kế xử lý

Chương 3 xây dựng bản thiết kế chi tiết (UI prototype) và đặc tả xử lý logic cho từng màn hình tương ứng với các bảng nghiệp vụ:

  • Giao diện người dùng di động: Thiết kế màn hình trang chủ, màn hình đăng nhập/đăng ký, màn hình tìm kiếm nâng cao, màn hình kết quả tìm chuyến, màn hình chọn sơ đồ ghế ngồi, màn hình nhập thông tin hành khách, màn hình xác nhận thanh toán, màn hình quản lý vé cá nhân và màn hình đánh giá sao/nhận xét nhà xe.
  • Giao diện trang web quản trị: Thiết kế dashboard thống kê doanh thu theo mốc thời gian, biểu mẫu quản lý vé đặt chỗ, danh sách điều hành xe, danh mục nhà xe, danh mục phương tiện và giao diện popup phân quyền cho từng tài khoản quản trị viên.

Chương 4: Lập trình

Chương 4 mô tả quá trình cài đặt và cấu trúc mã nguồn của hệ thống:

  • Môi trường công nghệ: Trình bày chi tiết cách thiết lập môi trường Node.js kết hợp ExpressJS để xây dựng hệ thống RESTful API; cấu hình ODM Mongoose kết nối với cơ sở dữ liệu MongoDB.
  • Cấu trúc mã nguồn: Xây dựng sơ đồ tổng quát Class Diagram cho hệ thống, phân tách chi tiết các lớp Service (xử lý logic nghiệp vụ) và lớp Controller (tiếp nhận yêu cầu HTTP và trả về phản hồi dữ liệu).
  • Sơ đồ luồng giao diện: Mô hình hóa luồng chuyển trang của tài khoản người dùng và luồng tìm kiếm - đặt vé - thanh toán.
  • Thuật toán xử lý: Đặc tả thuật toán tìm kiếm và lọc chuyến xe thỏa mãn điều kiện ngày đi, điểm đi, điểm đến, thời gian chạy và mức giá vé.

Chương 5: Cài đặt và kiểm thử phần mềm

Chương 5 trình bày kế hoạch kiểm thử chức năng và thực hiện chạy các bộ ca kiểm thử (Test Cases) trên các màn hình cốt lõi:

  • Màn hình trang chủ: Kiểm tra khả năng chọn điểm đi, điểm đến, chọn ngày khởi hành và tính hợp lệ của dữ liệu đầu vào.
  • Màn hình đăng nhập: Kiểm tra đăng nhập thành công với tài khoản hợp lệ, kiểm tra thông báo lỗi khi sai số điện thoại hoặc mật khẩu, kiểm tra đăng nhập qua mạng xã hội (Facebook, Google).
  • Màn hình đăng ký: Kiểm tra xác thực tính trùng lặp của số điện thoại, kiểm tra độ khớp giữa mật khẩu và trường xác nhận mật khẩu.
  • Màn hình đặt vé: Kiểm thử việc chọn ghế trống, ràng buộc chọn tối đa 6 ghế, ghi nhận thông tin hành khách và đếm ngược thời gian xác nhận thanh toán.

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

Đồ án đã hoàn thành các nội dung kỹ thuật và yêu cầu chức năng đặt ra theo đúng tiến độ 15 tuần:

  • Kết quả phần mềm: Xây dựng thành công ứng dụng di động chạy trên nền tảng React Native hỗ trợ đầy đủ quy trình từ tìm kiếm, lọc tuyến, chọn ghế theo sơ đồ thực tế, thanh toán giữ chỗ 10 phút, quản lý lịch sử vé và đánh giá nhà xe.
  • Kết quả hệ thống quản trị và API: Xây dựng hệ thống RESTful API hoàn chỉnh trên nền tảng Node.js / ExpressJS / MongoDB được triển khai lên hạ tầng đám mây (cloud); hoàn thiện website quản trị phục vụ quản lý phương tiện, lịch trình, vé xe và thống kê doanh thu.
  • Giải pháp đề xuất: Đề xuất quy trình phân quyền quản trị chi tiết cho phép phân cấp quản lý theo từng nhà xe riêng biệt; xây dựng cơ chế quản lý trạng thái ghế trực quan giúp giảm thiểu nguy cơ trùng lặp chỗ ngồi khi nhiều người dùng cùng đặt vé.
  • Đóng góp của đề tài: Tổng hợp phân tích đối chuẩn thực tế từ 5 ứng dụng thương mại đang vận hành tại Việt Nam; cung cấp tài liệu thiết kế hệ thống hoàn chỉnh từ mô hình Use Case, sơ đồ tuần tự, thiết kế cơ sở dữ liệu 18 bảng NoSQL đến kịch bản kiểm thử cho hệ thống bán vé xe khách trực tuyến.

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

Theo báo cáo của nhóm tác giả, hệ thống vẫn còn một số điểm hạn chế cần tiếp tục hoàn thiện:

  • Hạn chế: Hệ thống chưa tích hợp hoàn chỉnh cổng thanh toán trực tuyến qua các cổng thanh toán/ví điện tử thương mại thực tế (như Momo, ZaloPay, VNPay); giao diện ứng dụng ở một số màn hình phức tạp chưa thực sự tối ưu trải nghiệm người dùng; ứng dụng chưa triển khai thuật toán gợi ý tối ưu chuyển tuyến cho các hành trình dài cần đi từ 2 chuyến xe trở lên.
  • Hướng phát triển: Tích hợp các cổng thanh toán điện tử trực tuyến chính thức; phát triển thuật toán gợi ý lộ trình thông minh kết hợp đa chặng xe nhằm tối ưu hóa thời gian và chi phí cho hành khách; nâng cấp tính năng định vị GPS để người dùng theo dõi vị trí xe khách theo thời gian thực (tương tự tính năng "chờ xe"); hoàn thiện hệ thống thông báo đẩy (push notification) về trạng thái vé và lịch trình chuyến đi.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo thiết thực cho các nhóm đối tượng sau:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm: Tài liệu mẫu về quy trình phát triển một dự án phần mềm hoàn chỉnh theo mô hình thác nước (từ khảo sát hiện trạng, phân tích yêu cầu, mô hình hóa nghiệp vụ bằng UML, thiết kế CSDL NoSQL MongoDB, lập trình API Node.js đến kiểm thử hộp đen).
  • Lập trình viên phát triển ứng dụng di động và web: Tham khảo kiến trúc kết hợp giữa React Native, ExpressJS và MongoDB; cách tổ chức các tầng Controller - Service trong ứng dụng Node.js và cấu trúc lưu trữ dữ liệu sơ đồ ghế xe khách (tbl.SeatMap, tbl.Route Schedule).
  • Các nghiên cứu về hệ thống vận tải hành khách: Tham khảo bộ tiêu chí khảo sát và so sánh tính năng của các nền tảng đặt vé xe hàng đầu tại Việt Nam (VeXeRe, XeCa, FUTA Bus Line, click1BUS, An Vui).

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

1. Hệ thống xử lý trường hợp người dùng đặt ghế nhưng chưa thanh toán như thế nào?
Theo quy định nghiệp vụ KH-QD-XNTN trong đồ án, sau khi hoàn tất chọn ghế và điền thông tin cá nhân, người dùng có thời hạn 10 phút để chọn phương thức và hoàn tất thanh toán. Nếu quá thời gian này mà chưa hoàn tất, vị trí ghế đã chọn sẽ tự động bị hủy để nhường quyền đặt chỗ cho khách hàng khác.

2. Người dùng được phép chọn tối đa bao nhiêu ghế trong một lần đặt vé?
Theo quy định nghiệp vụ KH-QD-CS, hệ thống cho phép mỗi người dùng chọn tối đa 6 ghế trong một giao dịch đặt vé trên ứng dụng.

3. Cơ sở dữ liệu của đồ án được xây dựng bằng công nghệ gì và bao gồm bao nhiêu bảng/collection?
Cơ sở dữ liệu của đồ án được xây dựng trên hệ quản trị cơ sở dữ liệu phi quan hệ MongoDB, bao gồm 18 bảng/bộ sưu tập dữ liệu: Admin, Agent, Management, Agent Detail, Location, User, Vehicle, Const, Route, Route Detail, Route Schedule, Route Departure, Map, SeatMap, Station, Booking, Payment, Coupon, Coupon Code.

4. Phân hệ quản lý vé của người dùng (User) được chia thành các trạng thái nào?
Phân hệ quản lý vé của người dùng (USER-QD-QLV) được chia thành 3 tab trạng thái rõ ràng: "Đã đi" (cho phép đánh giá chất lượng nhà xe), "Chưa đi" (cho phép hủy vé nếu đã thanh toán) và "Đã hủy".

5. Nhóm tác giả đã khảo sát những ứng dụng đặt vé xe nào để rút ra yêu cầu cho hệ thống?
Đồ án đã tiến hành khảo sát và đánh giá ưu - nhược điểm của 5 ứng dụng thực tế trên thị trường: VeXeRe, XeCa, FUTA Bus Line, click1BUS và An Vui.

Kết luận

Khóa luận tốt nghiệp "Xây dựng ứng dụng đặt vé xe online" của sinh viên Phạm Ngọc Diêu và Nguyễn Thanh Tân đã hoàn thành mục tiêu xây dựng một giải pháp phần mềm toàn diện cho lĩnh vực vận tải hành khách đường bộ. Đề tài kết hợp thành công các công nghệ hiện đại bao gồm React Native, Node.js, ExpressJS và cơ sở dữ liệu MongoDB để cung cấp đầy đủ các chức năng tra cứu, chọn ghế, đặt vé và quản trị vận hành. Báo cáo đồ án được trình bày khoa học, chi tiết từ khâu khảo sát thực tế, mô hình hóa nghiệp vụ đến triển khai và kiểm thử chức năng, đóng vai trò là tài liệu tham khảo hữu ích cho sinh viên và kỹ sư phát triển phần mềm trong cùng lĩnh vực.