本项目是一个使用 C++语言 实现的 AI驱动外卖推荐与购买助手系统。它模拟了一个简单的外卖平台,用户可以根据自己的历史订单获得推荐,并完成下单操作。
技术 | 说明 |
|---|---|
编程语言 | C++ |
推荐算法 | 协同过滤 |
数据结构 | map、vector、struct |
开发环境 | VS Code |

所有代码都进行了详细注释,帮助你理解每个部分的功能。
#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 存储)。// 计算两个用户之间的余弦相似度
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));
}✅ 作用说明:
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() 函数计算两个用户之间的相似度。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;
}✅ 作用说明:
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 列表。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";
}
}
}
}✅ 作用说明:
dishesID | 名称 | 价格(元) |
|---|---|---|
1 | 宫保鸡丁 | 25 |
2 | 鱼香肉丝 | 22 |
3 | 麻辣香锅 | 30 |
ratings用户ID | 菜品ID | 评分 |
|---|---|---|
1 | 1 | 4 |
1 | 2 | 3 |
2 | 2 | 5 |
2 | 3 | 4 |
协同过滤是一种经典的推荐算法,核心思想是:
“和你兴趣相近的人喜欢的东西,你也可能会喜欢。”
在本项目中我们采用的是 基于用户的协同过滤(User-based CF):
功能 | 建议 |
|---|---|
图形界面 | 使用 Qt 或 SFML 创建GUI界面 |
登录注册 | 添加用户登录验证功能 |
文件存储 | 将用户数据写入 users.txt |
更复杂的推荐算法 | 如矩阵分解、神经网络等 |
多线程 | 同时处理多个用户请求 |
在这个项目中,我们不仅仅写了几行代码、模拟了一个外卖系统,更重要的是,我们打开了一扇通往智能生活的门——这扇门上写着:“AI饭馆,今天你想吃啥?我知道。”
“AI饭馆”不是一个高高在上的概念产品,它是真实可感的技术落地。它用最朴素的方式告诉我们:
人工智能不是遥不可及的黑科技,而是可以融入日常、服务生活的工具和伙伴。
当你输入一个数字、点击一道菜、看到“这是你喜欢的口味”时,背后是算法在思考,是数据在说话,是机器在“懂你”。
本项目中使用的协同过滤算法虽然基础,但它代表了AI的一种思维方式:通过分析人与人之间的行为相似性,预测未知的选择。这不是简单的计算,而是一种“类人”的推理能力。
它像一个细心的服务员,记住你最爱吃的辣度、偏好的口味,甚至能根据你最近的变化调整推荐。未来,它还可以听懂你说的话、看懂你的表情、感知你的情绪——真正成为一个“会吃饭的AI”。
我们学会了:
这些,都是通往更复杂AI系统的基石。
“AI饭馆”只是一个起点。想象一下:
这个世界正在被AI悄悄改变,而你,已经站在了这场变革的门口。
“今天你用AI推荐了一份外卖,明天你就可能改变一个人的生活方式。”