Hi, I'm doing this programming exercise for my C++ class. I'm using Microsoft Visual C++. for some reason, the program wouldn't save my data. Can someone please take a look at my code and tell me what I did wrong?
/*
Chapter 12 HOMEWORK
Dung Tran
CS 116 C++ programming
Chapter 12 Programming Exercise #11 Inventory Program
Requirements:
Write a program that uses a structure to store these datas in a file:
- item Description
- Quantity on hand
- wholesale cost
- retail cost
The program should have a menu that allows the usess to perform the following tasks:
- add new records to the file
- display any record in the file
- change any record in the file
*/
#include <iostream>
#include <fstream>
using namespace std;
// Declaration of InventoryItem structure
struct InventoryItem
{
char desc[51]; //item description
int qty; //quantity on hand
float wholesale; //wholesale price
float retail; //retail price
};
//Function Prototypes
int menu();
void AddRecord(fstream &);
void DisplayRecord(fstream &);
void ChangeRecord(fstream &);
int main()
{
int choice;
fstream inventory ("Inventory.dat", ios::out | ios::binary);
InventoryItem record = {" ", 0, 0.0};
//writing the blank records
for (int count = 0; count < 5; count++)
{
inventory.write(reinterpret_cast<char *>(&record), sizeof(record));
}
//inventory.read(reinterpret_cast<char *>(&record), sizeof(record));
inventory.close();
inventory.open("Inventory.dat", ios::out | ios::binary);
do
{
choice = menu();
switch (choice)
{
case 1: AddRecord(inventory);
break;
case 2: DisplayRecord(inventory);
break;
case 3: ChangeRecord(inventory);
break;
case 4: cout << "Exiting Program...\n\n";
}
}while (choice != 4);
inventory.close();
return 0;
}
int menu ()
{
int selection;
cout << "What would you like to do?\n";
cout << "1) add a new record to the file\n";
cout << "2) view a record in the file\n";
cout << "3) change a record in the file\n";
cout << "4) Exit Program\n\b";
cout << "Please enter 1, 2, 3, or 4: ";
cin >> selection;
while (selection< 1 || selection > 4)
{
cout << "Invalid Choice!!\n";
cin >> selection;
}
return selection;
}
void ChangeRecord(fstream &file)
{
fstream inventory ("Inventory.dat", ios::out | ios::binary);
InventoryItem record;
long recNum;
// Get the record number of the desired record.
cout << "Which record do you want to edit? ";
cin >> recNum;
// Move to the record and read it.
inventory.seekg(recNum * sizeof(record), ios::beg);
inventory.read(reinterpret_cast<char *>(&record),
sizeof(record));
// Display the record contents
cout << "Description: ";
cout << record.desc << endl;
cout << "Quantity: ";
cout << record.qty << endl;
cout << "Wholesale Price: ";
cout << record.wholesale << endl;
cout << "Retail Price: ";
cout << record.retail << endl;
// Get the new record data.
cout << "Enter the new data:\n";
cout << "Description: ";
cin.ignore();
cin.getline(record.desc, 31);
cout << "Quantity: ";
cin >> record.qty;
cout << "Wholesale Price: ";
cin >> record.wholesale;
cout << "Retail Price: ";
cin >> record.retail;
// Move back to the beginning of this record's position.
inventory.seekp(recNum * sizeof(record), ios::beg);
// Write the new record over the current record.
inventory.write(reinterpret_cast<char *>(&record),
sizeof(record));
// Close the file.
inventory.close();
}
void DisplayRecord(fstream &file)
{
fstream inventory ("Inventory.dat", ios::out | ios::binary);
InventoryItem record;
long recNum;
// Get the record number of the desired record.
cout << "Which record would you like to open? ";
cin >> recNum;
// Move to the record and read it.
inventory.seekg(recNum * sizeof(record), ios::beg);
inventory.read(reinterpret_cast<char *>(&record),
sizeof(record));
// Display the record contents
cout << "Description: ";
cout << record.desc << endl;
cout << "Quantity: ";
cout << record.qty << endl;
cout << "Wholesale Price: ";
cout << record.wholesale << endl;
cout << "Retail Price: ";
cout << record.retail << endl;
//clear any error state
if (file.fail())
file.clear();
//closing the file
file.close();
}
void AddRecord(fstream &file)
{
cout << "Please enter the information for the new data: \n";
fstream inventory ("Inventory.dat", ios::out | ios::binary);
InventoryItem record;
//Info of the new data
cout << "Description: ";
cin.ignore();
cin.getline(record.desc, 31);
cout << "Quantity: ";
cin >> record.qty;
cout << "Wholesale Price: ";
cin >> record.wholesale;
cout << "Retail Price: ";
cin >> record.retail;
inventory.write(reinterpret_cast<char *>(&record),
sizeof(record));
//closing the file
file.close();
}