Pointers/Inheritance – Inventory system
include
include
include
include
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 << "nAdd 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 << "nEnter (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 << "nGood bye." << endl; break; } } return 0;
}
Looking for a Similar Assignment? Order now and Get 10% Discount! Use Coupon Code “Newclient”
The post Pointers/Inheritance – Inventory system appeared first on Academic Heroes.
The post Pointers/Inheritance – Inventory system appeared first on Academic Heroes.
Looking for a Similar Assignment? Order now and Get 10% Discount! Use Coupon Code "Newclient"
