//case 3: open and subtract inventory lists from a file from the current inventory lists void MenuList::subtractInventoryFile(string inFileName){ cin.clear(); cin.ignore(); vector <Ingredient> tempIngredientInventory; vector <Equipment> tempEquipmentInventory; cout << "Please enter the file name:" << endl; cin >> inFileName; // while(getline(cin,inFileName)){ TiXmlDocument doc; bool loadOkay = doc.LoadFile(inFileName.c_str()); if(!loadOkay){ cerr << doc.ErrorDesc() << endl; }else{ //define root - recipeCollection TiXmlElement *inventoryElement = doc.RootElement(); Recipe recipe; while(inventoryElement){ //ingredientlist TiXmlElement *ingredientlistElement = inventoryElement->FirstChildElement(); //equipment TiXmlElement *equipmentElement = ingredientlistElement->NextSiblingElement(); //ingredient TiXmlElement *ingredientElement = ingredientlistElement->FirstChildElement(); if(strcmp(inventoryElement->Value(),"inventory")!=0){ if(!silent){ cerr << "cannot open file: " << inFileName << endl; } } //Read ingredientList while(ingredientlistElement && ingredientElement){ if(strcmp(ingredientElement->Value(), "ingredient")== 0){ Ingredient ingredient; tempIngredientInventory.push_back(ingredient.inputIngredient(ingredientElement)); } else{ cout << "no ingredient" << endl;; } ingredientElement = ingredientElement->NextSiblingElement(); } //Read equipmentList while(equipmentElement){ if(strcmp(equipmentElement->Value(), "equipment")== 0){ Equipment equipment; equipment.equipment = equipmentElement->GetText(); equipment.count =1; tempEquipmentInventory.push_back(equipment); // cout << equipmentElement->GetText() << endl; }else{ cout << "no equipment"; } equipmentElement = equipmentElement->NextSiblingElement(); } break; } //subtract the ingredient inventory list for (int i=0; i < ingredientInventory.size(); i++){ for(int j=0; j < tempIngredientInventory.size() ; j++) if(ingredientInventory[i].fooditem==tempIngredientInventory[j].fooditem){ if(ingredientInventory[i].quantity-tempIngredientInventory[j].quantity > 0){ ingredientInventory[i].quantity=ingredientInventory[i].quantity-tempIngredientInventory[j].quantity; if(ingredientInventory[i].unit!=tempIngredientInventory[j].unit){ ingredientInventory[i].unit=ingredientInventory[i].unit+tempIngredientInventory[j].unit; } }else{ ingredientInventory.erase(ingredientInventory.begin()+i); } } } for (int i=0; i < equipmentInventory.size(); i++){ for(int j=0; j < tempEquipmentInventory.size(); j++){ if(equipmentInventory[i].equipment==tempEquipmentInventory[j].equipment){ if (equipmentInventory[i].count-tempEquipmentInventory[j].count>0){ equipmentInventory[i].count=equipmentInventory[i].count-tempEquipmentInventory[j].count; }else{ equipmentInventory.erase(equipmentInventory.begin()+i); } } } } if (!silent){ cout << "Subtract inventory completed" << endl; } return; } }
void MenuList::inputRecipe(){ cin.clear(); cin.ignore(); string inFileName; string line; vector<string> inFileNames; cout << "Please enter the file name:" << endl; // cin >> inFileName; while(getline(cin,line)){ stringstream record(line); record >> inFileName; TiXmlDocument doc; bool loadOkay = doc.LoadFile(inFileName.c_str()); if(!loadOkay){ cerr << doc.ErrorDesc() << endl; }else{ //define root - recipeCollection TiXmlElement *recipeElement = doc.RootElement(); Recipe recipe; while(recipeElement){ //recipe title TiXmlElement *titleElement = recipeElement->FirstChildElement(); TiXmlElement *recipeinfoElement = NULL; TiXmlElement * ingredientlistElement = NULL; TiXmlElement * servingElement = NULL; TiXmlElement * notesElement = NULL; TiXmlElement *preparationElement = NULL; TiXmlElement *equipmentElement = NULL; if(strcmp(titleElement->NextSiblingElement()->Value(),"recipeinfo")==0){ //recipeinfo recipeinfoElement = titleElement->NextSiblingElement(); //ingredientlist ingredientlistElement = recipeinfoElement->NextSiblingElement(); }else{ ingredientlistElement = titleElement->NextSiblingElement(); } //preparation preparationElement = ingredientlistElement->NextSiblingElement(); //ingredient TiXmlElement *ingredientElement = ingredientlistElement->FirstChildElement(); //equipment // equipmentElement = preparationElement->FirstChildElement(); if(strcmp(preparationElement->NextSiblingElement()->Value(),"serving")==0){ servingElement = preparationElement->NextSiblingElement(); if(strcmp(servingElement->NextSiblingElement()->Value(),"notes")==0){ notesElement = servingElement->NextSiblingElement(); } }else if (strcmp(preparationElement->NextSiblingElement()->Value(),"notes")==0){ notesElement = preparationElement->NextSiblingElement(); } if(strcmp(recipeElement->Value(),"recipe")!=0){ cerr << "cannot open recipe file: " << inFileName << endl; } //Read title if(titleElement && (strcmp(titleElement->Value(), "title")== 0)){ recipe.recipeTitle = titleElement->GetText(); // cout << titleElement->GetText() << endl; }else{ cout << "no recipe title" << endl;; } //Read ingredientList while(ingredientlistElement && ingredientElement){ if(strcmp(ingredientElement->Value(), "ingredient")== 0){ Ingredient ingredient; recipe.ingredientsList.push_back(ingredient.inputIngredient(ingredientElement)); }else{ cout << "no ingredient" << endl; } ingredientElement = ingredientElement->NextSiblingElement(); } //Read equipmentList while(preparationElement && equipmentElement){ if(strcmp(equipmentElement->Value(), "equipment")== 0){ Equipment equipment; equipment.equipment = equipmentElement->GetText(); equipment.count =1; recipe.equipmentList.push_back(equipment); // cout << equipmentElement->GetText() << endl; }else{ cout << "no equipment" << endl; } equipmentElement = equipmentElement->NextSiblingElement(); } recipeCollection.push_back(recipe); if (!silent){ cout << "New recipe loaded" << endl; } return; } } } }