一、简介 📦✨
本项目是一个使用 C++语言 实现的 AI驱动外卖推荐与购买助手系统。它模拟了一个简单的外卖平台,用户可以根据自己的历史订单获得推荐,并完成下单操作。
🧩 技术栈:
技术 | 说明 |
---|---|
编程语言 | C++ |
推荐算法 | 协同过滤 |
数据结构 | map 、vector 、struct |
开发环境 | 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 | 评分 |
---|---|---|
1 | 1 | 4 |
1 | 2 | 3 |
2 | 2 | 5 |
2 | 3 | 4 |
五、算法原理简析 🧠
协同过滤推荐(Collaborative Filtering)
协同过滤是一种经典的推荐算法,核心思想是:
“和你兴趣相近的人喜欢的东西,你也可能会喜欢。”
在本项目中我们采用的是 基于用户的协同过滤(User-based CF):
- 找到与目标用户兴趣最相似的其他用户;
- 参考这些相似用户喜欢但目标用户尚未尝试的菜品;
- 将这些菜品推荐给目标用户。
六、系统流程图 🔄
七、扩展 🧩
功能 | 建议 |
---|---|
图形界面 | 使用 Qt 或 SFML 创建GUI界面 |
登录注册 | 添加用户登录验证功能 |
文件存储 | 将用户数据写入 users.txt |
更复杂的推荐算法 | 如矩阵分解、神经网络等 |
多线程 | 同时处理多个用户请求 |
八、总结 📌
🌟 从“点外卖”到“懂你心”的AI饭馆
在这个项目中,我们不仅仅写了几行代码、模拟了一个外卖系统,更重要的是,我们打开了一扇通往智能生活的门——这扇门上写着:“AI饭馆,今天你想吃啥?我知道。”
🍽️ 一次技术与生活的融合实践
“AI饭馆”不是一个高高在上的概念产品,它是真实可感的技术落地。它用最朴素的方式告诉我们:
人工智能不是遥不可及的黑科技,而是可以融入日常、服务生活的工具和伙伴。
当你输入一个数字、点击一道菜、看到“这是你喜欢的口味”时,背后是算法在思考,是数据在说话,是机器在“懂你”。
🧠 AI不只是推荐,更是理解
本项目中使用的协同过滤算法虽然基础,但它代表了AI的一种思维方式:通过分析人与人之间的行为相似性,预测未知的选择。这不是简单的计算,而是一种“类人”的推理能力。
它像一个细心的服务员,记住你最爱吃的辣度、偏好的口味,甚至能根据你最近的变化调整推荐。未来,它还可以听懂你说的话、看懂你的表情、感知你的情绪——真正成为一个“会吃饭的AI”。
🔧 技术小白也能触碰AI梦想
我们学会了:
- 如何用结构体组织数据;
- 如何用map和vector处理用户行为;
- 如何用余弦相似度让程序“判断口味相近的人”;
- 如何用函数模块化构建一个完整的逻辑闭环。
这些,都是通往更复杂AI系统的基石。
💡 未来的“AI+生活”不止于点餐
“AI饭馆”只是一个起点。想象一下:
- 如果把这个推荐模型迁移到电影、书籍、商品上,是不是就变成了“懂你的小助手”?
- 如果加上语音识别,是不是就能实现“一句话点餐”?
- 如果接入商家库存系统,是不是就能做到“精准备餐、减少浪费”?
这个世界正在被AI悄悄改变,而你,已经站在了这场变革的门口。
🚀 最后一句话送给每一个努力敲代码的你:
“今天你用AI推荐了一份外卖,明天你就可能改变一个人的生活方式。”