Tổng quan
Khảo sát thực trạng
Nhu cầu du lịch nghỉ dưỡng đang gia tăng mạnh mẽ, đặc biệt trong giới trẻ và trung niên, nhằm giảm bớt áp lực công việc Điều này cũng phục vụ cho những công việc yêu cầu di chuyển liên tục, như tiếp viên hàng không hay các vị trí thường xuyên phải đi công tác.
Trong những năm gần đây, dịch vụ kinh doanh nhà hàng khách sạn đã phát triển mạnh mẽ và trở thành một thị trường cạnh tranh khốc liệt Để tồn tại và phát triển, các cơ sở này cần cải thiện kỹ thuật, nâng cấp cơ sở vật chất và chất lượng phục vụ Đặc biệt, việc áp dụng truyền thông online để nắm bắt xu hướng và thị hiếu người dùng là rất quan trọng, nhất là đối với các nhà hàng khách sạn quy mô vừa và nhỏ, nhờ vào tính nhanh gọn, chính xác và tiện lợi của nó.
Thiết kế website khách sạn chuyên nghiệp giúp doanh nghiệp tiếp cận khách hàng tiềm năng nhanh chóng, đồng thời truyền tải thông điệp về sản phẩm và dịch vụ một cách trực quan và sinh động.
Nhiệm vụ đồ án
Hệ thống đặt phòng online được xây dựng với các chức năng quản lý hiệu quả như thêm, xóa và sửa thông tin phòng cho quản lý khách sạn Người dùng có thể dễ dàng đặt phòng, xem thông tin phòng, cũng như theo dõi các khuyến mãi và dịch vụ đi kèm khi thực hiện đặt phòng.
-Xây dựng giao diện đẹp, trực quan, dễ sử dụng
-Bảo mật thông tin khách hàng, đảm bảo khách hàng có một trải nghiệm nhanh chóng và toàn vẹn nhất
-Tối thiểu lỗi xảy ra khi sử dụng
1.2.2 Đối tượ ng sử dụng
Hệ thống đặt phòng online được tạo ra nhằm cho các đối tượng sau sử dụng và các quyền như sau :
Khách hàng là những người đặt phòng, có khả năng xem thông tin về các phòng, tiện ích, dịch vụ và voucher giảm giá Họ cũng là những người sử dụng chức năng đặt phòng và thanh toán.
Quản lý khách sạn bao gồm vai trò của Admin, người có khả năng thêm, xóa và sửa đổi các phòng, dịch vụ cũng như mã giảm giá Admin cũng có thể xem thông tin khách hàng và điều chỉnh thông tin đặt phòng của khách một cách linh hoạt.
Quy trình thêm, xóa, sửa phòng chỉ dành cho quản lý khách sạn Sau khi nhận tài khoản với tên đăng nhập và mật khẩu, quản lý sẽ được đưa đến trang chủ của khách sạn, nơi có thêm phần quản lý khách sạn Khi nhấp vào mục này, một trang sẽ hiện ra với tất cả các tỉnh thành mà hệ thống khách sạn có mặt, cho phép quản lý chọn khách sạn phù hợp.
Sau khi truy cập, một trang sẽ hiển thị tất cả các phòng của khách sạn Quản lý có quyền tự do thêm, xóa hoặc sửa đổi thông tin phòng, đồng thời có thể đặt phòng vào trạng thái nghỉ để sửa chữa, nâng cấp hoặc khi đã có khách đặt trước.
Quy trình đặt phòng yêu cầu người dùng đăng ký tài khoản để quản lý và xác thực danh tính, nhằm bảo vệ hệ thống khỏi các hành vi phá hoại và hack Sau khi đăng nhập, người dùng có thể xem tất cả các phòng và tiện nghi Để đặt phòng, người dùng cần thực hiện các bước sau: chọn địa điểm, chọn khách sạn, chọn phòng với thông tin về số giường, số người, tiện nghi, vị trí và giá; chọn ngày nhận và ngày trả; nhập thông tin cá nhân; xác nhận thông tin đặt phòng; chọn phương thức thanh toán; và thực hiện thanh toán Nếu chọn thanh toán khi nhận phòng, người dùng phải trả trước 10% giá trị phòng để giữ chỗ Sau khi hoàn tất, hệ thống sẽ cung cấp mã code để người dùng xuất trình cho nhân viên khi đến nhận phòng.
1.2.4 Các bướ c hoàn thành dự án
Phân tích thiết kế hệ thống
1.2.5 Các chức năng đã làm đượ c
Thêm, xóa, sửa khách sạn
1.2.6 Các chức năng chưa làm được và định hướ ng
Thanhtoán bằng ví điện tử
Xử lí khi phòng đó đã đặt thì sẽ như thế nào.
Cấu trúc đồ án
Nêu thực trạng mà hệ thống đặt phòng online, mô tả nghiệp vụ của hệ thống để có thể thiết kế phần mền một cách hiệu quả
Phần 2 : Cơ sở lí thuyết
Các công nghệ được sử dụng trong đồ án, bản vẽ thiết kế phần mền, cơ sở dữ liệu ERD, Use Case, Các diagram,
Chạy hệ thống và xem các chức năng có chạy như đúng thiết kế hay không, có dễ sử dụng hay không
Phần 4: Kết luận Đưa ra kết quả, các mong muốn phát triển phần mềm, ưu nhược điểm của hệ thống.
Cơ sở lý thuyết
Tổng quan về Spring Boot
2.1.1 Ngôn ngữ lập trình Java a Java là gì?
Java là ngôn ngữ lập trình hướng đối tượng phổ biến, được áp dụng rộng rãi trong phát triển phần mềm, trang web, trò chơi và ứng dụng di động.
Java được phát triển với nguyên tắc "Viết một lần, chạy mọi nơi" (WORA), cho phép phần mềm viết bằng Java hoạt động trên nhiều nền tảng khác nhau Điều này chỉ khả thi khi có môi trường thực thi phù hợp hỗ trợ nền tảng đó.
Java hướng đối tượng hoàn toàn, sử dụng cú pháp tương tự như C và C++, nhưng loại bỏ thao tác với con trỏ để tăng tính an toàn và dễ sử dụng Ngoài ra, các thao tác như Overload, goto, cũng như cấu trúc Struct và union đều không có trong Java.
Java là một ngôn ngữ lập trình độc lập về phần cứng và hệ điều hành, cho phép các chương trình chạy mượt mà trên nhiều môi trường khác nhau, được gọi là cross-platform Điều này được thể hiện ở cả hai cấp độ: mã nguồn và mã nhị phân.
Ngôn ngữ thông dịch được chia thành hai loại chính: thông dịch, nơi mã lệnh được dịch và thực thi từng bước, và biên dịch, trong đó mã lệnh được chuyển đổi thành một file có thể sử dụng lại mà không cần biên dịch lại Java là một ngôn ngữ đặc biệt, thuộc loại vừa thông dịch vừa biên dịch, cho phép linh hoạt trong việc thực thi mã lệnh.
Cơ chế thu gom rác tự động trong Java cho phép JRE tự động cấp phát không gian bộ nhớ cho các đối tượng trên heap khi chúng được tạo ra.
Java hỗ trợ lập trình đa tiến trình (multithreading), cho phép thực thi các công việc đồng thời một cách hiệu quả Ngôn ngữ này cũng cung cấp các giải pháp đồng bộ hóa giữa các tiến trình, chẳng hạn như sử dụng độ ưu tiên (priority) để quản lý tài nguyên.
-Tính an toàn và bảo mật c.Ứ ng d ụng của Java
Các ứng dụng tiêu biểu của Java như sau:
Làm hệ thống giao dịch trong ngành dịch vụ tài chính
Làm phần mềm phát triền ( IDE )
Làm ứng dụng giao dịch
Hình 2.3: Các ứ ng d ụ ng c ủ a Java d Các thành phần của Java.
- JRE ( Java Runtime Enviroment) : cung cấp JVM ( Java Vitural Michine) và thư viện được sử dụng để chạy chương trình Java
JDK (Java Development Kit) là bộ công cụ phát triển Java, bao gồm trình biên dịch và trình gỡ rối, được sử dụng để phát triển ứng dụng Java Bên cạnh đó, JDK còn có nhiều phiên bản khác nhau, phục vụ cho nhu cầu phát triển đa dạng của lập trình viên.
Java Standard Edition (Java SE) serves as a fundamental platform for developing console interfaces, network applications, and Win Form applications.
- Java Enterprise Edition (Java EE) – Được xây dựng trên nền tảng Java SE, giúp phát triển các ứng dụng web, các ứng dụng ở cấp doanh nghiệp, …
- Java Mobile Edition (Java ME) – Là một nền tảng cho phép phát triển các ứng dụng nhúng vào các thiết bị điện tử như mobile,…
2.1.2 Spring Boot a Spring Boot là gì?
Spring Boot hiện nay là một trong những framework phổ biến nhất cho phát triển ứng dụng Java Được xây dựng trên nền tảng Spring framework, Spring Boot không chỉ kế thừa tất cả các tính năng của Spring mà còn mang lại nhiều tiện ích như giảm thiểu cấu hình phức tạp, tự động nhúng server container (Tomcat, Jetty hoặc Undertow) vào ứng dụng, cho phép khởi chạy ứng dụng ngay lập tức và quản lý dependency một cách thông minh Để phát triển một ứng dụng web cơ bản HelloWorld sử dụng Spring framework, bạn sẽ cần thực hiện ít nhất 5 công đoạn.
Tạo một project sử dụng Maven với các dependency cần thiết của Spring
Một tập tin web.xml để khai báo DispatcherServlet của Spring MVC
Một tập tin cấu hình của Spring MVC
Một class Controller trả về một trang “Hello World” khi có request đến
Cuối cùng là phải có một web server dùng để triển khai ứng dụng lên chạy
Hình 2.6: Cách t ổ ch ứ c Spring Boot
Với Spring Boot, việc tạo dự án Spring trở nên nhanh chóng và dễ dàng hơn bao giờ hết, cho phép lập trình viên sử dụng Sublime Text mà không cần cài đặt các IDE nặng như Eclipse hay NetBeans Spring Boot nổi bật với các tính năng và đặc điểm giúp đơn giản hóa quá trình phát triển ứng dụng.
Hình 2.7: Các tính năng Spring Boot
Dưới đây là một số tính năng nổi bật của Spring Boot:
Tạo các ứng dụng Spring độc lập
Nhúng trực tiếp Tomcat, Jetty hoặc Undertow (không cần phải deploy ra file WAR)
Các starter dependency giúp việc cấu hình Maven đơn giản hơn
Tự động cấu hình Spring khi cần thiết
Không sinh code cấu hình và không yêu cầu phải cấu hình bằng XML …
Một số tính năng quan trọng:
Khi hoàn thành lập trình, bạn có thể dễ dàng chạy thử nghiệm bằng cách gọi phương thức run() trong SpringApplication Spring Boot được thiết kế với nguyên tắc "just run", giúp lập trình viên giảm thiểu cấu hình và để Spring Boot tự động xử lý phần còn lại.
Cấu hình bên ngoài: Nếu bạn muốn phát triển một ứng dụng có khả năng hoạt động trên nhiều môi trường khác nhau, Spring Boot sẽ hỗ trợ bạn trong việc cấu hình từ bên ngoài, giúp ứng dụng của bạn hoạt động linh hoạt và hiệu quả.
Profiles: Nếu có nhiều config khác nhau, bạn có thể sử dụng Profile để phân chia từng loại cho từng môi trường để dễ dàng quản lý hơn
Logging: Tính năng này được sử dụng cho toàn bộ chức năng log trong phạm vi nội bộ và nó được quản lý mặc định
Hình 2.8: Các đặc điể m c ủ a Spring Boot Đặc điểm của Spring Boot:
Được phát triển tối ưu sao cho cấu hình XML trở nên đơn giản nhanh chóng và dễ dàng nhất trong Spring
Gia tăng được năng suất trong quá trình lập trình
Giảm ở mức tối thiểu thời gian lập trình
Spring Boot giúp người dùng, ngay cả những người không có nhiều kiến thức lập trình, xây dựng ứng dụng một cách dễ dàng Ưu điểm của Spring Boot bao gồm khả năng cấu hình tự động, giảm thiểu mã nguồn và tăng tốc độ phát triển ứng dụng Tuy nhiên, cũng có một số nhược điểm như kích thước ứng dụng lớn và khó khăn trong việc tùy chỉnh cho các dự án phức tạp.
Tự động cấu hình tất cả các components cho một ứng dụng Spring cấp sản xuất
Các máy chủ nhúng được tạo sẵn (Tomcat, Jetty và Undertow), dẫn đến việc triển khai ứng dụng được tăng tốc và hiệu quả hơn
Không có cấu hình XML
Dễ dàng truy cập cơ sở dữ liệu và các dịch vụ hàng đợi như MySQL,
Oracle, MongoDB, Redis, ActiveMQ và các dịch vụ khác
Tích hợp trơn tru với hệ sinh thái Spring
Cộng đồng lớn và rất nhiều hướng dẫn, tạo điều kiện cho giai đoạn làm quen.
Thiếu kiểm soát Do style cố định, Spring Boot tạo ra nhiều phụ thuộc không được sử dụng dẫn đến kích thước tệp triển khai lớn
Quá trình chuyển đổi dự án Spring cũ hoặc hiện có thành các ứng dụngSpring Boot nhiều khó khăn và tốn thời gian.
Tổng quan ReactJS
ReactJS là một thư viện JavaScript mã nguồn mở được phát triển bởi Facebook và ra mắt vào năm 2013, giúp xây dựng các tương tác cho website Điểm nổi bật của ReactJS là khả năng render dữ liệu không chỉ trên server mà còn trên client, mang lại hiệu suất và trải nghiệm người dùng tốt hơn.
Để tăng tốc quá trình phát triển và giảm thiểu rủi ro khi lập trình, React cung cấp khả năng tái sử dụng code thông qua hai khái niệm quan trọng: JSX và Virtual DOM.
JSX (nói ngắn gọn là JavaScript extension) là một React extension giúp chúng ta dễ dàng thay đổi cây DOM bằng các HTML-style code đơn giản.
Kể từ khi ReactJS hỗ trợ tất cả các trình duyệt web hiện đại, bạn có thể yên tâm sử dụng JSX trên bất kỳ trình duyệt nào mà bạn đang làm việc.
Nếu không sử dụng ReactJS và JSX, website của bạn sẽ phụ thuộc vào HTML để cập nhật cây DOM, một quá trình tự nhiên mà không cần tải lại trang Phương pháp này phù hợp với các website nhỏ và tĩnh, nhưng với các website lớn có nhiều tương tác người dùng, hiệu suất sẽ bị ảnh hưởng nghiêm trọng do toàn bộ cây DOM phải được tải lại mỗi khi người dùng thực hiện một tính năng yêu cầu tải lại trang.
Việc cập nhật đúng chỗ giúp tiết kiệm tài nguyên và thời gian xử lý, đặc biệt quan trọng đối với các website lớn và phức tạp như thương mại điện tử hay đặt món ăn Điều này không chỉ nâng cao trải nghiệm của khách hàng mà còn cải thiện hiệu suất một cách đáng kể.
2.2.4 Ưu và nhược điểm của ReactJS. a Ưu điể m
ReactJS phù hợp với nhiều loại website, giúp việc khởi tạo trang web trở nên đơn giản hơn Bạn không cần phải viết nhiều mã như khi sử dụng thuần JavaScript và HTML, và ReactJS cung cấp nhiều công cụ hữu ích cho các tình huống khác nhau.
Tái sử dụng các Component là một chiến lược hiệu quả giúp tiết kiệm thời gian phát triển trong các dự án khác nhau Khi bạn xây dựng các Component đủ tốt và linh hoạt, chúng có thể đáp ứng nhiều yêu cầu khác nhau, cho phép bạn sử dụng lại hầu hết các phần đã phát triển trước đó Điều này không chỉ áp dụng cho ReactJS mà còn cho nhiều framework hiện nay, như Flutter, giúp tối ưu hóa quy trình phát triển phần mềm.
ReactJS không chỉ dành cho lập trình website mà còn hỗ trợ phát triển ứng dụng di động Để phát triển ứng dụng Mobile, bạn có thể sử dụng React Native, một framework khác do Facebook phát triển, giúp bạn dễ dàng chia sẻ mã nguồn giữa các nền tảng.
Component hoặc sử dung lại các Business Logic trong ứng dụng
SEO là yếu tố quan trọng giúp website của bạn xuất hiện ở vị trí cao trên kết quả tìm kiếm của Google Mặc dù ReactJS là một thư viện JavaScript mà Google có khả năng crawl và index, bạn vẫn cần sử dụng thêm một số thư viện hỗ trợ để tối ưu hóa quá trình này.
Facebook đã phát hành một tiện ích mở rộng Chrome giúp dễ dàng debug trong quá trình phát triển ứng dụng, từ đó tăng tốc độ phát hành sản phẩm và cải thiện quy trình lập trình của bạn.
ReactJS chỉ tập trung vào việc xây dựng tầng View và không phải là một framework MVC như các framework khác Là một thư viện do Facebook phát triển, React chỉ đảm nhiệm việc render phần giao diện Do đó, để hoàn thiện ứng dụng, React cần kết hợp với các thư viện khác để bổ sung phần Model và Controller, đồng thời không hỗ trợ 2-way binding hay Ajax.
Tích hợp Reactjs vào các framework MVC truyền thống yêu cầu cần phải cấu hình lại
React khá nặng nếu so với các framework khác React có kích thước tương tương với Angular (Khoảng 35kb so với 39kb của Angular) Trong khi đó
Angular là một framework hoàn chỉnh
Khó tiếp cận cho người mới học Web.
Hình 2.15: Các ưu và nhược điể m c ủ a ReactJS
RestFul API
API (Giao diện lập trình ứng dụng) là tập hợp các định nghĩa và giao thức cần thiết để xây dựng và tích hợp phần mềm ứng dụng Nó được coi như một "hợp đồng" giữa nhà cung cấp thông tin và người dùng, thiết lập các yêu cầu (call) từ người dùng và phản hồi (response) từ nhà cung cấp Ví dụ, một API thiết kế cho dịch vụ thời tiết có thể yêu cầu người dùng nhập mã bưu chính (zip code), sau đó nhà cung cấp sẽ trả về thông tin về nhiệt độ tại khu vực đó.
REST là một tập hợp các ràng buộc kiến trúc mà các nhà phát triển API có thể triển khai theo nhiều cách khác nhau Khi một yêu cầu từ client được tạo ra, nó sẽ tuân theo các nguyên tắc của REST để đảm bảo tính hiệu quả và khả năng mở rộng của hệ thống.
RESTful API chuyển đổi trạng thái của tài nguyên đến người yêu cầu thông qua endpoint, và thông tin này có thể được truyền tải dưới nhiều định dạng khác nhau.
JSON là định dạng file phổ biến nhất hiện nay, nhờ vào tính chất ngôn ngữ bất khả tri, cho phép cả con người và máy móc dễ dàng đọc hiểu Các định dạng khác như HTML, XLT, Python, PHP và plain text cũng được sử dụng, nhưng JSON nổi bật hơn trong việc trao đổi dữ liệu.
Hình 2.18: RestFul API là gì?
RESTful API (hay REST API) là một giao diện lập trình ứng dụng (API hay web
RESTful API tuân thủ các nguyên tắc của kiến trúc REST, cho phép tương tác hiệu quả với các dịch vụ web Được thiết kế để quản lý các resource trong ứng dụng web, RESTful API là tiêu chuẩn quan trọng trong phát triển Web Services REST, viết tắt của Representational State Transfer, được phát triển bởi nhà khoa học máy tính Roy Fielding vào những năm 2000.
RESTful API chia giao dịch thành nhiều module nhỏ, mỗi module giải quyết một phần cơ bản, giúp tăng tính linh hoạt nhưng cũng gây khó khăn cho các developer khi thiết kế từ đầu Hiện nay, nhiều công ty cung cấp model cho developer, phổ biến nhất là Amazon S3, CDMI và OpenStack Swift Một RESTful API sử dụng các câu lệnh để lấy tài nguyên và trạng thái của tài nguyên tại bất kỳ thời điểm nào, được gọi là biểu diễn của tài nguyên đó Các phương thức HTTP mà RESTful API sử dụng được xác định bởi giao thức RFC 2616.
Hình 2.19: Cách ho ạt độ ng API
GET: Trả về một tài nguyên
PUT: Thay đổi trạng thái hoặc cập nhật tài nguyên (có thể là đối tượng, file hay block).
DELETE: Xoá một tài nguyên
Một số định dạng dữ liệu được RESTful API hỗ trợ:
Hình 2.20: Cách giao ti ế p gi ữ a Client và Server
phpMyAdmin
2.4.1 phpMyAdmin là gì? phpMyAdmin là một công cụ nguồn mở, được viết bằng ngôn ngữ PHP Vai trò của nó là giúp người dùng quản lý cơ sở dữ liệu(CSDL) của MySQL, được thực hiện thông qua một trình duyệt web.Đây là công cụ quản trị MySQL phổ biến nhất, được sử dụng bởi hàng triệu người dùng khác nhau trên toàn thế giới Đặc biệt, phpMyAdmin là lựa chọn hàng đầu của những nhà quản trị cơ sở dữ liệu, database và administrator
2.4.2 Các tính năng của phpMyAdmin.
Người dùng thường sử dụng những tính năng chung của phpMyadmin như sau:
Quản lý user – người dùng: Thêm, xóa, sửa thông tin, phân quyền cho người dùng
Quản lý CSDL ( import/Export): Hỗ trợ các định dạng phpmyadmin mysql,
Quản lý CSDL: Tạo mới, xóa, sửa, thêm hàng, thêm bảng, thêm trường, tìm kiếm đối tượng phù hợp với truy xuất
Thực hiện những truy vấn MySQL, tiến hành giám sát quá trình và theo dõi các truy vấn đó
Tiến hành sao lưu và khôi phục thông qua những thao tác thủ công.
2.4.3 Ưu và nhược điểm của phpMyAdmin. a Ưu điể m.
phpMyAdmin là công cụ quản lý cơ sở dữ liệu hiệu quả, giúp người dùng thực hiện các thao tác một cách trực quan, tiết kiệm thời gian so với việc sử dụng dòng lệnh Được phát triển bởi phpMyAdmin Project, phần mềm mã nguồn mở này hỗ trợ 64 ngôn ngữ khác nhau, giúp người dùng dễ dàng làm quen và sử dụng.
Về vấn đề bảo mật, phpMyAdmin và nhiều mã nguồn mở khác thường gặp hạn chế lớn trong khả năng bảo vệ dữ liệu Người dùng cần chú ý hạn chế truy cập vào URL của phpMyAdmin từ các địa chỉ IP cố định để tăng cường an ninh cho hệ thống.
Mặc dù phpMyAdmin là một công cụ phổ biến để quản lý cơ sở dữ liệu, nhưng hiện tại vẫn còn một số nhược điểm liên quan đến việc sao lưu dữ liệu mà chưa được khắc phục.
Sơ đồ thiết kế phần mềm
2.5.1 Sơ đồ thự c thể kết hợ p ( ERD – Entity Relationship Diagram)
Tai_Khoan ( id_Tai_Khoan, username, email, Pass_word, Phone).
Hoa_Don (id_Hoa_Don, NgayDat, NgayNhan, NgayTra, CMND, TenNguoiDat, Ghi_Chu, Phone, id_Tai_Khoan).
Room ( id_Room, ten_Room, Dien_Tich, img, Mota, So_Luong, Price, id_Hotel).
Tien_Ich (id_Tien_ich, Ten_Tien_Ich, img).
Hotel (id_Hotel, TenHotel, Dia_Chi, img, Mota, email, Phone, id_Province).
Roles( id_Role, Ten_id_Role).
Province ( id_Province, Ten_Province, img).
User_Role (id_Tai_Khoan, id_Role).
Room_TienIch ( id_Room, id_Tien_Ich).
CT_HoaDon ( id_Hoa_Don, id_Room, Price, SLDat).
2.5.2 Sơ đồ Use Case a Use Case t ổ ng quát
Hình 2.26: Use Case t ổ ng quát b Use Case quản lí khách sạn
Hình 2.28: Use case qu ả n lí Khách s ạ n c Use Case quản lí phòng
Hình 2.27: Use Case qu ả n lí phòng
2.5.3Sơ đồ hoạt động ( Activity Diagram ) a Activity cậ p nhật phòng.
Hình 2.28: C ậ p nh ậ t phòng b Activityđặt phòng.