-
you just got my feet moving. Thanks for the post. I was not seeing that.
Now I just need to figure out how to for example enter two sets of data through the loop above. Data is written to file. Then in the bottom search function be able to type termnumber 1 or 2 and get it to display the info.
Thanks again for getting me moving.
-
Okay thanks for that great info. I should of caught that , and my compliler should have said something about that. It did i just didnt understand what it was telling me.
here is the revised code. My search function doesnt work,,, it never finds a search == Termnumber and proceds to the error statement.
Any suggestions:
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include<cassert>
using namespace std;
void main()
{
string bldg;
char accessCode;
int transRate;
string termType;
int serviceDay;
int serviceMonth;
int serviceYear;
int TermNumber;
int TotalTerm;
cout << "Enter total number of Terminals to store (INT) " << "\n";
cin >> TotalTerm;
ofstream outFile("afile.txt");
assert(outFile.is_open());
for (int i=0; i < TotalTerm; i++)
{
cout << "Enter Terminal Number (INT): " << "\n";
cin >> TermNumber;
cout << "Enter Transmission rate (INT): " << "\n";
cin >> transRate;
cout << "Enter terminal type (String): " << "\n";
cin >> termType;
cout << "Enter building terminal is located (String): " << "\n";
cin >> bldg;
cout << "Enter access code to terminal (Char): " << "\n";
cin >> accessCode;
cout << "Enter day of last servicing date (dd) (INT): " << "\n";
cin >> serviceDay;
cout << "Enter month of last servicing date (mm)(INT): " << "\n";
cin >> serviceMonth;
cout << "Enter year of the last servicing date (YYYY) (INT): " << "\n";
cin >> serviceYear;
}
outFile << TermNumber << transRate << termType << bldg << accessCode << serviceDay << serviceMonth << serviceYear;
outFile.close();
/* This section gets value from the closed file */
ifstream inFile("afile.txt");
if(!inFile)
{
cerr << "File could not be opened!" << "\n";
exit (1);
}
cout << "Enter Terminal number to search for: " << "\n";
int search;
cin >> search;
char ch;
inFile >> TermNumber >> transRate >> termType >> bldg >> accessCode >> serviceDay >> serviceMonth >> serviceYear;
if (search == TermNumber)
{
ch = inFile.get();
cout << TermNumber << " " << bldg << " " << accessCode << "\n";
cout << transRate << " " << termType << " " << serviceDay << "\n";
cout << serviceMonth << " " << serviceYear << "\n";
}
else
cout << "please re run the program" ;
}
-
You are never writing more then one record to the file.
put the output statement inside the loop.
for the search part you have to use a loop as well.
Kurt
-
Thanks again for the suggestions. I put the output inside the loop and did some tests it appears the data gets written over with the next set of questions. Any suggestions on how to get it to keep both sets of data??
-
If that happenes then you propably open and close the output stream inside the loop as well.
show your code.
Kurt
-
Zuk I started to go down another route using a class still seems to have the same problems. Any suggestions??
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include<cassert>
using namespace std;
class TermInfo
{
public:
string bldg;
char accessCode;
int transRate;
string termType;
int serviceDay;
int serviceMonth;
int serviceYear;
int TermNumber;
};
void main()
{
/* int TotalTerm; */
int const TotalTerm = 2;
cout << "Enter two sets of data for your terminal entrys today" << "\n";
/* cin >> TotalTerm; */
ofstream outFile("afile.txt");
assert(outFile.is_open());
TermInfo info[TotalTerm];
for (int i=0; i < TotalTerm; i++)
{
cout << "Enter Terminal Number (INT): " << "\n";
cin >> info[i].TermNumber;
cout << "Enter Transmission rate (INT): " << "\n";
cin >> info[i].transRate;
cout << "Enter terminal type (String): " << "\n";
cin >> info[i].termType;
cout << "Enter building terminal is located (String): " << "\n";
cin >> info[i].bldg;
cout << "Enter access code to terminal (Char): " << "\n";
cin >> info[i].accessCode;
cout << "Enter day of last servicing date (dd) (INT): " << "\n";
cin >> info[i].serviceDay;
cout << "Enter month of last servicing date (mm)(INT): " << "\n";
cin >> info[i].serviceMonth;
cout << "Enter year of the last servicing date (YYYY) (INT): " << "\n";
cin >> info[i].serviceYear;
outFile << info[i].TermNumber << info[i].transRate << info[i].termType << info[i].bldg << info[i].accessCode << info[i].serviceDay << info[i].serviceMonth << info[i].serviceYear;
}
outFile.close();
/* This section gets value from the closed file */
ifstream inFile("afile.txt");
if(!inFile)
{
cerr << "File could not be opened!" << "\n";
exit (1);
}
cout << "Enter Terminal number to search for: " << "\n";
int search;
cin >> search;
char ch;
inFile >> info[i].TermNumber >> info[i].transRate >> info[i].termType >> info[i].bldg >> info[i].accessCode >> info[i].serviceDay >> info[i].serviceMonth >> info[i].serviceYear;
if (search == 1)
{
ch = inFile.get();
cout << info[i].TermNumber << " " << info[i].bldg << " " << info[i].accessCode << "\n";
cout << info[i].transRate << " " << info[i].termType << " " << info[i].serviceDay << "\n";
cout << info[i].serviceMonth << " " << info[i].serviceYear << "\n";
}
else
cout << "please re run the program" ;
}
-
as I said you have to put the reading into some loop as well
something like this
Code:
for ( int i = 0; i < TotalTerm; i++) {
char ch;
inFile >> info[i].TermNumber >> info[i].transRate >> info[i].termType >> info[i].bldg >> info[i].accessCode >> info[i].serviceDay >> info[i].serviceMonth >> info[i].serviceYear;
if (search == info[i].TermNumber ) {
cout << info[i].TermNumber << " " << info[i].bldg << " " << info[i].accessCode << "\n";
cout << info[i].transRate << " " << info[i].termType << " " << info[i].serviceDay << "\n";
cout << info[i].serviceMonth << " " << info[i].serviceYear << "\n";
}
}
BTW main returns int.
Kurt
-
This would be appropriate for you to output and input terminal records with overloaded << and >> stream operators. But anyways, you can put an endl at the end of each terminal record line:
Code:
outFile << info[i].TermNumber << info[i].transRate << info[i].termType << info[i].bldg << info[i].accessCode << info[i].serviceDay << info[i].serviceMonth << info[i].serviceYear << endl;
If you overload operator << to ouput your class, you can like
If you overload operator >> to input your class, you can like
Code:
while(infile >> yrclass)
{
if(search == yrclass.termnumbuh)
{
dostuf();
}
}
-
I agree it needs to be in a loop if you would want to output everything that was input above.
My problem is i need to prompt the user for which terminal they would like to see. I.E. 1 or 2. Then the data prints to the screen just for that terminal.
-
Well, if you did all that stream overloading like I said, then
Code:
while(infile >> yrclass)
{
if(search == yrclass.termnumbuh)
{
cout << yrclass;
}
}
Otherwise, just
Code:
while(infile >> yrclass.var1 >> yrclass.var2 >> yrclass.var3 /* and so on */)
{
if(search == yrclass.termnumbuh)
{
cout << yrclass.var1 << yrclass.var2 << yrclass.var3 /* and so on */;
}
}
-
Tonto
I am not following. I attempted to do what you are suggesting. Seems my compiler doesnt like the info part. I think i am missing the boat here. I am very new to this programming stuff.
-
This code compiles , but when i am prompted for which terminal i would like to see. I enter 1 and get press any key to continue.
here is the code:
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include<cassert>
using namespace std;
class TermInfo
{
public:
string bldg;
char accessCode;
int transRate;
string termType;
int serviceDay;
int serviceMonth;
int serviceYear;
int TermNumber;
};
void main()
{
/* int TotalTerm; */
int const TotalTerm = 2;
cout << "Enter two sets of data for your terminal entrys today" << "\n";
/* cin >> TotalTerm; */
ofstream outFile("afile.txt");
assert(outFile.is_open());
TermInfo info[TotalTerm];
for (int i=0; i < TotalTerm; i++)
{
cout << "Enter Terminal Number (INT): " << "\n";
cin >> info[i].TermNumber;
cout << "Enter Transmission rate (INT): " << "\n";
cin >> info[i].transRate;
cout << "Enter terminal type (String): " << "\n";
cin >> info[i].termType;
cout << "Enter building terminal is located (String): " << "\n";
cin >> info[i].bldg;
cout << "Enter access code to terminal (Char): " << "\n";
cin >> info[i].accessCode;
cout << "Enter day of last servicing date (dd) (INT): " << "\n";
cin >> info[i].serviceDay;
cout << "Enter month of last servicing date (mm)(INT): " << "\n";
cin >> info[i].serviceMonth;
cout << "Enter year of the last servicing date (YYYY) (INT): " << "\n";
cin >> info[i].serviceYear;
outFile << info[i].TermNumber << info[i].transRate << info[i].termType << info[i].bldg << info[i].accessCode << info[i].serviceDay << info[i].serviceMonth << info[i].serviceYear;
}
outFile.close();
/* This section gets value from the closed file */
ifstream inFile("afile.txt");
if(!inFile)
{
cerr << "File could not be opened!" << "\n";
exit (1);
}
cout << "Enter Terminal number to search for: " << "\n";
int search;
cin >> search;
char ch;
inFile >> info[i].TermNumber >> info[i].transRate >> info[i].termType >> info[i].bldg >> info[i].accessCode >> info[i].serviceDay >> info[i].serviceMonth >> info[i].serviceYear;
while(inFile >> info[i].TermNumber)
{
if(search == info[i].TermNumber)
{
cout << info[i].TermNumber << " " << info[i].bldg << " " << info[i].accessCode << "\n";
cout << info[i].transRate << " " << info[i].termType << " " << info[i].serviceDay << "\n";
cout << info[i].serviceMonth << " " << info[i].serviceYear << "\n";
}
else
cout << "please re run the program" ;
}
}
-
If you wanted to do it my special E-Z way, you would have to provide overloaded implementations of those operators to work on your classes. Um, read this. http://cpp.codenewbie.com/articles/c...g-Page_19.html But I provided the alternate way to do it without overloading them in my second example. Just for now, try not overloading those.
-
Okay, little find and replace action. It seems better to not use that info array any more, and especially not the variable i. Just have a new, temporary TermInfo.
Code:
cout << "Enter Terminal number to search for: " << "\n";
int search;
cin >> search;
TermInfo currentInfo;
while(inFile >> currentInfo.TermNumber >> currentInfo.transRate
>> currentInfo.termType >> currentInfo.bldg >> currentInfo.accessCode
>> currentInfo.serviceDay >> currentInfo.serviceMonth
>> currentInfo.serviceYear)
{
if(search == currentInfo.TermNumber)
{
cout << currentInfo.TermNumber << " " << currentInfo.bldg << " " << currentInfo.accessCode << "\n";
cout << currentInfo.transRate << " " << currentInfo.termType << " " << currentInfo.serviceDay << "\n";
cout << currentInfo.serviceMonth << " " << currentInfo.serviceYear << "\n";
}
else
cout << "please re run the program" ;
}
-
didnt the way i do it in the code posted just before your post , do it the non overloading way. I am very confused. attempting to read the link you provided now.