CHƯƠNG 1 : CƠ SỞ LÝ THUYẾT 1.1 Giới thiệu sơ lược về Kotlin Kotlin là một ngôn ngữ lập trình đa nền tảng, có cú pháp đơn giản và hiệu quả, được thiết kế để tăng năng suất và độ tin cậy cho các ứng dụng. Kotlin được phát triển bởi JetBrains và được sử dụng rộng rãi cho phát triển ứng dụng Android, web, desktop và server.1 Cơ sở lí thuyết về Kotlin Kotlin là một ngôn ngữ lập trình đa nền tảng, tức là bạn có thể sử dụng nó để phát triển ứng dụng cho nhiều nền tảng khác nhau bao gồm Android, iOS, web, desktop và server. Kotlin được phát triển bởi JetBrains, công ty nổi tiếng với các công cụ lập trình như IntelliJ IDEA, PyCharm, và ReSharper. Kotlin được thiết kế để tăng năng suất và độ tin cậy cho các nhà phát triển.
Nó cung cấp cú pháp đơn giản và trực quan hơn so với Java, cho phép các nhà phát triển viết mã nhanh hơn và hiệu quả hơn. Nó cũng cung cấp nhiều tính năng mới như Null Safety, lambdas, extension functions và data classes, giúp tăng tính bảo mật và độ chính xác của mã. Một ưu điểm của Kotlin là khả năng tương thích ngược với Java, điều này cho phép các nhà phát triển dễ dàng chuyển đổi các ứng dụng Java hiện có sang Kotlin. Kotlin cũng tích hợp tốt với các framework và thư viện Java.2 Ưu điểm của Kotlin - Kotlin là một ngôn ngữ lập trình đa nền tảng (cross-platform) và có nhiều ưu điểm, trong đó bao gồm: - Bảo trì mã dễ dàng: Kotlin có cú pháp đơn giản và tự động hóa một số công việc, giúp giảm độ phức tạp của mã và dễ dàng bảo trì.
- Tính an toàn của kiểu: Kotlin có kiểm tra kiểu tĩnh và phân biệt rõ ràng giữa các kiểu dữ liệu khác nhau, giúp tránh các lỗi kiểu trong quá trình phát triển và giảm thiểu nguy cơ lỗi khi chạy. - Hỗ trợ lập trình hướng đối tượng: Kotlin cung cấp hỗ trợ đầy đủ cho lập trình hướng đối tượng, bao gồm cả kế thừa, đa hình và phạm vi truy cập, giúp giảm độ phức tạp của mã và dễ dàng tái sử dụng mã. - Tương thích đa nền tảng: Kotlin hỗ trợ việc phát triển đa nền tảng trên các nền tảng khác nhau như JVM, Android, JavaScript và Native, giúp giảm thời gian và chi phí phát triển ứng dụng trên nhiều nền tảng. - Hỗ trợ các tính năng mới của Java: Kotlin được thiết kế để tương thích với Java và hỗ trợ nhiều tính năng mới của Java, giúp dễ dàng tích hợp các thư viện và mã đã viết bằng Java.
- Hỗ trợ các tính năng mới của lập trình hàm: Kotlin cung cấp nhiều tính năng mới cho lập trình hàm như hàm bậc cao (higher-order functions), lambda, toán tử chuyển đổi và tính năng xử lý lỗi, giúp giảm độ phức tạp của mã và dễ dàng tái sử dụng mã. - Cộng đồng hỗ trợ mạnh mẽ: Kotlin có một cộng đồng phát triển và hỗ trợ mạnh mẽ, giúp các nhà phát triển dễ dàng tìm kiếm và giải quyết các vấn đề trong quá trình phát triển.1 Giới thiệu sơ lược SQLite là một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) nhỏ gọn, nhanh chóng, đáng tin cậy và tự chứa. Nó được sử dụng rộng rãi trong các ứng dụng di động, máy tính để bàn, trình duyệt web và các hệ thống nhúng khác.2 Một số đặc điểm chính của SQLite là: 8 1. Nhỏ gọn và tự chứa: Toàn bộ mã và dữ liệu của SQLite được chứa trong một tệp duy nhất, không có quá trình máy chủ riêng biệt cần khởi động hoặc cấu hình.
Đa nền tảng: SQLite có thể hoạt động trên hầu hết các nền tảng như Windows, macOS, Linux, Android, iOS, v. Không cần cấu hình: SQLite không yêu cầu cấu hình phức tạp và có thể được sử dụng ngay lập tức. Tin cậy và có khả năng phục hồi cao: SQLite được thiết kế để đảm bảo độ tin cậy và khả năng phục hồi cao, ngay cả khi quá trình ghi dữ liệu bị gián đoạn. Hỗ trợ các tính năng SQL tiêu chuẩn: SQLite hỗ trợ hầu hết các tính năng SQL tiêu chuẩn, bao gồm các truy vấn, lập chỉ mục, giao dịch, khóa ngoài và nhiều hơn nữa.
Miễn phí và nguồn mở: SQLite là một dự án nguồn mở miễn phí, có thể được sử dụng trong cả các ứng dụng thương mại và phi thương mại. Đóng gói thư viện đơn: Toàn bộ mã của SQLite được đóng gói trong một tệp thư viện duy nhất, do đó dễ dàng để tích hợp vào các ứng dụng. Mặc dù SQLite có một số hạn chế so với các RDBMS lớn hơn (như MySQL hoặc PostgreSQL) về khả năng xử lý đồng thời, khả năng mở rộng và tính năng, nhưng nó vẫn là một lựa chọn tuyệt vời cho các ứng dụng nhỏ, di động hoặc nhúng cần một CSDL nhẹ và dễ sử dụng. 9 CHƯƠNG 2 : PHÂN TÍCH THIẾT KẾ HỆ THỐNG 2.1 Phân tích yêu cầu của hệ thống **Đăng ký tài khoản** Để bắt đầu sử dụng ứng dụng đặt đồ ăn, người dùng cần đăng ký tài khoản.
Quá trình đăng ký tài khoản đòi hỏi người dùng cung cấp một số thông tin cá nhân cơ bản như tên, địa chỉ email, mật khẩu và địa chỉ giao hàng. Việc cung cấp địa chỉ giao hàng ngay từ đầu sẽ giúp tiết kiệm thời gian cho người dùng khi đặt đơn hàng lần đầu tiên. **Đăng nhập** Sau khi đã có tài khoản, người dùng có thể đăng nhập vào ứng dụng bằng cách sử dụng địa chỉ email hoặc số điện thoại và mật khẩu đã đăng ký. Quá trình đăng nhập nên được thiết kế đơn giản và thuận tiện, cho phép người dùng lưu thông tin đăng nhập để không phải nhập lại trong lần sử dụng tiếp theo.
**Xem menu** Một trong những tính năng quan trọng nhất của ứng dụng đặt đồ ăn là cho phép người dùng xem menu của các nhà hàng gần đó. Ứng dụng nên cung cấp các tùy chọn lọc và tìm kiếm để người dùng có thể dễ dàng tìm kiếm theo loại món ăn, khoảng giá, đánh giá và các tiêu chí khác. Giao diện hiển thị menu cần được thiết kế thân thiện, với hình ảnh minh họa món ăn hấp dẫn và mô tả rõ ràng. **Đặt hàng** Sau khi đã tìm được món ăn ưng ý, người dùng có thể thêm món đó vào giỏ hàng.
Giao diện giỏ hàng cần hiển thị rõ ràng các món đã chọn, số lượng và tổng giá trị đơn hàng. Từ đây, người dùng có thể tiến hành đặt hàng bằng cách xác nhận địa chỉ giao hàng và phương thức thanh toán. **Theo dõi đơn hàng** 10 Sau khi đặt hàng thành công, người dùng có thể theo dõi tình trạng đơn hàng của họ. Ứng dụng cần cập nhật liên tục tình trạng đơn hàng, từ khi đơn hàng đang được xử lý, đang được giao cho đến khi đã giao hàng.
Ngoài ra, ứng dụng cũng có thể cung cấp thông tin về vị trí hiện tại của đơn hàng trên bản đồ để người dùng có thể dễ dàng theo dõi.2 Phân tích thiết kế với UML 2.1 Xác định các tác nhân và usecase của hệ thống Khách hàng: Là người dùng, người tiêu thụ món ăn trong app. Đăng ký tài khoản: Khách hàng tạo tài khoản mới để có thể xem và mua. Đăng nhập: Khách hàng đăng nhập vào tài khoản đã được đăng ký của họ. Tìm kiếm công thức mong muốn: Khách hàng sử dụng tìm kiếm để tìm ra món mình cần công thức theo mong muốn.
Tìm kiếm theo bộ lọc: Khách hàng sử dụng bộ lọc để có thể tìm ra món một cách cụ thể hơn. Tìm kiếm trên danh mục: Khách hàng có thể dựa vào danh mục mà app đã đề ra để tham khảo các công thức khác nhau. Xem chi tiết món ăn: Khách hàng sẽ xem được chi tiết các thông tin của món ăn bất kỳ. Thêm vào thư viện: Khi khách hàng thấy được công thức món ăn đó ưng ý mà chưa vội mua thì có thể thêm vào thư viện.
Xem thư viện: Để xem các công thức đã thêm vào thư viện trước đó. Đặt mua món ăn (đặt hàng): Để cho khách hàng muốn mua món ăn của app. Thanh toán: Khi đã đặt mua món ăn khách hàng sẽ thanh toán để hoàn tất đơn hàng. Đánh giá chất lượng công thức: Khách hàng nêu cảm nhận và các đánh giá của mình về món ăn.
Chỉnh sửa thông tin tài khoản: Khi khách hàng muốn thay đổi một số thông tin trong tài khoản mình. 11 Quản trị viên: Là người quản trị hệ thống, điều hành và duy trì mọi hoạt động của app. Đăng nhập Admin: Admin đăng nhập vào tài khoản dành riêng cho họ. Đăng bán các công thức: Admin sẽ đăng tải các món ăn hiện có lên trên app để cho khách hàng có những lựa chọn tốt nhất.
Kiểm duyệt các đơn đặt hàng: Admin thực hiện xem xét các đơn mua công thức mà khách hàng đã đặt rồi quyết định chấp nhận giao dịch hay không. Duyệt các đánh giá từ khách hàng: Admin dựa trên các tiêu chuẩn để xét duyệt các đánh giá chất lượng từ khách hàng. Xóa tài khoản khách hàng: Tùy vào các hoạt động của khách hàng và dựa trên các quy tắc vi phạm thì admin có thể quyết định xóa tài khoản của khách hàng. Viết các tin tức lên blog 10.
: Admin sẽ đăng tải các bài viết về những công thức mới, các khuyến mãi,… lên trên blog để khách hàng tham khảo.2 Đặc tả Usecase 2.1 Usecase đăng ký tài khoản Tác nhân: Khách hàng Mô tả: Cho phép khách hàng đăng ký tài khoản mới Tiền điều kiện: Khách hàng cần tạo tài khoản Luồng sự kiện chính: •Truy cập vào app •Nhấn vào đăng ký •Lựa chọn phương thức tạo tài khoản Luồng nhánh A1: Bằng cách nhập các thông tin cá nhân - Nhập các thông tin mà hệ thống yêu cầu - Nhấn nút đăng ký 12 - Hệ thống thông báo hoàn thành đăng ký Luồng nhánh A2: Bằng kết nối tài khoản google - App sẽ kết nối với tài khoản google của họ - Hệ thống thông báo hoàn thành đăng ký Hậu điều kiện: Đăng nhập thành công 2.2 Usecase đăng nhập Tác nhân: Khách hàng Mô tả: Cho phép khách hàng đăng nhập bằng tài khoản đã đăng ký Tiền điều kiện: Khách hàng, shop, admin đã có tài khoản Luồng sự kiện chính: •Truy cập vào app •Nhập tài khoản mật khẩu đã đăng ký •Nhấn vào đăng nhập •Hệ thống kiểm tra Luồng nhánh A1: Kiểm tra đúng thông tin - Đăng nhập vào app Luồng nhánh A2: Kiểm tra không thấy thông tin - Không đăng nhập vào app Hậu điều kiện: Đăng nhập thành công 2.