You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已编写部分C++代码,如何实现基于用户输入ID的delDrink函数?

饮品数据库删除功能实现指南

嘿,我看你卡在delDrink函数的实现上了,先给你提个关键细节:你类里的numDrink现在是普通私有成员,这会导致每个Drink对象都有自己的计数,完全没法正确统计drinkBase数组里的饮品总数。得把它改成静态成员变量才行,这样整个类共享这个计数,才能正确追踪数组里已添加的元素数量。

下面我一步步帮你补全代码逻辑:

第一步:修正类定义,添加静态成员

先把numDrink改成静态成员,并且在类外初始化它:

#include <iostream>
#include <cstring>
using namespace std;

class Drink{
private:
    float cost;
    char product_id[10];
    char dname[30];
    static int numDrink; // 改为静态成员,统计已添加的饮品总数
public:
    void addDrink(char drinkname[],float price,char id[]);
    void delDrink(char id[]); // 删除仅需ID即可,可去掉drinkname参数
    //void updateItem();
    //void searchItem();
};

// 静态成员必须在类外初始化,初始值为0表示没有饮品
int Drink::numDrink = 0;
Drink drinkBase[100];

第二步:补全addDrink函数(确保逻辑完整)

先把添加功能补全,这样删除才有基础:

void Drink::addDrink(char drinkname[],float price,char id[]) {
    // 先检查数据库是否已满
    if(numDrink >= 100){
        cout << "饮品数据库已满,无法添加新饮品!" << endl;
        return;
    }
    // 复制饮品名称、价格、ID到数组对应位置
    strcpy(drinkBase[numDrink].dname, drinkname);
    drinkBase[numDrink].cost = price;
    strcpy(drinkBase[numDrink].product_id, id);
    numDrink++; // 添加完成后计数加1
}

第三步:实现delDrink函数(重点解决判断条件)

删除的核心逻辑是找到匹配ID的元素,然后用后面的元素覆盖它,最后减少计数,关键的判断条件用strcmp函数比较字符串(C++里不能直接用==比较char数组):

void Drink::delDrink(char id[]) {
    int targetIndex = -1;
    // 遍历数组,查找匹配ID的饮品
    for(int i = 0; i < numDrink; i++){
        // 核心判断条件:strcmp返回0表示两个字符串完全相等
        if(strcmp(drinkBase[i].product_id, id) == 0){
            targetIndex = i;
            break; // 找到目标后立即跳出循环,提升效率
        }
    }

    // 根据查找结果执行操作
    if(targetIndex != -1){
        // 把目标位置后面的元素依次往前移动一位,覆盖要删除的元素
        for(int i = targetIndex; i < numDrink - 1; i++){
            drinkBase[i] = drinkBase[i+1];
        }
        numDrink--; // 总数减1
        cout << "ID为" << id << "的饮品已成功删除!" << endl;
    } else {
        // 未找到对应ID的情况
        cout << "未找到ID为" << id << "的饮品,请检查输入!" << endl;
    }
}

关键逻辑说明:

  • 为什么用strcmp?因为product_id是char数组,直接用==比较的是数组的地址,不是字符串内容,strcmp会逐字符比较,返回0表示两个字符串完全一致。
  • 静态成员numDrink的作用:始终记录当前数据库中已添加的饮品数量,遍历和删除时都依赖它来确定操作范围。

内容的提问来源于stack exchange,提问作者Lone Ranger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:05:10