Em đã tham khảo về một số ứng dụng thuê xe hiện nay và với những gợi ý của giảngviên hướng dẫn, đồ án đã xây dựng được ứng dụng, mang lại nhiều lợi ích ý nghĩa.Người dùng sẽ có khả năng
GIỚI THIỆU CHUNG VỀ HỆ THỐNG
Đặt vấn đề
1.1.1 Lý do chọn đề tài
Cho đến năm 2022, thị trường cho thuê xe tại Việt Nam rất đa dạng do có nhiều gói thuê, ngày thuê và các yếu tố khác Thị trường có các dịch vụ như thuê xe theo ngày, thuê xe qua đêm, thuê xe đi nghỉ dưỡng và nhiều lựa chọn tùy theo số km.
Theo Mordor Intelligence, cho thuê xe tại Việt Nam là một thị trường phân mảnh với các công ty chủ chốt có thể chia thành hai nhóm: Tập đoàn Mỹ bao gồm Enterprise Holdings, Avis Budget Group và Hertz Corporation; Nhóm công ty Việt Nam bao gồm Mai Linh và Vinasun.
Các công ty này đang tích cực mở rộng tại các thành phố lớn của Việt Nam như Thành phố Hồ Chí Minh và Hà Nội Tháng 6 vừa qua, Avis đã khai trương chi nhánh mới tại xã Dương Tơ, thành phố Phú Quốc - cách sân bay Phú Quốc khoảng 2 km Công ty này cung cấp dịch vụ cho thuê xe ô tô với giá khởi điểm từ 600.000 đồng/ngày.
Bên cạnh tỷ lệ sở hữu ô tô thấp, đại dịch cũng góp phần khiến thị trường này trở nên hấp dẫn hơn khi người dân hạn chế tiếp xúc để ngăn chặn dịch bệnh lây lan, kéo theo nhu cầu thuê ô tô tăng đáng kể.
Nhận thấy các vấn đề hiện tại và cơ hội phát triển, em đã chọn đề tài “ Thiết kế phát triển ứng dụng thuê xe sử dụng Servlet Api” nhằm có thể đưa ra các giải pháp , linh hoạt và nhanh chóng cho người dùng
1.1.2 Một số ứng dụng thuê xe hiện có
Sigo hiện là nền tảng đặt xe trực tuyến số 1 tại Việt Nam Với Sigo, bạn sẽ có một chuyến đi đầy trải nghiệm Với Sigo, việc đặt xe… trở nên nhanh chóng, thuận tiện và dễ dàng.
Sigo là ứng dụng đặt xe tự lái với một số chức năng chính như sau:
• Quản lý thông tin cá nhân
• Quản lý cho thuê xe tự lái
• Đặt xe để tự lái
• Xác minh thông tin xe
• Xác minh thông tin người dùng
Mioto là sự lựa chọn cho sự mới mẻ, trẻ trung trong dịch vụ thuê xe tự lái hiện nay Để tiết kiệm thời gian và mang đến sự thuận tiện trong việc thuê phương tiện cá nhân, Mioto ngày càng phát triển với các tính năng sau:
• Đặt lịch hẹn thuê xe
• Quản lý thông tin cá nhân
• Hỗ trợ thanh toán trực tuyến
• Xác minh xe và thông tin cá nhân
1.1.3 Mục đích phát triển đề tài
Mục đích của dự án Thiết kế và phát triển ứng dụng thuê xe sử dụng Servlet API là tạo ra một hệ thống cho phép người dùng thuê xe trực tuyến Với ứng dụng này, người dùng có thể dễ dàng tìm kiếm, xem thông tin chi tiết và đặt xe theo nhu cầu của mình.
Dự án này được phát triển sử dụng Servlet API, một công nghệ phổ biến trong phát triển ứng dụng web Java Với việc áp dụng Servlet API, chúng ta có thể xây dựng các thành phần phía máy chủ mạnh mẽ để xử lý logic và tương tác với cơ sở dữ liệu.
Yêu cầu và giải pháp
Các người dùng và cửa hàng cho thuê xe cần 1 ứng dụng web thuê xe trực tuyến để phục vụ khách hàng và 1 trang quản lý hoạt động kinh doanh Bài toán đặt ra: Xây dựng hệ thống phần mềm quản lý thuê xe cho người dùng và cửa hàng cho thuê xe gồm bao gồm các chức năng của 1 ứng dụng thuê xe trực tuyến phục vụ cho người dùng sử dụng không những thế người dùng cũng có thể cho người khác thuê xe của mình ngay trên hệ thống và 1 trang quản lý hoạt động kinh doanh.
Là một hệ thống bao gồm Website thuê xe tự lái và hệ thống quản lý xe và người dùng Hệ thống có cấu trúc như sau: a Trang chủ website
Hiến thị danh sách các xe theo từng điều kiện nhất định
Hiển thị thông tin người thuê xe cho chủ xe
Quản lý thông tin cho thuê
Thêm xe mới của mình để thành chủ xe cho thuê
Lịch sử danh sách yêu cầu thuê xe
Cập nhật liên tục các thay đổi của xe, thông tin người dùng
Một số chức năng nhằm xây dựng giao diện trang chủ website thêm sinh động b Trang quản trị viên
Thống kê và quản lý thông tin của xe và giấy tờ người dùng
Xác minh giấy tờ của xe và người dùng
Có thể vào xem chi tiết thông tin người dùng và thông tin xe để xem và đánh giá có nên chấp nhận người dùng này không
Chức năng cơ bản: Thêm, sửa, xóa, update, thông tin xe danh sách xe cho người thuê.
1.2.3 Giải pháp Đối với hệ thống thuê xe bao gồm 2 phần: Website người dùng và trang quản trị viên
Số lượng UC lớn nên giải pháp cho việc xây dựng và bảo trì là xây dựng theo mô hình MVC và sử dụng các công nghệ. a Frontend
JSP: JSP là viết tắt của JavaServer Pages, là một công nghệ được sử dụng trong lập trình web để phát triển các trang web động JSP có khả năng kết hợp mã Java với HTML để tạo ra nội dung động trên trang web. Với JSP, chúng ta có thể viết mã Java trong tệp tin JSP và sử dụng các thẻ JSP để nhúng mã Java vào mã HTML
HTML: HTML là viết tắt của cụm từ Hypertext Markup Language (tạm dịch là Ngôn ngữ đánh dấu siêu văn bản) HTML được sử dụng để tạo và cấu trúc các thành phần trong trang web hoặc ứng dụng, phân chia các đoạn văn, heading, titles, blockquotes…
CSS:CSS (chữ viết tắt của Cascading Style Sheets) nó là một ngôn ngữ được sử dụng để tìm và định dạng lại các phần tử được tạo ra bởi các ngôn ngữ đánh dấu.
JS:JavaScript (JS) là một ngôn ngữ lập trình phổ biến và mạnh mẽ được sử dụng phổ biến trên web Ngôn ngữ này được sử dụng để điều khiển các phần tử trên trang web, thay đổi nội dung của chúng một cách động, và tương tác với người dùng. b Backend
Java Servlet: Java Servlet là một công nghệ phát triển ứng dụng Web sử dụng ngôn ngữ lập trình Java Nó cho phép tạo ra các thành phần được chạy trên máy chủ web để xử lý yêu cầu từ các trình duyệt Với việc giúp kết nối người dùng với cơ sở dữ liệu và tương tác với các tài nguyên khác. c DataBase
MySQL: MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng Vì MySQL là hệ quản trị cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. d Lưu trữ dự án
Github: GitHub là một trang web và dịch vụ dựa trên đám mây giúp các nhà phát triển lưu trữ và quản lý mã của họ, cũng như theo dõi và kiểm soát các thay đổi đối với mã của họ GitHub là một nền tảng phát triển phần mềm trực tuyến Nó được sử dụng để lưu trữ, theo dõi và cộng tác trong các dự án phần mềm e Triển khai hệ thống
Apache Tomcat: Tomcat là một máy chủ ứng dụng web mã nguồn mở, phổ biến và mạnh mẽ được Apache Software Foundation phát triển Nó cung cấp môi trường chạy ứng dụng web Java và hỗ trợ các công nghệ như Servlet và JSP Tomcat có thể được sử dụng để triển khai và quản lý các ứng dụng web dựa trên Java trên các máy chủ.
Tổng quan về phát triển phần mềm
1.3.1 Giới thiệu về Servlet Api
Trong đồ án thiết kế phát triển ứng dụng thuê xe sử dụng Servlet API, API sẽ được sử dụng Servlet API, API sẽ được sử dụng để kết nối ứng dụng web với hệ thống quản lý dữ liệu thuê xe API sẽ cung cấp các phương thức để truy vấn dữ liệu về xe
Servlet API là một API tiêu chuẩn được sử dụng để tạo các servlet, là các chương trình Java được chạy trên máy chủ web Servlet API cung cấp các lớp và giao diện để hỗ trợ việc xử lý yêu cầu HTTP và trả về phản hồi.
Servlet API được phát triển bởi Java Community Process (JCP) và được định nghĩa trong các tài liệu tiêu chuẩn của Java Servlet API là một phần của Java EE, một tập hợp các API và công nghệ được sử dụng để tạo các ứng dụng web.
Các lớp và giao diện chính của Servlet API
Servlet API bao gồm các lớp và giao diện sau:
Giao diện Servlet: Đây là giao diện bắt buộc phải được triển khai bởi tất cả các servlet Giao diện này cung cấp các phương thức cơ bản cho việc xử lý yêu cầu và phản hồi.
Lớp GenericServlet: Đây là lớp cha chung của tất cả các servlet Lớp này cung cấp các phương thức triển khai mặc định cho giao diện Servlet.
Lớp HttpServlet: Đây là lớp con của GenericServlet, cung cấp các phương thức bổ sung để xử lý các yêu cầu HTTP.
Cách thức hoạt động của Servlet API
1 Yêu cầu (Request): Client gửi yêu cầu HTTP đến máy chủ web.
2 Quản lý Yêu cầu: Servlet container (ví dụ: Tomcat) quản lý yêu cầu và tìm servlet phù hợp.
3 Khởi tạo và Gọi Service(): Nếu cần, servlet được tải và khởi tạo, sau đó gọi phương thức service() của servlet.
4 Xử lý Yêu cầu: Phương thức service() phân tích yêu cầu và gọi phương thức thích hợp như doGet() hoặc doPost() để xử lý.
5 Trả lời (Response): Servlet tạo phản hồi, bao gồm mã trạng thái, header, và dữ liệu trả về.
6 Gửi Phản hồi: Phản hồi được gửi từ máy chủ web đến trình duyệt của client.Quá trình này cho phép servlet xử lý yêu cầu và tạo ra phản hồi động, thường được sử dụng trong ứng dụng web để đáp ứng động với người dùng.
Hình 1.3 : Một servlet HTTP xử lý các yêu cầu GET và POST
Ví dụ,nếu một yêu cầu GET được gửi đến máy chủ web, thì phương thức doGet() sẽ được gọi Phương thức doGet() sẽ trả về một phản hồi HTTP cho máy khách, chẳng hạn như một trang web tĩnh.
Nếu một yêu cầu POST được gửi đến máy chủ web, thì phương thức doPost() sẽ được gọi Phương thức doPost() sẽ xử lý dữ liệu đầu vào từ người dùng, chẳng hạn như dữ liệu từ một biểu mẫu web Sau đó, phương thức doPost() sẽ trả về một phản hồi HTTP cho máy khách.
Lợi ích của việc sử dụng Servlet API
Có nhiều lợi ích khi sử dụng Servlet API, bao gồm:
Servlet API là một API tiêu chuẩn, do đó các servlet có thể được chạy trên bất kỳ máy chủ web nào hỗ trợ Servlet API.
Servlet API cung cấp các lớp và giao diện hỗ trợ việc xử lý yêu cầu HTTP và trả về phản hồi, giúp việc phát triển servlet trở nên dễ dàng hơn.
Servlet API là một API mạnh mẽ và linh hoạt, có thể được sử dụng để tạo các ứng dụng web phức tạp. Ứng dụng của Servlet API
Servlet API có thể được sử dụng để tạo nhiều loại ứng dụng web khác nhau, bao gồm:
Trang web tĩnh: Servlet có thể được sử dụng để tạo các trang web tĩnh, chẳng hạn như trang chủ hoặc trang tin tức.
Trang web động: Servlet có thể được sử dụng để tạo các trang web động, chẳng hạn như trang web thương mại điện tử hoặc trang web mạng xã hội.
Ứng dụng web dựa trên dịch vụ: Servlet có thể được sử dụng để tạo các ứng dụng web dựa trên dịch vụ, chẳng hạn như ứng dụng web API.
1.3.2 Quy trình phát triển đồ án
Giai đoạn 1: Khảo sát và phân tích yêu cầu
Mục đích của giai đoạn này là xác định các yêu cầu của người dùng và các yêu cầu kỹ thuật cần thiết để phát triển ứng dụng thuê xe ô tô sử dụng Servlet API Các hoạt động chính của giai đoạn này bao gồm:
Thu thập yêu cầu của người dùng: o Phỏng vấn người dùng o Khảo sát trực tuyến o Tham khảo các ứng dụng thuê xe ô tô tương tự
Phân tích yêu cầu của người dùng: o Xác định các yêu cầu chức năng, yêu cầu dữ liệu, yêu cầu bảo mật, v.v. o Xác định các yêu cầu đặc thù của ứng dụng thuê xe ô tô sử dụng Servlet API, chẳng hạn như:
Các chức năng cần thiết của ứng dụng, bao gồm:
Các yêu cầu dữ liệu, bao gồm:
Các bảng dữ liệu cần thiết
Các mối quan hệ giữa các bảng
Các yêu cầu bảo mật, bao gồm:
Bảo mật truy cập ứng dụng
Bảo mật dữ liệu người dùng
Xác định các yêu cầu kỹ thuật cần thiết: o Công nghệ, kỹ thuật, phần cứng, phần mềm, v.v. o Các yêu cầu đặc thù của ứng dụng thuê xe ô tô sử dụng Servlet API, chẳng hạn như:
Sử dụng Servlet API để phát triển ứng dụng web
Sử dụng JDBC để kết nối với cơ sở dữ liệuGiai đoạn 2: Thiết kế
Mục đích của giai đoạn này là thiết kế kiến trúc, giao diện người dùng và các thành phần của ứng dụng thuê xe ô tô sử dụng Servlet API Các hoạt động chính của giai đoạn này bao gồm:
Thiết kế kiến trúc: o Thiết kế kiến trúc ba tầng: tầng trình bày, tầng logic, tầng dữ liệu o Thiết kế các thành phần của từng tầng
Thiết kế giao diện người dùng: o Thiết kế các màn hình, các thành phần giao diện, v.v. o Đảm bảo giao diện người dùng thân thiện với người dùng
Thiết kế các thành phần của ứng dụng: o Các lớp, các phương thức, v.v. o Đảm bảo các thành phần của ứng dụng đáp ứng các yêu cầu chức năng, dữ liệu và bảo mật Giai đoạn 3: Lập trình
Mục đích của giai đoạn này là thực hiện các thiết kế đã được xác định ở giai đoạn 2 Các hoạt động chính của giai đoạn này bao gồm:
Lập trình các lớp, phương thức, v.v cho các thành phần của ứng dụng.
Sử dụng các công nghệ, kỹ thuật đã xác định ở giai đoạn 1.
Kết luận chương
Nội dung trong chương I đầu tiên đã trình bày lý do chọn đề tài “Thiết kế phát triển ứng dụng thuê xe sử dụng Servlet Api”, mục đích phát triển đề tài Tiếp theo đó là phần đặt vấn đề cho đề tài, giải pháp và các kỹ thuật áp dụng cho quá trình xây dựng hệ thống thuê xe bao gồm: Ngôn ngữ lập trình Java, Servlet API, JSP/HTML/CSS/JS,MySQL để lưu trữ database, và triển khai trên apache-tomcat.
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
Phân tích đặc tả yêu cầu hệ thống
Mục đích của hệ thống: Hệ thống quản trị viên có thể xem thông tin người dùng (bằng lái xe, thẻ căn cước, v.v.) và chi tiết xe mình người dùng thêm mới vào danh sách xe cho thuê trên hệ thống Quản trị viên có thể xem và đánh giá có nên xác minh chấp nhận hay từ chối thông tin người dùng và xe ô tô thêm mới vào hệ thống Người dùng hệ thống dễ dàng có thể xem danh sách xe đặt thuê 1 cách đơn giản và có thời gian lịch trình cụ thể để đặt thuê xe đó.
Phạm vi hệ thống: Những tác nhân được vào hệ thống và chức năng của từng tác nhân được thực hiện khi vào hệ thống như sau:
Quản trị viên: có quyền quản lý, thao tác ở tất cả các chức năng của trang quản trị và trang chủ và cũng có thể chính quản trị viên làm chủ xe hoặc thuê xe trên hệ thống của mình
Chủ sở hữu xe: Có quyền xem danh sách xe cho thuê của mình, có quyền quản lý yêu cầu thuê xe của mình xác nhận và xem được thông tin cần thiết của người thuê đó
Người thuê: có thể thao tác trên trang chủ đặt thời gian và địa điểm để đặt thuê xe và lịch sử thuê xe
Khách xem khi chưa đăng ký hệ thống: Xem danh sách xe đã được lọc trên hệ thống , xem chi tiết xe
2.1.2 Yêu cầu phi chức năng
Thời gian phản hồi nhanh, tốc độ xử lý nhanh
Công việc tính toán thuê xe thực hiện chính xác và không được sai sót
Đảm bảo án toàn dữ liệu của người dùng
Sử dụng trên web và thiết bị khác
Thiết kế sơ đồ hệ thống
Bước thiết kế với một ứng dụng là một trong những pha quan trọng trong phát triển phần mềm Một trong những sơ đồ thể hiện tác nhân và đặc điểm của phần mềm là sơ đồ ca sử dụng Sơ đồ ca sử dụng tổng quan của hệ thống được trình bày trong Hình2.1 Những tác nhân chính trong hệ thống như người thuê xe, chủ sở hữu xe, quản trị viên hệ thống và khách có các trường hợp sử dụng điển hình với một ứng dụng thuê xe như: Yêu cầu thuê, Xem thông tin xe, Quản lý thông tin cá nhân, v.v Hệ thông thuê xe nằm ở trung tâm và được đặt tên là VGO Chi tiết các thành phần chính của hệ thống được minh họa như trong hình dưới đây:
Hình 2.1: Biểu đồ usecase tổng quan hệ thống
Các thành phần của hệ thống:
Người dùng: Những người sử dụng hệ thống VGo Người dùng có thể tìm kiếm xe ô tô có sẵn, đặt trước xe ô tô và nhận xe ô tô từ chủ sở hữu xe.
Chủ sở hữu xe: Người cung cấp xe ô tô cho hệ thống VGo Chủ sở hữu xe có thể đăng ký xe ô tô của mình lên hệ thống VGo và cho thuê xe ô tô cho người dùng.
Quản trị viên hệ thống: nơi lưu trữ thông tin về người dùng, chủ sở hữu xe và xe ô tô Hệ thống quản lý dữ liệu giúp người dùng, chủ sở hữu xe và người quản lý hệ thống có thể dễ dàng truy cập và cập nhật thông tin.
Hoạt động của hệ thống thực hiện theo quy trình chặt chẽ, đảm bảo cho người dùng có thể đặt trước và thuê xe ô tô một cách dễ dàng và thuận tiện Quy trình này bao gồm các bước sau:
1 Người dùng tạo tài khoản: Người dùng truy cập vào trang của VGO và tạo tài khoản bằng cách cung cấp thông tin cá nhân.
2 Người dùng đăng nhập vào hệ thống: Người dùng đăng nhập vào hệ thống VGO bằng tên người dùng và mật khẩu.
3 Người dùng tìm kiếm xe ô tô có sẵn: Người dùng tìm kiếm xe ô tô có sẵn
4 Người dùng đặt trước xe ô tô: Người dùng đặt trước xe ô tô bằng cách cung cấp thông tin về thời gian thuê xe, địa điểm nhận xe, v.v.
5 Người quản lý hệ thống xác nhận yêu cầu đặt trước: Người quản lý hệ thống xác nhận yêu cầu đặt trước của người dùng.
6 Người dùng nhận xe ô tô từ chủ sở hữu xe: Người dùng đến địa điểm nhận xe và nhận xe ô tô từ chủ sở hữu xe.
2.2.1 Sơ đồ quản trị viên
Trong môi trường công nghệ ngày càng phức tạp và đa dạng, vai trò của quản trị viên hệ thống trở nên ngày càng quan trọng để đảm bảo sự ổn định và hiệu suất của hệ thống thông tin Sơ đồ quản trị viên hệ thống không chỉ là một biểu đồ biểu thị cấu trúc tổ chức, mà còn là một công cụ hữu ích giúp hiểu rõ các mối quan hệ và trách nhiệm giữa các quản trị viên trong quá trình quản lý, duy trì và cải thiện hệ thống.
Hình 2.2: Biểu đồ usecase quản trị viên
Biểu đồ usecase quản trị viên của hệ thống được trình bày với mô tả các use case như sau:
Đăng nhập: UC này cho phép quản trị viên đăng nhập và trang quản trị để thao tác trên hệ thống quản trị.
Danh sách thông tin người dùng được xác minh: UC này cho phép quản trị viên quản lý kiểm kê số lượng người dùng đăng nhập vào hệ thống và vào xem chi tiết thông tin người dùng đó đăng ký lên hệ thống của mình như thế nào và xem có nên xác minh cho người dùng này sử dụng hệ thống của mình không.
Cập nhật thông tin trạng thái người dùng: Khi xác minh chấp nhận hay từ chối người dùng này rồi thì nó sẽ quay lại trang danh sách người dùng đã cập nhật và thay đổi theo xác minh đó.
Xem danh sách xe ô tô đã xác nhận: Trường hợp này cho phép quản trị viên kiểm tra số lượng xe người dùng đăng kí xe lên hệ thống để cho người dùng khác thuê và xem chi tiết thông tin xe hình ảnh xe để xác nhận xe này có đúng yêu cầu hay không
Cập nhật trạng thái xe ô tô: Khi xác minh chấp nhận hay từ chối xe ô tô này rồi thì nó sẽ quay lại trang danh sách xe và đã được cập nhật và thay đổi theo xác minh đó
Lọc trạng thái thông tin người dùng: Quản trị viên sẽ vào chi tiết xem thông tin tài khoản đó và chọn lọc thông thin người dùng để xem có nên xác minh chấp thuận hay không
Lọc danh sách xe đã xác nhận: Quản trị viên sẽ vào xem chi tiết thông tin xe được xác nhận đăng ký lên hệ thống và chọn lọc thông tin giấy tờ của chủ xe xem có chính xác để xác minh hay không
Đăng xuất/ Thoát ra: Khi đăng xuất nó sẽ quay lại trang chủ website hệ thống để bạn có thể vào đăng nhập hay vào xem danh sách xe
2.2.2 Sơ đồ usecase chủ sở hữu xe ô tô
Sơ đồ chủ sở hữu xe là một công cụ hiệu quả giúp mô tả và phân tích các quan hệ chủ sở hữu giữa các thành phần chính trong lĩnh vực xe ô tô Thông qua việc biểu diễn mối liên kết giữa các đối tượng.
Hình 2.3: Biểu đồ chủ sở hữu xe hơi
Biểu đồ usecase chủ sở hữu xe của hệ thống được trình bày với mô tả các use case như sau:
Đăng ký tài khoản: UC này cho phép người dùng đăng ký tài khoản để đăng nhập sử dụng các chức năng của hệ thống và trên trang chủ
Đăng nhập: Khi đăng nhập cho phép người dùng có thể sử dụng các chức năng của hệ thống.
Xem hồ sơ: UC khi xem hồ sơ sẽ có thông tin người dùng phải làm đăng ký nhập thông tin chi tiết hồ sơ của mình để admin xác nhận thì có thể thêm xe của mình lên hệ thống
Đổi mật khẩu: UC sẽ nhập mật khẩu cũ, nhập mật khẩu mới và nhập lại mật khẩu mới Khi nhập xong ấn đổi mật khẩu là nó sẽ thay đổi mật khẩu cho bạn
Cơ sở dữ liệu
Trong phạm vi đồ án, chúng ta đã thực hiện một phân tích chi tiết về cơ sở dữ liệu MySQL và danh sách các bảng liên quan, nhằm hỗ trợ trong quá trình phát triển và duy trì một hệ thống lưu trữ thông tin hiệu quả cho dịch vụ thuê xe Tổng cộng có 17 bảng được thiết kế và triển khai, mỗi bảng đều đảm bảo việc lưu trữ thông tin một cách có tổ chức và an toàn.
6 vgo_db_user_profile.sql
11 vgo_db_image_vrc.sql
12 vgo_db_driver_license.sql
13 vgo_db_fuel_type.sql
14 vgo_db_gear_box_type.sql
17 vgo_db_body_type.sql
Bảng 2.1: Danh sách tệp tin MySQLDưới đây là mô tả chi tiết về các bảng trong cơ sở dữ liệu của bạn:
vgo_db_car.sql: Bảng này chứa thông tin về các xe ô tô trong hệ thống, bao gồm mô hình, thương hiệu, loại động cơ, loại hộp số, và nhiều thông tin khác liên quan đến xe.
vgo_db_account.sql: Bảng này lưu trữ thông tin tài khoản người dùng, bao gồm tên đăng nhập, mật khẩu (được mã hóa), thông tin liên hệ, và các quyền hạn tương ứng.
vgo_db_role.sql: Bảng này quản lý các vai trò trong hệ thống, xác định quyền hạn và trách nhiệm của từng vai trò cụ thể.
vgo_db_reservation.sql: Bảng này chứa thông tin về các đặt chỗ và giao dịch liên quan đến việc thuê xe, bao gồm ngày giờ đặt chỗ, thời gian thuê, và trạng thái đặt chỗ.
vgo_db_invoice.sql: Bảng này lưu trữ thông tin về hóa đơn thanh toán, bao gồm chi tiết về giá cả, thuế, và các khoản phí khác.
vgo_db_user_profile.sql: Bảng này chứa thông tin cá nhân của người dùng, như tên, địa chỉ, số điện thoại, và thông tin khác.
vgo_db_address.sql: Bảng này lưu trữ thông tin về địa chỉ, có thể được liên kết với các bảng khác để xác định vị trí của người dùng hoặc xe ô tô.
vgo_db_city.sql: Bảng này chứa thông tin về các thành phố trong hệ thống.
vgo_db_district.sql: Bảng này lưu trữ thông tin về các quận hoặc huyện trong hệ thống.
vgo_db_ward.sql: Bảng này chứa thông tin về các phường hoặc xã trong hệ thống.
vgo_db_image_vrc.sql: Bảng này lưu trữ các hình ảnh liên quan đến xe ô tô, tài khoản người dùng, hoặc các đối tượng khác trong hệ thống.
vgo_db_driver_license.sql: Bảng này chứa thông tin về giấy phép lái xe của người dùng.
vgo_db_fuel_type.sql: Bảng này chứa thông tin về các loại nhiên liệu sử dụng trong các xe ô tô.
vgo_db_gear_box_type.sql: Bảng này lưu trữ thông tin về các loại hộp số trong các xe ô tô.
vgo_db_model.sql: Bảng này chứa thông tin về các mô hình xe ô tô cụ thể.
vgo_db_brand.sql: Bảng này chứa thông tin về các thương hiệu xe ô tô.
vgo_db_body_type.sql: Bảng này lưu trữ thông tin về các loại cơ bản của thân xe ô tô, như sedan, SUV, hatchback, vv.
Tổng kết lại, hệ thống cơ sở dữ liệu này không chỉ cung cấp một nền tảng chặt chẽ để quản lý thông tin mà còn tạo điều kiện thuận lợi cho quá trình phát triển và mở rộng dịch vụ thuê xe Điều này là quan trọng trong việc đáp ứng nhu cầu ngày càng tăng về một dịch vụ thuê xe hiệu quả và linh hoạt
Thiết kế chi tiết kiến trúc hệ thống
Hình 2.6: Sơ đồ gói các lớp
Sơ đồ khối của một hệ thống Sơ đồ khối cho thấy cách hệ thống hoạt động bằng cách biểu thị các thành phần của hệ thống và cách chúng tương tác với nhau.
Trong sơ đồ này, hệ thống được chia thành hai phần chính:
Đầu vào: Phần đầu vào nhận dữ liệu từ thế giới bên ngoài Trong trường hợp này, đầu vào bao gồm API và filter.
Đầu ra: Phần đầu ra tạo ra dữ liệu cho thế giới bên ngoài Trong trường hợp này, đầu ra bao gồm entity và Common.
Hai phần chính này được kết nối với nhau bởi các thành phần sau:
Controller: Controller là thành phần điều khiển hệ thống Nó chịu trách nhiệm xử lý đầu vào và tạo đầu ra Trong trường hợp này, Controller được kết nối với API, filter, service, entity và Common.
Service: Service là thành phần cung cấp dịch vụ cho hệ thống Trong trường hợp này, Service được kết nối với entity và Common.
Entity: Entity là thành phần lưu trữ dữ liệu Trong trường hợp này, Entity được kết nối với Service.
Common: Common là thành phần cung cấp các chức năng chung cho hệ thống. Trong trường hợp này, Common được kết nối với Service, entity và Controller.
2.4.2.1 Sơ đồ lớp xem danh sách xe có sẵn
Hình 2.7: Sơ đồ lớp của danh sách xe có sẵn
Sơ đồ lớp xem danh sách xe có sẵn mô tả cấu trúc của các lớp tham gia vào chức năng
"xem danh sách xe có sẵn" Chức năng này cho phép người dùng xem danh sách tất cả các xe đang có sẵn để cho thuê hoặc mua.
2.4.2.2 Sơ đồ lớp xem chi tiết xe có sẵn
Sơ đồ lớp của chi tiết xe có sẵn trong một ứng dụng web Sơ đồ này cho thấy các lớp
Hình 2.8: Sơ đồ lớp của chi tiết xe có sẵn
Nhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng xem chi tiết xe có sẵn trong ứng dụng web.
2.4.2.3 Sơ đồ lớp danh sách xe của tôi
Sơ đồ lớp của danh sách xe của tôi trong một ứng dụng web Sơ đồ này cho thấy các mối quan hệ và liên kết giữa các lớp.
Hình 2.9: Sơ đồ lớp của danh sách xe của tôiNhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng xem danh sách xe của tôi trong ứng dụng web.
2.4.2.4 Sơ đồ lớp chi tiết xe của tôi
Sơ đồ lớp này mô tả cách thức hoạt động của tính năng xem chi tiết xe của tôi trong một ứng dụng web Sơ đồ này cho thấy các lớp và mối quan hệ giữa chúng.
Lớp Car đại diện cho một chiếc xe Nó có các thuộc tính như tên, mã số, màu sắc, giá và tình trạng.
Lớp CarBookingDetailController xử lý yêu cầu HTTP để xem chi tiết của một chiếc xe Nó sử dụng lớp CarService để lấy thông tin về chiếc xe từ cơ sở dữ liệu.
Lớp CarService cung cấp các phương thức để truy cập thông tin về xe từ cơ sở dữ liệu.
Nó sử dụng lớp UserProfileDAO để lấy thông tin về người sở hữu của một chiếc xe.
Hình 2.10: Sơ đồ lớp của chi tiết xe của tôi
Nhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng xem chi tiết xe của tôi trong ứng dụng web.
2.4.2.5 Sơ đồ lớp thêm xe mới
Sơ đồ lớp của thêm xe mới trong một ứng dụng web Sơ đồ này cho thấy các lớp và mối quan hệ giữa chúng.
Các lớp chính trong sơ đồ này là:
Car: Lớp này đại diện cho một chiếc xe Nó có các thuộc tính như tên, mã số, màu sắc, giá và tình trạng.
CreateNewCarController: Lớp này xử lý yêu cầu HTTP để thêm một chiếc xe mới Nó sử dụng lớp CarService để lưu thông tin về chiếc xe mới vào cơ sở dữ liệu.
CarService: Lớp này cung cấp các phương thức để lưu thông tin về xe vào cơ sở dữ liệu.
CommonUtils: Lớp này cung cấp các phương thức chung, chẳng hạn như lấy ID người dùng từ phiên.
Hình 2.11: Sơ đồ lớp của thêm xe mới
Nhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng thêm xe mới của tôi trong ứng dụng web.
2.4.2.6 Sơ đồ lớp chỉnh sửa thông tin ô tô
Sơ đồ lớp của chỉnh sửa thông tin ô tô trong một ứng dụng web Sơ đồ này cho thấy các lớp và mối quan hệ giữa chúng.
Các lớp chính trong sơ đồ này là:
Car: Lớp này đại diện cho một chiếc xe Nó có các thuộc tính như tên, mã số, màu sắc, giá và tình trạng.
UpdateCarInfoController: Lớp này xử lý yêu cầu HTTP để chỉnh sửa thông tin về một chiếc xe Nó sử dụng lớp CarService để cập nhật thông tin về chiếc xe trong cơ sở dữ liệu.
CarService: Lớp này cung cấp các phương thức để cập nhật thông tin về xe trong cơ sở dữ liệu.
CommonUtils: Lớp này cung cấp các phương thức chung, chẳng hạn như lấy ID người dùng từ phiên.
Hình 2.12: Sơ đồ lớp của chỉnh sửa thông tin ô tô
Nhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng chỉnh sửa thông tin ô tô của tôi trong ứng dụng web.
2.4.2.7 Sơ đồ lớp khóa xe
Sơ đồ lớp của khóa xe trong một ứng dụng web Sơ đồ này cho thấy các lớp và mối quan hệ giữa chúng.
Các lớp chính trong sơ đồ này là:
Car: Lớp này đại diện cho một chiếc xe Nó có các thuộc tính như tên, mã số, màu sắc, giá và tình trạng.
CarBooking: Lớp này đại diện cho một lần đặt xe Nó có các thuộc tính như ID, ngày bắt đầu, ngày kết thúc và trạng thái.
CarBookingController: Lớp này xử lý yêu cầu HTTP để khóa xe Nó sử dụng lớp CarService để thực hiện các thao tác trên cơ sở dữ liệu.
CarService: Lớp này cung cấp các phương thức để thực hiện các thao tác trên cơ sở dữ liệu liên quan đến xe.
CarDAO: Lớp này cung cấp các phương thức truy vấn cơ sở dữ liệu liên quan đến xe.
Hình 2.13: Sơ đồ lớp của khóa xe
Nhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng của khóa xe của tôi trong ứng dụng web.
2.4.3.1 Sơ đồ lớp tạo yêu cầu đặt xe
Sơ đồ lớp của tạo yêu cầu đặt xe trong một ứng dụng web Sơ đồ này cho thấy các lớp và mối quan hệ giữa chúng.
Các lớp chính trong sơ đồ này là:
Car: Lớp này đại diện cho một chiếc xe Nó có các thuộc tính như tên, mã số, màu sắc, giá và tình trạng.
CarBooking: Lớp này đại diện cho một lần đặt xe Nó có các thuộc tính như ID, ngày bắt đầu, ngày kết thúc và trạng thái.
CarBookingController: Lớp này xử lý yêu cầu HTTP để tạo yêu cầu đặt xe Nó sử dụng lớp carservice để thực hiện các thao tác trên cơ sở dữ liệu.
CarService: Lớp này cung cấp các phương thức để thực hiện các thao tác trên cơ sở dữ liệu liên quan đến xe.
CarDAO: Lớp này cung cấp các phương thức truy vấn cơ sở dữ liệu liên quan đến xe.
UserProfile: Lớp này đại diện cho một người dùng Nó có các thuộc tính như
ID, tên, email và địa chỉ.
Hình 2.14 Sơ đồ lớp của tạo yêu cầu đặt xe
Nhìn chung, sơ đồ lớp này cung cấp một bức tranh tổng thể về cách thức hoạt động của tính năng của tạo yêu cầu đặt xe của tôi trong ứng dụng web.
2.4.3.2 Sơ đồ lớp danh sách yêu cầu đặt thuê xe
Sơ đồ lớp của tạo yêu cầu đặt thuê xe trong một ứng dụng web Sơ đồ này cho thấy các lớp và mối quan hệ giữa chúng.
Các lớp chính trong sơ đồ này là:
Car: Lớp này đại diện cho một chiếc xe Nó có các thuộc tính như tên, mã số, màu sắc, giá và tình trạng.
CarBooking: Lớp này đại diện cho một lần đặt thuê xe Nó có các thuộc tính như ID, ngày bắt đầu, ngày kết thúc, trạng thái và giá thuê.
CarBookingController: Lớp này xử lý yêu cầu HTTP để tạo yêu cầu đặt thuê xe Nó sử dụng lớp CarService để thực hiện các thao tác trên cơ sở dữ liệu.
CarService: Lớp này cung cấp các phương thức để thực hiện các thao tác trên cơ sở dữ liệu liên quan đến xe.
CarDAO: Lớp này cung cấp các phương thức truy vấn cơ sở dữ liệu liên quan đến xe.
UserProfile: Lớp này đại diện cho một người dùng Nó có các thuộc tính như
ID, tên, email và địa chỉ.
Hình 2.15: Sơ đồ lớp của tạo yêu cầu đặt thuê xe
Kết luận chuơng
Trong chương II đề tài đã trình bày phân tích đặc tả yêu cầu hệ thống Tiếp đến thiết kế mô hình hệ thống thông qua sơ đồ - biểu đồ cơ bản của một hệ thống và chỉ rõ phương pháp sử dụng của từng trường hợp chức năng của nó Biểu đồ tổng quát, biểu đồ từng trường hợp của người dùng, sơ đồ lớp của từng chức năng Biểu đồ tổng quát chỉ ra cách thức hoạt động của hệ thống và mối liên kết giữa từng trường hợp người dùng Biểu đồ từng trường hợp người dùng chỉ rõ trường hợp đó gồm các chức năng chính nào Sơ đồ lớp chỉ ra cầu trúc tĩnh của các lớp trong hệ thống này dùng để làm gì trong chức năng đó Qua những phân tích và thiết kế sơ đồ ở chương II , Chương III ta sẽ tiến hành phát triển và xem kết quả triển khai của hệ thống.
PHÁT TRIỂN VÀ KẾT QUẢ TRIỂN KHAI
Code phát triển hệ thống quản lý ô tô
3.1.1 Xem danh sách xe có sẵn
STT Tên lớp Phương pháp Sự miêu tả
#doGet(request: HttpServletRequest, response: HttpServletResponse): void
Nhận tham số yêu cầu là số nguyên
Nhận tham số yêu cầu là đúng hoặc sai
3 HomeController #doGet(request: HttpServletRequest, parami:
Integer , cityId: Integer, districtId: Integer, wardId: Integer, startDate: String, endDate:
String, brandId: Integer, modelId: Integer, quickBooking: Integer, fuelTypeId: Integer, gearBoxTypeId: Integer, sunrRoof: Boolean, collisionSensor: Boolean, maps: Boolean, carplay: Boolean, cam360: Boolean, parrkingCam: Boolean, actionCam: Boolean, rearCam: Boolean, tirePressureSensor:
Lấy danh sách xe đã lọc
Integer , cityId: Integer, districtId: Integer, wardId: Integer, startDate: String, endDate:
String, brandId: Integer, modelId: Integer, quickBooking: Integer, fuelTypeId: Integer, gearBoxTypeId: Integer, sunrRoof: Boolean, collisionSensor: Boolean, maps: Boolean, carplay: Boolean, cam360: Boolean, parrkingCam: Boolean, actionCam: Boolean, rearCam: Boolean, tirePressureSensor:
Lấy danh sách xe đã lọc
6 AuthenticationF ilter doFilter(request: ServletRequest, response:
Kiểm tra quyền truy cập
Bảng 3.1: Đặc tả lớp danh sách xe có sẵn
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 4 lớp sử dụng trực tiếp phương pháp Servlet Api: SearchCarController, CommonUtils, HomeController, AuthenticationFilter.
Phương thức :#doGet(request: HttpServletRequest, response:
Sử Dụng: Servlet (HttpServletRequest, HttpServletResponse).
Mục Đích: Xử lý yêu cầu tìm kiếm xe khi có yêu cầu HTTP GET.
Phương thức : +getIntegerRequestParameter(request: HttpServletRequest, param: String): Integer
+getBooleanRequestParameter(request: HttpServletRequest, param: String): Boolean
Mục Đích: Cung cấp các tiện ích chung, bao gồm lấy tham số yêu cầu là số nguyên và boolean.
Phương thức :#doGet(request: HttpServletRequest, response:
Sử Dụng: Servlet (HttpServletRequest, HttpServletResponse).
Mục Đích: Xử lý yêu cầu trang chủ khi có yêu cầu HTTP GET.
Phương thức : doFilter(request: ServletRequest, response:
Sử Dụng: Servlet (ServletRequest, ServletResponse, FilterChain)
Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục Đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
+ServletRequest: Interface chung cho tất cả các loại yêu cầu, cung cấp các phương thức chung để lấy thông tin về yêu cầu.
+ServletResponse: Interface chung cho tất cả các loại phản hồi, cung cấp các phương thức để cấu hình và gửi phản hồi.
+FilterChain: Interface này được sử dụng để liên kết nhiều bộ lọc lại với nhau trong chuỗi xử lý bộ lọc.
3.1.2 Xem chi tiết xe có sẵn
Tên lớp Phương pháp Sự miêu tả
#doGet(request: HttpServletRequest, response: HttpServletResponse): void
Nhận tham số yêu cầu là số nguyên
Nhận tham số yêu cầu là số nguyên từ HttpSession
Lấy thông tin từ CarId
Lấy thông tin từ CarId
5 CarService +findCarBookingById(carId: Integer, accountId: Integer)): Optional
Lấy thông tin xe từ CarId và accountId
6 CarDAO +findCarBookingById(carId: Integer, accountId: Integer)): Optional
Lấy thông tin xe từ CarId và accountId
7 AutheticationFilter +doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
+keepBookingUrl(request: ServletRequest, httpRequest: HttpServletRequest): void
Nhận dữ liệu tìm kiếm xe sau khi đăng nhập
Bảng 3.2 : Đặc tả lớp chi tiết xe có sẵn
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: CarBookingDetailController, CommonUtils,
Phương thức #doGet(request: HttpServletRequest, response:
Sử Dụng: Servlet (HttpServletRequest, HttpServletResponse).
Mục Đích: Xử lý yêu cầu chi tiết đặt xe khi có yêu cầu HTTP GET.
Mục Đích: Nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Mục Đích: Nhận thông tin tài khoản từ HttpSession.
Phương thức: +doFilter(request: ServletRequest, response:
Sử Dụng: Servlet (ServletRequest, ServletResponse, FilterChain).
Mục Đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
Phương thức: +keepBookingUrl(request: ServletRequest, httpRequest: HttpServletRequest): void
Sử Dụng: Servlet (ServletRequest, HttpServletRequest).
Mục Đích: Nhận dữ liệu tìm kiếm xe sau khi đăng nhập.
3.1.3 Danh sách xe của tôi
STT Tên lớp Phương pháp Sự miêu tả
2 CarService +listMyCar(username: String): List Nhận danh sách xe từ tên người dùng
3 CarDAO +listMyCar(username: String): List Nhận danh sách xe từ tên người dùng
Kiểm tra quyền truy cập
Bảng 3.3: Đặc tả lớp danh sách xe của tôi
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 2 lớp sử dụng trực tiếp phương pháp Servlet Api : ListMyCarController, AuthenticationFilter.
Phương thức: doGet(request: HttpServletRequest, response:
Sử Dụng: Servlet (HttpServletRequest, HttpServletResponse).
Mục đích: Xử lý yêu cầu HTTP GET để hiển thị danh sách các xe của người dùng.
Phương thức: doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): void
Sử Dụng: Servlet(ServletRequest, ServletResponse, FilterChain) Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.1.4 Chi tiết xe của tôi
STT Tên lớp Phương pháp Sự miêu tả
#doGet(yêu cầu: HttpServletRequest, phản hồi: HttpServletResponse): void
Lấy thông tin xe từ carId
Lấy thông tin xe từ carId
Nhận tham số yêu cầu là số nguyên
+doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.4: Đặc tả lớp chi tiết xe của tôi
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: CarProfileController, CommonUtils, AuthenticationFilter.
Phương thức: doGet(request: HttpServletRequest, response:
Sử Dụng: Servlet (HttpServletRequest, HttpServletResponse).
Mục đích: Xử lý yêu cầu HTTP GET và hiển thị thông tin chi tiết của một xe.
Phương thức: +getIntegerRequestParameter(request: HttpServletRequest, param: String): Integer
Mục Đích: Nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Phương thức: +doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): void
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain) Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
STT Tên lớp Phương pháp Sự miêu tả
#doGet(request: HttpServletRequest, response: HttpServletResponse): void
+createNewCar(name: String, brandId: Integer, modelId: Integer, generation: String, fuelEfficiency:
Float, fuelTypeId: mInteger, thumbnailImagePath: String, leftImagePath: String, rigthImagePath:
String, backImagePath: String, licenseId: Integer, gearBoxTypeId:
Integer, factoryYear: Integer, cylinderCapacity: Float, sunRoof:
Boolean, collisionSensor: Boolean, maps: Boolean, carplay: Boolean, cam360: Boolean, parkingCam:
Boolean, actionCam: Boolean, rearCam: Boolean, tirePressureSensor:
Integer, textAddress: String, username: String, vrcFrontPath:
String, vrcBackPath: String, insuranceFrontPath: String, insuranceBackPath: String, inspectionFrontPath: String,
Tạo xe mới inspectionBackPath: String): Boolean
Nhận xe theo biển số +saveOrUpdate(car: Car): Car Lưu thông tin xe
Lấy thông tin người dùng
Lưu thông tin giấy tờ xe
6 CommonUtils +getAccountIdFromHttpSession(reque st): Integer
Lấy tham số yêu cầu là số nguyên
Lấy tham số yêu cầu là số nguyên
Lấy tham số yêu cầu là Float
Lấy tham số yêu cầu là số thực và loại bỏ ký tự
Lấy tham số yêu cầu là đúng hoặc sai
7 AuthenticationFilter +doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.5: Đặc tả lớp thêm xe mới
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api : CreateNewBookingController, CommonUtils ,
Phương thức: #doGet(request: HttpServletRequest, response:
Sử dụng: Servlet (HttpServletRequest, HttpServletResponse).
Mục đích: Xử lý yêu cầu HTTP GET và hiển thị thông tin chi tiết của một
Mục đích: Tạo một chiếc xe mới dựa trên thông tin được cung cấp và có thể liên quan đến xử lý yêu cầu HTTP.
Phương thức: +getAccountIdFromHttpSession(request): Integer
Sử dụng: Servlet API để lấy thông tin tài khoản từ HttpSession.
Mục đích: Nhận thông tin tài khoản từ HttpSession.
Phương thức: +getIntegerPart(request: HttpServletRequest, param: String): Integer
Sử dụng Servlet: Sử dụng Servlet để nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Mục đích của Servlet: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +getPricePart(request: HttpServletRequest, param: String): Float
Sử dụng: Servlet API để nhận tham số yêu cầu là số thực từ HttpServletRequest và loại bỏ ký tự "." và ",".
Mục đích: Nhận giá trị số thực từ yêu cầu HTTP và làm sạch dữ liệu.
Phương thức: +getBooleanPart(request: HttpServletRequest, param: String): Boolean
Sử dụng: Servlet để nhận tham số yêu cầu là đúng hoặc sai từ HttpServletRequest.
Mục đích: Nhận giá trị boolean từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): void
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain) Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.1.6 Chỉnh sửa thông tin ô tô
STT Tên lớp Phương pháp Sự miêu tả
2 CarService +updateCar(carId: Integer, name: String, price:
Float, quickBooking: Integer, cylinderCapacity: Float,thumbnailImagePath:
String, backImagePath: String, String vrcFrontPath, String vrcBackPath, vrcFrontPath: String, vrcBackPath: String, insuranceFrontPath: String, insuranceBackPath: String, inspectionFrontPath: String,
Cập nhật thông tin xe inspectionBackPath: String, sunRoof: Boolean, collisionSensor: Boolean, maps: Boolean, carplay: Boolean, cam360: Boolean, parkingCam: Boolean, actionCam: Boolean, rearCam: Boolean, tirePressureSensor:
Boolean, Integer cityId, Integer districtId, Integer wardId, String textAddress, Integer status): boolean
3 CarDAO +findCarById(carId: Integer): Optional Lấy xe từ carId
+saveOrUpdate(car: Car): Car Lưu thông tin mới về xe
Lấy thông tin đăng ký xe ô tô
+saveOrUpdate(vrc: ImageVRC): ImageVRC Lưu thông tin đăng ký xe ô tô
5 UploadService +uploadCarImage(request: HttpServletRequest, filePart: Part):String
Tạo và lưu hình ảnh vào một thư mục
Lấy id tài khoản của người dùng
+getIntegerPart(request: HttpServletRequest, param: String): Integer
Lấy tham số yêu cầu là số nguyên
+getFloatPart(request: HttpServletRequest, param: String): Float
Lấy tham số yêu cầu là Float
+getPricePart(request: HttpServletRequest, param: String): Float
Lấy tham số yêu cầu là số thực và loại bỏ ký tự “.” Và”,”
+getBooleanPart(request: HttpServletRequest, param: String): boolean
Lấy tham số yêu cầu là đúng hoặc sai
+getStringPart(request: HttpServletRequest, param: String): Chuỗi
Lấy tham số yêu cầu là Chuỗi
Kiểm tra quyền truy cập
Bảng 3.6: Đặc tả lớp chỉnh sửa thông tin ô tô
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 4 lớp sử dụng trực tiếp phương pháp Servlet Api : CarProfileController, UploadService , CommonUtils,
Phương thức: #doPost(request: HttpServletRequest, response:
Sử dụng: Servlet để xử lý yêu cầu HTTP POST.
Mục đích: Cập nhật thông tin chiếc xe dựa trên thông tin được gửi qua yêu cầu HTTP POST.
Phương thức: +uploadCarImage(request: HttpServletRequest, filePart: Part): String
Sử dụng: Sử dụng HttpServletRequest và Part từ Servlet API để xử lý việc tải lên hình ảnh xe.
Mục đích: Thực hiện việc tải lên và lưu trữ hình ảnh xe vào một thư mục.
Sử dụng: Servlet để lấy thông tin tài khoản từ HttpSession.
Mục đích: Nhận thông tin tài khoản từ HttpSession.
Phương thức: +getIntegerPart(request: HttpServletRequest, param: String): Integer
Sử dụng: Servlet để nhận tham số yêu cầu là số nguyên từ
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +getFloatPart(request: HttpServletRequest, param: String): Float.
Sử dụng: Servlet để nhận tham số yêu cầu là số thực từ
Mục đích: Nhận giá trị số thực từ yêu cầu HTTP.
Phương thức: +getPricePart(request: HttpServletRequest, param: String): Float
Sử dụng: Servlet API để nhận tham số yêu cầu là số thực từHttpServletRequest và loại bỏ ký tự "." và ",".
Mục đích: Nhận giá trị số thực từ yêu cầu HTTP và làm sạch dữ liệu.
Phương thức: +getBooleanPart(request: HttpServletRequest, param: String): boolean
Sử dụng: Servlet để nhận tham số yêu cầu là đúng hoặc sai từ
Mục đích: Nhận giá trị boolean từ yêu cầu HTTP.
Phương thức: +getStringPart(request: HttpServletRequest, param:
Sử dụng: Servlet để nhận tham số yêu cầu là chuỗi từ
Mục đích: Nhận giá trị chuỗi từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet API (ServletRequest, ServletResponse, FilterChain) Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
STT Tên lớp Phương pháp Sự miêu tả
2 CarService +changeCarStatus(carId: Integer, status: Integer): boolean
Cập nhật tình trạng xe
Lấy danh sách xe từ accountId
+saveOrUpdate(car: Car): Car Lưu thông tin mới về xe
4 CommonUtils +getAccountIdFromHttpSession(req uest): Integer
Lấy id tài khoản của người dùng
Lấy tham số yêu cầu là số nguyên
+doFilter(request: ServletRequest, reponse: ServletResponse, chuỗi:
Kiểm tra quyền truy cập
Bảng 3.7: Đặc tả lớp khóa xe
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: LockCarController, CommonUtils, AuthenticationFilter
Phương thức: #doPost(request: HttpServletRequest, response:
Mục đích: Cập nhật thông tin chiếc xe dựa trên thông tin được gửi qua yêu cầu HTTP POST.
Sử dụng: Servlet API để xử lý yêu cầu HTTP POST.
Sử dụng: Servlet để lấy thông tin tài khoản từ HttpSession.
Mục đích: Nhận thông tin tài khoản từ HttpSession.
Sử dụng: Servlet để nhận tham số yêu cầu là số nguyên từ
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến cácServlet hoặc bộ lọc khác.
Code phát triển hệ thống quản lý đặt chỗ
3.2.1 Tạo yêu cầu đặt thuê xe
STT Tên lớp Phương pháp Sự miêu tả
2 ReservationService +createNewReservation(accountI d: Integer, carId: Integer, startTime:String, startDate: String, endTime:String, endDate: String, locaion: String, price: Float): boolean
Lưu thông tin đặt trước
Lưu thông tin hóa đơn
Lưu thông tin lịch xe
7 CommonUtils +getFloatRequestParameter(reque st: HttpServletRequest, param:
Nhận tham số yêu cầu là Float
+getIntegerRequestParameter(req uest: HttpServletRequest, param:
Nhận tham số yêu cầu là số nguyên
8 AuthenticationFilter +doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.8: Đặc tả lớp tạo yêu cầu đặt xe
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: CreateNewBookingController , CommonUtils ,
Phương thức: #doPost(request: HttpServletRequest, response:
Sử dụng: Sử dụng HttpServletRequest và HttpServletResponse từ Servlet API để xử lý yêu cầu HTTP POST.
Mục đích: Tạo một đặt chỗ mới thông qua yêu cầu HTTP POST.
Phương thức: +getFloatRequestParameter(request: HttpServletRequest, param:String): Float
Mục đích: Nhận giá trị số thực từ yêu cầu HTTP.
Phương thức: +getIntegerRequestParameter(request: HttpServletRequest, param: String): Integer
Sử dụng: Servlet API để nhận tham số yêu cầu là số nguyên từ
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.2.2 Danh sách yêu cầu đặt thuê xe
STT Tên lớp Phương pháp Sự miêu tả
+listCarReterReservation(accountId : Integer, status: Integer):
Lấy danh sách đặt chỗ từ accountId và trạng thái
Lấy danh sách đặt chỗ từ accountId và trạng thái
4 CommonUtils +getAccountIdFromHttpSession(re quest): Integer
Lấy id tài khoản của người dùng
+getIntegerRequestParameter(reque st: HttpServletRequest, param:
Nhận tham số yêu cầu là số nguyên
+doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.9: Đặc tả lớp tạo yêu cầu đặt thuê xe
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: ListCarRenterReservationController ,CommonUtils ,
Phương thức: #doGet(request: HttpServletRequest, response: HttpServletResponse): void
Sử dụng: Sử dụng HttpServletRequest và HttpServletResponse từ Servlet để xử lý yêu cầu HTTP GET.
Mục đích: Xử lý yêu cầu HTTP GET để hiển thị danh sách đặt chỗ của người thuê xe.
Phương thức: +getAccountIdFromHttpSession(request): Integer
Sử dụng: Servlet API để lấy thông tin tài khoản từ HttpSession.
Mục đích: Nhận thông tin tài khoản từ HttpSession.
Sử dụng: Servlet I để nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): void
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.2.3 Chi tiết yêu cầu đặt thuê xe
STT Tên lớp Phương pháp Sự miêu tả
#doGet(request: HttpServletRequest, response: HttpServletResponse): void
Lấy đặt chỗ từ id
3 ReservationDAO +findReservationById(reservationId: Lấy đặt chỗ từ id
Nhận tham số yêu cầu là số nguyên
5 AuthenticationFilter +doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.10: Đặc tả lớp chi tiết yêu cầu đặt thuê xe
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: CarRenterReservationDetailController, CommonUtils,
Phương thức: #doGet(request: HttpServletRequest, response:
Sử dụng: Sử dụng HttpServletRequest và HttpServletResponse từ Servlet để xử lý yêu cầu HTTP GET.
Mục đích: Xử lý yêu cầu HTTP GET để hiển thị chi tiết đặt chỗ của người thuê xe.
Sử dụng: Servlet để nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.2.4 Cập nhật yêu cầu đặt xe
STT Tên lớp Phương pháp Sự miêu tả
#doPost(request: HttpServletRequest, response: HttpServletResponse): void
Lấy đặt chỗ từ id
Lấy tham số yêu cầu là số nguyên
5 AuthenticationFilter +doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.11: Đặc tả lớp yêu cầu đặt xe
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet: CarOwnerReservationDetailController, CommonUtils,
Phương pháp: #doPost(request: HttpServletRequest, response:
Sử dụng Sử dụng HttpServletRequest và HttpServletResponse từ Servlet để xử lý yêu cầu HTTP POST.
Mục đích: Xử lý yêu cầu HTTP POST để cập nhật thông tin chi tiết đặt chỗ từ chủ xe.
Sử dụng: Servlet để nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến cácServlet hoặc bộ lọc khác.
3.2.5 Danh sách xe đã được xác minh
Tên lớp Phương pháp Sự miêu tả
#doGet(request: HttpServletRequest, response: HttpServletResponse): void
Lấy danh sách xe từ trạng thái
Lấy danh sách xe từ trạng thái
Lấy tham số yêu cầu là số nguyên
5 AuthenticationFilter +doFilter(request: ServletRequest, response: ServletResponse, chain:
Kiểm tra quyền truy cập
Bảng 3.12: Đặc tả lớp danh sách xe xác minh
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet Api: ListVerifiedCarController, CommonUtils,
Phương thức: #doGet(request: HttpServletRequest, response:
Sử dụng: Sử dụng HttpServletRequest và HttpServletResponse từ Servlet để xử lý yêu cầu HTTP GET.
Mục đích: Xử lý yêu cầu HTTP GET để hiển thị danh sách các xe đã được xác nhận.
Sử dụng: Servlet để nhận tham số yêu cầu là số nguyên từ HttpServletRequest.
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet API (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.2.6 Chi tiết xe đã được xác minh
STT Tên lớp Phương pháp Sự miêu tả
#doGet(request: HttpServletRequest, response: HttpServletResponse): void
Lấy thông tin người dùng từ carId
Lấy thông tin người dùng từ carId
Lấy tham số yêu cầu là số nguyên
7 AuthenticationFilter +doFilter(request: ServletRequest, response:
Kiểm tra quyền truy cập
Bảng 3.13: Đặc tả lớp chi tiết xe được xác minh
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet: ListVerifiedCarController, CommonUtils, AuthenticationFilter.
Phương thức: #doGet(request: HttpServletRequest, response:
Sử dụng: Sử dụng HttpServletRequest và HttpServletResponse từ Servlet để xử lý yêu cầu HTTP GET.
Mục đích: Xử lý yêu cầu HTTP GET để hiển thị danh sách các xe đã được xác nhận.
Sử dụng: Servlet I để nhận tham số yêu cầu là số nguyên từHttpServletRequest.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến các Servlet hoặc bộ lọc khác.
3.2.7 Cập nhật tình trạng xe
STT Tên lớp Phương pháp Sự miêu tả
Cập nhật tình trạng xe
+saveOrUpdate(car: Car): Car Cập nhật tình trạng xe
4 CommonUtils +getIntegerRequestParameter(re quest: HttpServletRequest, param: String): Integer
Nhận tham số yêu cầu là số nguyên
Kiểm tra quyền truy cập
Bảng 3.14: Đặc tả lớp cập nhật tình trạng xe
Giải thích phương pháp trong các lớp trên bảng đặc tả trên có 3 lớp sử dụng trực tiếp phương pháp Servlet: ListVerifiedCarController, CommonUtils, AuthenticationFilter
Phương thức: #doGet(request: HttpServletRequest, response: HttpServletResponse): void
Sử dụng: Sử dụng HttpServletRequest và HttpServletResponse từServlet để xử lý yêu cầu HTTP GET.
Mục đích: Xử lý yêu cầu HTTP GET để hiển thị danh sách các xe đã được xác nhận.
Sử dụng: Servlet để nhận tham số yêu cầu là số nguyên từ
Mục đích: Nhận giá trị số nguyên từ yêu cầu HTTP.
Phương thức: +doFilter(request: ServletRequest, response:
Sử dụng: Servlet (ServletRequest, ServletResponse, FilterChain). Thường được sử dụng để bảo vệ các tài nguyên có quyền truy cập.
Mục đích: Kiểm tra quyền truy cập trước khi chuyển yêu cầu đến cácServlet hoặc bộ lọc khác.
Kết quả phát triển giao diện trang chủ
Tương thích Trình Duyệt: Hỗ trợ nhiều trình duyệt web khác nhau để đảm bảo tính tương thích.
Đăng Nhập An Toàn: Cung cấp cơ chế đăng nhập an toàn
Chức năng: Cung cấp các chức năng cơ bản, phù hợp với trang website thuê xe ô tô
Tốc độ xử lý: Nhanh, chính xác, cập nhật dữ liệu thực liên tục.
Bố cục giao diện: Kích thích thị giác, nội dung phải có sự liên kết, tính thẩm mỹ, dễ dàng thao tác cho người dùng, phù hợp với hoạt động đặt thuê xe của người dùng
3.3.2 Kết quả phát triển trang chủ website
Nhìn chung, một thiết kế website chuyên nghiệp chuẩn SEO có bố cục cơ bản gồm 3 phần: header (đầu trang), content (nội dung của trang) và cuối cùng là footer (chân trang).
Hình 3.1: Bố cục cơ bản của một website
Thanh chức năng : chứa logo , các danh mục chức năng (đăng nhập ,…)
Hình 3.2: Bố cục phần header website
Chứa các thông tin cơ bản về doanh nghiệp, cửa hàng như địa chỉ , danh mục , tên ngắn gọn hệ thống
Hình 3.3: Bố cục phần footer website
Chứa nội dung chính của trang web gồm thời gian đặt lịch thuê xe và hình ảnh quảng cáo của hệ thống
Hình ảnh quảng cáo của hệ thống sau 1 thời gian sẽ tự thay đổi để cho website đa dạng sinh động hơn
Hình 3.4: Bố cục phần content của website trang chủ
Khi bạn nhập thời gian thuê xe hệ thống sẽ chuyển bạn đến trang tìm xe và hiển thị toàn bộ danh sách tất cả xe đã được đăng ký xác minh chính xác trên hệ thống và mục lựa chọn địa điểm và hãng xe phân khúc mà bạn muốn thuê.
Hình 3.5: Giao diện trang tìm thuê xe Phần danh sách xe ô tô: Hiện 1 danh sách tất cả các xe đã được xác minh lên hệ thống.
Phần mục địa điểm và phân loại ô tô: Khi mình ấn lựa chọn địa điểm và phân loại ô tô nó sẽ lọc thông tin xe và hiện danh sách xe mà giống với mục bạn tìm.
3.3.2.3 Thông tin chi tiết của xe
Bạn có thể xem thông tin chi tiết của xe mà bạn muốn thuê trên hệ thống và hệ thống sẽ chuyển bạn đến trang thông tin chi tiết xe mà bạn sẽ thuê và hình ảnh của chủ sở hữu chiếc xe đó Để người dùng có thể nắm rõ thông tin và tin tưởng để thuê xe trên hệ thống.
Hình 3.6: Giao diện trang chi tiết thuê xe
3.1.2.4 Đặt xe Để sau khi bạn đặt xe trên hệ thống thuê xe Hệ thống sẽ hiển thị cho bạn 1 thông báo về các thông tin mà bạn đã xác nhận đặt trên hệ thống.
Hình 3.7: Giao diện thông tin đặt xe
Kết quả phát triển giao điện đăng nhập
Nhưng để đặt được xe trên hệ thống thì bạn phải đăng nhập vào hệ thống để sử dụng các chức năng đó
Hình 3.8: Giao diện đăng nhập Trang đăng nhập dành cho quản trị viên được thiết kế tối giản, gồm 2 phần:
+ Form nhập thông tin tài khoản: Gồm 2 trường “Tên tài khoản” và “Mật Khẩu”
+ Quản trị viên sẽ dùng tài khoản được tạo từ SQL để đăng nhập sử dụng trang quản trị Đối với các quản trị viên khác sẽ đăng nhập thông qua tài khoản do Quản trị viên tạo trên hệ thống quản trị.
+ Button “ĐĂNG NHẬP”: Khi người dùng điền mẫu đăng nhập thì sẽ bấm button để gửi 1 yêu cầu đến server kiểm tra và đồng ý cho đăng nhập vào trang quản trị.
3.4.1.1 Thiết kế giao diện đăng ký và các chức năng
Chưa có tài khoản bạn sẽ vào trang đăng ký tài khoản của hệ thống để điển các thông tin cần thiết để có thể đăng nhập vào hệ thống và khi đăng ký xong nó sẽ quay lại trang đăng nhập để bạn đăng nhập tài khoản bạn vừa đăng ký
Hình 3.9 :Giao diện đăng ký tài khoản của hệ thống
Giao diện đăng ký tài khoản của hệ thống đơn giản và dễ dàng để cho người dùng có thể đăng ký 1 cách nhanh chóng.
Khi đăng ký tài khoản xong trang sẽ trở lại trang đăng nhập và có thêm thông báo
Hình 3.10 : Thông báo đăng ký tài khoản của hệ thống
Phải đến tài khoản gmail mình đăng ký để kích hoạt tài khoản không sẽ không thể đăng nhập vào hệ thống được và ấn đăng nhập sẽ hiện 1 thông báo kêu kích hoạt tài khoản.
Hình 3.11: Lỗi chưa kích hoạt gmail Đây là thư mục gửi cho email để kích hoạt tài khoản của hệ thống
Hình 3.12 : Thư mục được gửi đến gmail của hệ thống
Khi ấn vào “Click vào đây để kích hoạt tài khoản” thì tài khoản sẽ được kích hoạt và trở lại trang đăng nhập của hệ thống Để người dùng có thể đăng nhập vào hệ thống và sử dụng các chức năng của hệ thống Nhưng cần phải được xác minh giấy tờ người dùng từ quản trị viên mới được sử dụng các chức năng cần thiết để thuê xe hay làm chủ xe cho thuê
3.4.1.2 Code thể hiện hệ thống gửi đến gmail ( đăng ký tài khoản)
Hình 3,13 : Code thể hiện để gửi email cho người dùng Lớp Email đầu tiên sẽ thiết lập các cấu hình email cần thiết, bao gồm:
Các cấu hình này bao gồm:
mail.smtp.host: Địa chỉ máy chủ SMTP
mail.smtp.port: Cổng SMTP
mail.smtp.auth: Yêu cầu xác thực
mail.smtp.starttls.enable: Bật TLS
Sau khi thiết lập cấu hình email, lớp Email sẽ tạo một phiên email sử dụng javax.mail.Session với các cấu hình đã thiết lập.
Xác định nội dung và tiêu đề email
Lớp Email sẽ xác định loại email cần gửi dựa trên requestType Sau đó, lớp Email sẽ thiết lập tiêu đề và nội dung email phù hợp với từng loại.
Cuối cùng, lớp Email sẽ tạo đối tượng Message để đại diện cho email Sau đó, lớp Email sẽ thiết lập người gửi, người nhận, tiêu đề và nội dung cho email. Cuối cùng, lớp Email sẽ sử dụng Transport.send để gửi email.
3.4.2.1 Giao diện quên mật khẩu
Khi bạn quên mật khẩu nhập vào quên mật khẩu nó sẽ dến trang đặt lại mật khẩu cho
Hình 3.14: Giao diện quên mật khẩu.
Trang quên mật khẩu dành cho người dùng được thiết kế tối giản, gồm 2 phần:
+ Form nhập thông tin tài khoản: Gồm 2 trường “Tên tài khoản” và “Địa chỉ email bạn đăng ký tài khoản”
+ Khi bạn ấn nút đặt lại mật khẩu nó sẽ hiển thị thông báo gửi đến gmail mà bạn đăng ký
Hình 3.15: Thông báo reset mật khẩu đến với gmail. Đây là thư mục gửi cho email để cài lại lại mật khẩu của hệ thống
Hình 3.16: Thư mục được gửi để cài lại mật khẩu đến gmail của hệ thống
Khi ấn vào “Click vào đây để đặt lại mật khẩu” thì tài khoản sẽ được cài lại mật khẩu và trở lại đặt mật khẩu của hệ thống.
3.4.2.2 Code thể hiện hệ thống gửi đến gmail (cài lại mật khẩu)
Hình 3.17: Code để cài lại mật khẩu mới
1 Xử lý yêu cầu POST (doPost):
Kiểm tra loại yêu cầu:
Lấy mã đặt lại và mật khẩu mới từ yêu cầu.
Gọi hàm accountService.resetPasswordFinish để hoàn tất việc đặt lại.
Nếu thành công, chuyển hướng đến trang đăng nhập với thông báo thành công.
Nếu thất bại (do lỗi thuật toán mã hóa), chuyển hướng đến trang lỗi. o Nếu không phải là "finish" (bắt đầu gửi link đặt lại):
Lấy tên người dùng, email và URL hiện tại.
Gửi email chứa link đặt lại mật khẩu bằng hàm accountService.sendEmailResetPassword.
Nếu gửi email thành công, chuyển hướng đến trang quên mật khẩu với thông báo thành công.
Nếu gửi email thất bại, chuyển hướng đến trang quên mật khẩu với thông báo lỗi (email hoặc tài khoản không tồn tại).
Kết quả phát triển chức năng hệ thống
Khi mình đã đăng nhập vào hệ thống thì hệ thống sẽ chuyển đến giao diện trang chủ cho bạn và khi bạn ấn vào username của mình nó sẽ di chuyển đến trang thông tin chi tiết các hệ thống và thông tin tài khoản của bạn
Hình 3.18: Giao diện thông tin tài khoản
Trang thông tin tài khoản của hệ thống được thiết kế khá đơn giản và sắp xếp ngăn nắp để người đọc có thể dễ dàng xem thông tin tài khoản của mình.
Hệ thống còn muốn bạn gửi ảnh thông tin căn cước công dân hoặc hộ chiếu và cả bằng lái xe ô tô của mình để gửi đến admin để admin có thể xem và xác minh chứng thực thông tin Khi được admin chứng thực và xác minh rồi thì bạn mới có thể thuê xe trên hệ thống hoặc là trở thành chủ chiếc xe mà bạn đăng ký lên hệ thống.
3.5.2.1 Danh sách thuê xe của tôi
Nó sẽ hiển thị tất cả danh sách xe bạn đã đăng ký trên hệ thống và trong trạng thái đã được phê duyệt hay chưa nếu đã được phê duyệt thì xe của bạn đã được lên danh sách xe cho thuê của hệ thống.
Hình 3.19: Giao diện danh sách xe cho thuê của chủ sở hữu xe
Trang danh sách xe của mình đăng ký lên hệ thống được hiển thị khá đầy đủ để chủ xe có thể xem và đánh giá mình ghi sai gì không.
3.5.2.2 Chi tiết xe của chủ sở hữu xe
Khi click vào con mắt gần hình ảnh xe chủ xe có thể xem lại chi tiết hình ảnh xe mình đăng ký lên hệ thống và có thể chỉnh sửa lên đó và khóa xe nếu không muốn cho xe ý thuê nữa.
Hình 3.20: Giao diện danh sách xe cho thuê của chủ sở hữu xe
Trang này nói rõ chi tiết bạn đăng ký xe lên hệ thống và trạng thái đã được phê duyệt hay không và có thể chỉnh sửa lại thông tin xe và khóa xe nếu bạn không muốn cho thuê nữa.
Còn có cả hiển thị lịch thuê xe của chiếc xe đó như thế nào để mình có thể biết và quản lý chiếc xe đó
Hình 3.21: Lịch xe của xe thuê
3.5.3 Quản lý yêu cầu thuê xe
Hình 3.22: Danh sách yêu cầu thuê xe
Hiển thị danh sách các xe mình được người dùng thuê xe của mình để sử dụng và trạng thái của nó.
3.5.3.2 Xem chi tiết yêu cầu thuê
Khi ấn vào danh mục hình ảnh xe nó sẽ hiện ra 1 trang danh sách chi tiết thuê xe của bạn và hiển thị thông tin khác thuê và căn cước công dân bằng lái xe của vị khách đó và bạn có thể xem và chấp nhận từ chối yêu cầu đó hay không
3.5.3.3 Thanh lọc xe và trạng thái danh sách yêu cầu thuê xe
Hình 3.24 : Thanh lọc trạng thái và hãng xe Đây là khi mình muốn xem trạng thái hay hãng xe nào trên danh sách yêu cầu thuê xe của mình thì hệ thống sẽ lọc thông tin cho mình và hiển thị ra danh sách người dùng mong muốn.
Hình 3.25: Giao diện đổi mật khẩu
Khi bạn muốn đổi mật khẩu khó hơn cho tài khoản của mình thì ấn vào đổi mật khẩu trên trang thông tin của hệ thống
Trang đổi mật khẩu dành cho người dùng được thiết kế tối giản, gồm 3 phần:
+ Form nhập đổi mật khẩu: Gồm 3 trường “Mật khẩu cũ” và “Mật khẩu mới” và “Nhập lại mật khẩu mới “
+ Khi ấn nút button đổi mật khẩu thì hệ thống sẽ liên kết với SQL và đổi mật khẩu luôn cho bạn
Kết quả phát triển hệ thống quản trị viên
3.6.1 Giao diện quản trị viên
Khi bạn đăng nhập vào trang quản trị viên thì hệ thống sẽ cho bạn đến giao diện xác minh giấy tờ và xác minh xe của hệ thống Trang quản trị được xây dựng giao diện rất là đơn giản và ngăn nắp để cho quản trị viên dễ dàng xem và xác minh cho hệ thống.
Hình 3.26: Giao diện quản trị viên xác minh giấy tờ
Trang quản trị được xây dựng rất đơn giản và dễ dàng Hiển thị danh sách tất cả người dùng đăng ký vào hệ thống của mình
3.6.1.2 Chi tiết người dùng được xác minh
Khi bạn ấn vào 1 tài khoản chờ duyệt nó sẽ hiển thị chi tiết thông tin và hình ảnh giấy tờ cần xác minh người dùng đó Quản trị viên có thể Chấp nhận hoặc Từ chối thông tin tài khoản này nếu kiểm tra nếu không hợp lý thi khi từ chối danh sách sẽ hiển
Hình 3.27 : Giao diện chi tiết người dùng cần xác minh
-Kiểm tra nếu không hợp lý thì khi từ chối danh sách xác minh sẽ được cập nhật và từ chối tài khoản đó và tài khoản đó không thế tìm thuê xe hay làm chủ xe cho thuê của hệ thống được
-Kiểm tra người dùng hợp lý và đúng với hình ảnh thông tin người dùng đưa ra thì quản trị viên có thể đồng ý và người dùng có thể sử dụng các chức năng của hệ thống như thuê xe, ….
Hình 3.28 : Giao diện xác minh xe của quản trị viên
Trang quản trị xác minh xe được xây dựng rất đơn giản và dễ dàng Hiển thị danh sách tất cả xe được đăng ký của chủ sở hữu xe vào hệ thống của mình
3.6.1.4 Chi tiết xe cần được xác minh
Khi mình chọn vào 1 xe trong toàn bộ danh sách xe đã được xác minh và cần xác minh thì nó sẽ hiển thị thông tin chi tiết xe và thông tin chi tiết của chủ xe để minh có thể xác minh xe một cách chính xác và cẩn thẩn
Hình 3.29: Thông tin xe và hình ảnh của chủ xe
Hình 3.30: Thông tin giấy tờ xe của người dùng -Quản trị viên có thể Chấp nhận hoặc Từ chối xe này
-Kiểm tra nếu không hợp lý thì khi từ chối danh sách xác minh sẽ được cập nhật và từ
-Kiểm tra nếu thầy hợp lý và đúng với quản trị viên đã kiêm tra và yêu cầu thì khi chấp nhận xe đó thì xe đó sẽ được lên danh sách đăng bán của hệ thống Để người dùng thuê và xem chi tiết xe và người dùng đó.
Kết luận chương
Chương III đã mô tả chi tiết quy trình phát triển và chức năng của các trang trong hệ thống VGO, bao gồm: Trang quản trị viên, trang chủ sở hữu xe hơi, trang thuê xe của người dùng Trang quản trị viên được sử dụng để kiểm tra và xác minh tài khoản và thông tin xe của người dùng Điều quan trọng là, để sử dụng các chức năng của hệ thống, người dùng phải nhận được sự chấp thuận từ quản trị viên Nếu không có sự chấp thuận này, người dùng sẽ không thể đặt thuê xe hoặc trở thành chủ sở hữu xe trên hệ thống VGO.
Một yếu tố quan trọng khác là việc xác minh thông tin xe trước khi cho phép đưa lên danh sách cho thuê Điều này đảm bảo rằng chỉ những xe đã được xác minh chính xác và hợp lý mới có thể được cho thuê, đồng thời tạo ra sự tin cậy cho người dùng khi thuê xe trên hệ thống.
Việc xác minh này giúp đảm bảo tính minh bạch, an toàn và đáng tin cậy cho hệ thống, cụ thể như sau:
Minh bạch: Người dùng có thể yên tâm rằng thông tin của họ đã được kiểm tra và xác minh bởi một bên thứ ba đáng tin cậy.
An toàn: Việc xác minh giúp ngăn chặn việc đăng ký tài khoản giả mạo hoặc thông tin xe sai lệch.
Đáng tin cậy: Người dùng có thể tin tưởng rằng chỉ những xe đã được xác minh chính xác và hợp lý mới có thể được cho thuê.
Tóm lại, việc xác minh từ quản trị viên và xác minh thông tin xe là hai yếu tố quan trọng trong việc đảm bảo tính minh bạch, an toàn và đáng tin cậy cho hệ thống VGO.Chương 3 của tài liệu đã mô tả chi tiết quy trình và chức năng của các trang trong hệ thống, từ đó khẳng định vai trò quan trọng của việc xác minh và chấp thuận từ quản trị viên Điều này giúp thầy cô hiểu rõ hơn về quy trình hoạt động của hệ thống và hiểu được ý nghĩa và tầm quan trọng của việc thiết kế như vậy.
Ngày nay, khi nhu cầu thuê xe trực tuyến đang phát triển 1 cách nhanh chóng Cùng với sự phát triển nhanh chóng của dịch vụ thuê xe này không tránh khỏi sự cạnh tranh chính vì thế sự đơn giản, tối ưu dễ sử dụng và an toàn là ưu cầu muốn có của người dùng
Bên canh đó, với sự hỗ trợ đắc lực đến từ các nền tảng công nghệ Việc xây dựng và phát triển đề tài nghiên cứu “Thiết kế phát triển ứng dụng thuê xe” trở lên dễ dàng hơn cho người phát triển phần mềm. Đồ án “Thiết kế phát triển ứng dụng thuê xe sử dụng Servlet API” đã đạt được các mục tiêu đề ra, cụ thể:
Đã phân tích và thiết kế đầy đủ các yêu cầu của hệ thống, bao gồm các chức năng chính như: đăng ký tài khoản, xác minh tài khoản, đăng ký xe, xác minh xe, tìm kiếm xe, đặt thuê xe, thanh toán, đánh giá.
Đã xây dựng mô hình hệ thống dựa trên ngôn ngữ lập trình Java Servlet, JSP/HTML/CSS/JS, MySQL để lưu trữ database và triển khai trên apache- tomcat.
Đã thiết kế đầy đủ các trang và trường hợp người dùng của hệ thống, đảm bảo tính đầy đủ, chính xác và hợp lý, đáp ứng được các yêu cầu của người dùng.
Hệ thống cho thuê xe sử dụng Servlet API được thiết kế với các tính năng chính như sau:
Tính an toàn, bảo mật: Hệ thống sử dụng xác thực hai yếu tố để đảm bảo an toàn cho tài khoản người dùng Thông tin xe cũng được xác minh bởi quản trị viên trước khi được đưa lên danh sách cho thuê.
Tính tiện lợi: Hệ thống cung cấp các chức năng tìm kiếm, đặt thuê xe, thanh toán đơn giản và dễ sử dụng.
Tính hiệu quả: Hệ thống sử dụng các công nghệ hiện đại như Java Servlet, JSP/ HTML/CSS/JS, MySQL để đảm bảo hiệu năng và khả năng mở rộng.
Tuy nhiên, hệ thống vẫn còn một số hạn chế cần được khắc phục trong tương lai, chẳng hạn như:
Chưa có chức năng đánh giá cho người dùng sau khi sử dụng dịch vụ
Chưa có chức năng thanh toán trực tuyến cho người dùng.
Chưa có chức năng đánh giá cho chủ sở hữu xe sau khi thuê xe.
Với những kết quả đạt được, đồ án đã góp phần nâng cao chất lượng dịch vụ cho thuê