Giới thiệu dự án
Ngành du lịch đóng vai trò mũi nhọn trong cơ cấu kinh tế Việt Nam, đóng góp hơn 9,2% vào GDP quốc gia trong giai đoạn phát triển ổn định. Cùng với sự bùng nổ của cuộc Cách mạng Công nghiệp 4.0 và tỷ lệ người dùng điện thoại thông minh (smartphone) đạt trên 80% trong giới trẻ, hành vi tiêu dùng đã dịch chuyển mạnh mẽ từ giao dịch trực tiếp sang thương mại điện tử di động (m-Commerce). Theo các nghiên cứu thị trường, có đến 63% người tiêu dùng ưu tiên truy cập các dịch vụ đặt tour, mua sắm và thanh toán trực tuyến qua ứng dụng di động thay vì website truyền thống nhờ tính tiện dụng và khả năng cá nhân hóa cao.
Tuy nhiên, các doanh nghiệp lữ hành vừa và nhỏ (SME) tại Việt Nam vẫn gặp nhiều rào cản trong việc số hóa dịch vụ:
- Phụ thuộc vào các kênh Online Travel Agent (OTA) quốc tế với mức phí hoa hồng cao (15% - 25%/giao dịch).
- Quy trình xử lý đơn đặt tour (booking) thủ công qua điện thoại/tin nhắn dễ gây sai sót, trùng lặp và phản hồi chậm trễ.
- Thiếu hệ thống quản lý tập trung cho phép cập nhật tức thời tình trạng tour, quản lý danh sách khách hàng và tự động hóa quy trình hoàn/hủy vé.
Đồ án "Xây dựng ứng dụng dịch vụ du lịch trên nền tảng Android" do sinh viên Phạm Anh Dũng thực hiện dưới sự hướng dẫn của ThS. Đào Anh Thư tại Trường Đại học Mỏ - Địa chất (2022) tập trung giải quyết triệt để các bài toán trên thông qua việc xây dựng một hệ thống ứng dụng di động hoàn chỉnh.
+-------------------------------------------------------------------------+
| PROJECT OBJECTIVES |
+-------------------------------------------------------------------------+
| 1. Phát triển ứng dụng Android đa nhiệm với giao diện tối ưu (UX/UI) |
| 2. Xây dựng hệ thống Backend RESTful API tốc độ cao, xử lý non-blocking |
| 3. Thiết kế CSDL NoSQL linh hoạt, tối ưu hóa truy vấn dữ liệu tour |
| 4. Tự động hóa luồng nghiệp vụ: Đặt vé, nạp ví, hoàn tiền, xác thực OTP |
+-------------------------------------------------------------------------+
Giải pháp được đề xuất là kết hợp kiến trúc đa nền tảng React Native ở tầng Client, Node.js/Express ở tầng Server và MongoDB ở tầng Cơ sở dữ liệu (CSDL). Kiến trúc này giúp tối ưu hóa 40% thời gian phát triển ứng dụng, đảm bảo thời gian phản hồi API dưới 200ms và khả năng mở rộng quy mô linh hoạt cho doanh nghiệp lữ hành.
Phạm vi nghiên cứu tập trung vào hệ điều hành Android (hỗ trợ từ phiên bản Android 5.0 Lollipop đến Android 12), hệ thống xác thực người dùng qua số điện thoại/OTP và nghiệp vụ thanh toán qua ví điện tử nội bộ tích hợp.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Thị trường ứng dụng du lịch hiện nay tồn tại khoảng trống lớn giữa các hệ thống website truyền thống và các nền tảng siêu ứng dụng du lịch.
| Tiêu chí so sánh |
Website Lữ hành Truyền thống |
Nền tảng OTA Siêu lớn (Traveloka, Klook) |
Giải pháp Ứng dụng Đề xuất |
| Trải nghiệm Mobile (UX) |
Trung bình (Responsive Web) |
Rất cao (Native App) |
Cao (React Native Native Views) |
| Chi phí triển khai/vận hành |
Thấp (Hosting cố định) |
Rất cao (Hạ tầng microservices) |
Tối ưu cho SME (Node.js + MongoDB) |
| Quyền kiểm soát dữ liệu |
Thuộc doanh nghiệp |
Bị phụ thuộc vào sàn OTA |
Hoàn toàn thuộc về doanh nghiệp |
| Tính năng Hoàn/Hủy vé tự động |
Thủ công qua Email/Tổng đài |
Phức tạp, nhiều bước trung gian |
Tức thời theo chính sách tour |
| Tốc độ tải dữ liệu |
Phụ thuộc DOM trình duyệt |
Rất nhanh (CDN toàn cầu) |
Tối ưu hóa qua cơ chế Non-blocking I/O |
Dựa trên khảo sát người dùng và phân tích nghiệp vụ, các yêu cầu chức năng được phân loại theo mô hình MoSCoW:
[MoSCoW Prioritization]
├── Must-have (Bắt buộc)
│ ├── Đăng ký, đăng nhập, xác thực OTP qua số điện thoại
│ ├── Xem danh mục tour, tìm kiếm đa tiêu chí (địa điểm, giá, ngày đi)
│ ├── Đặt vé tour và trừ tiền ví điện tử tự động
│ ├── Quản lý lịch sử đặt vé và hủy vé có hoàn tiền
│ └── Dashboard Admin: Quản lý Tour, Điểm du lịch, Đơn đặt, Doanh thu
├── Should-have (Nên có)
│ ├── Bộ lọc tour siêu khuyến mại (giảm giá >= 25%)
│ ├── Đề xuất tự động 5 tour ngẫu nhiên chưa khởi hành
│ └── Tích hợp liên hệ đa kênh (Messenger, SMS, Gmail, Direct Call)
├── Could-have (Có thể có)
│ ├── Đổi thông tin cá nhân, cập nhật mật khẩu
│ └── Biểu đồ phân tích doanh thu theo tuần/tháng cho Admin
└── Won't-have (Chưa triển khai trong phiên bản này)
├── Cổng thanh toán quốc tế trực tiếp (Visa/Mastercard)
└── Bản đồ định vị GPS thời gian thực của đoàn khách
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình kiến trúc phân tầng Client-Server (3-Tier Architecture) giúp phân tách rõ ràng giữa tầng hiển thị giao diện, tầng xử lý logic nghiệp vụ và tầng lưu trữ dữ liệu.
graph TD
subgraph Client_Layer ["Client Layer (Mobile App)"]
UI[React Native v0.68.2 Engine]
Screens[Screens: Home, Search, Detail, Booking, Profile]
State[State Management / Axios HTTP Client]
UI --> Screens
Screens --> State
end
subgraph Server_Layer ["Server Layer (RESTful API)"]
Router[Express Router v4.18.1]
Middleware[Auth Middleware / JWT / OTP Engine]
Controllers[Controllers: Tour, Booking, User, Place]
Router --> Middleware
Middleware --> Controllers
end
subgraph Data_Layer ["Data Layer (NoSQL Database)"]
Mongoose[Mongoose ODM v6.3.3]
MongoDB[(MongoDB Cluster v5.0.6)]
Mongoose --> MongoDB
end
State <==> |JSON over HTTPS / Port 5000| Router
Controllers <==> Mongoose
Technology Stack chi tiết
- Mobile Frontend: React Native (v0.68.2), JavaScript ES6+, React Navigation (v6.x), Axios (v0.27.2).
- Backend Runtime: Node.js (v16.14.0 LTS), Express Framework (v4.18.1).
- Database Management: MongoDB (v5.0.6), Mongoose ODM (v6.3.3).
- Development & Build Tools: Android Studio Chipmunk, Visual Studio Code, Postman API Tester.
Thiết kế Cơ sở Dữ liệu (NoSQL Database Schema)
Hệ thống triển khai 4 collection chính trong MongoDB:
// Collection: User
{
"_id": "ObjectId",
"phone": "String (Unique, Indexed)",
"password": "String (Bcrypt Hash)",
"fullName": "String",
"role": "String (enum: ['User', 'Admin'])",
"balance": "Number (Default: 0)",
"createdAt": "Date"
}
// Collection: Place
{
"_id": "ObjectId",
"name": "String (Indexed)",
"description": "String",
"imageUrl": "String",
"location": "String"
}
// Collection: Tour
{
"_id": "ObjectId",
"title": "String",
"startPlace": "ObjectId (Ref: Place)",
"destinationPlace": "ObjectId (Ref: Place, Indexed)",
"departureDate": "Date (Indexed)",
"duration": "String",
"originalPrice": "Number",
"discountPercent": "Number (0 - 100)",
"currentPrice": "Number",
"availableSeats": "Number",
"images": ["String"],
"itinerary": "String"
}
// Collection: Booking
{
"_id": "ObjectId",
"userId": "ObjectId (Ref: User, Indexed)",
"tourId": "ObjectId (Ref: Tour, Indexed)",
"ticketsCount": "Number",
"totalAmount": "Number",
"bookingDate": "Date",
"status": "String (enum: ['Confirmed', 'Cancelled'])",
"isRefundable": "Boolean"
}
+-------------------------------------------------------------------------------------------------+
| CORE RESTful API ENDPOINTS |
+-------------------------------------------------------------------------------------------------+
| Method | Endpoint | Chức năng | Quyền truy cập |
+--------+-----------------------------+----------------------------------------+----------------+
| POST | /api/users/register | Đăng ký tài khoản mới & gửi mã OTP | Public |
| POST | /api/users/login | Đăng nhập và tạo phiên làm việc | Public |
| GET | /api/tours/recommended | Lấy 5 tour ngẫu nhiên chưa đặt | User |
| GET | /api/tours/promotions | Lấy danh sách tour giảm giá >= 25% | Public |
| GET | /api/tours/search | Lọc tour theo điểm đi/đến, ngày, giá | Public |
| POST | /api/bookings/create | Tạo đơn đặt tour và trừ số dư ví | User |
| POST | /api/bookings/refund | Hủy vé và hoàn tiền tự động | User / Admin |
| GET | /api/admin/revenue/stats | Thống kê doanh thu theo mốc thời gian | Admin |
+-------------------------------------------------------------------------------------------------+
Methodology
Dự án áp dụng quy trình phát triển phần mềm linh hoạt theo mô hình Agile/Scrum rút gọn với chu kỳ 14 tuần thực hiện, chia thành 7 sprint (2 tuần/sprint):
+----------------------------------------------------------------------------------------------------+
| PROJECT IMPLEMENTATION TIMELINE |
+----------------------------------------------------------------------------------------------------+
| Tuần 01 - 02 (Sprint 1): Khảo sát nghiệp vụ, phân tích Use Case và đặc tả tài liệu kiến trúc. |
| Tuần 03 - 04 (Sprint 2): Thiết kế Data Schema MongoDB, cài đặt môi trường Node.js Backend. |
| Tuần 05 - 06 (Sprint 3): Xây dựng RESTful API cho Module User, Authentication và OTP Service. |
| Tuần 07 - 08 (Sprint 4): Xây dựng RESTful API cho Tour, Place, Booking và Transaction Engine. |
| Tuần 09 - 10 (Sprint 5): Thiết kế UI React Native: Màn hình Home, Search, Detail, Profile. |
| Tuần 11 - 12 (Sprint 6): Tích hợp luồng Đặt vé, Nạp tiền ví, Hủy vé và Hoàn tiền tự động. |
| Tuần 13 - 14 (Sprint 7): Kiểm thử tích hợp (Integration Test), đo đạc hiệu năng và đóng gói APK. |
+----------------------------------------------------------------------------------------------------+
Implementation và kết quả
Development process
Quá trình triển khai tập trung vào việc xử lý các giao dịch tài chính nội bộ (trừ tiền ví và đặt vé) nhằm đảm bảo tính toàn vẹn dữ liệu. Khi người dùng thực hiện đặt tour, hệ thống kiểm tra tính hợp lệ của tour, kiểm tra số lượng chỗ còn trống, đối soát số dư ví người dùng và thực hiện cập nhật đồng bộ.
Thuật toán Đặt vé và Trừ tiền ví an toàn (Node.js/Mongoose Backend):
// controllers/bookingController.js
const Tour = require('../models/Tour');
const User = require('../models/User');
const Booking = require('../models/Booking');
exports.createBookingTransaction = async (req, res) => {
const { userId, tourId, ticketsCount } = req.body;
try {
const tour = await Tour.findById(tourId);
const user = await User.findById(userId);
if (!tour || tour.departureDate <= new Date()) {
return res.status(400).json({ success: false, message: 'Tour không tồn tại hoặc đã khởi hành!' });
}
if (tour.availableSeats < ticketsCount) {
return res.status(400).json({ success: false, message: 'Số lượng vé còn lại không đủ!' });
}
const totalAmount = tour.currentPrice * ticketsCount;
if (user.balance < totalAmount) {
return res.status(400).json({ success: false, message: 'Số dư tài khoản không đủ để thanh toán!' });
}
// Cập nhật số dư người dùng và chỗ ngồi còn lại của tour
user.balance -= totalAmount;
tour.availableSeats -= ticketsCount;
await user.save();
await tour.save();
// Khởi tạo bản ghi Booking
const newBooking = new Booking({
userId,
tourId,
ticketsCount,
totalAmount,
bookingDate: new Date(),
status: 'Confirmed',
isRefundable: tour.discountPercent < 25 // Tour giảm giá >= 25% không hỗ trợ hoàn vé
});
await newBooking.save();
return res.status(201).json({
success: true,
message: 'Đặt vé thành công!',
data: newBooking,
newBalance: user.balance
});
} catch (error) {
return res.status(500).json({ success: false, error: error.message });
}
};
Thuật toán Lấy Tour Khuyến mại và Đề xuất Thông minh:
// controllers/tourController.js
exports.getSuperPromotions = async (req, res) => {
try {
// Lọc tour giảm giá từ 25% trở lên, chưa khởi hành, sắp xếp giảm giá cao xuống thấp
const promoTours = await Tour.find({
discountPercent: { $gte: 25 },
departureDate: { $gt: new Date() }
})
.sort({ discountPercent: -1 })
.limit(10)
.populate('startPlace destinationPlace');
return res.status(200).json({ success: true, count: promoTours.length, data: promoTours });
} catch (err) {
return res.status(500).json({ success: false, error: err.message });
}
};
Testing và validation
Ứng dụng đã trải qua các đợt kiểm thử nghiêm ngặt bao gồm Unit Test cho Backend API bằng Jest/Supertest và Functional UI Test trên các thiết bị Android vật lý (Samsung Galaxy A51 chạy Android 11, Xiaomi Redmi Note 10 chạy Android 12).
+---------------------------------------------------------------------------------------------------+
| TESTING RESULTS & BENCHMARKS |
+---------------------------------------------------------------------------------------------------+
| Hạng mục kiểm thử | Chỉ số kế hoạch | Kết quả thực tế đạt được |
+-------------------------------+------------------------------+------------------------------------+
| Backend Code Coverage | >= 80% | 86.4% (Tất cả Controllers/Models) |
| API Latency trung bình | < 250ms | 142ms (Môi trường mạng cục bộ) |
| Bộ nhớ RAM chiếm dụng (App) | < 120MB | 78MB - 92MB trên Android 11/12 |
| Tốc độ khung hình (Frame Rate)| 60 FPS | 58 - 60 FPS (mượt mà khi vuốt lọc) |
| Tỷ lệ xử lý lỗi giao dịch ví | 100% kiểm soát ngoại lệ | 0% lỗi âm tiền ví (Zero Overdraft) |
| Tổng số test case thực thi | 52 ca kiểm thử | 52/52 Passed (100%) |
+-------------------------------+------------------------------+------------------------------------+
Kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT) được tiến hành với 30 người tham gia:
- Tính dễ sử dụng (Usability): Đạt điểm đánh giá trung bình 4.7/5.0.
- Tốc độ tìm kiếm tour: 94% người dùng tìm thấy tour mong muốn trong vòng dưới 3 lần chạm.
- Mức độ hài lòng với quy trình hủy/hoàn vé: 96.6% đồng thuận cao nhờ tính minh bạch và tiền hoàn vào ví tức thì.
Kết quả đạt được
Hệ thống đã hoàn thiện 100% các màn hình giao diện và luồng nghiệp vụ:
- Giao diện xác thực: Đăng nhập, đăng ký tài khoản, phục hồi mật khẩu qua OTP.
- Giao diện trang chủ (Home): Hiển thị thanh trượt banner, menu ngang các tour được đề xuất tự động và danh mục tour siêu khuyến mại (> 25%).
- Giao diện tìm kiếm (Search): Tích hợp bộ lọc đa tiêu chí (Điểm đi, Điểm đến, Khoảng giá, Ngày khởi hành).
- Giao diện chi tiết Tour & Đặt vé: Xem lịch trình, hình ảnh địa điểm, chính sách hoàn hủy và đặt vé một chạm.
- Giao diện cá nhân & Ví điện tử: Nạp tiền vào ví, quản lý thông tin, xem lịch sử các đơn đặt vé và kích hoạt hoàn vé.
- Dashboard Quản trị (Admin): Thêm/sửa/xóa Tour, quản lý Điểm đến (Place), xem dữ liệu khách hàng và biểu đồ doanh thu theo tuần.
Đổi mới và đóng góp
- Ứng dụng công nghệ Cross-Platform hiện đại: Thay vì phát triển Native Android thuần bằng Java/Kotlin tốn nhiều tài nguyên, dự án sử dụng React Native giúp rút ngắn 40% chu kỳ phát triển mà vẫn đảm bảo hiệu năng đạt 95% tương đương ứng dụng Native thuần.
- Kiến trúc dữ liệu NoSQL tối ưu cho du lịch: Cấu trúc tài liệu linh hoạt của MongoDB cho phép lưu trữ lịch trình tour phức tạp, các mảng hình ảnh đa kích thước mà không yêu cầu phép JOIN bảng nhiều tầng phức tạp, giúp giảm 65% thời gian phản hồi truy vấn so với hệ RDBMS truyền thống.
- Cơ chế kinh doanh dịch vụ tự động hóa: Tích hợp quy trình hoàn vé tự động (Automated Refund Policy) dựa trên loại tour (loại trừ các tour siêu khuyến mại nhằm bảo vệ doanh thu cho doanh nghiệp), loại bỏ 100% thời gian chờ đợi duyệt lệnh hoàn tiền thủ công.
- Giải pháp thực tiễn cho doanh nghiệp lữ hành vừa và nhỏ: Đồ án mang lại một bản thiết kế mẫu (Blueprint) hoàn chỉnh từ phân tích Use Case, Sequence Diagram đến mã nguồn triển khai, sẵn sàng áp dụng vào thực tế kinh doanh du lịch.
Ứng dụng thực tế và triển khai
Hướng dẫn triển khai hệ thống (Deployment Architecture)
[Client Android App (APK)]
│ (HTTPS Request)
▼
[Nginx Reverse Proxy / Port 80, 443]
│ (Proxy Pass)
▼
[Node.js Runtime Instance (PM2 Process Manager / Port 5000)]
│ (Mongoose Driver)
▼
[MongoDB Server Instance / WiredTiger Storage Engine]
Yêu cầu hệ thống tối thiểu:
- Server Backend: Ubuntu 20.04 LTS, 2 Core CPU, 4GB RAM, Node.js v16+, MongoDB v5.0+.
- Client Android: Thiết bị chạy hệ điều hành Android 5.0 (API Level 21) trở lên, tối thiểu 2GB RAM.
Tiềm năng thị trường và ROI
Đối với một công ty du lịch vừa và nhỏ quản lý trung bình 50 tour/tháng và 1.000 lượt khách:
- Tiết kiệm chi phí hoa hồng OTA: Giảm thiểu 15% - 20% phí trung gian, tiết kiệm ước tính 30.000.000 - 50.000.000 VNĐ/tháng.
- Thời gian hòa vốn (ROI Breakeven): Ước tính từ 4 - 6 tháng sau khi đưa vào vận hành thực tế.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Tính năng nạp tiền ví điện tử hiện đang xử lý qua mô phỏng nghiệp vụ nội bộ, chưa tích hợp trực tiếp cổng thanh toán trung gian chính thức (VNPAY, Momo, ZaloPay).
- Dịch vụ gửi mã xác thực OTP sử dụng mô phỏng gateway; trong môi trường sản xuất thực tế cần đăng ký API SMS Brandname có trả phí.
- Ứng dụng mới chỉ hoàn thiện bản build APK đóng gói cho hệ điều hành Android.
Hướng phát triển mở rộng
- Mở rộng nền tảng: Tận dụng thế mạnh của React Native để biên dịch và phát hành phiên bản đồng bộ cho hệ điều hành iOS (App Store).
- Tích hợp Cổng thanh toán Quốc gia: Kết nối trực tiếp API VNPAY-QR và cổng Napas 24/7.
- Trí tuệ nhân tạo (AI Recommendation): Áp dụng thuật toán Collaborative Filtering để phân tích thói quen tìm kiếm của người dùng và đưa ra gợi ý tour cá nhân hóa chính xác hơn.
- Push Notification Service: Tích hợp Firebase Cloud Messaging (FCM) để tự động gửi thông báo nhắc lịch khởi hành và chương trình khuyến mãi theo thời gian thực.
Đối tượng hưởng lợi
+--------------------------------------------------------------------------------------------------+
| BENEFICIARY MATRIX |
+--------------------------------------------------------------------------------------------------+
| Nhóm đối tượng | Giá trị thực tiễn và lợi ích cụ thể |
+--------------------+-----------------------------------------------------------------------------+
| Sinh viên CNTT | Tài liệu tham khảo chuẩn mực về phân tích thiết kế hệ thống (UML, Use Case, |
| | Sequence Diagram) và quy trình phát triển ứng dụng Fullstack Mobile. |
| | |
| Lập trình viên | Mẫu kiến trúc ứng dụng React Native kết hợp Node.js/MongoDB tiêu chuẩn; |
| (Developers) | các hàm xử lý giao dịch ví điện tử và tối ưu hóa truy vấn NoSQL. |
| | |
| Doanh nghiệp | Sở hữu giải pháp chuyển đổi số bán tour du lịch trực tiếp, cắt giảm tối đa |
| Du lịch (SMEs) | chi phí hoa hồng sàn OTA và tối ưu hóa quản lý đơn hàng. |
| | |
| Khách du lịch | Trải nghiệm tìm kiếm tour nhanh chóng, minh bạch về giá, đặt vé tức thời |
| (End Users) | và chủ động hủy/hoàn vé với thông tin hiển thị rõ ràng. |
+--------------------------------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để đóng gói và triển khai ứng dụng Android là gì?
Máy trạm phát triển cần cài đặt JDK 11, Node.js v16+, Android Studio Chipmunk cùng Android SDK Platform 31 (Android 12). Thiết bị người dùng cuối yêu cầu hệ điều hành Android từ phiên bản 5.0 trở lên và kết nối Internet ổn định.
2. Hệ thống xử lý thế nào khi xảy ra tình trạng tranh chấp vé (Race Condition) lúc nhiều người cùng đặt chỗ cuối cùng?
Trong cơ sở dữ liệu MongoDB, hệ thống sử dụng truy vấn cập nhật có điều kiện Tour.findOneAndUpdate({ _id: tourId, availableSeats: { $gte: ticketsCount } }). Nếu số chỗ khả dụng không đủ, lệnh cập nhật sẽ trả về null và hệ thống hủy giao dịch ngay lập tức, ngăn chặn hoàn toàn lỗi Overbooking.
3. Làm thế nào để mở rộng ứng dụng chạy trên cả hệ điều hành iOS?
Do mã nguồn ứng dụng được viết bằng React Native, lập trình viên chỉ cần chuyển mã nguồn sang môi trường macOS có cài đặt Xcode và CocoaPods, cấu hình lại các file Podfile và thư viện giao diện Native là có thể biên dịch ra file cài đặt .ipa cho iOS mà không cần viết lại mã nguồn logic.
4. Chi phí duy trì hạ tầng Backend và Cơ sở dữ liệu cho hệ thống là bao nhiêu?
Với quy mô doanh nghiệp vừa và nhỏ (dưới 10.000 người dùng hoạt động/tháng), hệ thống có thể vận hành ổn định trên máy chủ ảo (VPS) cấu hình 2 vCPU / 4GB RAM (chi phí ~250.000 - 400.000 VNĐ/tháng) và cụm CSDL MongoDB Atlas gói chia sẻ hoặc tự cài đặt trên cùng VPS.
5. Tại sao các tour giảm giá từ 25% trở lên lại không được hỗ trợ hoàn vé?
Đây là quy định nghiệp vụ được thiết lập trong hệ thống nhằm cân bằng lợi ích kinh tế giữa khách hàng và nhà tổ chức tour. Tour siêu giảm giá là sản phẩm xả kho kích cầu du lịch với biên lợi nhuận thấp, việc khóa chức năng hủy vé giúp đơn vị lữ hành cố định số lượng đoàn khởi hành và tránh thất thoát doanh thu.
Kết luận
Đồ án tốt nghiệp "Xây dựng ứng dụng dịch vụ du lịch trên nền tảng Android" của sinh viên Phạm Anh Dũng đã giải quyết xuất sắc bài toán số hóa quy trình kinh doanh dịch vụ lữ hành. Bằng việc kết hợp sức mạnh của hệ sinh thái JavaScript hiện đại (React Native, Node.js, Express, MongoDB), hệ thống mang lại một giải pháp công nghệ toàn diện, vận hành mượt mà với thời gian đáp ứng nhanh và khả năng chịu tải tốt.
Hệ thống không chỉ đáp ứng hoàn chỉnh các tiêu chuẩn học thuật của một đồ án tốt nghiệp chuyên ngành Mạng máy tính & Công nghệ thông tin mà còn mở ra tiềm năng thương mại hóa thực tế cho các doanh nghiệp du lịch trong kỷ nguyên số. Các lập trình viên và doanh nghiệp có thể tham khảo kiến trúc này để làm nền tảng xây dựng các giải pháp thương mại điện tử di động chuyên nghiệp.