Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DailyEat - 智能食谱推荐应用

一款基于 Android 的智能食谱管理应用,帮助用户管理食材、记录食谱,并根据现有食材智能推荐今日菜谱。

主要功能

🍳 智能推荐

  • 根据用户现有食材,智能推荐可制作的食谱
  • 支持按餐类型(早餐、午餐、晚餐、夜宵)筛选
  • 优先推荐使用即将过期食材的菜谱,减少浪费
  • 模糊匹配食材名称,提高匹配成功率

📖 食谱管理

  • 添加、编辑、删除食谱
  • 支持设置烹饪时间、难度等级
  • 支持添加食谱图片
  • 按餐类型分类管理

🥬 食材管理

  • 记录食材名称、数量、单位
  • 设置购买日期和保质期
  • 支持存储位置标记(冰箱、冷冻室、储藏室等)
  • 食材过期提醒

🛒 购物清单

  • 根据推荐结果自动生成缺失食材清单
  • 一键添加待购食材
  • 标记已购买状态

技术架构

整体架构

应用采用 MVVM + Clean Architecture 架构模式,分为三层:

┌─────────────────────────────────────────────────────────┐
│                    Presentation Layer                    │
│  (UI Components, ViewModels, Navigation, Theme)        │
├─────────────────────────────────────────────────────────┤
│                     Domain Layer                         │
│  (Models, Repositories Interface, UseCases)             │
├─────────────────────────────────────────────────────────┤
│                      Data Layer                          │
│  (Room Database, DAOs, Entities, Repository Impl)       │
└─────────────────────────────────────────────────────────┘

项目结构

app/src/main/java/com/dailyeat/
├── data/                          # 数据层
│   ├── local/                     # 本地数据源
│   │   ├── database/              # Room 数据库
│   │   │   ├── converter/         # 类型转换器
│   │   │   ├── dao/               # 数据访问对象
│   │   │   └── entity/            # 数据库实体
│   │   ├── mapper/                # 数据映射器
│   │   └── ShoppingListRepository.kt
│   └── repository/                # 仓库实现
├── di/                            # 依赖注入模块
│   ├── DatabaseModule.kt          # 数据库相关依赖
│   └── RepositoryModule.kt        # 仓库依赖绑定
├── domain/                        # 领域层
│   ├── model/                     # 领域模型
│   │   ├── Ingredient.kt          # 食材模型
│   │   ├── Recipe.kt              # 食谱模型
│   │   ├── RecipeIngredient.kt    # 食谱食材关联
│   │   ├── MealType.kt            # 餐类型枚举
│   │   └── RecommendationResult.kt # 推荐结果
│   ├── repository/               # 仓库接口
│   └── usecase/                  # 用例
│       ├── CheckExpiringIngredientsUseCase.kt
│       ├── GetIngredientsUseCase.kt
│       ├── GetRecipeByIdUseCase.kt
│       ├── GetRecipesUseCase.kt
│       ├── ManageIngredientUseCase.kt
│       └── ManageRecipeUseCase.kt
├── presentation/                  # 表现层
│   ├── navigation/               # 导航
│   │   ├── DailyEatNavGraph.kt   # 导航图
│   │   └── Screen.kt             # 页面路由定义
│   ├── screen/                   # 页面
│   │   ├── home/                 # 首页
│   │   ├── ingredient/            # 食材管理页面
│   │   ├── recipe/               # 食谱管理页面
│   │   ├── recommend/            # 推荐页面
│   │   └── shopping/              # 购物清单页面
│   ├── theme/                    # 主题配置
│   └── viewmodel/                 # 视图模型
├── recommendation/                # 推荐引擎
│   ├── engine/
│   │   └── RecommendationEngine.kt  # 核心推荐算法
│   ├── matcher/
│   │   └── FuzzyIngredientMatcher.kt # 模糊食材匹配
│   └── scorer/
│       ├── ExpiryWeightCalculator.kt  # 过期权重计算
│       └── MatchScoreCalculator.kt    # 匹配分数计算
├── util/
│   └── Logger.kt                 # 日志工具
├── DailyEatApplication.kt        # Application 类
└── MainActivity.kt               # 主 Activity

技术栈

类别 技术
UI 框架 Jetpack Compose + Material 3
架构模式 MVVM + Clean Architecture
依赖注入 Hilt
数据库 Room
异步处理 Kotlin Coroutines
序列化 Kotlinx Serialization
日期时间 Kotlinx DateTime
图片加载 Coil
数据存储 DataStore Preferences
导航 Jetpack Navigation Compose

推荐算法

推荐引擎基于多维度评分系统:

  1. 基础匹配分数 (60%权重)

    • 计算用户拥有食材与食谱所需食材的匹配比例
    • 区分必需食材和可选食材
  2. 过期奖励分数 (30%权重)

    • 优先推荐使用即将过期食材的食谱
    • 减少食材浪费
  3. 餐类型匹配 (10%权重)

    • 根据用户选择的餐类型筛选合适食谱
finalScore = baseMatchScore * 0.6f + 
             normalizedExpiryBonus * 0.3f + 
             mealTypeMatchBonus * 0.1f

开发环境

  • Android SDK: minSdk 26, targetSdk 34
  • Kotlin: 1.9.20
  • Gradle: 8.2.0
  • JDK: 17

构建项目

# 克隆项目
git clone https://github.com/your-username/dailyEat.git

# 进入项目目录
cd dailyEat

# 构建项目
./gradlew build

# 运行调试版本
./gradlew installDebug

数据模型

食谱 (Recipe)

字段 类型 描述
id Long 主键
name String 食谱名称
description String 描述
mealTypes Set 适用餐类型
cookTime Int 烹饪时间(分钟)
difficulty Int 难度等级 (1-5)
imageUri String? 图片 URI
ingredients List 所需食材列表

食材 (Ingredient)

字段 类型 描述
id Long 主键
name String 食材名称
category String 分类
quantity Float 数量
unit String 单位
purchaseDate Instant? 购买日期
expiryDate Instant? 过期日期
storageLocation String 存储位置

License

MIT License

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages