All pastes #773375 Raw Edit

Untitled

public text v1 · immutable
·published 2007-11-14 14:21 UTC
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;
		}
	}

}