2301_76648344 2023-11-18 20:44 采纳率: 20%
浏览 8
已结题

实现文件信息修改,题干不能改,只需要添加代码

**任务描述
从food.txt中读取食材的基本信息,创建一个食材信息的顺序表,基于该顺序表,实现食材基本信息的修改功能。

编程要求
输入修改类型(0表示养生保健食谱,1表示食疗验方)、食材中文名称、数量以及食谱,输出已修改食材对应的全部信息。(注:需要判断该中文名称是否存在于food.txt中,若存在,则执行修改操作,否则,输出“修改失败”。)

测试说明
平台会对你编写的代码进行测试:

测试输入:
0
豇豆
2
酸豇豆炒肉末——酸豇豆氽烫后捞出过凉水,沥干,切小段,鲜豇豆、干辣椒、野山椒均洗净切小段。油锅烧热,放入五花肉末、蒜末、姜末炒香,加入盐、味精、料酒炒香,放入葱花以外的材料炒匀,撒上葱花,淋入辣椒油即可。此菜可增进食欲,提高人体免疫力
海米蛇豇豆——嫩豇豆择洗净后切成段,下入沸水锅中氽烫透,捞出沥水装盘,撒上葱花姜丝。油锅置火上,撒入少量花椒粒炸香后捞出,再放入海米炒香,一起浇在豇豆上,略焖再加盐、味精拌匀即成。可健脾补肾,益气养胃。适合脾胃虚弱、患妇科疾病的人服用
预期输出:
中文名称:豇豆
英文名称:cowpea
养生功效:健脾补肾,辅助治疗脾胃虚弱,泻痢,吐逆,消渴,遗精,白带,小便频数等症
营养与功效:豇豆含有易于消化吸收的优质蛋白质,适量的碳水化合物及多种维生素、微量元素等,可全面补充机体所需的营养素。它所含的膳食纤维和维生素Bi能维持正常的消化腺分泌和胃肠道蠕动,抑制胆碱醋酶活性,加速大肠蠕动,可帮助消化、增进食欲,特别适合辅助治疗老年性便秘。而其所含维生素C能促进抗体的合成,提高机体抗病毒的作用。此外,豇豆的磷脂有促进胰岛素分泌参加糖代谢的作用是糖尿病人的理想食品。其所含钾、钙、铁锰等金属元素含量丰富是不错的碱性食品,可以中和体内酸碱值、抗疲劳,还能清涤肠道.清除体内的“垃圾”。中医认为,豇豆有健脾补肾的功效,对尿频、遗精及一些妇科功能性疾病有辅助功效。豇豆作为保健蔬菜,还具有益气健脾、开胃和中、补肾固精的功效。适用于脾虚、腹胀、便泻、肾虚白浊、小便频数者食
专家提醒:豇豆多食则性滞,故气滞便结者应慎食豇豆可豆一次不要吃太多,以免产生胀肚
相关链接:日常生活多食豆:豆类的营养价值非常高,我国传统饮食讲究“五谷宜为养,失豆则不良”意思是说五谷是有营养的,但没有豆子就会失去平衡。现代营养学也证明,每天坚持食用豆类食品,只要两周的时间,人体就可以减少脂肪含量,增加免疫力,降低患病的概率。因此,很多营养学家都呼吁,用豆类食品代替一定量的肉类等动物性食品,是解决城市中人们营养不良和营养过剩双重负担的最好方法。豆子的种类非常多,每种所含的营养成分和食疗作用都各不相同。除了红豆、绿豆、黄豆等常见的豆子外,现在超市里卖的还有豌豆、豇豆、芸豆、鹰嘴豆等。平时我们要多吃不同种类的豆子,摄取均衡的营养,使我们的身体更健康。
养生保健食谱:
酸豇豆炒肉末——酸豇豆氽烫后捞出过凉水,沥干,切小段,鲜豇豆、干辣椒、野山椒均洗净切小段。油锅烧热,放入五花肉末、蒜末、姜末炒香,加入盐、味精、料酒炒香,放入葱花以外的材料炒匀,撒上葱花,淋入辣椒油即可。此菜可增进食欲,提高人体免疫力
海米蛇豇豆——嫩豇豆择洗净后切成段,下入沸水锅中氽烫透,捞出沥水装盘,撒上葱花姜丝。油锅置火上,撒入少量花椒粒炸香后捞出,再放入海米炒香,一起浇在豇豆上,略焖再加盐、味精拌匀即成。可健脾补肾,益气养胃。适合脾胃虚弱、患妇科疾病的人服用
食疗验方:
姜汁豇豆——嫩豇豆洗净,切去两头末端切成小段,大蒜切片,朝天椒洗净对半剖开,削去姜皮切成小块,放入打碎机中,调入少许清水一同搅打成姜汁。在小碗中调入白醋、姜汁、蒜片、朝天椒、盐和香油,混合均匀制成调味汁。锅中放入适量热水,大火烧沸后将嫩豇豆段放入,永煮3分钟,然后取出用冷水冲凉,再沥干水分。最后将调味汁淋入嫩豇豆中,搅拌均匀即可。此菜有促进消化、增强食欲、防止便秘的作用**


#include <bits/stdc++.h>
#define MAXSIZE 10000
using namespace std;
typedef struct{
    char name[100];                // 中文名称
    char sname[100];            // 英文名称
    char health[10000];            // 养生功效
    char nutrition[10000];      // 营养与功效
    char expert[10000];            // 专家提醒
    char link[10000];            // 相关链接
    string recipe[30];            // 养生保健食谱
    int recipe_size = 0;        // 食谱数量
    string therapy[30];            // 食疗验方
    int therapy_size = 0;       // 验方数量
} Food;
typedef struct{
    Food *elem;                 // 指向数组的指针
    int length;                 // 数组的长度
} SqList;

void InitList(SqList &L){
// 使用动态内存分配new进行初始化
L.elem = new Food[MAXSIZE];
L.length = 0;
}

void FreeList(SqList &L){
// 释放内存
if(L.elem!=NULL){
    delete[] L.elem;
}
L.elem = NULL;
L.length = 0;
}

void ReadFile(SqList &L, string filename){
// 从文件中读取食材信息,将其按顺序存入L.elem指向的数组中
    ifstream inFile(filename);
    if (!inFile){
        cout << "文件打开失败" << endl;
        return;
    }
    char a[MAXSIZE];
    bool flag = false;
    L.length = 0;
    while(inFile.getline(a, sizeof a, '#'))
    {
        Food food;
        stringstream s(a);
        string b;
        int type = 0;
        if (flag) getline(s, b , '\n');
        flag = true;
        while (getline(s, b , '\n'))
        {
            switch (type)
            {
                case 0: strcpy(food.name, b.substr(15).c_str()); break;
                case 1: strcpy(food.sname, b.substr(15).c_str());    break;
                case 2: strcpy(food.health, b.substr(15).c_str()); break;
                case 3: strcpy(food.nutrition, b.substr(18).c_str()); break;
                case 4: strcpy(food.expert, b.substr(15).c_str()); break;
                case 5: strcpy(food.link, b.substr(15).c_str()); break;
                case 6:
                    {
                        getline(s, b , '\n');
                        string::size_type c = b.find("——");
                        while (c != string::npos && !b.empty())
                        {
                            food.recipe[food.recipe_size++] = b;
                            getline(s, b , '\n');
                            c = b.find("——");
                        }
                    }
                case 7:
                    {
                        getline(s, b , '\n');
                        while(!b.empty())
                        {
                            food.therapy[food.therapy_size++] = b;
                            getline(s, b , '\n');
                        }
                    }
                default: break;
            }
            type++;
        }
        L.elem[L.length++] = food;
    }
    inFile.close();
}

void SaveFile(SqList &L, string filename){
// 保存食材信息到文件
    ofstream outFile(filename);
    for (int i = 0; i < L.length; i++)
    {
        for (int j = 0; j < 8; j++)
        switch(j)
        {
            case 0: outFile << "中文名称:" << L.elem[i].name << endl; break;
            case 1: outFile << "英文名称:" << L.elem[i].sname << endl; break;
            case 2: outFile << "养生功效:" << L.elem[i].health << endl; break;
            case 3: outFile << "营养与功效:" << L.elem[i].nutrition << endl; break;
            case 4: outFile << "专家提醒:" << L.elem[i].expert << endl; break;
            case 5: outFile << "相关链接:" << L.elem[i].link << endl; break;
            case 6:{
                if (L.elem[i].recipe_size){
                    outFile << "养生保健食谱:" << endl;
                    for (int n = 0;n < L.elem[i].recipe_size; n++)
                        outFile << L.elem[i].recipe[n] << endl;
                }
                break;
            }
            case 7:{
                if (L.elem[i].therapy_size){
                    outFile << "食疗验方:" << endl;
                    for (int n = 0; n < L.elem[i].therapy_size; n++)
                        outFile << L.elem[i].therapy[n] << endl;
                }
                break;
            }
            default: break;
        }
        if (i != L.length-1) outFile << "#" << endl;
    }
    outFile.close();
 
}

bool ModifyFood(SqList &L, int type, char *name, string lines[], int n){
// 食材信息修改,如果type是0,则修改养生保健食谱,否则修改食疗验方信息
// 如果修改成功,返回true,否则,返回false
    
}

Food *getFood(SqList &L, char *name){
// 获取修改后的食材信息

}

void Print(Food *food){
// 输出食材信息
    
}
  • 写回答

1条回答 默认 最新

  • 极客智能体-在线 2023-11-18 20:50
    关注

    以下答案来自于AI:

    bool ModifyFood(SqList &L, int type, char *name, string lines[], int n){
        // 食材信息修改,如果type是0,则修改养生保健食谱,否则修改食疗验方信息
        // 如果修改成功,返回true,否则,返回false
        for (int i = 0; i < L.length; i++) {
            if (strcmp(L.elem[i].name, name) == 0) {
                if (type == 0) {
                    L.elem[i].recipe_size = n;
                    for (int j = 0; j < n; j++) {
                        L.elem[i].recipe[j] = lines[j];
                    }
                } else {
                    L.elem[i].therapy_size = n;
                    for (int j = 0; j < n; j++) {
                        L.elem[i].therapy[j] = lines[j];
                    }
                }
                return true;
            }
        }
        return false;
    }
    
    Food *getFood(SqList &L, char *name){
        // 获取修改后的食材信息
        for (int i = 0; i < L.length; i++) {
            if (strcmp(L.elem[i].name, name) == 0) {
                return &L.elem[i];
            }
        }
        return NULL;
    }
    
    void Print(Food *food){
        // 输出食材信息
        if (food != NULL) {
            cout << "中文名称:" << food->name << endl;
            cout << "英文名称:" << food->sname << endl;
            cout << "养生功效:" << food->health << endl;
            cout << "营养与功效:" << food->nutrition << endl;
            cout << "专家提醒:" << food->expert << endl;
            cout << "相关链接:" << food->link << endl;
            if (food->recipe_size > 0) {
                cout << "养生保健食谱:" << endl;
                for (int i = 0; i < food->recipe_size; i++) {
                    cout << food->recipe[i] << endl;
                }
            }
            if (food->therapy_size > 0) {
                cout << "食疗验方:" << endl;
                for (int i = 0; i < food->therapy_size; i++) {
                    cout << food->therapy[i] << endl;
                }
            }
        }
    }
    

    这段代码首先在ModifyFood函数中遍历食物列表,找到与给定名称匹配的食物,然后根据类型修改食谱或验方信息。getFood函数用于获取修改后的食物信息,Print函数用于打印食物信息。如果找不到匹配的食物,ModifyFood和getFood函数会返回失败。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月18日
  • 已采纳回答 11月18日
  • 创建了问题 11月18日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络