Ý nghĩa khoa học và thực tiễn
Việc đặt vé xe khách là một thách thức phức tạp liên quan đến nhiều yếu tố như quản lý thông tin vé và thông tin người dùng Website đặt vé xe khách mà nhóm phát triển sẽ tối ưu hóa quy trình quản lý, giúp người dùng dễ dàng và nhanh chóng hơn trong việc đặt vé, đồng thời giảm thiểu những khó khăn hiện tại khi đặt vé trực tiếp.
- Khách hàng phải tốn nhiều thời gian đến gặp trực tiếp nhân viên tại quầy để mua vé xe, hủy vé, đổi vé
- Nhân viên, quản trị viên phải lập thống kê tình hình, số lượng vé đã đặt theo ngày, tháng, năm một cách thủ công.
Mục tiêu đề tài
Xây dựng website bán vé xe khách online:
Website có nhiều nhóm đối tượng, tùy vào từng nhóm đối tượng sẽ có các features, functions khác nhau
Nhóm người dùng: User (Khách hàng)
Quản lý người dùng : Đăng nhập, đăng xuất, đăng ký, xem thông tin, trang thông tin về nhà xe
Đặt vé xe: Tìm kiếm tuyến xe, chọn tuyến, chọn ghế, điền thông tin người mua, xác nhận đặt vé
Quản lý vé đã đặt, hóa đơn: Xem tất cả vé do người dùng đã đặt, xem chi tiết từng vé đã đặt, xóa vé đã đặt
Nhóm người dùng: Manager (Quản lý, nhân viên bán vé)
Quản lý người dùng : Đăng nhập, đăng xuất, đăng ký, xem thông tin, trang thông tin về nhà xe
Đặt vé xe: Tìm kiếm tuyến xe, chọn tuyến, chọn ghế, điền thông tin người mua, xác nhận đặt vé
Quản lý vé đã đặt và hóa đơn dễ dàng với tính năng xem tất cả vé đã đặt, kiểm tra chi tiết từng vé, hủy vé khi cần thiết và cập nhật thông tin thanh toán một cách nhanh chóng.
Doanh thu: Xem tất cả vé đã được đặt tìm kiếm theo ngày tạo
Nhóm người dùng: Admin (Quản trị viên)
Quản lý người dùng : Đăng nhập, đăng xuất, đăng ký, xem thông tin, trang thông tin về nhà xe
Quản lý của quản trị viên:
Quản lý vị trí: Xem thông tin tất cả các vị trí, thêm mới vị trí
Quản lý xe: Xem thông tin tất cả các xe, thêm mới xe
Quản lý tuyến: Xem thông tin tất cả các tuyến, thêm mới tuyến xe
Quản lý phiên đặt vé: Xem thông tin tất cả các phiên, thêm mới phiên
Quản lý vé đã đặt và hóa đơn cho phép người dùng và nhân viên xem thông tin chi tiết về tất cả các vé đã đặt, đồng thời cập nhật tình trạng thanh toán của từng vé.
Doanh thu: Xem tất cả vé đã đặt tìm kiếm theo ngày tạo.
Phương pháp nghiên cứu
- Ôn tập các kiến thức đã được học như xử lý dữ liệu, mô hình hóa yêu cầu,
- Tìm hiểu và tự nghiên cứu các công nghệ sử dụng xây dựng website bán vé xe khách:
Ngôn ngữ lập trình: Java, Angular, HTML, CSS, JS
Cơ sở dữ liệu: MySQL (version 8.0.17)
Công nghệ và framework: Restful API, Bootstrap
- Áp dụng các kỹ năng mềm như kỹ năng làm việc nhóm, kỹ năng thuyết trình, giao tiếp trong quá trình thực hiện khoá luận.
Bố cục báo cáo
Báo cáo có bố cục gồm các phần sau:
- Chương 1: Giới thiệu tổng quan
- Chương 2: Cơ sở lý thuyết
- Chương 3: Khảo sát hiện trạng và xác định yêu cầu
- Chương 4: Thiết kế phần mềm
- Chương 5: Kết quả so sánh, thực nghiệm, phân tích, tổng hợp
- Chương 6: Kết luận và hướng phát triển
Giới thiệu về ngôn ngữ Java
Java là gì?
Java là một ngôn ngữ lập trình hướng đối tượng (OOP) dựa trên các lớp (class) Khác với nhiều ngôn ngữ lập trình khác, Java biên dịch mã nguồn thành bytecode thay vì mã máy, và bytecode này sẽ được môi trường thực thi (runtime environment) xử lý khi chạy.
Trước đây, Java chậm hơn các ngôn ngữ biên dịch như C và C++, nhưng nhờ công nghệ biên dịch tại chỗ (Just in Time Compilation), hiệu suất của Java đã được cải thiện đáng kể, và trong một số trường hợp, Java có thể chạy nhanh hơn So với các ngôn ngữ thông dịch như Python, Perl, và PHP, Java nhanh hơn nhiều lần Hiệu suất của Java cũng tương đương với C#, một ngôn ngữ có cú pháp và quá trình biên dịch tương tự.
Java có cú pháp vay mượn từ C và C++, nhưng đơn giản hơn và ít tính năng xử lý cấp thấp hơn, giúp việc viết chương trình dễ dàng hơn và giảm công sức sửa lỗi Tuy nhiên, trong lập trình hướng đối tượng, Java lại phức tạp hơn.
Trong Java, rò rỉ bộ nhớ hiếm khi xảy ra nhờ vào việc quản lý bộ nhớ tự động của Java Virtual Machine (JVM) thông qua cơ chế "dọn dẹp rác" Người lập trình không cần lo lắng về việc cấp phát và giải phóng bộ nhớ như trong C hay C++ Tuy nhiên, khi làm việc với các tài nguyên bên ngoài như mạng, file IO, và cơ sở dữ liệu, nếu không đóng (close) các streams, rò rỉ dữ liệu vẫn có thể xảy ra.
Java được phát triển bởi James Gosling và nhóm của ông tại Sun Microsystems vào năm 1991, ban đầu mang tên Oak Ngôn ngữ này được thiết kế để thay thế C++ và có các tính năng tương tự như Objective C Cần lưu ý rằng Java không giống JavaScript, mặc dù chúng chỉ tương đồng về tên và cú pháp Sun Microsystems giữ bản quyền và liên tục phát triển Java, với phiên bản JDK 1.6.24 được phát hành vào tháng 4 năm 2011.
Java được thiết kế với nguyên tắc "Viết một lần, thực thi khắp nơi" (WORA), cho phép các chương trình phần mềm viết bằng Java chạy trên nhiều nền tảng khác nhau Điều này được thực hiện thông qua một môi trường thực thi, giúp tối ưu hóa tính linh hoạt và khả năng tương thích của ứng dụng.
Môi trường thực thi Java của Sun Microsystems hỗ trợ nhiều hệ điều hành như Sun Solaris, Linux, Mac OS, FreeBSD và Windows Ngoài ra, các công ty và tổ chức khác như BEA, IBM và HP cũng phát triển môi trường thực thi Java cho các hệ điều hành khác Đặc biệt, nền tảng Java của IBM hỗ trợ các hệ điều hành Windows, Linux, AIX và z/OS.
Java, một ngôn ngữ lập trình được phát triển bởi Sun Microsystems vào năm 1991 dưới sự dẫn dắt của kỹ sư James Gosling, đã nhanh chóng trở nên nổi tiếng sau khi Netscape công bố hỗ trợ Java cho trình duyệt Navigator tại hội thảo SunWorld năm 1995 Được phát hành chính thức vào năm 1994, Java đã được tích hợp rộng rãi trên nhiều trình duyệt Internet như Internet Explorer và Firefox Hiện nay, Java chủ yếu được sử dụng trong môi trường NetBeans và Oracle Sau khi Oracle mua lại Sun Microsystems vào năm 2009-2010, công ty đã tiếp tục phát triển và duy trì Java như một ngôn ngữ lập trình quan trọng trong ngành công nghệ.
"người quản lý công nghệ Java với cam kết không ngừng để bồi dưỡng một cộng đồng tham gia và minh bạch"
Java đã trải qua nhiều phiên bản từ khi ra mắt, bắt đầu với JDK 1.0 vào ngày 23/01/1996 và đến nay đã phát hành phiên bản mới nhất là JDK 10 vào ngày 20/03/2018.
2.1.3 Mục tiêu chính của ngôn ngữ Java
Có 6 mục tiêu chính trong việc xây dựng ngôn ngữ Java:
- Đơn giản, hướng đối tượng và quen thuộc
- Mạnh mẽ và an toàn
- Kiến trúc trung lập và di động
- Thực thi với hiệu suất cao
- Dịch ra bytecode, phân luồng và năng động
- Dễ sử dụng cho người dùng Java
2.1.4 Ưu điểm và nhược điểm
Java là ngôn ngữ có mã nguồn mở, miễn phí, thuần hướng đối tượng
Được hỗ trợ IDE miễn phí, có cộng đồng hỗ trợ rộng lớn trên toàn thế giới
Dễ thực thi, dễ sử dụng, dễ tiếp cận
API hỗ trợ phong phú
Thư viện của Java khá nặng
Tương tác với database (cơ sở dữ liệu) thì cần phải có library (thư viện) riêng
Máy ảo của Java có thể chiếm nhiều bộ nhớ.
Mục tiêu chính của ngôn ngữ Java
Có 6 mục tiêu chính trong việc xây dựng ngôn ngữ Java:
- Đơn giản, hướng đối tượng và quen thuộc
- Mạnh mẽ và an toàn
- Kiến trúc trung lập và di động
- Thực thi với hiệu suất cao
- Dịch ra bytecode, phân luồng và năng động
- Dễ sử dụng cho người dùng Java.
Ưu điểm và nhược điểm
Java là ngôn ngữ có mã nguồn mở, miễn phí, thuần hướng đối tượng
Được hỗ trợ IDE miễn phí, có cộng đồng hỗ trợ rộng lớn trên toàn thế giới
Dễ thực thi, dễ sử dụng, dễ tiếp cận
API hỗ trợ phong phú
Thư viện của Java khá nặng
Tương tác với database (cơ sở dữ liệu) thì cần phải có library (thư viện) riêng
Máy ảo của Java có thể chiếm nhiều bộ nhớ
Giới thiệu về ngôn ngữ Angular
Giới thiệu về Angular
Angular là một framework web mã nguồn mở được phát triển dựa trên TypeScript, do nhóm Angular tại Google và cộng đồng đóng góp Đây là phiên bản viết lại hoàn toàn từ AngularJS, mang đến nhiều cải tiến và tính năng mới.
Đặc điểm của Angular
Angular là một nền tảng để xây dựng các ứng dụng mobile application và web application Hiện tại phiên bản mới nhất là Angular 10
Angular không sử dụng khái niệm "scope" hay controller; thay vào đó, nó áp dụng hệ thống thành phần (component) như một cấu trúc chính, tạo ra sự phân cấp rõ ràng trong ứng dụng.
- Angular có một expression syntax khác so với AngularJs, sử dung “[ ]” cho property binding và “( )” cho event binding
- Tính module – đa số các tính năng chính đã chuyển về các module
- Angular chuyển sang sử dụng ngôn ngữ Typescrpit của Microsoft, trong đó có các tính chất như là static typing và annotation.
Tại sao chọn Angular 10?
Sản phẩm Angular 10 do Google phát triển không thể bị bỏ qua nhờ vào nhiều tính năng nổi bật và liên tục được cập nhật Phiên bản mới nhất này mang đến các cải tiến đáng kể, bao gồm hỗ trợ lazy loading, data-binding, pipe và nhiều ng module đa dạng, giúp tối ưu hóa quá trình phát triển website.
Việc phân chia thành các thành phần như model, service, component không chỉ giúp tăng tính thân thiện và dễ sử dụng mà còn tạo điều kiện cho việc quản lý dự án hiệu quả hơn, đồng thời hỗ trợ cho quá trình triển khai và bảo trì sau này.
Giới thiệu về công nghệ RESTful API
RESTful là tiêu chuẩn thiết kế API cho ứng dụng Web, giúp quản lý hiệu quả các tài nguyên Tiêu chuẩn này tập trung vào các tài nguyên hệ thống, bao gồm trạng thái tài nguyên được định dạng và truyền tải qua giao thức HTTP.
Chức năng quan trọng nhất của REST là quy định cách sử dụng các phương thức HTTP như GET, POST, PUT, DELETE và cách định dạng các URL cho ứng dụng web nhằm quản lý các tài nguyên RESTful không quy định logic mã nguồn của ứng dụng và không bị giới hạn bởi ngôn ngữ lập trình, cho phép bất kỳ ngôn ngữ hoặc framework nào cũng có thể được sử dụng để thiết kế một RESTful.
Hình 3 1: Cách thức hoạt động của RestfulAPI
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
KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU
Khảo sát yêu cầu (từ các ứng dụng có trên thị trường)
1.1 Lý do chọn đề tài
Xe khách đã trở thành phương tiện di chuyển quen thuộc, được nhiều người lựa chọn cho các chuyến đi xa như du lịch, công tác hay về quê nhờ vào tính phổ biến, tiện lợi và giá cả phải chăng Tuy nhiên, trong những ngày cao điểm, việc ra bến xe mua vé trực tiếp trở nên khó khăn, đặc biệt với những người không có nhiều thời gian.
Sự ra đời của ứng dụng đặt vé xe khách trực tuyến đáp ứng nhu cầu thiết yếu trong việc đặt vé dễ dàng và nhanh chóng Nhóm đã chọn đề tài "Xây dựng website đặt vé xe khách" nhằm giúp người dùng tiết kiệm thời gian và tiền bạc khi đặt vé xe Website không chỉ mang lại sự thuận tiện cho người dùng mà còn hỗ trợ quản lý online một cách linh hoạt và hiệu quả.
1.2 Ý nghĩa khoa học và thực tiễn
Bài toán đặt vé xe khách là một thách thức phức tạp, liên quan đến nhiều module như quản lý thông tin vé và thông tin người dùng Website đặt vé xe khách do nhóm phát triển sẽ tối ưu hóa quy trình quản lý, mang lại sự thuận tiện và nhanh chóng, đồng thời giảm thiểu những khó khăn hiện tại khi đặt vé trực tiếp.
- Khách hàng phải tốn nhiều thời gian đến gặp trực tiếp nhân viên tại quầy để mua vé xe, hủy vé, đổi vé
- Nhân viên, quản trị viên phải lập thống kê tình hình, số lượng vé đã đặt theo ngày, tháng, năm một cách thủ công
Xây dựng website bán vé xe khách online:
Website có nhiều nhóm đối tượng, tùy vào từng nhóm đối tượng sẽ có các features, functions khác nhau
Nhóm người dùng: User (Khách hàng)
Quản lý người dùng : Đăng nhập, đăng xuất, đăng ký, xem thông tin, trang thông tin về nhà xe
Đặt vé xe: Tìm kiếm tuyến xe, chọn tuyến, chọn ghế, điền thông tin người mua, xác nhận đặt vé
Quản lý vé đã đặt, hóa đơn: Xem tất cả vé do người dùng đã đặt, xem chi tiết từng vé đã đặt, xóa vé đã đặt
Nhóm người dùng: Manager (Quản lý, nhân viên bán vé)
Quản lý người dùng : Đăng nhập, đăng xuất, đăng ký, xem thông tin, trang thông tin về nhà xe
Đặt vé xe: Tìm kiếm tuyến xe, chọn tuyến, chọn ghế, điền thông tin người mua, xác nhận đặt vé
Quản lý vé đã đặt và hóa đơn một cách hiệu quả bằng cách xem tất cả vé đã đặt, kiểm tra chi tiết từng vé, hủy vé khi cần thiết và cập nhật thông tin thanh toán vé một cách dễ dàng.
Doanh thu: Xem tất cả vé đã được đặt tìm kiếm theo ngày tạo
Nhóm người dùng: Admin (Quản trị viên)
Quản lý người dùng : Đăng nhập, đăng xuất, đăng ký, xem thông tin, trang thông tin về nhà xe
Quản lý của quản trị viên:
Quản lý vị trí: Xem thông tin tất cả các vị trí, thêm mới vị trí
Quản lý xe: Xem thông tin tất cả các xe, thêm mới xe
Quản lý tuyến: Xem thông tin tất cả các tuyến, thêm mới tuyến xe
Quản lý phiên đặt vé: Xem thông tin tất cả các phiên, thêm mới phiên
Quản lý vé đã đặt và hóa đơn cho phép người dùng và nhân viên xem thông tin chi tiết về tất cả các vé đã đặt, đồng thời cập nhật thông tin thanh toán một cách dễ dàng và hiệu quả.
Doanh thu: Xem tất cả vé đã đặt tìm kiếm theo ngày tạo
- Ôn tập các kiến thức đã được học như xử lý dữ liệu, mô hình hóa yêu cầu,
- Tìm hiểu và tự nghiên cứu các công nghệ sử dụng xây dựng website bán vé xe khách:
Ngôn ngữ lập trình: Java, Angular, HTML, CSS, JS
Cơ sở dữ liệu: MySQL (version 8.0.17)
Công nghệ và framework: Restful API, Bootstrap
- Áp dụng các kỹ năng mềm như kỹ năng làm việc nhóm, kỹ năng thuyết trình, giao tiếp trong quá trình thực hiện khoá luận
Báo cáo có bố cục gồm các phần sau:
- Chương 1: Giới thiệu tổng quan
- Chương 2: Cơ sở lý thuyết
- Chương 3: Khảo sát hiện trạng và xác định yêu cầu
- Chương 4: Thiết kế phần mềm
- Chương 5: Kết quả so sánh, thực nghiệm, phân tích, tổng hợp
- Chương 6: Kết luận và hướng phát triển
2.1 Giới thiệu về ngôn ngữ Java
Java là một ngôn ngữ lập trình hướng đối tượng (OOP) dựa trên các lớp (class) Khác với nhiều ngôn ngữ lập trình khác, Java biên dịch mã nguồn thành bytecode thay vì mã máy, và bytecode này sẽ được chạy bởi môi trường thực thi (runtime environment).
Trước đây, Java chậm hơn các ngôn ngữ biên dịch trực tiếp như C và C++, nhưng nhờ công nghệ biên dịch tại chỗ (Just in time compilation), hiệu suất của Java đã được cải thiện đáng kể Hiện nay, Java có thể chạy nhanh hơn nhiều so với các ngôn ngữ thông dịch như Python, Perl và PHP Ngoài ra, hiệu suất của Java cũng tương đương với C#, một ngôn ngữ có cú pháp và quy trình biên dịch tương tự.
Java có cú pháp tương tự như C và C++, nhưng đơn giản hơn và ít tính năng xử lý cấp thấp hơn, giúp việc viết chương trình dễ dàng và tiết kiệm thời gian sửa lỗi Tuy nhiên, lập trình hướng đối tượng trong Java lại phức tạp hơn.
Trong Java, hiện tượng rò rỉ bộ nhớ hiếm khi xảy ra nhờ vào việc quản lý bộ nhớ tự động của Java Virtual Machine (JVM) thông qua quá trình "dọn dẹp rác" Người lập trình không cần lo lắng về việc cấp phát và giải phóng bộ nhớ như trong C hay C++ Tuy nhiên, khi làm việc với các tài nguyên mạng, file IO, và cơ sở dữ liệu bên ngoài kiểm soát của JVM, nếu không đóng (close) các streams, rò rỉ dữ liệu vẫn có thể xảy ra.
Java được phát triển bởi James Gosling và nhóm của ông tại Sun Microsystems vào năm 1991, ban đầu mang tên Oak Ngôn ngữ này được thiết kế để thay thế C++ nhưng tích hợp các tính năng tương tự như Objective C Cần phân biệt rõ Java với JavaScript, vì chúng chỉ giống nhau về tên gọi và cú pháp Sun Microsystems hiện đang sở hữu bản quyền và liên tục cải tiến Java, với phiên bản JDK 1.6.24 được phát hành vào tháng 4 năm 2011.
Java được phát triển với nguyên tắc "Viết một lần, thực thi khắp nơi" (WORA), cho phép các chương trình phần mềm viết bằng Java có khả năng chạy trên nhiều nền tảng khác nhau Điều này được thực hiện thông qua một môi trường thực thi, giúp tăng tính linh hoạt và khả năng tương thích của ứng dụng.
Môi trường thực thi Java hiện nay được hỗ trợ bởi nhiều nền tảng, bao gồm Sun Solaris, Linux, Mac OS, FreeBSD và Windows Ngoài ra, một số công ty và tổ chức như BEA, IBM và HP cũng phát triển môi trường thực thi Java cho các hệ điều hành khác Đặc biệt, nền tảng Java của IBM hỗ trợ các hệ điều hành Windows, Linux, AIX và z/OS.
Java, một ngôn ngữ lập trình được phát triển bởi Sun Microsystems vào năm 1991 bởi nhóm kỹ sư bao gồm James Gosling trong khuôn khổ Dự án Xanh, đã chính thức ra mắt vào năm 1994 Sự nổi bật của Java bắt đầu khi Netscape công bố hỗ trợ Java trong trình duyệt Navigator tại hội thảo SunWorld năm 1995, và sau đó, Java được tích hợp vào hầu hết các trình duyệt Internet như Internet Explorer và Firefox Ngày nay, Java chủ yếu được sử dụng trong môi trường NetBeans và Oracle Sau khi Oracle mua lại Sun Microsystems vào năm 2009-2010, họ đã tiếp tục phát triển và duy trì ngôn ngữ này.
"người quản lý công nghệ Java với cam kết không ngừng để bồi dưỡng một cộng đồng tham gia và minh bạch"
Java đã trải qua nhiều phiên bản khác nhau, bắt đầu từ JDK 1.0 được phát hành vào ngày 23/01/1996, cho đến phiên bản mới nhất JDK 10 ra mắt vào ngày 20/03/2018.
2.1.3 Mục tiêu chính của ngôn ngữ Java
Có 6 mục tiêu chính trong việc xây dựng ngôn ngữ Java:
- Đơn giản, hướng đối tượng và quen thuộc
- Mạnh mẽ và an toàn
- Kiến trúc trung lập và di động
- Thực thi với hiệu suất cao
- Dịch ra bytecode, phân luồng và năng động
- Dễ sử dụng cho người dùng Java
2.1.4 Ưu điểm và nhược điểm
Java là ngôn ngữ có mã nguồn mở, miễn phí, thuần hướng đối tượng
Được hỗ trợ IDE miễn phí, có cộng đồng hỗ trợ rộng lớn trên toàn thế giới
Dễ thực thi, dễ sử dụng, dễ tiếp cận
API hỗ trợ phong phú
Thư viện của Java khá nặng
Tương tác với database (cơ sở dữ liệu) thì cần phải có library (thư viện) riêng
Máy ảo của Java có thể chiếm nhiều bộ nhớ
2.2 Giới thiệu về ngôn ngữ Angular
Angular là một framework web mã nguồn mở dựa trên TypeScript, được phát triển bởi nhóm Angular tại Google cùng với sự hỗ trợ của cộng đồng Đây là phiên bản viết lại hoàn toàn từ AngularJS, do chính nhóm phát triển trước đó tạo ra.
Angular là một nền tảng để xây dựng các ứng dụng mobile application và web application Hiện tại phiên bản mới nhất là Angular 10
Angular không sử dụng khái niệm "scope" hay controller; thay vào đó, nó áp dụng hệ thống các thành phần (component) như một cấu trúc chính, tạo ra sự phân cấp rõ ràng trong ứng dụng.
- Angular có một expression syntax khác so với AngularJs, sử dung “[ ]” cho property binding và “( )” cho event binding
- Tính module – đa số các tính năng chính đã chuyển về các module
- Angular chuyển sang sử dụng ngôn ngữ Typescrpit của Microsoft, trong đó có các tính chất như là static typing và annotation
Angular 10, phiên bản mới nhất được phát triển bởi Google, mang đến nhiều tính năng cải tiến hấp dẫn Các tính năng nổi bật như lazy loading, data-binding, và pipe, cùng với nhiều ng module đa dạng, hỗ trợ tối ưu cho việc phát triển website Sản phẩm này không ngừng được cập nhật, khẳng định vị thế của mình trong lĩnh vực phát triển ứng dụng web.
Việc phân chia thành các thành phần như model, service, và component không chỉ giúp tạo ra một hệ thống thân thiện và dễ sử dụng, mà còn làm cho việc quản lý dự án trở nên dễ dàng hơn Điều này cũng hỗ trợ cho quá trình triển khai và bảo trì sau này hiệu quả hơn.
2.3 Giới thiệu về công nghệ RESTful API
RESTful là tiêu chuẩn thiết kế API cho ứng dụng Web, giúp quản lý tài nguyên hiệu quả Nó tập trung vào các tài nguyên hệ thống, bao gồm trạng thái tài nguyên được định dạng và truyền tải qua giao thức HTTP.
Chức năng chính của REST là quy định cách sử dụng các phương thức HTTP như GET, POST, PUT, DELETE và cách định dạng URL cho ứng dụng web nhằm quản lý các tài nguyên RESTful không quy định logic mã ứng dụng và không bị giới hạn bởi ngôn ngữ lập trình, cho phép bất kỳ ngôn ngữ hoặc framework nào cũng có thể được sử dụng để thiết kế một RESTful.
Hình 3 1: Cách thức hoạt động của RestfulAPI
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
Giao diện
Hình 3.3: Khảo sát giao diện của VeXeRe.com
Ưu và nhược điểm
- Ưu điểm: Giao diện đơn giản dễ sử dụng, có cung cấp phần mềm cho các hãng xe, sử dụng được 2 ngôn ngữ
- Nhược điểm: Không có đăng ký thành viên và chế độ ưu đãi cho khách hàng chi tiết.
Phương Trang futabus.vn
Hình 3.4: Khảo sát tính năng của futabus.vn 3.1.2.2 Giao diện
Hình 3.5: Khảo sát giao diện của futabus.vn
- Ưu điểm: Đầy đủ các chức năng cần thiết
- Nhược điểm: Giao diện không thân thiện với người dùng.
Thành Bưởi thanhbuoi.com.vn
Hình 3.6: Khảo sát tính năng của thanhbuoi.com.vn
Hình 3.7: Khảo sát giao diện của thanhbuoi.com.vn
- Ưu điểm: Giao diện đơn giản dễ sử dụng, thông tin đầy đủ
Mặc dù có nhiều ưu điểm, nhưng nền tảng này vẫn còn tồn tại một số nhược điểm như việc sử dụng Flash ở một số khu vực, không hỗ trợ tính năng thành viên, cũng như không có chức năng đặt vé và thanh toán trực tuyến Hơn nữa, nền tảng còn thiếu nhiều tính năng quan trọng khác.
Busonlineticket.com
Hình 3.8: Khảo sát tính năng của busonlineticket.com
Hình 3.9: Khảo sát giao diện của busonlineticket.com
- Ưu điểm: Tích hợp nhiều loại xe và cả khách sạn, thuyền du lịch Có ứng dụng trên điện thoại, giao diện đơn giản dễ sử dụng
- Nhược điểm: Sắp xếp các content chưa thực sự bắt mắt
Mô hình hóa yêu cầu
3.2.1.1 Use case của khách hàng
Hình 3.10: Use case của khách hàng
3.2.1.2 Use case của nhân viên bán vé tại quầy
Hình 3.11: Use case của nhân viên bán vé tại quầy
3.2.1.3 Use case của quản trị viên
Hình 3.12: Use case của quản trị viên
3.2.1.4 Ý nghĩa của actor và use case
2 Manager Nhân viên bán vé tại quầy
Bảng 3.2: Ý nghĩa của use case
Yêu cầu chức năng Ý nghĩa Actor
1 Register account Đăng ký tài khoản User
2 Login account Đăng nhập tài khoản
3 Logout account Đăng xuất tài khoản
4.1 Choose route Chọn tuyến đi User,
4.2 Choose seat Chọn ghế User,
Nhập thông tin người đặt vé
User, Manager 4.4 Confirm ticket Xác nhận vé đã đặt User,
5.1 View all booking ticket Xem tất cả các vé đã đặt
Xem thông tin chi tiết vé đã đặt
5.3 Cancel booking ticket Hủy vé đã đặt
User, Manager, Admin 5.4 Update status payment ticket
Cập nhật trạng thái thanh toán vé Admin
Xem tất cả thông tin của người dùng Admin
6.2 Create user Tạo mới tài khoản người dùng Admin
Xem thông tin chi tiết một người dùng Admin
6.4 Edit user Chỉnh sửa thông tin người dùng Admin
Xóa tài khoản của người dùng Admin
7.1.1 View all locations Xem tất cả các vị trí Admin 7.1.2 Create location Tạo mới vị trí Admin
7.1.3 Edit location Chỉnh sửa tên vị trí Admin 7.1.4
Vô hiệu hóa, kích hoạt vị trí Admin
7.2.1 View all buses Xem thông tin tất cả các xe Admin
7.2.2 Create bus Tạo mới xe Admin
7.2.3 Edit bus Chỉnh sửa thông tin của xe Admin 7.2.4
Vô hiệu hóa, kích hoạt xe Admin
Xem thông tin tất cả các tuyến xe Admin
7.3.2 Create route Tạo mới tuyến xe Admin
7.3.3 Edit route Chỉnh sửa thông tin của tuyến xe Admin
Vô hiệu hóa, kích hoạt tuyến xe Admin
Xem thông tin tất cả các phiên Admin
7.4.2 Create session Tạo mới phiên Admin
Chỉnh sửa thông tin của phiên Admin
Vô hiệu hóa, kích hoạt phiên Admin
8 Manage revenue Quản lý doanh thu Admin
Bảng 3.3: Đặc tả đăng ký tài khoản
Description Đăng ký tài khoản
Pre-conditions Actor chưa có tài khoản đăng nhập vào hệ thống
1.Thành công: Thông báo actor đăng ký tài khoản thành công 2.Thất bại: Thông báo nguyên nhân actor đăng ký thất bại
Trigger Truy cập trang chủ của website, actor nhấn vào nút “register”
Use case bắt đầu khi:
1 Actor nhấn vào nút “register” trên trang chủ của website
2 Hiển thị form đăng ký
3 Actor nhập thông tin bắt buộc gồm username (tên đăng nhập), fullname (họ tên), email và password (mật khẩu)
4 Actor nhấn vào nút “register” để đăng ký tài khoản
5 Hệ thống kiểm tra tài khoản dưới cơ sở dữ liệu
6 Nếu tài khoản không tồn tại, tài khoản mới được thêm vào cơ sở dữ liệu
8 Thông báo đăng ký tài khoản thành công cho người dùng
Nếu actor đăng ký không thành công hệ thống sẽ thông báo nguyên nhân
Bảng 3.4: Đặc tả đăng nhập tài khoản
Description Đăng nhập tài khoản đã đăng ký để tương tác với hệ thống
Pre-conditions Có tài khoản đã đăng ký
1 Thành công: Actor được xác thực, chuyển trực tiếp tới trang chủ, hiển thị màn hình khác nhau đối với từng quyền
2 Thất bại: Actor không truy cập được vào hệ thống và thông báo nguyên nhân
Trigger Truy cập trang chủ của website, actor nhấn vào nút “login”
Use case bắt đầu khi:
1 Actor nhấn vào nút “login” trên trang chủ website
3 Hệ thống hiển thị cửa sổ form login
6 Nhấn nút “login” để đăng nhập vào hệ thống
7 Hệ thống chuyển tới màn hình trang chủ, hiển thị menu tương ứng với role của người dùng
Nếu actor đăng nhập không thành công, hệ thống sẽ thông báo nguyên nhân thất bại
Bảng 3.5: Đặc tả đăng xuất tài khoản
Description Đăng xuất tài khoản
Pre-conditions Đã đăng nhập vào hệ thống
1 Thành công: Trở lại trang chủ
2 Thất bại: Thông báo đăng xuất không thành công
Trigger Nhấn vào nút “Log out”
Use case bắt đầu khi:
1 Actor nhấn vào dropdown menu user, form hiển thị
2 Actor nhấn vào nút “log out”
3 Trở về trang chủ khi người dùng chưa đăng nhập vào hệ thống
Nếu actor đăng xuất nhưng không thành công, hệ thống sẽ thông báo nguyên nhân
Bảng 3.6: Đặc tả chọn tuyến xe
Pre-conditions Đã đăng nhập với role là user hoặc manager
1 Thành công: Actor có thể chọn vị trí, chọn tuyến xe
2 Thất bại: Actor không thể chọn vị trí, chọn tuyến xe
Trigger Admin nhấn vào booking ticket, chọn vị trí, nhấn nút “search”
Use case bắt đầu khi:
1 Actor chọn booking ticket (đặt vé)
2 Actor chọn “departure” (vị trí khởi hành), “destination” (vị trí kết thúc), date_departure (ngày khởi hành)
4 Hệ thống hiển thị danh sách tuyến xe tương ứng với thông tin actor tìm kiếm
5 Actor nhấn “book” để chọn một tuyến xe
Alternative flow Không hiển thị thông tin tuyến xe
Bảng 3.7: Đặc tả chọn ghế
Pre-conditions Đã chọn booking ticket, chọn một tuyến xe
1 Thành công: Hiển thị danh sách ghế tương ứng với các xe
2 Thất bại: Không có ghế nào được hiển thị
Trigger Admin nhấn vào nút “book” của trang choose route
Basic flow Use case bắt đầu khi:
1 Actor nhấn vào nút “book” của trang choose route
2 Hiển thị danh sách ghế (ghế đã đặt, ghế còn trống) theo từng xe
Alternative flow Actor chọn ghế không thành công, không đổi màu ghế
3.2.2.4.3 Thông tin người đặt vé
Bảng 3.8: Đặc tả thông tin người đặt vé
Description Thông tin người đặt vé
Pre-conditions Hoàn thành việc chọn ghế
1 Thành công: Hiển thị form booking information, actor điền thành công thông tin của người đặt vé
2 Thất bại: Không hiển thị form, không điền được thông tin của người đặt vé
Trigger Điền đầy đủ thông tin bắt buộc vào form booking information
Use case bắt đầu khi:
1 Sau khi actor chọn ghế, nhấn nút “next” để chuyển tới trang booking information
2 Hiển thị form booking information lên màn hình
3 Actor điền đầy đủ thông tin bắt buộc vào form hiển thị
Không hiển thị form, actor không điền được thông tin của người đặt vé
Bảng 3.9: Đặc tả xác nhận đặt vé
Description Xác nhận đặt vé
Pre-conditions Điền đầy đủ thông tin của người đặt vé
1 Thành công: Xác nhận đặt vé thành công, vé được lưu dưới cơ sở dữ liệu
2 Thất bại: Xác nhận đặt vé không thành công, thông báo nguyên nhân thất bại
Trigger Điền đầy đủ thông tin của người đặt vé, nhấn nút “next” để chuyển tới trang confirm ticket
Use case bắt đầu khi:
1 Actor điền đầy đủ thông tin của người đặt vé và nhấn nút
“next” để chuyển tới trang confirm ticket
2 Hệ thống tự động load những thông tin về tuyến xe, tuyến ghế, thông tin người đặt
3 Nhấn nút “finish” để xác nhận quá trình đặt vé
4 Nếu thành công, vé vừa đặt sẽ được lưu xuống cơ sở dữ liệu
Alternative flow Nếu đặt vé không thành công, hiện thị thông báo đặt vé thất bại
3.2.2.5 Quản lý vé đã đặt
3.2.2.5.1 Xem thông tin tất cả các vé
Bảng 3.10: Đặc tả xem tất cả các vé đã đặt
Name View all booking tickets
Description Xem thông tin tất cả các vé
Pre-conditions Actor nhấn chọn “manage bill”
1 Thành công: Hiển thị danh sách tất cả các vé đã được đặt đối với từng role
2 Thất bại: Không có danh sách nào được hiển thị
Trigger Đăng nhập vào website, nhấn chọn “manage bill” trên thanh menu
Use case bắt đầu khi:
1 Actor nhấn chọn “manage bill” trên thanh menu
2 Danh sách tất cả các vé được hiển thị lên màn hình
Alternative flow Không có danh sách vé nào được hiển thị lên màn hình
3.2.2.5.2 Xem thông tin chi tiết vé đã đặt
Bảng 3.11: Đặc tả xem thông tin chi tiết vé đã đặt
Name View details booking ticket
Description Xem thông tin chi tiết vé đã đặt
Pre-conditions Actor đang ở màn hình “manage bill”
1 Thành công: Hiển thị thông tin chi tiết của vé đã chọn
2 Thất bại: Không có thông tin nào được hiển thị
Trigger Đang ở trang manage bill, nhấn icon “view” để xem thông tin chi tiết của vé đã chọn
Use case bắt đầu khi:
1 Actor chọn icon “view” để xem thông tin chi tiết của một vé
2 Hiển thị form thông tin chi tiết của vé lên màn hình
Alternative flow Không có thông tin nào được hiển thị lên màn hình
Bảng 3.12: Đặc tả hủy vé đã đặt
Description Hủy vé đã đặt
Pre-conditions Actor đang ở màn hình “manage bill”
1 Thành công: Actor hủy thành công vé đã đặt
2 Thất bại: Actor không hủy được vé, thông báo nguyên nhân thất bại
Trigger Đang ở trang manage bill, nhấn icon “cancel” để hủy vé đã chọn
Use case bắt đầu khi:
1 Actor chọn icon “cancel” để hủy thông tin vé đã đặt
2 Hiển thị thông báo hủy vé thành công lên màn hình
Alternative flow Không có vé nào được hủy, thông báo nguyên nhân thất bại
3.2.2.5.4 Cập nhật trạng thái thanh toán vé
Bảng 3.13: Đặc tả cập nhật trạng thái thanh toán vé
Name Update status payment ticket
Description Cập nhật trạng thái thanh toán vé
Pre-conditions Actor đang ở màn hình “manage bill”
1 Thành công: Actor cập nhật được trạng thái đã thanh toán
2 Thất bại: Actor không cập nhật được trạng thái thanh toán
Trigger Đang ở trang manage bill, nhấn nút “paid” hoặc “unpaid” để cập nhật trạng thái vé đã chọn
Use case bắt đầu khi:
1 Actor chọn button “paid” hoặc “unpaid” để cập nhật trạng thái đã thanh toán hay chưa thanh toán
2 Cập nhật thành công, trạng thái thanh toán từ “unpaid” đổi thành “paid” và ngược lại
Alternative flow Cập nhật trạng thái không thành công
3.2.2.6.1 Xem tất cả người dùng
Bảng 3.14: Đặc tả xem tất cả người dùng
Description Xem tất cả người dùng
Pre-conditions Actor đăng nhập vào website, nhấn chọn “manage user”
1 Thành công: Hiển thị danh sách chứa tất cả thông tin của người dùng
2 Thất bại: Không có danh sách nào được hiển thị lên màn hình
Trigger Nhấn chọn “manage user” trên thanh menu
1 Actor nhấn chọn “manage user” trên thanh menu
2 Hiển thị danh sách chứa tất cả thông tin của người dùng lên màn hình
Alternative flow Không có danh sách nào được hiển thị
Bảng 3.15: Đặc tả tạo mới người dùng
Description Tạo mới người dùng
Pre-conditions Actor đang ở trang “manage user”
1 Thành công: Thông tin người dùng vừa tạo được lưu vào cơ sở dữ liệu
2 Thất bại: Không tạo được người dùng mới, thông báo nguyên nhân thất bại
Trigger Nhấn vào nút “create user” để tạo mới người dùng
2 Hiển thị form create user lên màn hình
3 Actor điền đầy đủ thông tin bắt buộc vào form hiển thị
4 Sau khi nhập xong nhấn nút “Save”
5 Thông tin về người dùng mới sẽ được lưu xuống cơ sở dữ liệu
6 Thông tin vừa được thêm hiển thị lên danh sách người dùng ở trang view all users
Không thông tin nào được thêm vào cơ sở dữ liệu, thông báo nguyên nhân thất bại
3.2.2.6.3 Xem thông tin chi tiết của người dùng
Bảng 3.16: Đặc tả xem thông tin chi tiết của người dùng
Description Xem thông tin chi tiết của người dùng
Pre-conditions Actor đang ở trang “manage user”
1 Thành công: Hiển thị thông tin chi tiết của người dùng đã chọn
2 Thất bại: Không có thông tin nào được hiển thị
Trigger Nhấn vào icon “view” trên màn hình trang view all users
1 Actor nhấn icon“view” trên màn hình manage user
2 Hiển thị thông tin chi tiết về người dùng vừa chọn
Alternative flow Không có thông tin nào được hiển thị
3.2.2.6.4 Chỉnh sửa thông tin người dùng
Bảng 3.17: Đặc tả chỉnh sửa thông tin người dùng
Description Chỉnh sửa thông tin người dùng
Pre-conditions Actor đang ở trang “manage user”
1 Thành công: Cập nhật được thông tin người dùng vừa mới chỉnh sửa
2 Thất bại: Không cập nhật được thông tin mới chỉnh sửa, hiển thị thông tin ban đầu
Trigger Nhấn icon “edit” trên màn hình manage user
1 Actor nhấn icon “edit” trên màn hình manage user
2 Hiển thị form chỉnh sửa thông tin người dùng
3 Actor chỉnh sửa thông tin cần thiết
4 Nhấn nút “save”, thông tin vừa được chỉnh sửa được lưu xuống cơ sở dữ liệu
5 Thông tin vừa được cập nhật hiển thị trên danh sách tất cả người dùng ở trang manage user
Không cập nhật được thông tin mới chỉnh sửa, thông báo nguyên nhân thất bại
3.2.2.6.5 Người dùng hoạt động/không hoạt động
Bảng 3.18: Đặc tả người dùng hoạt động/ không hoạt động
Description Người dùng hoạt động/ không hoạt động
Pre-conditions Actor đang ở trang “manage user”
1 Thành công: Thay đổi trạng thái hoạt động của tài khoản người dùng
2 Thất bại: Không thay đổi được trạng thái
Trigger Nhấn icon “active/deactive” trên màn hình manage user
1 Actor nhấn icon “active/deactive” trên màn hình manage user
2 Nếu trạng thái là active thì đổi thành trạng thái deactive hoặc ngược lại
Alternative flow Không thay đổi trạng thái hoạt động, hiển thị trạng thái ban đầu
3.2.2.7.1.1 Xem tất cả vị trí
Bảng 3.19: Đặc tả xem tất cả vị trí
Description Xem tất cả vị trí
Pre-conditions Actor đang ở trang “manage of admin”
1 Thành công: Hiển thị danh sách tất cả các vị trí
2 Thất bại: Không có danh sách nào được hiển thị
Trigger User nhấn chọn “manage location” trong dropdown của manage of admin trên thanh menu
1 Actor nhấn chọn “manage location” trên thanh menu
2 Hiển thị danh sách tất cả vị trí lên màn hình
Alternative flow Không có danh sách nào được hiển thị lên màn hình
Bảng 3.20: Đặc tả tạo mới vị trí
Description Tạo mới vị trí
Pre-conditions Actor đang ở trang “manage location”
1 Thành công: Vị trí vừa tạo được lưu vào cơ sở dữ liệu
2 Thất bại: Vị trí vừa tạo không lưu không thành công
Trigger Actor nhấn nút “create location” trên màn hình manage location
1 Actor nhấn vào nút “create location” trên màn hình manage location
2 Hiển thị form tạo mới vị trí
3 Actor nhập tên vị trí mới
4 Nhấn nút “save” thông tin mới tạo được lưu vào cơ sở dữ liệu
5 Hiển thị vị trí mới tạo lên danh sách của màn hình manage location
Không có vị trí nào được thêm vào cơ sở dữ liệu, thông báo nguyên nhân thất bại
Bảng 3.21: Đặc tả chỉnh sửa vị trí
Description Chỉnh sửa vị trí
Pre-conditions Actor đang ở trang “manage location”
1 Thành công: Chỉnh sửa thành công tên vị trí, lưu thông tin thay đổi vào cơ sở dữ liệu
2 Thất bại: Không có thông tin nào được thay đổi
Trigger Actor nhấn icon “edit” trên màn hình manage location
1 Actor nhấn vào icon “edit” trên màn hình manage location
2 Hiển thị form chỉnh sửa vị trí
3 Actor nhập tên cần thay đổi
4 Nhấn nút “save” thông tin mới chỉnh sửa được lưu vào cơ sở dữ liệu
5 Hiển thị vị trí mới chỉnh sửa lên danh sách của màn hình manage location
Chỉnh sửa không thành công, hiển thị tên vị trí ban đầu, thông báo nguyên nhân thất bại
3.2.2.7.1.4 Vô hiệu hóa, kích hoạt vị trí
Bảng 3.22: Đặc tả vô hiệu hóa, kích hoạt vị trí
Description Vô hiệu hóa, kích hoạt vị trí
Pre-conditions Actor đang ở trang “manage location”
1 Thành công: Thay đổi trạng thái của vị trí
2 Thất bại: Không thay đổi được trạng thái
Trigger Actor nhấn icon “disable/enable” trên màn hình manage location
1 Actor nhấn vào icon “disable/enable” trên màn hình manage location
2 Thay đổi trạng thái thành công từ “disable” thành “enable” hoặc ngược lại
Alternative flow Không thay đổi được trạng thái, hiển thị trạng thái ban đầu
3.2.2.7.2.1 Xem thông tin tất cả các xe
Bảng 3.23: Đặc tả xem thông tin tất cả các xe
Description Xem thông tin tất cả các xe
Pre-conditions Actor đang ở trang “manage of admin”
1 Thành công: Hiển thị danh sách tất cả các xe
2 Thất bại: Không có danh sách nào được hiển thị
Trigger User nhấn chọn “manage bus” trong dropdown của manage of admin trên thanh menu
1 Actor nhấn chọn “manage bus” trên thanh menu
2 Hiển thị danh sách tất cả các xe lên màn hình
Bảng 3.24: Đặc tả tạo mới xe
Pre-conditions Actor đang ở trang “manage bus”
1 Thành công: Xe vừa tạo được lưu vào cơ sở dữ liệu
2 Thất bại: Xe vừa tạo lưu không thành công
Trigger Actor nhấn nút “create bus” trên màn hình manage bus
1 Actor nhấn vào nút “create bus” trên màn hình manage bus
2 Hiển thị form tạo mới xe
3 Actor nhập thông tin cần tạo
4 Nhấn nút “save” thông tin mới tạo được lưu vào cơ sở dữ liệu
5 Hiển thị xe mới tạo lên danh sách của màn hình manage location
Không có vị trí nào được thêm vào cơ sở dữ liệu, thông báo nguyên nhân thất bại
3.2.2.7.1.3 Chỉnh sửa thông tin của xe
Bảng 3.25: Đặc tả chỉnh sửa thông tin của xe
Description Chỉnh sửa thông tin của xe
Pre-conditions Actor đang ở trang “manage bus”
1 Thành công: Chỉnh sửa thành công thông tin của xe, lưu thông tin thay đổi vào cơ sở dữ liệu
2 Thất bại: Không có thông tin nào được thay đổi
Trigger Actor nhấn icon “edit” trên màn hình manage bus
1 Actor nhấn vào icon “edit” trên màn hình manage bus
2 Hiển thị form chỉnh sửa thông tin xe
3 Actor nhập thông tin cần thay đổi
4 Nhấn nút “save” thông tin mới chỉnh sửa được lưu vào cơ sở dữ liệu
5 Hiển thị thông tin mới chỉnh sửa lên danh sách của màn hình manage bus
Chỉnh sửa không thành công, hiển thị thông tin ban đầu, thông báo nguyên nhân thất bại
3.2.2.7.1.4 Vô hiệu hóa, kích hoạt xe
Bảng 3.26: Đặc tả vô hiệu hóa, kích hoạt xe
Description Vô hiệu hóa, kích hoạt xe
Pre-conditions Actor đang ở trang “manage bus”
1 Thành công: Thay đổi trạng thái của xe
2 Thất bại: Không thay đổi được trạng thái
Trigger Actor nhấn icon “disable/enable” trên màn hình manage bus
1 Actor nhấn vào icon “disable/enable” trên màn hình manage bus
2 Thay đổi trạng thái thành công từ “disable” thành “enable” hoặc ngược lại
Alternative flow Không thay đổi được trạng thái, hiển thị trạng thái ban đầu
3.2.2.7.3.1 Xem thông tin tất cả các tuyến xe
Bảng 3.27: Đặc tả xem thông tin tất cả các tuyến xe
Description Xem thông tin tất cả các tuyến xe
Pre-conditions Actor đang ở trang “manage of admin”
1 Thành công: Hiển thị danh sách tất cả các tuyến xe
2 Thất bại: Không có danh sách nào được hiển thị
Trigger User nhấn chọn “manage route” trong dropdown của manage of admin trên thanh menu
1 Actor nhấn chọn “manage route” trên thanh menu
2 Hiển thị danh sách tất cả các tuyến xe lên màn hình
Bảng 3.28: Đặc tả tạo mới tuyến xe
Description Tạo mới tuyến xe
Pre-conditions Actor đang ở trang “manage route”
1 Thành công: Thông tin tuyến xe vừa tạo được lưu vào cơ sở dữ liệu
2 Thất bại: Thông tin tuyến xe vừa tạo lưu không thành công
Trigger Actor nhấn nút “create route” trên màn hình manage route
1 Actor nhấn vào nút “create route” trên màn hình manage route
2 Hiển thị form tạo mới tuyến xe
3 Actor nhập thông tin cần tạo
4 Nhấn nút “save” thông tin mới tạo được lưu vào cơ sở dữ liệu
5 Hiển thị tuyến xe mới tạo lên danh sách của màn hình manage route
Không có tuyến xe mới nào được thêm vào cơ sở dữ liệu, thông báo nguyên nhân thất bại
3.2.2.7.3.3 Chỉnh sửa thông tin của tuyến xe
Bảng 3.29: Đặc tả chỉnh sửa thông tin của tuyến xe
Description Chỉnh sửa thông tin của tuyến xe
Pre-conditions Actor đang ở trang “manage route”
1 Thành công: Chỉnh sửa thành công thông tin của tuyến xe, lưu thông tin thay đổi vào cơ sở dữ liệu
2 Thất bại: Không có thông tin nào được thay đổi
Trigger Actor nhấn icon “edit” trên màn hình manage route
1 Actor nhấn vào icon “edit” trên màn hình manage route
2 Hiển thị form chỉnh sửa thông tin tuyến xe
3 Actor nhập thông tin cần thay đổi
4 Nhấn nút “save” thông tin mới chỉnh sửa được lưu vào cơ sở dữ liệu
5 Hiển thị thông tin mới chỉnh sửa lên danh sách của màn hình manage route
Chỉnh sửa không thành công, hiển thị thông tin ban đầu, thông báo nguyên nhân thất bại
3.2.2.7.3.4 Vô hiệu hóa, kích hoạt tuyến xe
Bảng 3.30: Đặc tả vô hiệu hóa, kích hoạt tuyến xe
Description Vô hiệu hóa, kích hoạt tuyến xe
Pre-conditions Actor đang ở trang “manage route”
1 Thành công: Thay đổi trạng thái của xe
2 Thất bại: Không thay đổi được trạng thái
Trigger Actor nhấn icon “disable/enable” trên màn hình manage route
1 Actor nhấn vào icon “disable/enable” trên màn hình manage route
2 Thay đổi trạng thái thành công từ “disable” thành “enable” hoặc ngược lại
Alternative flow Không thay đổi được trạng thái, hiển thị trạng thái ban đầu
3.2.2.7.4.1 Xem thông tin tất cả các phiên
Bảng 3.31: Đặc tả xem thông tin tất cả các phiên
Description Xem thông tin tất cả các phiên
Pre-conditions Actor đang ở trang “manage of admin”
1 Thành công: Hiển thị danh sách tất cả các session
2 Thất bại: Không có danh sách nào được hiển thị
Trigger User nhấn chọn “manage session” trong dropdown của manage of admin trên thanh menu
1 Actor nhấn chọn “manage session” trên thanh menu
2 Hiển thị danh sách tất cả các session lên màn hình
Bảng 3.32: Đặc tả tạo mới phiên
Pre-conditions Actor đang ở trang “manage sesion”
1 Thành công: Thông tin về session vừa tạo được lưu vào cơ sở dữ liệu
2 Thất bại: Thông tin về session vừa tạo lưu không thành công
Trigger Actor nhấn nút “create sesion” trên màn hình manage sesion
1 Actor nhấn vào nút “create session” trên màn hình manage session
2 Hiển thị form tạo mới phiên
3 Actor nhập thông tin cần tạo
4 Nhấn nút “save” thông tin mới tạo được lưu vào cơ sở dữ liệu
5 Hiển thị phiên mới tạo lên danh sách của màn hình manage route
Không có session mới nào được thêm vào cơ sở dữ liệu, thông báo nguyên nhân thất bại
3.2.2.7.3.3 Chỉnh sửa thông tin của phiên
Bảng 3.33: Đặc tả chỉnh sửa thông tin của phiên
Description Chỉnh sửa thông tin của phiên
Pre-conditions Actor đang ở trang “manage session”
1 Thành công: Chỉnh sửa thành công thông tin của session, lưu thông tin thay đổi vào cơ sở dữ liệu
2 Thất bại: Không có thông tin nào được thay đổi
Trigger Actor nhấn icon “edit” trên màn hình manage session
1 Actor nhấn vào icon “edit” trên màn hình manage session
2 Hiển thị form chỉnh sửa thông tin session
3 Actor nhập thông tin cần thay đổi
4 Nhấn nút “save” thông tin mới chỉnh sửa được lưu vào cơ sở dữ liệu
5 Hiển thị thông tin mới chỉnh sửa lên danh sách của màn hình manage session
Chỉnh sửa không thành công, hiển thị thông tin ban đầu, thông báo nguyên nhân thất bại
3.2.2.7.3.4 Vô hiệu hóa, kích hoạt phiên
Bảng 3.34: Đặc tả vô hiệu hóa, kích hoạt phiên
Description Vô hiệu hóa, kích hoạt phiên
Pre-conditions Actor đang ở trang “manage session”
1 Thành công: Thay đổi trạng thái của session
2 Thất bại: Không thay đổi được trạng thái
Trigger Actor nhấn icon “disable/enable” trên màn hình manage session
1 Actor nhấn vào icon “disable/enable” trên màn hình manage session
2 Thay đổi trạng thái thành công từ “disable” thành “enable” hoặc ngược lại
Alternative flow Không thay đổi được trạng thái, hiển thị trạng thái ban đầu.
Thiết kế hệ thống
Hình 4.1: Xác thực 4.1.1.2 Quyền của người dùng
Hình 4.2: Quyền của người dùng
Hình 4.3: Quản lý người dùng 4.1.1.4 Quản lý vị trí
Hình 4.4: Quản lý vị trí
Hình 4.5: Quản lý xe 4.1.1.6 Quản lý tuyến xe
Hình 4.6: Quản lý tuyến xe
Hình 4.9: Quản lý vé 4.1.1.10 Quản lý hóa đơn
Hình 4.10: Quản lý hóa đơn
4.1.1.11 Thông tin người đặt vé
Hình 4.11: Thông tin người đặt vé 4.1.1.12 Đặt vé
4.1.2.1.3 Thông tin người đặt vé
Hình 4.16: Thông tin người đặt vé
4.1.2.1.4 Xác nhận thông tin đặt vé
Hình 4.17: Xác nhận thông tin đặt vé
4.1.2.5 Quản lý vé đã đặt
Hình 4.18: Quản lý vé đã đặt
Bảng users_roles
Bảng 4.3: Mô tả dữ liệu bảng users_roles
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
1 User_id bigint(20) Mã của người dùng Khóa chính
2 Role_id bigint(20) Mã của role Khóa chính
Bảng location
Bảng 4.4: Mô tả dữ liệu bảng location
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
1 Id bigint(20) Mã của vị trí Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
6 Name varchar(255) Tên vị trí
Bảng car
Bảng 4.5: Mô tả dữ liệu bảng car
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Car Thông tin của xe
1 Id bigint(20) Mã của vị trí Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
7 Car_number varchar(255) Biển số xe
8 Driver_name varchar(255) Tên tài xế
9 Status bigint(20) Trạng thái của xe
Bảng seat
Bảng 4.6: Mô tả dữ liệu bảng seat
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Seat Thông tin ghế xe
1 Id bigint(20) Mã của phiên Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
7 Car_id bigint(20) Mã của tuyến xe Khóa ngoại
11 Status bigint(20) Trạng thái của xe
Bảng route
Bảng 4.7: Mô tả dữ liệu bảng route
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Route Thông tin của tuyến xe
1 Id bigint(20) Mã của vị trí Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
6 Destination varchar(255) Điểm kết thúc
8 Starting_point varchar(255) Điểm khởi hành
9 Time_expecting varchar(255) Thời gian đến
10 Time_starting varchar(255) Thời gian đi
11 Status bigint(20) Trạng thái của xe
Bảng route_cars
Bảng 4.8: Mô tả dữ liệu bảng route_cars
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
1 Route_id bigint(20) Mã của tuyến xe Khóa chính
2 Car_id bigint(20) Mã của xe Khóa chính
Bảng sessionr
Bảng 4.9: Mô tả dữ liệu bảng sessionr
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Sessionr Thông tin của phiên xe
1 Id bigint(20) Mã của phiên xe Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
6 Depart_date varchar(255) Ngày khởi hành
7 Route_id bigint(20) Mã của tuyến xe Khóa ngoại
8 Status bigint(20) Trạng thái của phiên
Bảng info_buyer
Bảng 4.10: Mô tả dữ liệu bảng thông tin người đặt vé
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Sessionr Thông tin của phiên tuyến xe
1 Id bigint(20) Mã của phiên Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
7 Email varchar(255) Địa chỉ email
8 Full_name varchar(255) Họ và tên người đặt vé
9 Number_phone varchar(255) Số điện thoại
Bảng ticket
Bảng 4.11: Mô tả dữ liệu bảng ticket
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Bill Thông tin của hóa đơn
1 Id bigint(20) Mã của phiên Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
6 Status int(11) Trạng thái của bill
7 Bill_id bigint(20) Mã của hóa đơn Khóa ngoại
8 Seat_id bigint(20) Mã của ghế Khóa ngoại
Bảng bill
Bảng 4.13: Mô tả dữ liệu bảng bill
STT Tên bảng, tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú
Bill Thông tin của hóa đơn
1 Id bigint(20) Mã của phiên Khóa chính
2 Created_by varchar(255) Tạo bởi người dùng
3 Created_date datetime Tạo ngày
4 Last_modified_by varchar(255) Chỉnh sửa lần cuối bởi người dùng
5 Last_modified_date datetime Chỉnh sửa lần cuối vào ngày
6 Status int(11) Trạng thái của bill
7 Total_price int(11) Tổng giá tiền
8 Payment varchar(255) Tình trạng thanh toán
9 Buyer_id bigint(20) Mã của người đặt vé Khóa ngoại
10 Session_id bigint(20) Mã của session Khóa ngoại
11 Car_id bigint(20) Mã của xe Khóa ngoại
Thiết kế giao diện
4.3.1.1 Screen flow của khách hàng và nhân viên bán vé tại quầy
Hình 4.20: Screen flow của khách hàng và nhân viên bán vé tại quầy
Bảng 4.14: Mô tả screen flow của khách hàng và nhân viên bán vé tại quầy
STT Tên màn hình Mô tả
SCU001 Home Screen Màn hình trang chủ
Manager and User Màn hình trang chủ của manager và user SCU002 Login Screen Màn hình đăng nhập
SCU003 Register Screen Màn hình đăng ký
Screen Màn hình đặt vé
Screen Màn hình chọn tuyến xe
SCU006 Choose Seat Screen Màn hình chọn ghế
Screen Màn hình thông tin người đặt vé
Screen Màn hình xác nhận đặt vé
Screen Màn hình xem tất cả vé đã đặt
Screen Màn hình xem chi tiết từng vé đã đặt
SCU011 Search Route Screen Màn hình tìm kiếm tuyến xe khi chưa đăng nhập tài khoản
4.3.1.2 Screen flow của quản trị viên
Hình 4.21: Screen flow của quản trị viên Bảng 4.15: Mô tả screen flow của quản trị viên
STT Tên màn hình Mô tả
SCA001 Home Screen Màn hình trang chủ
SCA001a Home Screen of Admin Màn hình trang chủ của admin
SCA002 Login Screen Màn hình đăng nhập
SCA003 Register Screen Màn hình đăng ký
SCA004 Search Route Screen Màn hình tìm kiếm tuyến xe khi chưa đăng nhập tài khoản SCA005 Manage User Screen Màn hình quản lý người dùng
SCA006 Create User Screen Màn hình tạo mới người dùng
Screen Màn hình xem thông tin chi tiết người dùng
SCA008 Edit User Screen Màn hình chỉnh sửa thông tin người dùng SCA009 Manage Ticket Screen Màn hình xem tất cả vé đã đặt
Screen Màn hình xem thông tin chi tiết từng vé
Screen Màn hình quản lý vị trí
SCA012 Create Location Screen Màn hình tạo mới vị trí
SCA013 Manage Bus Screen Màn hình quản lý xe
SCA014 Create Bus Screen Màn hình tạo mới xe
SCA015 Manage Route Screen Màn hình quản lý tuyến xe
SCA016 Create Route Screen Màn hình tạo mới tuyến xe
SCA017 Manage Session Screen Màn hình quản lý phiên xe
SCA018 Create Session Screen Màn hình tạo mới phiên xe
Screen Màn hình quản lý doanh thu
4.3.2 Đặc tả các màn hình
Hình 4.22: Màn hình trang chủ Bảng 4.16: Đặc tả màn hình trang chủ
STT Tên Yêu cầu Format Liên quan Chú thích
1 Home page True Text link
Khi click, chuyển đến màn hình SCU001
Khi click, chuyển đến màn hình SCU002
Khi click, chuyển đến màn hình SCU003
Khi click, hiển thị toàn bộ ngôn ngữ, người dùng tùy chọn
5 Departure True Dropdown Data từ
Hiển thị danh sách nơi khởi hành
6 Destination True Dropdown Data từ
Hiển thị danh sách nơi kết thúc
7 Date_departure True Date picker Hiển thị lịch chọn
Khi click, chuyển đến màn hình SCU001a
9 Tittle True Text Hiển thị nội dung thông tin
10 Card True Card Card chứa thông tin và hình ảnh
Khi click, chuyển đến các trang giới thiệu tương ứng
12 Image Image Chứa hình ảnh
Hình 4.23: Màn hình đăng nhập Bảng 4.17: Đặc tả màn hình đăng nhập
STT Tên Yêu cầu Format Liên quan Chú thích
1 Username True Text box Nhập username
2 Password True Text box Nhập password
Khi click, đăng nhập thành công sẽ chuyển đến màn hình trang chủ sau khi đăng nhập SCU001a Đăng nhập thất bại, thông báo nguyên nhân
Khi click, chuyển đến màn hình SCU003
Hình 4.24: Màn hình đăng ký Bảng 4.18: Đặc tả màn hình đăng ký
STT Tên Yêu cầu Format Liên quan Chú thích
1 Username True Text box Nhập username, có thể chứa ký tự, số
2 Fullname True Text box Nhập fullname
Nhập email theo đúng format Ví dụ: mai123@gmail.com
4 Password True Text box Nhập password
Khi click, chuyển đến màn hình đăng nhập SCU002
4.3.2.4 Màn hình quản lý người dùng
Hình 4.25: Màn hình quản lý người dùng Bảng 4.19: Đặc tả màn hình quản lý người dùng
STT Tên Yêu cầu Format Liên quan Chú thích
Khi click vào từng submenu, sẽ chuyển đến màn hình tương ứng
2 Menu icon True Icon Khi click, sẽ phóng to, thu gọn menu
3 Search bar True Text box
Nhập ký tự bất kỳ, tìm kiếm theo tên người dùng
Khi click, hiển thị danh sách thông tin tìm kiếm tương ứng
Khi click, chuyển đến màn hình SCA006
6 Grid information True Grid Data từ
Danh sách người dùng hiển thị dưới dạng grid
Khi click, chuyển đến màn hình SCA007
Khi click, chuyển đến màn hình SCA008
9 Disable/enable True Button icon
Khi click, thay đổi button từ “disable” sang “enable” hoặc ngược lại
Khi click, phân trang theo size đã chọn
11 Previous True Button Khi click, quay về trang trước
12 Next True Button Khi click, chuyển đến trang sau
Image Hiển thị hình ảnh mặc định
Dropdown Khi click, hiển thị chức năng
4.3.2.5 Màn hình xem thông tin chi tiết của người dùng
Hình 4.26: Màn hình xem thông tin chi tiết của người dùng
Bảng 4.20: Đặc tả màn hình xem thông tin chi tiết của người dùng
STT Tên Yêu cầu Format Liên quan Chú thích
Khi click, quay trở về màn hình SCA005
Khi click, quay trở về màn hình SCA005
Khi click, chuyển đến màn hình SCA008
4.3.2.6 Màn hình tạo mới người dùng
Hình 4.27: Màn hình tạo mới người dùng Bảng 4.21: Đặc tả màn hình tạo mới người dùng
STT Tên Yêu cầu Format Liên quan Chú thích
1 Email True Text box Nhập email theo đúng format
2 User name True Text box Nhập user name
3 Full name True Text box Nhập full name
4 Role of user True Dropdown Chọn role của người dùng
Khi click, chuyển đến màn hình SCA005
Khi click, nếu lưu thành công, chuyển đến màn hình SCA005 Nếu thất bai, hiển thị thông báo
4.3.2.7 Màn hình chỉnh sửa thông tin người dùng
Hình 4.28: Màn hình chỉnh sửa thông tin người dùng Bảng 4.22: Đặc tả màn hình chỉnh sửa thông tin người dùng
STT Tên Yêu cầu Format Liên quan Chú thích
1 Email True Text box Data từ
Nhập email theo đúng format
2 User name True Text box Data từ
3 Full name True Text box Data từ
4 Role of user True Dropdown Data từ
Chọn role của người dùng
4.3.2.8.1 Màn hình chọn tuyến xe
Hình 4.29: Màn hình chọn tuyến xe 4.3.2.8.2 Màn hình chọn ghế
Hình 4.30: Màn hình chọn ghế
4.3.2.8.3 Màn hình thông tin người đặt vé
Hình 4.31: Màn hình thông tin người đặt vé 4.3.2.8.4 Màn hình xác nhận đặt vé
Hình 4.32: Màn hình xác nhận đặt vé
4.3.2.9 Màn hình quản lý vị trí
Hình 4.33: Màn hình quản lý vị trí 4.3.2.10 Màn hình tạo mới vị trí
Hình 4.34: Màn hình tạo mới vị trí
4.3.2.11 Màn hình quản lý xe
Hình 4.35: Màn hình quản lý xe 4.3.2.12 Màn hình tạo mới xe
Hình 4.36: Màn hình tạo mới xe
4.3.2.13 Màn hình quản lý tuyến xe
Hình 4.37: Màn hình quản lý tuyến xe 4.3.2.14 Màn hình tạo mới tuyến xe
Hình 4.38: Màn hình tạo mới tuyến xe
4.3.2.15 Màn hình quản lý session
Hình 4.39: Màn hình quản lý session 4.3.2.16 Màn hình tạo mới session
Hình 4.40: Màn hình tạo mới session 4.3.2.17 Màn hình quản lý vé đã đặt của khách hàng và nhân viên
Hình 4 41: Màn hình quản lý vé đã đặt của khách hàng và nhân viên
4.3.2.18 Màn hình vé đã đặt của quản trị viên
Hình 4.42: Màn hình vé đã đặt của quản trị viên 4.3.2.18 Màn hình xem thông tin chi tiết của vé đã đặt
Hình 4.43: Màn hình xem thông tin chi tiết của vé đã đặt
4.3.2.19 Màn hình quản lý doanh thu
Hình 4.44: Màn hình quản lý doanh thu
KẾT QUẢ SO SÁNH, THỰC NGHIỆM, PHÂN TÍCH,
Back-end
Hệ thống back-end cung cấp API cho việc xây dựng website đặt vé, phục vụ cho ba nhóm người dùng: admin, manager và user, với các chức năng cơ bản như quản lý đặt vé, theo dõi tình trạng vé và hỗ trợ người dùng.
Phân quyền đăng nhập, đăng ký, đăng xuất
Quản lý thông tin người đặt vé
Đa ngôn ngữ (Tiếng Anh, Tiếng Việt)
Kết quả đạt được
KẾT QUẢ SO SÁNH, THỰC NGHIỆM, PHÂN TÍCH,
Hệ thống back-end cung cấp API cho website đặt vé, phục vụ cho ba nhóm người dùng: admin, manager và user Các chức năng cơ bản của hệ thống bao gồm quản lý đặt vé, theo dõi trạng thái đơn hàng và hỗ trợ người dùng trong quá trình đặt vé.
Phân quyền đăng nhập, đăng ký, đăng xuất
Quản lý thông tin người đặt vé
Đa ngôn ngữ (Tiếng Anh, Tiếng Việt)
- Hệ thống front-end được xây dựng trên nền tảng Angular, sử dụng framwork hỗ trợ như Bootstrap
- Nhóm người dùng gồm admin, manager, user có các chức năng chính như sau:
Xem tất cả người dùng
Xem thông tin chi tiết người dùng
Chỉnh sửa thông tin người dùng
Cho phép tài khoản hoạt động/ không hoạt động
Xem tất cả vị trí
Xem thông tin tất cả xe
Xem thông tin tất cả tuyến xe
Xem thông tin tất cả session
Xem tất cả hóa đơn (vé đã đặt)
Xem thông tin chi tiết hóa đơn
Manager (nhân viên bán vé tại quầy)
Điền thông tin người đặt vé
Xem những vé đã đặt
Điền thông tin người đặt vé
Xem những vé đã đặt
Sau quá trình nghiên cứu và thực hiện đề tài “Xây dựng website đặt vé xe khách”, nhóm đã đạt được nhiều thành tựu quan trọng, đáp ứng 85% yêu cầu của đề tài với các mục tiêu cụ thể.
- Tìm hiểu những kiến thức cơ bản về Spring Resful API, Angular, Bootstrap, MySQL để xây dựng trang web
- Website đặt vé xe khách bao gồm các chức năng cơ bản:
Authentication: đăng nhập, đăng ký, đăng xuất
Quản lý vị trí, xe, tuyến xe, session
Ưu điểm
- Website được xây dựng có giao diện thân thiện, dễ sử dụng đối với mọi đối tượng
- Việc đặt vé tương đối dễ dàng, không tốn nhiều thời gian, nhanh chóng
- Việc hiển thị danh sách ghế có màu sắc giúp người dùng dễ dàng phân biệt, không bị nhầm lẫn
- Tích hợp đa ngôn ngữ, giúp người dùng lựa chọn ngôn ngữ thích hợp.
Hạn chế
- Giao diện chưa ứng dụng trên nhiều thiết bị
- Chưa tích hợp được thanh toán online trong quy trình đặt vé
- Quản lý doanh thu thể hiện dưới dạng bảng chưa thực sự bắt mắt.
Khó khăn
- Còn chưa có nhiều kinh nghiệm trong việc thiết kế giao diện, cũng như cơ sở dữ liệu chưa thực sự thực tế
- Chưa tận dụng tối ưu các chức năng của thư viện và công nghệ
- Code còn dài, phức tạp và chưa tối ưu hóa.