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();   
}

Recommended Answers

All 2 Replies

So what's the problem? Please give details.

Dear mweshk

there are far too many errors in your code, i managed to make the program work.. but ...

#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 imenu;

    fstream inventory ("Inventory.dat",ios::in | ios::out | ios::binary |ios::app);
/*      if(!inventory)
        {
                cout<<"Cannot Open the file"<<endl;
                return -1;
        }*/

    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 | ios::app);

do
    {
        selection=record.menu();

       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;
            }

        }

    } while(selection!=4) ;

    inventory.close();

//    system("pause");
    return 0;

 }

 int InventoryItem::menu()

 {
         long selection;
     int choice;

     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 |ios::app);
     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::in | 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();
}
commented: Do not fix homework for people. They learn nothing from this post since you didn't bother to tell him what you fixed -- AND it's not your homework. -4
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.