Being doing C wanna get involved in C++... Will do this by showing you my Program... I will post two files first to try avoid confusion... After these files has been scrutinized and corrected, will post the next file... & so forth... I will also include the errors am getting
TITLE & Description: To Read from file & List a fleet of cars, and update them
Program Usage: Car Rental Shop
First File ... Class Car
Car.h
Q : Does this class make sense? should read/write member functions be there...Code:#include <string> #include <fstream.h> #include <iostream> #include "Menu.h" #ifndef DATE #define DATE 1 struct Date { unsigned day; unsigned month; unsigned year; }; #endif class Car { public: Car(); enum TankStatus {unknown, empty, half, full}; static std::string getTankStatusName(TankStatus); bool sameModel(const std::string&) const; bool operator<(const Car&) const; void read(FILE *, bool); void write(FILE *, bool); void setDatesAndTank(Car&); CarFleetIterator find(CarFleetIterator&, CarFleetIterator&, std::string); private: std::string make; // Make as in..."ford" std::string model; // Model as in ... "icon" unsigned engineCapacity; // Engine capacity may be stored as "1800" not 1.8 unsigned yearModel; Date returnDate; TankStatus tankStatus; // Maybe filled, half-filled, or empty };
Errors :
1. <fstream.h> No such file or directory ??? Using VS 2005
2. missing ';' before identifier 'find' ... Find defined below in Car.cpp
Car.cpp
Lastly, Menu.hCode:#include "car.h" Car::Car() {}; std::string Car::getTankStatusName(TankStatus status) { switch (status) { case unknown: return "unknown"; break; case empty: return "Empty"; break; case half: return "Half-Empty"; break; case full: return "Full"; break; default: throw std::runtime_error("Invalid tank status"); return ""; } } // Operator < will be used by sort() function bool Car::operator<(const Car& car) const { return make < car.make; } // Loading data from the text file void Car::read(FILE *fin, bool file_out) { char make_temp[15], model_temp[15]; if(file_out) // Get record from file { fscanf(fin, "%s%s", make_temp, model_temp); fscanf(fin, "%d", &yearModel); fscanf(fin, "%d", &engineCapacity); fscanf(fin, "%d%d%d", &returnDate.day, &returnDate.month, &returnDate.year); fscanf(fin, "%d", &tankStatus); make = make_temp; model = model_temp; } else // Get record from user { fscanf(fin, "%s%s", make_temp, model_temp); fscanf(fin, "%d", &yearModel); fscanf(fin, "%d", &engineCapacity); fscanf(fin, "%d", &tankStatus); make = make_temp; model = model_temp; // No dates yet! returnDate.day = returnDate.month = returnDate.year =0; } } // Saving data to the text file void Car::write(FILE *fout, bool file_out) { char make_temp[15], model_temp[15]; strcpy(make_temp, make.c_str()); strcpy(model_temp, model.c_str()); if(file_out) // To the output screen { fprintf(fout, "%-9s%-11s", make_temp, model_temp); fprintf(fout, "%-12d", yearModel); fprintf(fout, "%-10d", engineCapacity); fprintf(fout, "%-3d%-3d%-8d", returnDate.day, returnDate.month, returnDate.year); fprintf(fout, "%-4s", getTankStatusName(tankStatus).c_str()); puts(""); } else // To the file { fprintf(fout, "%s %s ", make_temp, model_temp); fprintf(fout, "%d ", yearModel); fprintf(fout, "%d ", engineCapacity); fprintf(fout, "%d %d %d ", returnDate.day, returnDate.month, returnDate.year); fprintf(fout, "%d", tankStatus); } } // Comparing the user entry with current record bool Car::sameModel(const std::string& car_model) const { return model == car_model; } // Allow Dates and tank to be modified void Car::setDatesAndTank(Car& car_dates_tank) { cout << "\nEnter return dates [DAY - MONTH - YEAR]" << endl; cin >> car_dates_tank.returnDate.day; cin >> car_dates_tank.returnDate.month; cin >> car_dates_tank.returnDate.year; cout << "\n\nEnter tank status [1...3]"; scanf("%d", car_dates_tank.tankStatus); /* try { cin >> car_dates_tank.tankStatus; } catch ( out_of_range& ex ) { cerr<< ex.what() <<endl; } */ } Menu::CarFleetIterator Car::find(CarFleetIterator& b, CarFleetIterator& e, string s) { int pos; Car& car = *b; // Find the make from the list from begin to end while (b <= e) { if( pos = strcmp(s, make) ) { return b; } else { b++; } } return e; }
NOTE: In Car.h i included Menu.h, then in Menu.h i included Car.h... I think there's a problem there... But i need the vector declared in Menu.h within Car class & the Car object within Menu.h ... How do i resolve this error " 'Car' : 'class' type redefinition "Code:// Purpose : To declare a class Menu #pragma once #include <vector> #include "Car.h" /* Menu class acts as a Main controller */ class Menu { public: Menu(); void run(); private: enum Options {DESCRIBE = 49, READF, DISPLAY, SEARCHF, ADDCAR, UPDATEF, EDITF}; // Menu Options typedef std::vector<Car> CarFleet; typedef CarFleet::iterator CarFleetIterator; private: void pause(); void clrscr(); void sortAlpha(); void AddNewCar(); void EditFleet(); void programLimits(); void titleDescription(); void updateFleetFile(); void readFleetFromFile(); CarFleetIterator searchCarDetails(bool&); void showFleetList(CarFleetIterator, bool); private: CarFleet fleet; };



LinkBack URL
About LinkBacks



