there are 3 files
lab8.cpp
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include "HardwareData.h"
using namespace std;
int main()
{
HardwareData blankHardwareData;
HardwareData myHardwareData;
HardwareData inHardwareData;
int intSentinal = 1;
int intChoice;
string strFileName;
string strtmpToolName = " ";
double dbltmpCostPerTool;
int inttmpRecordNumber;
int inttmpToolQuantity;
string strDump;
char *tmpFileName;
cout << "Enter file name: ";
getline(cin, strFileName);
//getline(cin, strDump);
tmpFileName = (char*)strFileName.c_str();
fstream inOutHardwareData(tmpFileName, ios::in | ios::out | ios::binary);
if(!inOutHardwareData)
{
fstream inOutHardwareData(tmpFileName, ios::out | ios::binary);
for(int intLoop = 0; intLoop < 100; intLoop++)
inOutHardwareData.write( reinterpret_cast< const char * >( &blankHardwareData ), sizeof(HardwareData));
inOutHardwareData.close();
inOutHardwareData.open(tmpFileName, ios::in | ios::out | ios::binary);
};
while(intSentinal >=0 )
{
fstream inOutHardwareData(tmpFileName, ios::in | ios::out | ios::binary);
if(!inOutHardwareData)
{
fstream inOutHardwareData(tmpFileName, ios::out | ios::binary);
for(int intLoop = 0; intLoop < 100; intLoop++)
inOutHardwareData.write( reinterpret_cast< const char * >( &blankHardwareData ), sizeof(HardwareData));
inOutHardwareData.close();
inOutHardwareData.open(tmpFileName, ios::in | ios::out | ios::binary);
};
cout << "\n\nPlease select an option\n1)Enter a file name\n2)Display Records\n3)Enter new data\n4)quit\nChoice: ";
cin >> intChoice;
switch(intChoice)
{
case 1:
{
cout << "Enter file name: ";
getline(cin, strFileName);
//getline(cin, strDump);
tmpFileName = (char*)strFileName.c_str();
inOutHardwareData.close();
/*inOutHardwareData(tmpFileName, ios::in | ios::out | ios::binary);
if(!inOutHardwareData)
{
fstream inOutHardwareData(tmpFileName, ios::out | ios::binary);
for(int intLoop = 0; intLoop < 100; intLoop++)
inOutHardwareData.write( reinterpret_cast< const char * >( &blankHardwareData ), sizeof(HardwareData));
inOutHardwareData.close();
inOutHardwareData.open(tmpFileName, ios::in | ios::out | ios::binary);
};*/
break;
}
case 2:
{
inOutHardwareData.seekg( 0 );
inOutHardwareData.read( reinterpret_cast< char * >( &inHardwareData ), sizeof( HardwareData ) );
cout << "record number Tool Name #tools cost per tool\n";
for(int intLoop = 0; intLoop < 100; intLoop++)
{
if(inHardwareData.getToolQuantity() != 0)
{
inttmpToolQuantity = inHardwareData.getToolQuantity();
cout << "a";
dbltmpCostPerTool = inHardwareData.getCostperUnit();
cout << "b";
//cout << inHardwareData.getToolName();
cout << "c";
cout << "\n" << left << setw(15) << (intLoop+1) << " " ;
inHardwareData.printToolName();
cout <<" " << setw(5) << inttmpToolQuantity << " $" << setprecision(2) << setw(10) << dbltmpCostPerTool;
};
inOutHardwareData.read( reinterpret_cast< char * >( &inHardwareData ), sizeof( HardwareData ) );
};
inOutHardwareData.close();
break;
}
case 3:
{
cout << "\nEnter record number to edit: ";
cin >> inttmpRecordNumber;
cout << "Enter tool name: ";
getline(cin, strDump);
getline(cin, strtmpToolName);
cout << "Enter number of tools: ";
//getline(cin, strDump);
cin >> inttmpToolQuantity;
cout << "Enter cost per tool: ";
cin >> dbltmpCostPerTool;
cout << "starting";
//inOutHardwareData.close();
myHardwareData.setData( inttmpToolQuantity, dbltmpCostPerTool, strtmpToolName );
cout << "data set";
//fstream inOutHardwareData(tmpFileName, ios::in | ios::out | ios::binary);
inOutHardwareData.seekp((inttmpRecordNumber - 1) * sizeof(HardwareData));
cout << "location sought";
inOutHardwareData.write( reinterpret_cast< const char * >(&myHardwareData), sizeof(HardwareData));
cout << "data written";
inOutHardwareData.close();
cout << "file closed";
break;
}
case 4:
{
intSentinal = -1;
inOutHardwareData.close();
break;
};
};
};
myHardwareData.~HardwareData();
};
HardwareData.h
//#ifndef HARDWAREDATA_H
//#define HARDWAREDATA_H
#include <string>
using namespace std;
class HardwareData
{
public:
HardwareData();
~HardwareData();
string getToolName();
double getCostperUnit();
int getToolQuantity();
void setData( int, double, string );
void setCurrentRecord( int );
void printToolName();
//private:
//int intRecordNumber
int intToolQuantity;
double dblCostPerTool;
string strToolName;
//string strFileName;
};
and HardwareData.cpp
#include <string>
#include <iostream>
//#include <fstream>
#include <iomanip>
//#include <cstdlib>
#include "HardwareData.h"
using namespace std;
HardwareData::HardwareData(/*strint strEnteredFileName*/)
{
//strFileName = strEnteredFilename;
//intRecordNumber = 1;
strToolName = " ";
dblCostPerTool = 0;
intToolQuantity = 0;
};
HardwareData::~HardwareData()
{
}
void HardwareData::printToolName()
{
cout << strToolName;
};
void HardwareData::setData( int intEnteredToolQuantity, double dblEnteredCostPerTool, string strEnteredToolName)
{
//intRecordNumber = intEnteredRecordNumber;
cout << "a";
intToolQuantity = intEnteredToolQuantity;
cout << "b";
dblCostPerTool = dblEnteredCostPerTool;
cout << "c";
strToolName.swap( strEnteredToolName );
cout << "d";
};
double HardwareData::getCostperUnit()
{
return(dblCostPerTool);
};
string HardwareData::getToolName()
{
return(strToolName);
};
int HardwareData::getToolQuantity()
{
return(intToolQuantity);
};
I've isolated it to the string but I don't know why it's not working. I'm guessing I'm either reading the data wrong or when the data's read it's format is different somehow or I'm writing the string to the file wrong. any help would be appreciated.

New Topic/Question
Reply
MultiQuote






|