> 技术文档 > 味来已至:基于人工智能的智能外卖推荐与购买系统设计与实现_商品推荐服务 c++

味来已至:基于人工智能的智能外卖推荐与购买系统设计与实现_商品推荐服务 c++

 

一、简介 📦✨

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

🧩 技术栈:

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

二、系统功能模块划分 🔄

味来已至:基于人工智能的智能外卖推荐与购买系统设计与实现_商品推荐服务 c++

三、核心代码详解 💻

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

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

#include #include #include #include using namespace std;// 菜品结构体:表示一个菜品的基本信息struct Dish { int id; // 菜品ID string name; // 菜品名称 double price; // 菜品价格};// 用户结构体:表示一个用户的评分记录struct User { int id;  // 用户ID map ratings; // key:菜品ID,value:评分(0~5)};

✅ 作用说明:

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

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

// 计算两个用户之间的余弦相似度double cosine_similarity(const map& u1, const map& 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 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 <> choice; return choice;}

✅ 作用说明:

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

🔹 5. 模拟下单功能 💳

struct Order { int user_id; int dish_id; string status;};vector 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 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 评分 1 1 4 1 2 3 2 2 5 2 3 4

五、算法原理简析 🧠

协同过滤推荐(Collaborative Filtering)

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

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

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

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

六、系统流程图 🔄

味来已至:基于人工智能的智能外卖推荐与购买系统设计与实现_商品推荐服务 c++

七、扩展 🧩

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

八、总结 📌

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

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

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

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

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

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

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

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

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

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

我们学会了:

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

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

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

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

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

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

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

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