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

Đồ án được thực hiện trong bối cảnh thương mại điện tử và dịch vụ đặt đồ ăn trực tuyến ngày càng phổ biến tại Việt Nam. Tác giả xác định năm lý do chính để lựa chọn đề tài: (1) xu hướng đặt đồ ăn qua Internet đang trở nên phổ biến và tạo cơ hội kinh doanh lớn; (2) thị trường đặt đồ ăn nhanh có mức độ cạnh tranh cao, đòi hỏi sự sáng tạo và khác biệt; (3) ngành công nghiệp đồ ăn nhanh có tiềm năng tăng trưởng và lợi nhuận cao; (4) đề tài cung cấp cơ hội thực hành các kỹ năng lập trình và phát triển web; (5) website tạo kênh tương tác với khách hàng thông qua chức năng đánh giá, nhận xét và phản hồi. Tác giả cũng tham chiếu các nền tảng đặt đồ ăn trực tuyến đang hoạt động trên thị trường như Now để làm cơ sở khảo sát.

Mục tiêu nghiên cứu:

  • Xây dựng giao diện người dùng thân thiện và dễ sử dụng
  • Đáp ứng nhu cầu đa dạng của người dùng bằng cách cung cấp danh sách đa dạng các món ăn
  • Tối ưu hóa hiệu suất và độ tin cậy của trang web

Nhiệm vụ nghiên cứu:

  1. Nghiên cứu đề tài
  2. Phân tích và thiết kế hệ thống
  3. Thiết kế và xây dựng website

Đối tượng nghiên cứu: Khách hàng thường xuyên đặt đồ ăn, quản lý và nhân viên cửa hàng, cùng các tài liệu kỹ thuật liên quan.

Phạm vi nghiên cứu: Website được thiết kế phù hợp cho các cửa hàng có quy mô nhỏ, tập trung vào lĩnh vực thiết kế website và hoạt động bán, quản lý đồ ăn. Không giới hạn thời gian địa lý cụ thể — phạm vi được xác định theo loại hình nghiệp vụ (quản lý đơn hàng, danh mục món ăn, tài khoản người dùng).


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

Công nghệ và framework sử dụng

Đồ án áp dụng kiến trúc MVC (Model–View–Controller) theo mô hình Server Side Rendering. Theo mô hình này, người dùng gửi HTTP Request qua trình duyệt, bộ Routing điều hướng tới Controller tương ứng; Controller kiểm tra và lấy dữ liệu từ Model nếu cần, sau đó chuyển kết quả tới View để xây dựng nội dung hiển thị và trả về cho trình duyệt.

Ngôn ngữ lập trình và công nghệ:

Thành phần Công nghệ
Backend Java (Spring Boot / Spring Framework)
Frontend HTML, CSS, JavaScript
Template engine Thymeleaf
UI framework Bootstrap 4
Hệ quản trị CSDL MySQL (RDBMS — mô hình client-server)
IDE IntelliJ IDEA
Công cụ thiết kế StarUML (sơ đồ use case, sơ đồ hoạt động, ERD)

Spring Boot được chọn vì khả năng tự cấu hình tự động (auto-configuration), tích hợp sẵn các thư viện như Spring MVC, Spring Data, Spring Security và Hibernate, đồng thời cung cấp cơ chế quản lý phụ thuộc thông qua Spring Boot Starter. Các nguyên tắc thiết kế được vận dụng gồm IoC (Inversion of Control), Dependency Injection (DI), AOP (Aspect-Oriented Programming) và ORM (Object-Relational Mapping) thông qua JPA.

Thymeleaf được sử dụng làm template engine, tích hợp trực tiếp với Spring MVC để tạo các trang web động, hỗ trợ bảo mật chống XSS và CSRF.

MySQL được chọn làm hệ quản trị cơ sở dữ liệu do tốc độ cao, tính ổn định, bảo mật tốt và phù hợp cho ứng dụng có truy cập cơ sở dữ liệu qua Internet.

Phương pháp nghiên cứu

  • Tham khảo và phân tích các website đặt đồ ăn nhanh hiện có trên thị trường
  • Khảo sát thực tế quy trình nghiệp vụ của cửa hàng đồ ăn nhanh
  • Tìm kiếm và tổng hợp tài liệu kỹ thuật trên Internet liên quan đến Spring Boot, Thymeleaf, MySQL
  • Thu thập tài liệu liên quan đến nghiệp vụ quản lý website đặt đồ ăn nhanh
  • Áp dụng phương pháp phân tích và thiết kế hệ thống hướng đối tượng (use case, ERD)

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

Chương 1: Cơ sở lý thuyết

Chương này trình bày nền tảng lý thuyết và công nghệ được sử dụng trong toàn bộ đồ án. Tác giả giới thiệu HTML (chuẩn do W3C duy trì, đang phát triển tiếp với phiên bản HTML5), CSS (ngôn ngữ định dạng phần tử, phát triển bởi W3C cho Front-end), JavaScript, và ngôn ngữ lập trình Java (được tạo bởi James Gosling tại Sun Microsystems, có tính đa nền tảng, chạy được trên Windows, macOS, Linux và nhiều thiết bị khác nhau).

Phần hệ quản trị cơ sở dữ liệu trình bày MySQL là RDBMS hoạt động theo mô hình client-server, là hệ quản trị mã nguồn mở phổ biến nhất thế giới, phù hợp cho ứng dụng web do tốc độ cao và bảo mật tốt. Phần framework đi sâu vào Spring Boot với các ưu điểm về IoC, DI, AOP, ORM, Transaction Management và Testability (hỗ trợ JUnit và Mockito). Thymeleaf được trình bày với đặc điểm tích hợp tốt với Spring Framework, cú pháp dựa trên HTML, khả năng xem trước template. Bootstrap 4 được giới thiệu là framework HTML/CSS/JavaScript hỗ trợ thiết kế website responsive trên mobile, tablet và máy tính. Chương kết thúc bằng phần lý thuyết về mô hình MVC Server Side Rendering.

Chương 2: Phân tích thiết kế hệ thống

Chương này xác định ba tác nhân chính của hệ thống: Khách vãng lai, Khách hàng và Quản trị viên, sau đó đặc tả yêu cầu nghiệp vụ và yêu cầu phần mềm cho từng tác nhân.

Khách vãng lai có thể tìm kiếm món ăn theo tên, xem thông tin tổng quan website, xem thông tin đồ ăn (tên, chi tiết, giá tiền) và đăng ký tài khoản thành viên. Khách hàng kế thừa toàn bộ chức năng của khách vãng lai, bổ sung thêm đăng nhập/đăng xuất, reset tài khoản qua Gmail, cập nhật thông tin tài khoản, thêm món vào giỏ hàng, đặt hàng và thanh toán, xem danh sách và chi tiết đơn hàng đã mua. Quản trị viên có quyền cao nhất, bao gồm quản lý danh mục món (thêm/sửa/xóa), quản lý thông tin món (thêm/sửa/xóa, lọc theo tên), quản lý đơn hàng (xem, thay đổi tình trạng: chấp nhận/đang giao hàng/hủy bỏ, gửi thông báo về cho khách hàng), quản lý tài khoản người dùng (xem/xóa) và quản lý nhân viên (thêm/sửa/xóa).

Chương trình bày 10 kịch bản use case chi tiết bao gồm: tìm kiếm món ăn, xem thông tin món ăn, đăng ký tài khoản thành viên, đăng nhập trang người dùng, cập nhật thông tin tài khoản, đặt hàng, đăng nhập trang quản trị, quản lý danh mục món, quản lý đơn hàng và quản lý tài khoản khách hàng. Mỗi kịch bản được mô tả đầy đủ với basic flow, alternative flow và exception flow.

Phần thiết kế cơ sở dữ liệu xác định các bảng chính gồm:

Bảng Mô tả Các thuộc tính chính
membership Thông tin khách hàng id (PK), name, email, birthday, address, gender, imgUrl, phone_number
account Tài khoản đăng nhập id (PK), password, username
order Đơn hàng id (PK), buyer_name, day, time, phone_number, price_total, note, membership_id (FK)
items Danh mục món ăn id (PK), name, price, imgurl, status (1: còn/2: hết), type (1: món ăn/2: đồ uống), detail
employee Nhân viên id (PK), address, birthday, email, gender, account_id (FK), imgurl, name, phone_number

Chương 3: Xây dựng chương trình

Chương này trình bày kết quả triển khai thực tế của hệ thống thông qua các giao diện đã xây dựng.

Phía người dùng (Khách vãng lai và Khách hàng): Giao diện trang chủ khi chưa đăng nhập hiển thị tổng quan hệ thống với một số chức năng bị hạn chế. Sau khi đăng nhập, người dùng mở khóa toàn bộ chức năng. Hệ thống cung cấp giao diện thông tin cá nhân cho phép xem và chỉnh sửa, giao diện giỏ hàng cho phép thêm/sửa/xóa món, và giao diện chi tiết đơn hàng hiển thị khi nhấn vào mã đơn hàng trong danh sách.

Phía quản trị viên: Giao diện chính trang quản trị là màn hình tổng quan sau khi đăng nhập thành công. Hệ thống cung cấp các giao diện quản lý thông tin hàng hoá (danh sách món ăn, danh sách thức uống, thêm mới và sửa món), giao diện quản lý thành viên (danh sách, thêm mới, sửa thông tin), giao diện quản lý nhân viên (danh sách, thêm mới, sửa thông tin) và giao diện quản lý đơn hàng.


Thiết kế và triển khai

Kiến trúc hệ thống

Hệ thống được xây dựng theo kiến trúc MVC Server Side Rendering với Spring Boot làm nền tảng backend. Luồng xử lý request hoạt động theo trình tự: trình duyệt gửi HTTP Request → bộ Routing điều hướng tới Controller tương ứng → Controller xử lý logic và lấy dữ liệu từ Model → Controller truyền dữ liệu tới View (Thymeleaf template) → View trả về HTML đầy đủ cho trình duyệt hiển thị.

Công nghệ triển khai

  • Backend: Java với Spring Boot, áp dụng Spring MVC, Spring Data (JPA/Hibernate), Spring Security
  • Frontend: HTML, CSS, JavaScript, Bootstrap 4, Thymeleaf
  • Cơ sở dữ liệu: MySQL với 5 bảng chính (membership, account, order, items, employee)
  • IDE: IntelliJ IDEA (hỗ trợ tích hợp Spring, Maven/Gradle, gỡ lỗi trực tiếp)
  • Công cụ thiết kế: StarUML (vẽ use case, sơ đồ hoạt động, ERD)

Cấu trúc phân quyền

Hệ thống phân quyền ba cấp: khách vãng lai (chỉ xem và đăng ký), khách hàng (đặt hàng và theo dõi đơn), quản trị viên (toàn quyền quản lý). Tài khoản quản trị viên được cấp sẵn, không cho phép tự đăng ký.

Kiểm thử

Tác giả đề cập đến việc kiểm thử website như một bước trong quy trình phát triển. Spring Boot cung cấp hỗ trợ tích hợp cho JUnit và Mockito. Kết quả kiểm thử được thể hiện qua các giao diện hoàn chỉnh được trình bày trong Chương 3.


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

Kết quả chính

Đồ án hoàn thành một website đặt đồ ăn nhanh đầy đủ chức năng với hai phân hệ riêng biệt: giao diện người dùng và trang quản trị. Các chức năng cốt lõi được triển khai bao gồm:

  • Tìm kiếm món ăn theo tên và lọc theo danh mục
  • Đặt hàng và quản lý giỏ hàng
  • Theo dõi tình trạng đơn hàng theo thời gian thực (chấp nhận → đang giao hàng → hoàn thành/hủy bỏ)
  • Quản lý toàn bộ danh mục và thông tin món ăn (phân loại theo type: món ăn / đồ uống; status: còn / hết)
  • Quản lý tài khoản thành viên và nhân viên
  • Hệ thống thông báo hai chiều giữa quản trị viên và khách hàng khi trạng thái đơn hàng thay đổi

Giải pháp đề xuất

Tác giả xây dựng phương thức thanh toán trực tiếp (khách hàng thanh toán sau khi nhận hàng) và tích hợp khung cho thanh toán trực tuyến. Đơn hàng bị từ chối có kèm thông báo lý do gửi về khách hàng.

Đóng góp

Đồ án cung cấp một bộ mã nguồn hoàn chỉnh cho website đặt đồ ăn nhanh sử dụng Spring Boot và Thymeleaf — kết hợp công nghệ ít phổ biến hơn so với các đồ án cùng loại thường dùng PHP/Laravel. Đồng thời đồ án có giá trị thực hành vì toàn bộ thiết kế hướng tới quy mô cửa hàng nhỏ, dễ triển khai thực tế.


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

Theo phạm vi tác giả xác định, website phù hợp cho các cửa hàng có quy mô và hình thức hoạt động nghiệp vụ nhỏ, chưa hướng đến mô hình đa nhà hàng hoặc nền tảng tập hợp nhiều đối tác kinh doanh như các ứng dụng thương mại hiện có.

Tác giả đề cập một số hướng phát triển tiềm năng trong lời nói đầu:

  • Mở rộng tính năng tương tác với khách hàng (đánh giá, nhận xét, phản hồi)
  • Cải thiện hệ thống thanh toán trực tuyến
  • Tối ưu hóa thêm về hiệu suất và độ tin cậy

Dựa trên phạm vi hiện tại, các hướng mở rộng tự nhiên bao gồm tích hợp cổng thanh toán điện tử thực tế, bổ sung chức năng đánh giá món ăn, và nâng cấp hệ thống thông báo sang thời gian thực (WebSocket).


Giá trị tham khảo

Đồ án phù hợp làm tài liệu tham khảo cho:

  • Sinh viên ngành Công nghệ thông tin năm cuối đang thực hiện đồ án tốt nghiệp về phát triển web với Java/Spring Boot, đặc biệt là những sinh viên chưa có kinh nghiệm thực tế với Spring MVC và Thymeleaf.
  • Người học tự học Spring Boot muốn xem một dự án hoàn chỉnh từ khâu phân tích use case, thiết kế cơ sở dữ liệu đến triển khai giao diện.
  • Sinh viên làm đề tài tương tự trong lĩnh vực thương mại điện tử quy mô nhỏ (quản lý bán hàng, đặt dịch vụ trực tuyến) — phần thiết kế use case và kịch bản 10 use case, cùng thiết kế 5 bảng cơ sở dữ liệu có thể làm mẫu tham chiếu.
  • Người muốn hiểu kiến trúc MVC Server Side Rendering trong môi trường Spring Boot — Chương 1 và phần lý thuyết mô hình MVC là phần đáng đọc trước.

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

1. Hệ thống có bao nhiêu loại tác nhân và mỗi tác nhân có những quyền gì? Hệ thống có ba tác nhân: Khách vãng lai (tìm kiếm, xem thông tin, đăng ký tài khoản), Khách hàng (kế thừa khách vãng lai, bổ sung đặt hàng, theo dõi đơn, cập nhật thông tin cá nhân, reset mật khẩu qua Gmail), và Quản trị viên (toàn quyền quản lý danh mục, thông tin món, đơn hàng, tài khoản thành viên và nhân viên).

2. Tình trạng đơn hàng được quản lý như thế nào và ai là người thay đổi? Quản trị viên là người duy nhất thay đổi tình trạng đơn hàng. Đơn hàng mới sẽ được Admin xem xét và chọn một trong ba trạng thái: chấp nhận (gửi thông báo "Đơn hàng đã được chấp nhận"), đang giao hàng (gửi thông báo "Đơn hàng của bạn đã được giao vui lòng chờ trong ít phút"), hoặc hủy bỏ (gửi thông báo "Đơn hàng của bạn đã bị từ chối vì lí do…").

3. Cơ sở dữ liệu gồm những bảng nào và bảng nào lưu thông tin đơn hàng? Cơ sở dữ liệu gồm 5 bảng chính: membership (thông tin khách hàng), account (tài khoản đăng nhập), order (đơn hàng — lưu buyer_name, day, time, phone_number, price_total, note, membership_id), items (món ăn với trường type phân loại món ăn/đồ uống và status phân loại còn/hết), employee (nhân viên). Bảng order liên kết với membership qua khóa ngoại membership_id.

4. Khách hàng có thể đăng nhập theo những cách nào ngoài tài khoản thông thường? Theo kịch bản alternative flow của use case đăng nhập, khách hàng có thể đăng nhập bằng tài khoản Google hoặc Facebook. Hệ thống sẽ hiển thị trang đăng nhập tương ứng, cho phép nhập tài khoản hoặc chọn tài khoản đã lưu sẵn trong máy.

5. Trường type và status trong bảng items lưu giá trị gì? Trường type là kiểu Int với giá trị 1 tương ứng "món ăn" và giá trị 2 tương ứng "đồ uống" — đây là cơ sở để hệ thống hiển thị tách biệt danh sách món ăn và danh sách thức uống trong trang quản trị. Trường status là kiểu Int với giá trị 1 là "còn" và giá trị 2 là "hết", dùng để quản lý tình trạng tồn kho của từng món.


Kết luận

Đồ án "Xây dựng website đặt đồ ăn nhanh" của sinh viên Đỗ Huỳnh Ngọc Thế (Trường Đại học Sư phạm Kỹ thuật — Đại học Đà Nẵng, năm học 2023–2024) hoàn thành việc xây dựng một ứng dụng web đặt đồ ăn hoàn chỉnh sử dụng Java Spring Boot, Thymeleaf, Bootstrap 4 và MySQL theo kiến trúc MVC Server Side Rendering. Hệ thống hỗ trợ ba cấp người dùng với phân quyền rõ ràng, bao gồm luồng đặt hàng hai chiều có thông báo trạng thái giữa khách hàng và quản trị viên. Phạm vi ứng dụng phù hợp cho các cửa hàng đồ ăn quy mô nhỏ và có thể mở rộng thêm các tính năng như thanh toán trực tuyến và đánh giá sản phẩm trong các phiên bản tiếp theo.