rendered paste body#include <iostream>
#include <string>
#include <iomanip>
#include "final.h"
#include <fstream>
using namespace std;
void displayUserMenu(invItem* &, invItem* &);
void displayInv(invItem* &);
void addNode(invItem* newNode, invItem* &, invItem* &);
void removeNode(invItem* pOldNode, invItem* pHead, invItem* pTail);
//void saveToFile(invItem* pNode);
invItem* addItem();
void main() {
invItem* pHead = NULL;
invItem* pTail = NULL;
string fileName,line;
cout << "enter the filename: ";
cin >> fileName;
ifstream pFile(fileName.c_str());
if(pFile == 0) {
exit(0);
}
getline(pFile,line);
int j = (int)line.length()-1;
while(!line.empty()) {
invItem* newItem = new invItem();
int index = (int)line.find(',');
string itemName = line.substr(0,index);
newItem->setName(itemName);
line = line.substr(index+1,line.length());
index = (int)line.find(',');
string itemQoh = line.substr(0,index);
newItem->setQoh(atoi(itemQoh.c_str()));
line = line.substr(index+1,line.length());
index = (int)line.find(',');
string itemWholePrice = line.substr(0,index);
newItem->setWholePrice(atof(itemWholePrice.c_str()));
string itemRetailPrice = line.substr(index+1,line.length());
newItem->setRetailPrice(atof(itemRetailPrice.c_str()));
addNode(newItem,pHead,pTail);
getline(pFile,line);
}
while(true) {
displayUserMenu(pHead, pTail);
}
}
void displayUserMenu(invItem* &pHead, invItem* &pTail) {
int uInput;
invItem* currentNode = pHead;
cout << setw(8) << fixed << left << "1. Add new item" << endl;
cout << setw(8) << fixed << left << "2. Remove an item" << endl;
cout << setw(8) << fixed << left << "3. Display inventory" << endl;
cout << setw(8) << fixed << left << "4. Save inventory" << endl;
cout << setw(8) << fixed << left << "5. Exit program" << endl;
cout << "your selection: ";
cin >> uInput;
switch(uInput) {
case 1:
//add new item
system("cls");
addItem();
break;
case 2:
//remove an item
system("cls");
removeNode(currentNode,pHead,pTail);
break;
case 3:
//display inventory
system("cls");
displayInv(pHead);
break;
case 4:
//save inventory
system("cls");
break;
case 5:
//exit program
system("cls");
cout << "exiting application...." << endl;
cout << endl;
exit(0);
break;
default:
cout << "invalid selection";
}
cout << endl;
}
void displayInv(invItem* &pHead) {
invItem* current = pHead;
cout << setw(9) << "Name"
<< setw(5) << "QoH"
<< setw(8) << "Retail"
<< setw(10) << "Wholesale"
<< endl;
while(current != NULL) {
cout << setw(9) << current->getName()
<< setw(5) << current->getQoh()
<< setw(8) << setprecision(2) << current->getRetailPrice()
<< setw(10) << current->getWholePrice()
<< endl;
current = current->getNext();
}
}
void addNode(invItem* newNode, invItem* &pHead, invItem* &pTail) {
invItem* current = pHead;
if(pHead == NULL) {
pHead = newNode;
pTail = newNode;
} else {
while(current != NULL) {
string temp = newNode->getName();
string temp2 = current->getName();
if(temp2.compare(temp) > 0) {
current->insert(newNode);
if(current == pHead) {
pHead = newNode;
}
return;
} else if (current == pTail) {
current->append(newNode);
pTail = newNode;
return;
}
if(temp2.compare(temp) == 0) {
cout << "item exists already..." <<endl;
return;
}
current = current->getNext();
}
}
}
invItem* addItem() {
invItem* newItem = new invItem();
invItem* pHead = NULL;
invItem* pTail = NULL;
string itemName;
int itemQoh;
double itemRetailPrice,itemWholePrice;
cout << "enter the new item name: ";
cin >> itemName;
newItem->setName(itemName);
cout << "enter the qoh: ";
cin >> itemQoh;
newItem->setQoh(itemQoh);
cout << "enter the retail price: ";
cin >> itemRetailPrice;
newItem->setRetailPrice(itemRetailPrice);
cout << "enter the wholesale price: ";
cin >> itemWholePrice;
newItem->setWholePrice(itemWholePrice);
addNode(newItem,pHead,pTail);
return newItem;
}
void removeNode(invItem* pOldNode, invItem* pHead, invItem* pTail) {
displayInv(pHead);
cout << endl;
string itemName;
invItem* currentNode = pHead;
invItem* prevNode = currentNode->getPrev();
invItem* nextNode = currentNode->getNext();
cout << "name of item to remove: ";
cin >> itemName;
string currentName = currentNode->getName();
while(currentNode != NULL) {
if(itemName.compare(currentName) == 0) {
prevNode->setNext(nextNode);
nextNode->setPrev(prevNode);
return;
}
}
}