All pastes #772872 Raw Edit

Stuff

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

}