Dear Gurus,
I am having this inventory program but can not give me the desired results.What am I doing wrongly? I want a user to enter and display results.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cctype>
using namespace std;
const int DESC_SIZE = 51; // holds inventory description size
const int DATE_SIZE = 11; // holds date size
// Declaration of InventoryItem structure
struct InventoryItem // inventory structure catagories
{
char desc[DESC_SIZE]; // description holds 31 charaters
int quantity; // variable to hold quantity
double whlCost; // variable to hold wholesale cost
double rtlCost; // variable to hold retail cost
char date[DATE_SIZE]; // variable to hold date
int menu();
};
void addRec(fstream &); // function prototype to add a record
void dispRec(fstream &); // function prototype to view a record
void chgRec(fstream &); // function prototype to change a record
int main()
{
long selection; // variable to hold menu selection
//long recNum; // variable to hold the record number of the inventory item
// int menu();
fstream inventory ("Inventory.dat", ios::in | ios::out | ios::binary);
InventoryItem record = {" ", 0, 0.0};
cout << fixed << showpoint << setprecision(2);
cout<<"Inventory Managment"<<endl;
// write the blank records
for (int count = 0; count < 5; count++)
{
inventory.write(reinterpret_cast<char *>(&record),sizeof(record));
}
inventory.close();
inventory.open("Inventory.dat", ios::out | ios::binary);
while (selection != 4)
{
switch(selection)
{
case 1: // Add a new record
{
addRec(inventory);
break;
}
case 2: //View record
{
dispRec(inventory);
break;
}
case 3: //Change record
{
chgRec(inventory);
break;
}
default: //Invalid selection
{
cout << "Invalid selection" << endl;
}
selection = record.menu();
}
}
inventory.close();
system("pause");
return 0;
}
int InventoryItem::menu()
{
long selection;
int choice;
selection = menu();
cout << "Please make a selection, 1 through 4." << endl;
cout << "1. Add a new record" << endl;
cout << "2. View an exisitng record" << endl;
cout << "3. Change an exisitng record" << endl;
cout << "4. Exit" << endl;
cout << endl;
cout <<"Enter your choice (1-4): ";
cin >> choice;
while(choice < 1 || choice > 4)
{
cout << "Invaild selection!" << endl;
cout << "Please enter your choice (1-4) : "<< endl;
cin >> choice;
}
system("pause");
return choice;
}
void addRec(fstream &file) // add new information to inventory
{
cout << "Enter the following inventory data:"<<endl;
fstream inventory("Inventory.dat", ios::out | ios::binary);
InventoryItem record;
//Get new data
cout << "Description: ";
cin.ignore();
cin.getline(record.desc, 51);
cin >> record.desc;
cout << "Quantity: ";
cin >> record.quantity;
cout << "Wholesale cost: ";
cin >> record.whlCost;
cout << "Retail price: ";
cin >> record.rtlCost;
cout << "Date added to inventory (in 00/00/0000 format): ";
cin >> record.date;
inventory.write(reinterpret_cast<char *>(&record),sizeof(record));
cout << "Record added to file."<<endl;
file.close();
}
// view record
void dispRec(fstream &file)
{
fstream inventory ("Inventory.dat", ios::out | ios::binary);
InventoryItem record;
long recNum;
cout << "Enter the record number of the item to view:";
cin >> recNum;
// Go to desired record and read it.
inventory.seekg(recNum * sizeof(record), ios::beg);
inventory.read(reinterpret_cast<char *>(&record),sizeof(record));
cout << "Description: " << record.desc << endl;
cout << "Quantity: " << record.quantity << endl;
cout << "Wholesale cost: " << record.whlCost << endl;
cout << "Retail price: " << record.rtlCost << endl;
cout << "Date (in 00/00/0000 format): " << record.date << endl;
if(file.fail())
file.clear();
file.close();
}
void chgRec(fstream &file) // Change a record
{
fstream inventory ("InventoryFile.dat", ios::out | ios::binary);
InventoryItem record;
long recNum;
cout << "Enter the record number of the item you want to edit: ";
cin >> recNum; //Go to record and read it.
inventory.seekg(recNum * sizeof(record), ios::beg);
inventory.read(reinterpret_cast<char *>(&record),sizeof(record));
cout << "Description: " << record.desc << endl;
cout << "Quantity: " << record.quantity << endl;
cout << "Wholesale cost: " << record.whlCost << endl;
cout << "Retail price: " << record.rtlCost << endl;
cout << "Date (in 00/00/0000 format): " << record.date << endl;
// Go to the beginning of this record's position
inventory.seekp(recNum * sizeof(record), ios::beg);
// Overwrite current record
inventory.write(reinterpret_cast<char *>(&record),sizeof(record));
//Close
inventory.close();
}