如何从文件或数据库中读取菜谱和食材数据
时间: 2024-02-19 09:02:58 浏览: 202
从文件或数据库中读取菜谱和食材数据,可以采用以下方法:
1. 从文件中读取数据
如果数据存储在文件中,可以使用C++中的文件流(ifstream)来读取数据。读取文件的步骤如下:
- 打开文件流并检查是否打开成功。
- 读取文件中的每一行,并解析出菜谱和食材数据,保存到对应的数据结构中。
- 关闭文件流。
下面是一个读取菜谱数据的示例代码:
```
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Recipe {
string name;
vector<string> ingredients;
string instructions;
};
vector<Recipe> readRecipesFromFile(string filename) {
vector<Recipe> recipes;
ifstream file(filename);
if (file.is_open()) {
string line;
Recipe recipe;
while (getline(file, line)) {
if (line.empty()) {
recipes.push_back(recipe);
recipe = Recipe();
} else if (recipe.name.empty()) {
recipe.name = line;
} else if (recipe.instructions.empty()) {
recipe.instructions = line;
} else {
recipe.ingredients.push_back(line);
}
}
recipes.push_back(recipe);
file.close();
}
return recipes;
}
```
上述代码中,readRecipesFromFile函数从文件中读取菜谱数据,文件中每个菜谱的格式为:
```
[菜名]
[做法]
[食材1]
[食材2]
...
```
其中,每个菜谱之间用一个空行隔开。
2. 从数据库中读取数据
如果数据存储在数据库中,可以使用C++中的数据库操作库(如MySQL Connector/C++)来读取数据。读取数据库中的数据的步骤如下:
- 连接数据库并检查是否连接成功。
- 执行SQL查询语句,获取菜谱和食材数据。
- 解析查询结果,并保存到对应的数据结构中。
- 关闭数据库连接。
下面是一个从MySQL数据库中读取菜谱数据的示例代码:
```
#include <iostream>
#include <mysqlx/xdevapi.h>
#include <vector>
using namespace std;
using namespace mysqlx;
struct Recipe {
string name;
vector<string> ingredients;
string instructions;
};
vector<Recipe> readRecipesFromDatabase(string host, string user, string password, string schema) {
vector<Recipe> recipes;
Session sess(host, 33060, user, password);
Schema sch = sess.getSchema(schema);
Table tbl = sch.getTable("recipes");
RowResult rows = tbl.select("name", "ingredients", "instructions").execute();
for (auto row : rows) {
Recipe recipe;
recipe.name = row.get<string>(0);
recipe.instructions = row.get<string>(2);
string ingredients = row.get<string>(1);
size_t pos = 0;
while (pos < ingredients.size()) {
size_t end = ingredients.find(',', pos);
if (end == string::npos) {
end = ingredients.size();
}
string ingredient = ingredients.substr(pos, end - pos);
recipe.ingredients.push_back(ingredient);
pos = end + 1;
}
recipes.push_back(recipe);
}
sess.close();
return recipes;
}
```
上述代码中,readRecipesFromDatabase函数从MySQL数据库中读取菜谱数据,数据库中recipes表的结构为:
```
id int primary key auto_increment,
name varchar(255) not null,
ingredients varchar(1024) not null,
instructions text not null
```
其中,ingredients字段中保存的是逗号分隔的食材列表。
以上是从文件或数据库中读取菜谱和食材数据的示例代码,具体实现还需要根据具体的数据结构和存储方式进行调整和完善。
阅读全文