#include #include #include #include "final.h" #include 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..." <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; } } }