味来已至:基于人工智能的智能外卖推荐与购买系统设计与实现

#代码星辉·七月创作之星挑战赛#

 

一、简介 📦✨

本项目是一个使用 C++语言 实现的 AI驱动外卖推荐与购买助手系统。它模拟了一个简单的外卖平台,用户可以根据自己的历史订单获得推荐,并完成下单操作。

🧩 技术栈:

技术说明
编程语言C++
推荐算法协同过滤
数据结构mapvectorstruct
开发环境 VS Code 

二、系统功能模块划分 🔄

三、核心代码详解 💻

所有代码都进行了详细注释,帮助你理解每个部分的功能。

🔹 1. 菜品与用户结构体定义 📦

#include <iostream>
#include <vector>
#include <map>
#include <string>

using namespace std;

// 菜品结构体:表示一个菜品的基本信息
struct Dish {
    int id;         // 菜品ID
    string name;    // 菜品名称
    double price;   // 菜品价格
};

// 用户结构体:表示一个用户的评分记录
struct User {
    int id;                     // 用户ID
    map<int, double> ratings;   // key:菜品ID,value:评分(0~5)
};

✅ 作用说明:

  • 使用 struct 定义了两个基本的数据结构。
  • Dish 表示菜品,包括编号、名字和价格。
  • User 表示用户,包含其对菜品的评分记录(使用 map 存储)。

🔹 2. 推荐算法:协同过滤 🧠

// 计算两个用户之间的余弦相似度
double cosine_similarity(const map<int, double>& u1, const map<int, double>& u2) {
    double dot = 0.0, norm_u1 = 0.0, norm_u2 = 0.0;
    
    // 遍历第一个用户的评分
    for (auto& p : u1) {
        if (u2.count(p.first)) { // 如果第二个用户也评过这道菜
            dot += p.second * u2.at(p.first); // 内积
        }
        norm_u1 += p.second * p.second; // 第一个用户向量模长平方
    }

    // 计算第二个用户的向量模长平方
    for (auto& p : u2)
        norm_u2 += p.second * p.second;

    // 返回余弦相似度
    return dot / (sqrt(norm_u1) * sqrt(norm_u2));
}

✅ 作用说明:

  • 该函数用于计算两个用户之间的“相似度”。
  • 相似度越高,说明他们的口味越接近。
  • 使用的是 余弦相似度(Cosine Similarity),是协同过滤中常用的计算方法之一。

🔹 3. 主函数模拟推荐流程 🚀

int main() {
    // 初始化几个菜品
    vector<Dish> dishes = {
        {1, "宫保鸡丁", 25},
        {2, "鱼香肉丝", 22},
        {3, "麻辣香锅", 30}
    };

    // 初始化两个用户及其评分
    User user1 = {1, {{1, 4}, {2, 3}}}; // 用户1喜欢宫保鸡丁和鱼香肉丝
    User user2 = {2, {{2, 5}, {3, 4}}}; // 用户2喜欢鱼香肉丝和麻辣香锅

    // 计算相似度
    double sim = cosine_similarity(user1.ratings, user2.ratings);
    cout << "User1 和 User2 的相似度: " << sim << endl;

    // 简单推荐:给user1推荐user2喜欢但user1未评分的菜
    cout << "推荐菜品:" << endl;
    for (auto& d : user2.ratings) {
        if (!user1.ratings.count(d.first)) { // 如果用户1没评过这个菜
            for (auto& dish : dishes) {
                if (dish.id == d.first)
                    cout << "- " << dish.name << " (" << dish.price << "元)" << endl;
            }
        }
    }

    return 0;
}

✅ 作用说明:

  • 初始化菜品和用户数据。
  • 调用 cosine_similarity() 函数计算两个用户之间的相似度。
  • 根据相似用户的喜好,推荐当前用户没有尝试过的菜品。

🔹 4. 用户交互菜单 🎮

void show_menu() {
    cout << "\n==== 外卖推荐系统 ====\n";
    cout << "1. 查看推荐\n";
    cout << "2. 下单\n";
    cout << "3. 查看订单\n";
    cout << "4. 退出\n";
    cout << "请输入选项:";
}

int get_choice() {
    int choice;
    cin >> choice;
    return choice;
}

✅ 作用说明:

  • 提供一个简单的命令行菜单,让用户选择功能。
  • 支持查看推荐、下单、查看订单等功能。

🔹 5. 模拟下单功能 💳

struct Order {
    int user_id;
    int dish_id;
    string status;
};

vector<Order> orders;

void place_order(int user_id, int dish_id) {
    orders.push_back({user_id, dish_id, "已提交"});
    cout << "✅ 下单成功!\n";
}

✅ 作用说明:

  • 定义 Order 结构体来保存订单信息。
  • place_order() 函数模拟下单行为,将订单加入全局 orders 列表。

🔹 6. 查看订单功能 📝

vector<Dish> dishes = {
    {1, "宫保鸡丁", 25},
    {2, "鱼香肉丝", 22},
    {3, "麻辣香锅", 30}
};

void view_orders(int user_id) {
    cout << "\n您的订单如下:\n";
    for (auto& o : orders) {
        if (o.user_id == user_id) {
            for (auto& d : dishes) {
                if (d.id == o.dish_id)
                    cout << "- " << d.name << " (" << o.status << ")\n";
            }
        }
    }
}

✅ 作用说明:

  • 遍历所有订单,筛选出当前用户下的订单。
  • 显示每道菜的名称和状态。

四、示例 📊

表1:菜品表 dishes

ID名称价格(元)
1宫保鸡丁25
2鱼香肉丝22
3麻辣香锅30

表2:用户评分表 ratings

用户ID菜品ID评分
114
123
225
234

五、算法原理简析 🧠

协同过滤推荐(Collaborative Filtering)

协同过滤是一种经典的推荐算法,核心思想是:

“和你兴趣相近的人喜欢的东西,你也可能会喜欢。”

在本项目中我们采用的是 基于用户的协同过滤(User-based CF)

  1. 找到与目标用户兴趣最相似的其他用户;
  2. 参考这些相似用户喜欢但目标用户尚未尝试的菜品;
  3. 将这些菜品推荐给目标用户。

六、系统流程图 🔄


七、扩展 🧩

功能建议
图形界面使用 Qt 或 SFML 创建GUI界面
登录注册添加用户登录验证功能
文件存储将用户数据写入 users.txt
更复杂的推荐算法如矩阵分解、神经网络等
多线程同时处理多个用户请求

八、总结 📌

🌟 从“点外卖”到“懂你心”的AI饭馆

在这个项目中,我们不仅仅写了几行代码、模拟了一个外卖系统,更重要的是,我们打开了一扇通往智能生活的门——这扇门上写着:“AI饭馆,今天你想吃啥?我知道。”

🍽️ 一次技术与生活的融合实践

“AI饭馆”不是一个高高在上的概念产品,它是真实可感的技术落地。它用最朴素的方式告诉我们:

人工智能不是遥不可及的黑科技,而是可以融入日常、服务生活的工具和伙伴。

当你输入一个数字、点击一道菜、看到“这是你喜欢的口味”时,背后是算法在思考,是数据在说话,是机器在“懂你”。

🧠 AI不只是推荐,更是理解

本项目中使用的协同过滤算法虽然基础,但它代表了AI的一种思维方式:通过分析人与人之间的行为相似性,预测未知的选择。这不是简单的计算,而是一种“类人”的推理能力。

它像一个细心的服务员,记住你最爱吃的辣度、偏好的口味,甚至能根据你最近的变化调整推荐。未来,它还可以听懂你说的话、看懂你的表情、感知你的情绪——真正成为一个“会吃饭的AI”。

🔧 技术小白也能触碰AI梦想

我们学会了:

  • 如何用结构体组织数据;
  • 如何用map和vector处理用户行为;
  • 如何用余弦相似度让程序“判断口味相近的人”;
  • 如何用函数模块化构建一个完整的逻辑闭环。

这些,都是通往更复杂AI系统的基石。

💡 未来的“AI+生活”不止于点餐

“AI饭馆”只是一个起点。想象一下:

  • 如果把这个推荐模型迁移到电影、书籍、商品上,是不是就变成了“懂你的小助手”?
  • 如果加上语音识别,是不是就能实现“一句话点餐”?
  • 如果接入商家库存系统,是不是就能做到“精准备餐、减少浪费”?

这个世界正在被AI悄悄改变,而你,已经站在了这场变革的门口。

🚀 最后一句话送给每一个努力敲代码的你:

“今天你用AI推荐了一份外卖,明天你就可能改变一个人的生活方式。”

 

 

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羑悻的小杀马特.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值