Papito Posted March 14, 2014 Posted March 14, 2014 Hello guys, long time I dont start a new topic and less one about C++, a few years back I have studied c++ but know I forget everything and now I want to begin again, I have 2 lil console software to do (see attached files), I dont need something complicated just a simple code, is there somebody who can help me out? I have this: header.h #include <string> #include <vector> #include<fstream> using namespace std; enum Genre { POP_MUSIC, ROCK_MUSIC, FOLK_MUSIC, PUNK_MUSIC, COUNTRY_MUSIC, DISCO_MUSIC, REGGAETON_MUSIC, CLASSIC_MUSIC }; enum DISPLAY_OPTS { FULL_DESC, MAIN_DESC, SIMPLE_DESC }; class CD { private: string name; string artist; string label; int tracks; vector<string> tracklist; int year; Genre genre; public: CD(); ~CD(); void setName(string); void setArtist(string); void setLabel(string); void setYear(int); void setGenre(Genre); void setTrackList(vector<string>); void addTrackToList(string); string removeTrackFromList(string); string getName(); string getArtist(); string getLabel(); int getYear(); Genre getGenre(); vector<string> getTrackList(); string getTrack(int); int getTracks(); string showCD(DISPLAY_OPTS); void saveCDToFile(ofstream &); }; Resource.cpp #include "Header.h" #include <sstream> using namespace std; CD::CD(){} CD::~CD(){} void CD::setName(string name) { this->name = name; } void CD::setArtist(string artist) { this->artist = artist; } void CD::setLabel(string label) { this->label = label; } void CD::setYear(int year) { this->year = year; } void CD::setGenre(Genre genre) { this->genre = genre; } void CD::setTrackList(vector<string> list) { this->tracklist = list; } void CD::addTrackToList(string track) { this->tracklist.push_back(track); } string CD::removeTrackFromList(string value) { int index = -1; for(int i=0; i<this->tracklist.size(); i++) { if (value.compare(this->tracklist[i]) == 0){ index = i; break; } } if(index != -1) { try { this->tracklist.erase(this->tracklist.begin() + index); } catch (int ex) { return "Error al borrar"; } return "Borrado"; } return "No encontrado"; } string CD::getName() { return this->name; } string CD::getArtist() { return this->artist; } string CD::getLabel() { return this->label; } int CD::getYear() { return this->year; } Genre CD::getGenre() { return this->genre; } vector<string> CD::getTrackList() { return this->tracklist; } string CD::getTrack(int trackNum) { if(trackNum < getTracks()) return this->tracklist[trackNum]; return ""; } int CD::getTracks() { return this->tracklist.size(); } string CD::showCD(DISPLAY_OPTS opts) { stringstream outputStr; if(opts == SIMPLE_DESC) { outputStr << this->getName() << "," << this->getArtist() << endl; } else if(opts == MAIN_DESC || opts==FULL_DESC) { outputStr << "Name:" << this->getName() << endl; outputStr << "Artist: " << this->getArtist() << endl; outputStr << "Label: " << this->getLabel() << endl; outputStr << "Year: " << this->getYear() << endl; outputStr << "Genre : " << this->getGenre() << endl; outputStr << "Tracks: " << this->getTracks() << endl; } if(opts == FULL_DESC) { for ( int i = 0; i <this->getTracks(); i++){ outputStr << i+1 << " - " << tracklist[i]; } } return outputStr.str(); } void CD::saveCDToFile(ofstream & output ){ output << this->getName() << endl; output << this->getArtist() << endl; output << this->getLabel() << endl; output << (int)this->getGenre() << endl; output << this->getYear() << endl; output << this->getTracks() << endl; for ( int i = 0; i <this->getTracks(); i++){ output << tracklist[i]; } } trabajoexamen.cpp #include <iostream> #include <vector> #include <fstream> using namespace std; #include "Header.h" CD inputCDData() throw (int); vector<CD> inputCDDataFromFile(string) throw (int); void saveCatalog(vector<CD>); int main() { ifstream file; vector<CD> catalog; int menuOpt; do{ cout << "Que deseas hacer: \n1 - Capturar\n2 - Cargar\n3 - Mostrar\n4 - Salir"; cin >> menuOpt; cin.ignore(1 , '\n'); if ( menuOpt == 1) { try { CD ccd = inputCDData(); catalog.push_back(ccd); } catch ( int exceptionCode) { cerr << "Error en lectura.\n"; } } else if ( menuOpt == 2 ) { string filename; try { cout << "Que archivo quieres cargar: "; file >> filename; vector<CD> ccd = inputCDDataFromFile(filename); for ( int i = 0; i < ccd.size();i++){ catalog.push_back(ccd[i]); } } catch ( int exceptionCode) { cerr << "Error en lectura.\n"; } } else if ( menuOpt == 3 ) { //displayCDData(catalog); } } while ( menuOpt != 4); saveCatalog(catalog); system("pause"); } CD inputCDData() throw (int) { CD record; string tempValue; int tempInt; cout << "Dame el titulo del album: "; getline ( cin , tempValue); record.setName(tempValue); cout << "Dame el artista: "; getline ( cin , tempValue); record.setArtist(tempValue); cout << "De que compa\224ia es el album: "; getline ( cin , tempValue); record.setLabel(tempValue); cout << "A que genero pertenece:\n1 - Pop\n2 - Rock\n3 - Folk\n4 - Punk\n5 - Country\n6 - Disco\n7 - Raegeton" << "\n8 - Clasico\n"; cin >> tempInt; record.setGenre(Genre(tempInt - 1)); cout << "De que a\244o es el album: "; cin >> tempInt; record.setYear(tempInt); cout << "Cuantas canciones tiene: "; cin >> tempInt; for( int i = 0; i < tempInt; i++){ cin.ignore( 1 , '\n'); cout << "Dame la cancion #" << i+1 << ": "; getline (cin,tempValue); record.addTrackToList(tempValue); } system("cls"); return record; } vector<CD> inputCDDataFromFile(string filename) throw (int) { vector<CD> records; CD record; string tempValue; int tempInt; ifstream file; system("cls"); file.open(filename); if ( file.is_open()) { while ( !file.eof()){ getline ( file , tempValue); record.setName(tempValue); getline ( file , tempValue); record.setArtist(tempValue); getline ( file , tempValue); record.setLabel(tempValue); file >> tempInt; record.setGenre(Genre(tempInt - 1)); file >> tempInt; record.setYear(tempInt); file >> tempInt; file.ignore(1,'\n'); for( int i = 0; i < tempInt; i++){ cin.ignore( 1 , '\n'); getline (file,tempValue); record.addTrackToList(tempValue); } records.push_back(record); } file.close(); } else { throw 10; } system("cls"); return records; } void saveCatalog(vector<CD> catalog){ ofstream output; output.open("catalog.txt", ios::app || ios::ate); if(output.is_open()){ for(int i=0; i < catalog.size(); i++){ catalog[i].saveCDToFile(output); } output.close(); } } Quote
Corey Posted March 14, 2014 Posted March 14, 2014 Had a chance to look at it and unfortunately I was unsuccessful The first errors that came up had to do with the ofstream and ifstream, but once those errors went away it had a lot of the header references you were talking about and that is outside the spectrum of knowledge for me the errors with the ifstream and ofstream file.open(filename); line 94 output.open("catalog.txt", ios::app || ios::ate); line 134 i googled it and it said that ifstream takes a const char* and not a string so had to change the first one to file.open(filename.c_str()); sorry papito hopefully someone else more knowledgeable can help you! 1 Quote
Papito Posted March 14, 2014 Author Posted March 14, 2014 Dont worry, I'll keep searching and thanks for your time. <3 Quote
parrot Posted March 19, 2014 Posted March 19, 2014 file.open(filename); should be file.open( filename.c_str() ) for one thing. I can work on debugging maybe friday (I like coding). I have tons of shit this week to do :/ Quote
parrot Posted March 25, 2014 Posted March 25, 2014 (edited) Alright, I have your program compiling and running. I'm not sure the functionality is exactly correct, but it appears so. I fixed your indentation/style because it was driving me batty, and I removed the "system" calls, because you should never, ever, do that I'm not sure why you had the line file.open( filename.c_str(), ios::app || ios::ate) I changed it to: file.open( filename.c_str(), ios:app) If you have any further questions, let me know. *edit* Might consider a switch statement for main.cpp instead of if else if else. (I also renamed the files appropriately) main.cpp: #include <iostream> #include <vector> #include <fstream> #include "jukebox.h" using namespace std; CD inputCDData() throw (int); vector<CD> inputCDDataFromFile(string) throw (int); void saveCatalog(vector<CD>); int main() { ifstream file; vector<CD> catalog; int menuOpt; do { cout << "Que deseas hacer: \n1 - Capturar\n2 - Cargar\n3 - Mostrar\n4 - Salir"; cin >> menuOpt; cin.ignore(1 , '\n'); if ( menuOpt == 1) { try { CD ccd = inputCDData(); catalog.push_back(ccd); } catch ( int exceptionCode) { cerr << "Error en lectura.\n"; } } else if ( menuOpt == 2 ) { string filename; try { cout << "Que archivo quieres cargar: "; file >> filename; vector<CD> ccd = inputCDDataFromFile(filename); for ( int i = 0; i < ccd.size();i++) { catalog.push_back(ccd[i]); } } catch ( int exceptionCode) { cerr << "Error en lectura.\n"; } } else if ( menuOpt == 3 ) { //displayCDData(catalog); } } while ( menuOpt != 4); saveCatalog(catalog); return 0; } CD inputCDData() throw (int) { CD record; string tempValue; int tempInt; cout << "Dame el titulo del album: "; getline ( cin , tempValue); record.setName(tempValue); cout << "Dame el artista: "; getline ( cin , tempValue); record.setArtist(tempValue); cout << "De que compa\224ia es el album: "; getline ( cin , tempValue); record.setLabel(tempValue); cout << "A que genero pertenece:\n1 - Pop\n2 - Rock\n3 - Folk\n4 - Punk\n5 -" << "Country\n6 - Disco\n7 - Raegeton\n8 - Clasico\n"; cin >> tempInt; record.setGenre(Genre(tempInt - 1)); cout << "De que a\244o es el album: "; cin >> tempInt; record.setYear(tempInt); cout << "Cuantas canciones tiene: "; cin >> tempInt; for( int i = 0; i < tempInt; i++) { cin.ignore( 1 , '\n'); cout << "Dame la cancion #" << i+1 << ": "; getline (cin,tempValue); record.addTrackToList(tempValue); } return record; } vector<CD> inputCDDataFromFile(string filename) throw (int) { vector<CD> records; CD record; string tempValue; int tempInt; ifstream file; file.open( filename.c_str() ); if ( file.is_open() ) { while ( !file.eof() ) { getline (file , tempValue); record.setName(tempValue); getline (file , tempValue); record.setArtist(tempValue); getline (file , tempValue); record.setLabel(tempValue); file >> tempInt; record.setGenre( Genre(tempInt - 1) ); file >> tempInt; record.setYear(tempInt); file >> tempInt; file.ignore(1,'\n'); for( int i = 0; i < tempInt; i++) { cin.ignore( 1 , '\n'); getline (file,tempValue); record.addTrackToList(tempValue); } records.push_back(record); } file.close(); } else { throw 10; } return records; } void saveCatalog(vector<CD> catalog) { ofstream output; output.open("catalog.txt", ios::app); if(output.is_open()) { for(int i=0; i < catalog.size(); i++) { catalog[i].saveCDToFile(output); } output.close(); } } jukebox.h: (btw, it's a bad idea to use namespace std in a header file) #include <string> #include <vector> #include<fstream> enum Genre { POP_MUSIC, ROCK_MUSIC, FOLK_MUSIC, PUNK_MUSIC, COUNTRY_MUSIC, DISCO_MUSIC, REGGAETON_MUSIC, CLASSIC_MUSIC }; enum DISPLAY_OPTS { FULL_DESC, MAIN_DESC, SIMPLE_DESC }; class CD { private: std::string name; std::string artist; std::string label; int tracks; std::vector<std::string> tracklist; int year; Genre genre; public: CD(); ~CD(); void setName(std::string); void setArtist(std::string); void setLabel(std::string); void setYear(int); void setGenre(Genre); void setTrackList(std::vector<std::string>); void addTrackToList(std::string); std::string removeTrackFromList(std::string); std::string getName(); std::string getArtist(); std::string getLabel(); int getYear(); Genre getGenre(); std::vector<std::string> getTrackList(); std::string getTrack(int); int getTracks(); std::string showCD(DISPLAY_OPTS); void saveCDToFile(std::ofstream &); }; and jukebox.cpp: #include "jukebox.h" #include <sstream> #include <string> using namespace std; CD::CD(){} CD::~CD(){} void CD::setName(string name) { this->name = name; } void CD::setArtist(string artist) { this->artist = artist; } void CD::setLabel(string label) { this->label = label; } void CD::setYear(int year) { this->year = year; } void CD::setGenre(Genre genre) { this->genre = genre; } void CD::setTrackList(vector<string> list) { this->tracklist = list; } void CD::addTrackToList(string track) { this->tracklist.push_back(track); } string CD::removeTrackFromList(string value) { int index = -1; for(int i=0; i<this->tracklist.size(); i++) { if (value.compare(this->tracklist[i]) == 0) { index = i; break; } } if(index != -1) { try { this->tracklist.erase(this->tracklist.begin() + index); } catch (int ex) { return "Error al borrar"; } return "Borrado"; } return "No encontrado"; } string CD::getName() { return this->name; } string CD::getArtist() { return this->artist; } string CD::getLabel() { return this->label; } int CD::getYear() { return this->year; } Genre CD::getGenre() { return this->genre; } vector<string> CD::getTrackList() { return this->tracklist; } string CD::getTrack(int trackNum) { if(trackNum < getTracks()) { return this->tracklist[trackNum]; } return ""; } int CD::getTracks() { return this->tracklist.size(); } string CD::showCD(DISPLAY_OPTS opts) { stringstream outputStr; if(opts == SIMPLE_DESC) { outputStr << this->getName() << "," << this->getArtist() << endl; } else if(opts == MAIN_DESC || opts==FULL_DESC) { outputStr << "Name:" << this->getName() << endl; outputStr << "Artist: " << this->getArtist() << endl; outputStr << "Label: " << this->getLabel() << endl; outputStr << "Year: " << this->getYear() << endl; outputStr << "Genre : " << this->getGenre() << endl; outputStr << "Tracks: " << this->getTracks() << endl; } if(opts == FULL_DESC) { for ( int i = 0; i <this->getTracks(); i++) { outputStr << i+1 << " - " << tracklist[i]; } } return outputStr.str(); } void CD::saveCDToFile(ofstream & output ) { output << this->getName() << endl; output << this->getArtist() << endl; output << this->getLabel() << endl; output << (int)this->getGenre() << endl; output << this->getYear() << endl; output << this->getTracks() << endl; for ( int i = 0; i <this->getTracks(); i++) { output << tracklist[i]; } } Edited March 25, 2014 by parrot 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.