所以我提出了他的代码,我不确定如何继续删除功能?

时间:2018-04-12 17:45:51

标签: c++ arrays class

我必须使用用户输入的ID从数据库中删除饮料..所以我该如何继续?我不确定在if条件下写什么?

class Drink{
private:
float cost;
char product_id[10];
char dname[30];
int numDrink;
public:    
void addDrink(char drinkname[],float price,char id[]); 
void delDrink(char drinkname[],char id[]);
//void updateItem();
//void searchItem();
};
Drink drinkBase[100];
void Drink::addDrink(char drinkname[],float price,char id[])
{

 strcpy(drinkBase[numDrink].dname,drinkname);
 strcpy(drinkBase[numDrink].product_id,id);
 drinkBase[numDrink].cost = price;
 cout<<"\nItem inserted successfully!"<<endl;
 numDrink++;
 }
 void Drink::delDrink(char drinkname[],char id[])
 {
 int i;
 for(int i=0;i<numDrink;i++){
    if((strcmp(drinkname,drinkBase[i].dname)==0)&& 
 (drinkBase[i].product_id=id))
    {

        cout<<"\nItem deleted successfully";
        return;
    }
 }

 }

1 个答案:

答案 0 :(得分:-1)

由于您的数组大小是固定的,您可以使用空名称和/或id“标记”它被删除。但是,你会遇到通过numDrink跟踪“最后”饮料的问题。

您可以将其设置为动态大小,但实际上您应该使用STL listvector。这样你可以做这样的事情:

for (auto it = drinks.begin(); it != drinks.end(); ++it) {
  if ((strcmp(drinkname,(*it).dname) == 0) && ((*it).product_id = id)) {
    drinks.erase(it);
    break;
  }
}

但要注意迭代器和循环。上面的代码适用于一次删除单个项目。如果您不熟悉,我建议您阅读iterators