Hello,
I have seriously tried to work on this in different manners and now I am back to an infinite output. I have posted for the past 3 days and the responses have just been questions so I am not sure if this is something difficult but I really need help with this. I cannot get this string to store in the array appropriately.
My code is the following:
public:
Tools(int = -1, string = "", int = 0, double = 0.0); // default tools constructor
// accessor functions for partNumber, toolName, inStock, unitPrice
void setPartNumber(int);
int getPartNumber() const;
void validatePartNumber(int);
void setToolName(string);
string getToolName() const;
void setInStock(int);
int getInStock() const;
void setUnitPrice(double);
double getUnitPrice() const;
void createAndInitializeTextFile();
void enterRecords();
bool test();
void printHeader();
void processChoice();
int enterChoice();
void printTextFile(fstream&);
void updateRecord(fstream&);
void newRecord( fstream& );
void deleteRecord( fstream& );
void outputLine( ostream&, const Tools & );
int getPart( const char * const );
private:
static const int size = 20;
enum Choices { PRINT = 1, UPDATE, NEW, DELETE, END };
int partNumber; // part id number (tool identifitcation number) is the record number (record key)
char toolName[20]; // tool name
int inStock; // in stock
double unitPrice; // price per unit
}; // end class Tools
Member function definitions:
void Tools::setToolName(string toolNameString)
{
// copy at most 20 characters for the tool name
const char *toolNameValue = toolNameString.data();
int length = int(toolNameString.size());
length = (length < size ? length : 19);
strncpy(toolName, toolNameValue, length);
toolName[ length ] = '\0'; // append null character to lastName
}
void Tools::enterRecords()
{
fstream outTools( "hardware.dat", ios::in | ios::out | ios::binary );
// exit program if fstream cannot open file
if ( !outTools )
{
cerr << "File could not be opened." << endl;
exit( 1 );
} // end if
// require user to specify a tool identification number
cout << "Enter tool identification number (1 to 100, 0 to end input): ";
cin >> partNumber;
Tools tool; // create the object
// user enters information, which is copied into file
while (partNumber != 0)
{
validatePartNumber(partNumber);
string tempTool = "";
// user enters tool name, quantity and unit price
cout << "Enter the tool name: ";
cin >> tempTool;
setToolName(tempTool);
//fflush(stdin);
//cin.getline( toolName, size, '\n' );
//cin.clear();
//cin.get(toolName,size);
//cin >> toolName;
//setToolName(toolName);
cout << "Enter the quantity in stock: ";
cin >> inStock;
cout << "Enter the unit price: ";
cin >> unitPrice;
// set the record for the part number, tool name, quantity in stock, and unit price
tool.setPartNumber( partNumber );
//tool.setToolName( toolName );
tool.setInStock( inStock );
tool.setUnitPrice( unitPrice );
// seek position in file of user-specified record
outTools.seekp( ( tool.getPartNumber() - 1 ) * sizeof ( Tools ) );
// write user-specified information in file
outTools.write( reinterpret_cast < const char * >( &tool ),sizeof ( Tools) );
//enable user to enter another account
cout << "\nEnter tool identification number (1 to 100, 0 to end input): ";
cin >> partNumber;
} // end while loop
} // end enterRecords function