Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I am able to view the image just fine, can you try a different browser, I\'ve as

ID: 3852587 • Letter: I

Question

I am able to view the image just fine, can you try a different browser, I've ask 8 questions posting all the exact same way and most of them has been answer already. I can see the image from iPhone, Laptop and Desktop computer. Can you have someone else answer if you are unable to view it.

Pointers/Inheritance Inventory system In this assignment, you'll make an inventory system for a store's items, including produce and books. The starter program is an inventory system for only produce. 1. Include the price of an item by adding to the ltem class the protected data member int pricelnDollars that stores the price in dollars of an individual item. Write a public function SetPrice with a single int parameter prclnDilirs and returns nothing. SetPrice assigns the value of prclnDilrs to pricelnDollars. Modify the Additem Tolnventory to prompt the user to "Enter the price per item: S", then set the Produce's price to the user-entered value. Modify Produce's Print function output to include the item's individual price. Here is an example output for 20 grape bundles at $3 each that expire on May 22. Grape bundle x20 for S3 (Expires: May 22) 2. Add a new class Book that derives from Item. The Book class has a private data member that is a string named author. The Book class has a public function member SetAuthor with the parameter string authr that sets the private data member author's value. SetAuthor returns nothing The class Book overloads the Print member function with a similar output as the Produce's Print function, except "Expires" is replaced with "Author" and the variable "expiration" is replaced with "author". Here is an example output for 22 copies of Io Kill a Mockingbird by Harper Lee that sells for $5 each To Kill a Mockingbird x22 for $5 (Author: Harper Lee) 3. Modify the AddltemTolnventory function to allow the user to choose between adding a book (b) and produce (p). If the user does not enter 'b' or 'p', then output "Invalid choice" then return the Addltem Tolnventory function. p). If the user does not enter b 4. Create a class named Inventory. The Inventory class should have one private data member:

Explanation / Answer

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;

class Item {
    public:
        void SetName(string nm)
            { name = nm; };
        void SetQuantity(int qnty)
            { quantity = qnty; };
       void SetPrice(int prcinDllrs)
           { priceInDollars = prcinDllrs; };
        virtual void Print()
            { cout << name << " " << quantity << endl; };
        virtual ~Item()
            { return; };
       int GetTotalValueAsPrice()
           { return (quantity * priceInDollars); };
    protected:
        string name;
        int    quantity;
       int   priceInDollars;
};

class Produce : public Item { // Derived from Item class
    public:
        void SetExpiration(string expir)
            { expiration = expir; };
        void Print()
            { cout << name << " x" << quantity
              << " for " << priceInDollars
              << " (Expires: " << expiration << ")"
              << endl;
            };
    private:
        string expiration;
};

class Book : public Item {
   public:
       void SetAuthor(string authr)
           { author = authr; };
       void Print()
       {
           cout << name << " x" << quantity
               << " for " << priceInDollars
               << " (Author: " << author << ")"
               << endl;
       };
   private:
       string author;
};


class Inventory {
   public:
       void PrintInventory();
       void AddItemToInventory();
       void UpdateItemQtyInInventory();
       void RemoveItemFromInventory();  
   private:
       void SumInv();
       vector<Item*> inventory;
       int totalInvPriceDollars;
};

   // Print all items in the inventory
   void Inventory::PrintInventory() {
       unsigned int i = 0;
       if (inventory.size() == 0) {
           cout << "No items to print." << endl;
       }
       else {
           for (i = 0; i<inventory.size(); ++i) {
               cout << i << " - ";
               inventory.at(i)->Print();
           }
           cout << "Total inventory value: $" << this->totalInvPriceDollars << endl;
       }
       return;
   }

   // Dialogue to create a new item, then add that item to the inventory
   void Inventory::AddItemToInventory() {
       Produce* prdc;
       string usrInptName = "";
       string usrInptQntyStr = "";
       istringstream inSS;
       int usrInptQnty = 0;
       string usrInptExpr = "";
       int usrPrice = 0;
       string usrInpt = "";
       string usrAuthor = "";
       Book* book;

       // Get user choice
       cout << " Add a book (b) or produce (p): ";
       getline(cin, usrInpt);

       if ((usrInpt.at(0) != 'b') && (usrInpt.at(0) != 'p')) {
           cout << "Invalid choice";
           return;
       }

       if (usrInpt.at(0) == 'p') {
           cout << "Enter name of new produce: ";
       }
       else {
           cout << "Enter name of new book: ";
       }

       getline(cin, usrInptName);

       cout << "Enter quantity: ";
       getline(cin, usrInptQntyStr);
       inSS.str(usrInptQntyStr);
       inSS >> usrInptQnty;
       inSS.clear();

       if (usrInpt.at(0) == 'p') {
           cout << "Enter expiration date: ";
           getline(cin, usrInptExpr);
       }
       else {
           cout << "Enter author: ";
           getline(cin, usrAuthor);
       }

       cout << "Enter the price per item: $";
       cin >> usrPrice;

       if (usrInpt.at(0) == 'p') {
           prdc = new Produce;
           prdc->SetName(usrInptName);
           prdc->SetQuantity(usrInptQnty);
           prdc->SetExpiration(usrInptExpr);
           prdc->SetPrice(usrPrice);

           this->inventory.push_back(prdc);
       }
       else {
           book = new Book;
           book->SetName(usrInptName);
           book->SetQuantity(usrInptQnty);
           book->SetAuthor(usrAuthor);
           book->SetPrice(usrPrice);

           this->inventory.push_back(book);
       }
       this->SumInv();
       return;
   }

   // Dialogue to update the quantity of an item, then update that item in the inventory
   void Inventory::UpdateItemQtyInInventory() {
       string usrIndexChoiceStr = "";
       unsigned int usrIndexChoice = 0;
       istringstream inSS;
       string usrInptQntyStr = "";
       int usrInptQnty = 0;

       if (inventory.size() == 0) {
           cout << "No items to update." << endl;
       }
       else {
           this->PrintInventory();

           do {
               cout << "Update which item #: ";
               getline(cin, usrIndexChoiceStr);
               inSS.str(usrIndexChoiceStr);
               inSS >> usrIndexChoice;
               inSS.clear();
           } while (!(usrIndexChoice < inventory.size()));

           cout << "Enter new quantity: ";
           getline(cin, usrInptQntyStr);
           inSS.str(usrInptQntyStr);
           inSS >> usrInptQnty;
           inSS.clear();

           inventory.at(usrIndexChoice)->SetQuantity(usrInptQnty);
       }
       this->SumInv();
       return;
   }

   // Dialogue to remove a specific item, then remove that specific item from the inventory
   void Inventory::RemoveItemFromInventory() {
       istringstream inSS;
       string usrIndexChoiceStr = "";
       unsigned int usrIndexChoice = 0;
       string usrInptQntyStr = "";

       if (inventory.size() == 0) {
           cout << "No items to remove." << endl;
       }
       else {
           this->PrintInventory();

           do {
               cout << "Remove which item #: ";
               getline(cin, usrIndexChoiceStr);
               inSS.str(usrIndexChoiceStr);
               inSS >> usrIndexChoice;
               inSS.clear();
           } while (!(usrIndexChoice < inventory.size()));

           inventory.erase(inventory.begin() + usrIndexChoice);
       }
       this->SumInv();
       return;
   }

   // Compute the inventory's Total Price
   void Inventory::SumInv() {
       int total = 0;

       for (int i = 0; i < inventory.size(); ++i) {
           total += inventory.at(i)->GetTotalValueAsPrice();
       }
       this->totalInvPriceDollars = total;

       return;
   }


int main() {
    Inventory* inventory;
    string usrInptOptn = "default";

   inventory = new Inventory;
  
    while (true) {
        // Get user choice      
        cout << " Enter (p)rint, (a)dd, (u)pdate, (r)emove, or (q)uit: ";      
        getline(cin >> ws, usrInptOptn);

        // Process user choice
        if (usrInptOptn.size() == 0) {
            continue;
        } else if (usrInptOptn.at(0) == 'p') {
            inventory->PrintInventory();
        } else if (usrInptOptn.at(0) == 'a') {
            inventory->AddItemToInventory();
        } else if (usrInptOptn.at(0) == 'u') {
            inventory->UpdateItemQtyInInventory();
        } else if (usrInptOptn.at(0) == 'r') {
            inventory->RemoveItemFromInventory();
        } else if (usrInptOptn.at(0) == 'q') {
            cout << " Good bye." << endl;
            break;
        }
    }

    return 0;
}