This code I've been working on is so close to being done. However, it keeps printing out an extra line in the output. There is only supposed to be 5 lines in the output but there is six and I can't figure out why this is happening.
This is my book.h file this file cannot be changed in order to complete the code.
#include <string>
using namespace std;
enum Type
{
UNKNOWN = -1,
PAPERBACK,
HARDBACK
};
const string TYPE_WORDS[] = { "Paperback", "Hardback" };
class Book
{
public:
//default constructor - not actually used but should be implemented anyway
Book();
//constructor
Book( const string& name, Type type, int pages, float ounces );
//destructor
~Book(){};
string formatReportLine(); //return a string with all the info for the book
float getWeightLbs(); //calculate and return the weight of the book in lbs
string getTypeName(); //return the string which correlates with the book type
//accessors
string getName(){ return bName; };
Type getType(){ return bType; };
int getPages(){ return bPages; };
float getOunces(){ return bOunces; };
private:
string bName; //name of the book
Type bType; //the type of book (Type is an enumerated type)
int bPages; //how many pages the book contains
float bOunces; //how much the book weighs in ounces
};
This is the main.cpp file this file can be changed but should only have code added not taken out.
#include <iostream>
#include <fstream>
#include <string>
#include "book.h"
using namespace std;
int main()
{
const string FILENAME("books.txt");
const int INT_MAX = 1;
ifstream input(FILENAME);
if( input.good() )
{
while( !input.eof() )
{
string name;
int type;
int pages;
float ounces;
getline( input, name );
input >> type >> pages >> ounces;
input.ignore(INT_MAX, '\n'); //ignore the newline char at the end of the line
//create Book object here!
Book myBook(name,(Type)type, pages, ounces);
//write out report line for book here!
cout << myBook.formatReportLine();
}
}
else
{
cout << "File not found: " << FILENAME << endl;
}
system("pause");
return 0;
}
This is the book.cpp file this is where the most change will be done file has some functions but most code will have to be added.
#include <iostream>
#include <fstream>
#include <string>
#include "book.h"
#include "sstream"
Book::Book()
{
}
Book::Book( const string& name, Type type, int pages, float ounces )
{
bName = name;
bType = type;
bPages = pages;
bOunces = ounces;
}
float Book::getWeightLbs()
{
float answer;
answer = bOunces / 16;
return answer;
}
string Book::getTypeName()
{
string typeName = "";
if(bType == PAPERBACK)
typeName = TYPE_WORDS[bType];
else if (bType == HARDBACK)
typeName = TYPE_WORDS[bType];
else
typeName = "Unknown";
return typeName;
}
string Book::formatReportLine()
{
stringstream sout;
sout << bName << " | Type: " << getTypeName() << " Pages: " << bPages << " Weight(lbs): " << getWeightLbs() << endl;
return sout.str();
}
This is the book.txt file that the code is getting its data from.
The Human Use of Human Beings
0
200
8.0
Utopia
0
176
4.8
Hackers
0
520
22.4
The Information
1
544
33.6
Sterling's Gold
1
176
8.0
This is what it is currently outputting. The extra line at the end that reads " | Type: Hardback Pages: 176 Weight(lbs): 0.5" should not be there and I can't figure out why it is outputting like that.
The Human Use of Human Beings | Type: Paperback Pages: 200 Weight(lbs): 0.5
Utopia | Type: Paperback Pages: 176 Weight(lbs): 0.3
Hackers | Type: Paperback Pages: 520 Weight(lbs): 1.4
The Information | Type: Hardback Pages: 544 Weight(lbs): 2.1
Sterling's Gold | Type: Hardback Pages: 176 Weight(lbs): 0.5
| Type: Hardback Pages: 176 Weight(lbs): 0.5