Hello, I'm almost done with this program, but when I want to sell an item (option 2) I get an error after I enter how many 'vector subscript out of range'. The program compiles correctly, but I cannot for the life of me figure this one out. Any Help?
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <iomanip>
using namespace std;
void getData(ifstream& infile, vector<int>& itemID, vector<string>& itemName, vector<int>& pOrdered, vector<int>& pInStore, vector<int>& pSold, vector<double>& manufPrice, vector<double>& sellingPrice);
void do_again(),usersChoice(char ans);
void searchInventory(string searchInput);
void printReport();
void printHeading();
void sellStock(string sellItem, int numSold);
int showMenu();
int ans();
vector<int>itemID, pOrdered, pInStore, pSold;
vector<double>manufPrice,sellingPrice;
vector<string>itemName;
int totalItems;
double totalInv;
unsigned int counter;
int searchName;
int sellName;
int sellNum;
char choice;
string searchInput;
string input;
int noOfRows;
int main()
{
ifstream incode;
incode.open("itemInfo.txt");
if (!incode)
{
cout << "Can't open the input file" << endl;
return 1;
}
getData(incode, itemID, itemName, pOrdered, pInStore, pSold, manufPrice, sellingPrice);
showMenu();
cin.get();
incode.close();
return 0;
}
void getData(ifstream& infile, vector<int>& itemID, vector<string>& itemName, vector<int>& pOrdered, vector<int>& pInStore, vector<int>& pSold, vector<double>& manufPrice, vector<double>& sellingPrice)
{
int sold = 0;
string name;
int id, ordered;
double mPrice;
double sPrice;
char ch;
while (infile >> id)
{
infile.get(ch);
getline(infile, name);
infile >> ordered >> mPrice >> sPrice;
itemID.push_back(id);
itemName.push_back(name);
pOrdered.push_back(ordered);
pInStore.push_back(ordered);
pSold.push_back(sold);
manufPrice.push_back(mPrice);
sellingPrice.push_back(sPrice);
}
}
void usersChoice(char ans)
{
int counter2 = 1;
switch (choice)//roll thru options
{
case '1': //if they picked the number 1, its gonna go to this function,
//thats pretty much how the whole thing works
unsigned int counter;
cout << "\n\n\t\tWhich item would you like to check the inventory for?\n\n";
for (counter = 0; counter < itemName.size(); counter++)
{
cout << "\t\t\t" << counter + 1 << ". " << itemName[counter] << "\n";
}
cout << "\n\n\t\t\t Choice: ";
cin >> searchName;
//cout << "\n\n\t" << itemName[searchName - 1];
//input = ;
searchInventory(itemName[searchName - 1]);
break;
case '2':
// run sellStock function
cout << "Which item would you like to sell?"
<< endl;
for (counter = 0; counter < itemName.size(); counter++)
{
cout << "\t\t\t" << counter + 1 << ". " << itemName[counter] << "\n";
}
cout << "\n\n\t\t\t Choice: ";
cin >> sellName;
cout << "\n\t\tHow many would you like to sell? ";
cin >> numSold;
sellStock(itemName[sellName - 1], numSold);
break;
case '3':
// run print Report
printHeading();
printReport();
break;
case '4':
// exit the program
break;
default://THEY'RE NOT FOLLOWING DIRECTIONS?!?!
cout << "\t\tInvalid Input"
<< endl;//if directions aren't followed
}//end switch
}//end function
int showMenu()
{
do
{
cout << "\n\n\t\tPlease choose from the following menu (1, 2, 3, or 4 to EXIT):\n";
cout << "\n\t\t (1) Check if an item is in inventory";
cout << "\n\t\t (2) Sell an item";
cout << "\n\t\t (3) Print a report\n\n";
cout << "\n\t\t (4) Exit\n\n\t\t\t Choice: ";
cin >> choice;
usersChoice(choice);//send that answer to usersChoice!
}while(choice != '4');
return choice;
}
void searchInventory(string searchInput)
{
for (counter = 0; counter < itemName.size(); counter++)
if(itemName[counter] == searchInput)
cout << "\n\t\tThere are " << pInStore[counter] << " " << searchInput << "s in stock.";
}
void printHeading()
{
cout << "\n\n\t\t\t\tFriendly Hardware Store" << endl << endl;
cout << "\tItemID\t" << "ItemName\t" << "pOrdered" << " pInStore" << " pSold" << " manufPrice" << " sellingPrice\n\n";
}
void printReport ()
{
unsigned int x;
double totalInventory = 0.00; //Value of all available inventory
int totalItems = 0;
double itemInventory = 0.00;
for (x = 0; x <= itemID.size() - 1; x++)
{
cout << "\t" << itemID[x] << "\t" << itemName[x] << "\t" << pOrdered[x] << "\t " << pInStore[x] << "\t " << pSold[x] << "\t " << "$" << manufPrice[x] << ".00" << "\t" << "$" << sellingPrice[x] << ".00\n\n";
itemInventory = static_cast<double>(pInStore[x]) * sellingPrice[x];
totalInventory = totalInventory + itemInventory;
totalItems = totalItems + pInStore[x];
}
cout << "Total Inventory: $" << totalInventory << endl;
cout << "Total number of items in the store: " << totalItems << endl;
}
void sellStock(string sellItem, int numSold)
{
int totalItems = 0;
double itemInventory = 0.00;
double totalInventory = 0.00;
for (counter = 0; counter < 6; counter++)
if(sellItem == itemName[counter])
pInStore[counter] = pInStore[counter] - numSold;
pSold[counter] = pSold[counter] + numSold;
totalItems = totalItems + pInStore[counter];
totalItems = totalItems - numSold;
totalInventory = totalInventory - (sellingPrice[counter] * numSold);
printHeading();
printReport();
}