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

Recommended Answers

All 6 Replies

Nice to hear from you again. Looks like you've really improved!

Unfortunately, my schedule is much tighter these days, so I don't have the time to help you out explicitly, but perhaps this may help...

http://cplus.about.com/od/beginnerctutorial/l/aa051802a.htm

It's a simple tutorial for file I/O.
I hope it's helpful.

Nice to hear from you again. Looks like you've really improved!

Unfortunately, my schedule is much tighter these days, so I don't have the time to help you out explicitly, but perhaps this may help...

http://cplus.about.com/od/beginnerctutorial/l/aa051802a.htm

It's a simple tutorial for file I/O.
I hope it's helpful.

WOW, you still remember me?!! :surprised I mean, there are tons of people on this website! :surprised . LOL. I guess I did ask a lot of questions.

It's nice of you to follow my progress. I'd hope that I'm better now. But I'm still only in 2nd semester of C++. Still have much to learn.

Anyway, thanks for the link. I just figured out my coding mistakes. But I'll take a look at the site. Attaining more knowledge is always good.

Thanks again

I have something like you that I am doing....What was wrong with your code???

Thanks
smi

I don't think your question will get an answer seeing as how karen_CSE hasn't been active since 2006.

Well thanks... Could you tell me what is wrong? We are using a more basic C ++ language then shown above. Could you tell me what you think is wrong?

I have a better idea. Why don't you start a new thread, post your code, and ask a question specific to your problem. That's more likely to result in a useful answer to you.

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.