LỜI MỞ ĐẦULời đầu tiên, chúng em xin chân thành gửi lời cảm ơn đến thầy Nguyễn Tấn Toàn, người đã nhiệt tình giúp đỡ, hướng dẫn và định hướng cho nhóm chúng em trong suốt quá trình thực
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC HÀNH Môn: Lập trình trực quan
Đề tài: Phần mềm đề xuất món ăn cho thực đơn
Lê Khai Trí - 21521565
TP.HCM, ngày 14 tháng 01 năm 2023
Trang 2LỜI MỞ ĐẦU
Lời đầu tiên, chúng em xin chân thành gửi lời cảm ơn đến thầy Nguyễn Tấn Toàn, người đã nhiệt tình giúp đỡ, hướng dẫn và định hướng cho nhóm chúng em trong suốt quá trình thực hiện đồ án này
Trong xã hội ngày nay, các ứng dụng tin học đang ngày càng phát triển và được ứng dụng trong rất nhiều lĩnh vực từ kinh tế đến khoa học xã hội và đời sống hằng ngày cũng không là ngoại lệ, việc sử dụng các ứng dụng Công nghệ Thông tin là rất hợp lý và cần thiết, nhằm nâng cao chất lượng cuộc sống của mỗi
cá nhân Trên cơ sở đó, nhóm em tạo ra phần mềm này với hi vọng nó có thể mangđến sự thuận tiện hơn trong cuộc sống cho người dùng, đồng thời chúng em cũng
có cơ hội ứng dụng các kiến thức học được ở môn Lập trình trực quan
Cuối cùng, vì còn hạn chế về năng lực và kinh nghiệm làm phần mềm, sản phẩm của chúng em khó có thể tránh khỏi những thiếu sót Kính mong nhận được những góp ý của thầy
Mục lục
2
Trang 3Chương 1 5
TỔNG QUAN 5
1.1 Hiện trạng và yêu cầu thực tế 5
1.2 Giới thiệu ứng dụng 5
1.3 Quy trình thực hiện dự án 5
Chương 2 6
THIẾT KẾ GIAO DIỆN VÀ CÁC CHỨC NĂNG 6
2.1 Cửa sổ đăng nhập 6
2.1.1 Trang đăng nhập 6
2.1.2 Trang đăng ký 8
2.2 Cửa sổ màn hình chính 9
2.2.1 Trang Món ăn 10
2.2.2 Trang Đề xuất món 14
2.2.3 Trang Thống kê 16
2.2.4 Trang Đốt cháy calo 17
2.2.5 Trang Tài khoản 20
a) Hồ sơ 20
b) Đổi mật khẩu 21
c) Gửi phản hồi 22
Chương 3 23
KỸ THUẬT XỬ LÍ 23
3.1 Sử dụng class DataProvider 23
3.2 Sử dụng class FoodDays 23
3.3 Sử dụng class NotEmptyValidationRule 24
3.4 Sử dụng các Class trong Model1 25
3.5 Sử dụng Frame để chuyển trang 25
3.6 Sử dụng tham số truyền vào để tương tác với các đối tượng khác nhau 25
Chương 4 27
CÁC HÀM CÀI ĐẶT VÀ 27
Trang 4CÔNG NGHỆ 27
4.1 Các công nghệ sử dụng 27
4.1.1 Ngôn ngữ lập trình C# 27
4.1.2 .NET Framework 27
4.1.3 SQL Server 28
4.1.4 Các NuGet Packages 29
a) Entity Framework 29
b) LiveCharts 29
c) Material Design In XAML Toolkit 29
d) WPF Animated GIF 30
e) WPF Behaviors 30
f) WPF Interactivity 30
4.2 Các hàm xử lý chính 30
4.2.1 Giải thuật đề xuất món ăn trong ngày 30
4.2.2 History Page 37
4.2.3 Giải thuật tính thời gian cho từng bài tập 42
Chương 5 44
TỔNG KẾT 44
5.1 Kết quả đạt được 44
5.2 Hạn chế 44
5.3 Hướng phát triển 44
5.4 Bảng phân công công việc 45
TÀI LIỆU THAM KHẢO 47
1 Dữ liệu của Database: 47
2 Thiết kế giao diện: 48
3 Xử lí số liệu: 49
4
Trang 5Chương 1 TỔNG QUAN
1.1 Hiện trạng và yêu cầu thực tế
Hôm nay ăn gì? Một câu hỏi không khó, nhưng ít nhiều vẫn khiến chúng ta suy nghĩ Để bữa ăn tiếp theo không gây nhàm chán, nhưng vẫn cung cấp đủ các thành phần dinh dưỡng đã trở thành bài toán lâu đời cho người nội trợ trong gia đình nói chung cũng như sinh viên đang sống tự lập nói riêng Giải quyết bài toán này đã trở thành nhu cầu cấp thiết khi con người đang tiếp xúc với tập các món ăn ngày càng đa dạng bới khả năng dễ dàng tiếp cận với nguồn nguyên liệu phong phú cũng như vô vàn các công thức chế biến được hướng dẫn trên không gian mạng
Nắm bắt được vấn đề nan giải trên, nhóm chúng em đã cho ra đời ứng dụng
đề xuất món ăn này, với mục tiêu đưa ra những gợi ý phù hợp nhất, đáp ứng nhu cầu thực đơn hằng ngày cho người sử dụng mà không cần quá nhiều thời gian, công sức cho việc suy nghĩ, lựa chọn
1.2 Giới thiệu ứng dụng
Hôm nay ăn gì? là phần mềm gợi ý cho người dùng những món ăn phù
hợp nhất dựa trên nhiều cách đề xuất khác nhau cho các bữa sáng, trưa, tối, và đi kèm là công thức chế biến cho các món ăn đó Đồng thời, ứng dụng sẽ tính toán lượng calo đã nạp vào dựa trên thực đơn đã chọn, giúp người dùng dễ dàng kiểm soát lượng thức ăn tiêu thụ cho phù hợp với chế độ ăn của mình trong ngày Cùng với đó, một danh sách các món đã ăn trong 7 ngày trước sẽ được lưu lại nhằm phục vụ mục đích quản lý cho người sử dụng Bên cạnh đó, có một tính năng nhỏ kèm theo giúp tính toán thời gian tập luyện để đốt cháy một lượng calo được nhập theo yêu cầu
1.3 Quy trình thực hiện dự án
- Xác định các tính năng, thông tin đầu vào, đầu ra của mỗi tính năng
- Thiết kế giao diện phần mềm
- Viết mã và phát triển phần mềm
- Bảo trì, nâng cấp, sửa chữa
Trang 6Chương 2 THIẾT KẾ GIAO DIỆN VÀ CÁC
Trang 8o Mô tả: người dùng đăng nhập bằng số điện thoại và mật khẩu đã được đăng
kí Nếu quên mật khẩu đã được đăng kí, bấm nút “Quên mật khẩu” để chuyển đến màn hình Quên mật khẩu Nếu chưa có tài khoản, bấm nút
“Đăng kí” để đăng kí tài khoản mới
2.1.2 Màn hình đăng ký
o Giao diện chức năng:
8
Trang 10o Mô tả: Người dùng nhập số điện thoại, mật khẩu, email, tên, họ và chọn giới tính Sau đó bấm đăng kí để đăng kí tài khoản mới Sau khi bấm đăng kí, người dùng sẽ được chuyển đến màn hình xác thực OTP bằng số điện thoại.
2.1.3 Màn hình xác thực OTP
o Giao diện chức năng:
10
Trang 12o Mô tả: Ứng dụng sẽ gửi một mã OTP đến số điện thoại được đăng kí, người dùng nhập mã OTP gồm 6 số vào ô trống và bấm “Xác thực” Nếu không nhận được mã OTP, người dùng đợi 60 giây và bấm “Gửi lại” Sau khi bấm “Xác thực”, nếu đăng kí thành công, người dùng sẽ được chuyển đến màn hình thông báo đăng kí thành công.
2.1.4 Màn hình thông báo đăng kí thành công
o Giao diện chức năng:
o Mô tả:
2.2 Cửa sổ màn hình chính
- Chức năng cơ bản: chuyển đổi giữa các trang
12
Trang 13Tiếp theo, ta đề xuất các món phụ Đầu tiên là thức uống cho ba bữa
ăn Các món phụ chỉ được đề xuất và thêm vào danh sách đề xuất nếu tổng lượng kcal của ngày đó cộng với kcal món được đề xuất chưa vượt tổng kcal khuyến nghị của một ngày
Trang 14Tiếp theo, ta đề xuất món ăn vặt cho hai bữa trưa và tối Cũng giống như đề xuất thức uống, các món ăn vặt chỉ được đề xuất nếu phù hợp với tổng kcal một ngày.
4.2.2 History Page
Khai thác dữ liệu từ SQL
Đầu tiên để thuận tiện cho việc khai thác dữ liệu ta tạo một property tên UserHistory để lưu toàn bộ những dòng dữ liệu có mã UserId của người dùng hiện tại
44
Trang 15Trong hàm get của UserHistory có sử dụng 2 hàm là refresh_History() và refresh_UserHistory().
Hàm refresh_History() sẽ đảm nhiệm việc kiểm tra xem dữ liệu trên SQL có thay đổi hay không Nếu có thì sẽ cập nhật lại dữ liệu trên app
Hàm refresh_UserHistory() sẽ cập nhật lại dữ liệu của UserHistory Nó đượcgọi sau khi hàm refresh_History() trả về giá trị true (tức là SQL có sự thay đổi) Đồng thời dữ liệu cũng sẽ được sắp xếp theo ngày ăn
Như vậy 2 hàm trên giúp tránh được việc phải tải lại dữ liệu khi SQL không
có cập nhật mới
Xây dựng cấu trúc dữ liệu đặc thù
Chức năng History liệt kê thông tin lịch sử ăn trong 7 ngày gần nhất Vì vậy,tạo một cấu trúc lưu toàn bộ dữ liệu trong một ngày là điều cần thiết Struct HistoryInDay sẽ lưu toàn bộ thông tin các món ăn trong một ngày, ngày ăn, và hỗ trợ luôn hàm tính Kcal trong buổi ăn
Trang 17Sắp xếp và lưu dữ liệu
Hàm GetHistory() return một mảng HistoryInDay tương ứng với lịch sử ăn 7ngày gần nhất Hàm sẽ duyệt qua toàn bộ dữ liệu trong UserHistory theo thứ tự từcuối đến đầu (Vì dữ liệu đã được sắp xếp tăng dần theo ngày ăn) để đảm bảo có thểlấy dữ liệu 7 ngày ăn mới nhất Sau đó sắp xếp các món đã ăn vào biếnHistoryInDay của ngày đó dựa theo thuộc tính meal (3 là sáng, 4 là trưa, 5 là tối).Như vậy ta đã có toàn bộ dữ liệu cần thiết cho phần GUI sử dụng để hiển thị racho người dùng
Trang 19Ngoài ra hàm CompareDate() sẽ giúp so sánh 2 ngày Nếu hàm trả về -1 thì tức
là ngày a trước ngày b, trả về 0 ứng với ngày a trùng với ngày b, và trả về 1 ứng với ngày a nằm sau ngày b
4.2.3 Giải thuật tính thời gian cho từng bài tập
Sau khi nhấn “Tính”, lượng kcal trong textbox được lưu vào biến _totalCalo,kết hợp với trường Kph (lượng kcal tiêu hao trong mỗi giờ) trong đối tượng exercise được chọn, ta dễ dàng tính được khoảng thời gian cần thiết để tiêu thụ lượng kcal được nhập với bài tập này
Trang 21Chương 5 TỔNG KẾT
5.
5.1 Kết quả đạt được.
- Hoàn thành tất các các chức năng của phần mềm đã đặt ra :
+ Cung cấp một giao diện để người dùng dễ dàng thao tác
+ Cung cấp danh sách 60 món ăn ban đầu, cùng cách chế biến để người dùng tham khảo cho bữa ăn, các bài tập để tăng cường sức khỏe, đốt cháy calo thừa
+ Cung cấp cho người dùng một công cụ để thành lập, chỉnh sửa một bữa ăn cho bản thân, tập các bài thể dục một cách trực quan, khoa học
+ Đề xuất món ăn hợp lí trong một ngày
+ Ghi lại nhật ký, số liệu thống kê của các bữa ăn
- Học được cách thức, quá trình thực hiện một dự án phần mềm
- Hiểu và ứng dụng cách sử dụng các công nghệ, thư viện mới giúp ích cho việc lập trình ứng dụng
- Tích góp được nhiều kinh nghiệm trong việc giải quyết các vấn đề liên quan trong quá trình thực hiện một dự án
5.2 Hạn chế.
- Chỉ có thể sử dụng dữ liệu khi máy người dùng có phần mềm SQL Server
- Lượng kcal, các thông số dinh dưỡng của các món ăn chỉ là trung bình, mang tính chất tham khảo
- Chưa thể cập nhật phần mềm trực tiếp thông qua mạng
Trang 22- Nâng cấp phần mềm để người dùng có thể cập nhật trực tiếp trên ứng dụng
mà không cần phải tải lại phần mềm
5.4 Bảng phân công công việc
STT Người thực hiện Công việc Mức độ hoàn thành
1 Vũ Đức Trường - Làm phần
MainWndow , FoodPage và các thành phần trong SubFoodPage , hỗ trợ làm
RecommendPage , quên mật khẩu
- Tạo Model liên kết database
- Phân chia công việc cho nhóm
- Viết báo cáo đồ án file word
- Thêm dữ liệu phần Exercise trong SQL
- Thêm hình ảnh phần Exercies
- Tạo database
100%
52
Trang 233 Lê Ngọc Hưng - Làm phần
LoginWindow , RecommendPage
- Thêm dữ liệu phần Food vào SQL
- Thêm hình ảnh vàoFolder Food
- Viết báo cáo đồ án file word
- Tạo database
100%
4 Huỳnh Đăng Quang - Làm phần
RegisterPage , AccountPage , Logic phần HistoryPage
- Thêm dữ liệu phần Food vào SQL
- Thêm hình ảnh vàofolder Food
- Làm powerpoint báo cáo đồ án
- Tạo database
100%
Trang 24TÀI LIỆU THAM KHẢO
1 Dữ liệu của Database:
a) Thức ăn:
nha-ngon-nhu-ngoai-hang-c162a471421.html
https://eva.vn/bep-eva/cach-lam-ca-hoi-ap-chao-don-gian-tai-5-sao-ngay-tai-nha/
https://bloganchoi.com/cach-lam-cocktail-tom-chuan-nha-hang-rau-cu
https://beptruong.edu.vn/day-nau-an/mon-an-ngon/sup-ngheu-20130615i817414/
https://vietgiaitri.com/che-bien-salad-ca-com-mon-an-che-bien-tu-ca-ngu-ngam-dau/
https://chacanhatrangngoctan.com/mon-ngon-tu-ca-tuoi/cac-https://daohaisan.vn/blogs/mon-ngon/cach-che-bien-hau-songhttps://www.dienmayxanh.com/vao-bep/3-cach-lam-ca-tre-nuong-thom-lung-cuc-ngon-hap-dan-don-gian-05053
ngon-mieng-vua-bo-duong-hang-dau-a204.html
https://haisanquangphong.com/news/ca-moi-kho-mon-an-vua-https://daohaisan.vn/blogs/mon-ngon/cach-lam-goi-hai-sanhttps://tinhhoaquenha.vn/cach-kho-ca-trich-ngonhttps://www.bachhoaxanh.com/kinh-nghiem-hay/cach-lam-com-rang-thap-cam-vua-dep-mat-lai-ngon-mieng-1372738https://www.dienmayxanh.com/vao-bep/3-cach-lam-com-nam-thom-bui-ngon-mieng-don-gian-01508
1611.htm
https://toplist.vn/top-list/mon-an-ngon-nhat-lam-tu-com-ngon-ai-cung-lam-duoc.html
https://www.nguyenkim.com/top-15-mon-an-vat-don-gian-sieu-https://slism.com/calorie/101113/
54
Trang 25https://www.bachhoaxanh.com/kinh-nghiem-hay/bang-tong-https://www.precisionnutrition.com/encyclopedia
App EasyMenu Balanced Meal Plannerb) Thể dục:
1369243.htm
https://tuoitre.vn/chay-tren-may-tap-ta-dot-bao-nhieu-calories-ngay-dot-nhieu-calories-hon-ca-gym-neu-ban-biet-bi-quyet-nay-2799293
https://www.webtretho.com/f/nhat-ky-lam-dep/gap-bung-moi-dat-giam-bao-nhieu-calo-va-co-giam-can-giam-mo-khong/
https://vinmec.com/vi/tin-tuc/thong-tin-suc-khoe/song-khoe/hit-#:~:text=Theo%20nghi%C3%AAn%20c%E1%BB%A9u%20v
%E1%BB%81%20vi%E1%BB%87c,th%E1%BB%83%20l
%C3%AAn%20%C4%91%E1%BA%BFn%2048%20calo
khong.html#:~:text=Khi%20l%E1%BA%AFc%20v
https://www.wheystore.vn/lac-vong-co-giam-mo-bung-%C3%B2ng%2C%20c%C6%A1%20th%E1%BB%83,ti
%C3%AAu%20th%E1%BB%A5%20kho%E1%BA%A3ng
%20700%20calo
https://suatangco.vn/plank-dot-bao-nhieu-calo-co-the-giam-canhttps://nhathuoclongchau.com.vn/bai-viet/goi-y-cac-bai-tap-dot-calo-nhieu-nhat-56268.html#:~:text=Squat%20l
%C3%A0%20m%E1%BB%99t%20b%C3%A0i%20t
%E1%BA%ADp,th%E1%BB%83%20%C4%91%E1%BB
%91t%20ch%C3%A1y%2015%20calo
2 Thiết kế giao diện:
- App Infinity Health IOS : https://play.google.com/store/apps/details?id=com.droidinfinity.healthplus&hl=en&gl=US
Trang 26https://healthvietnam.vn/thu-vien/tai-lieu-56