i'm working on the "removesong" function. i need to check the vectors that already have the data separated and stored in them, and i need to see if the entered song title and artist name exist. if they do, i need to replace that same vector location with an empty string. i can't seem to get this to work, i need to also right the new vectors back into the file. it isn't supposed to completely overwrite the file, just remove the specified data.
file:
Here it Goes Again
OK Go
Rock
Fade to Black
Metallica
Metal
Enter Sandman
Metallica
Metal
Walk
Pantera
Metal
Learn to Fly
Foo Fighters
Rock
I Wanna Be Sedated
The Ramones
Punk
Stairway to Heaven
Led Zeppelin
Rock
Words
Paul Van Dyk
Electronic
Punk
Ferry Corsten
Electronic
Let Go
Paul Van Dyk
Electronic
program:
#include <iostream> // For input and output to the monitor
#include <fstream> // For file input and output (given)
#include <string> // For text data
#include <vector> // library for using vectors
using namespace std; // To make is easier put this in global namespace
void addsong(vector<string>&, vector<string>&, vector<string>&);
// function: this adds songs to the library
// parameters: string title, string artist, string genre
// functionality: prompts the user for the parameters and checks to make sure
// the song isn't already in the library
void removesong(vector<string>& titles, vector<string>& artists, vector<string>& genres);
// function: this removes songs from the library and replaces them with whitespace
// parameters: title, artist, genre
// funtionality: prompts user for song and artist of song wishing to remove
void searchsong(vector<string>& titles, vector<string>& artists, vector<string>& genres);
int main()
{
vector<string> titles;
vector<string> artists;
vector<string> genres;
ifstream in_stream;
in_stream.open("music_library.txt");
int i=1;
if (in_stream.fail( ))
{
cout << "Unable to open file.\n";
}
else
{
string title, artist, genre;
while(!in_stream.eof())
{
if((i%3==1)||i==1)
{
getline(in_stream, title);
titles.push_back(title);
i++;
}
if((i%3==2)||i==2)
{
getline(in_stream, artist);
artists.push_back(artist);
i++;
}
if((i%3==0)||i==3)
{
getline(in_stream, genre);
genres.push_back(genre);
i++;
}
}
}
cout << "Titles size: " << titles.size() << endl;
cout << "Artist size: " << artists.size() << endl;
cout << "Genre size: " << genres.size() << endl;
int choice;
do
{
cout << "\n\n1. Add a new song\n";
cout << "2. Remove an existing song\n";
cout << "3. Search for a song\n";
cout << "4. Quit program\n";
cin >> choice;
switch(choice)
{
case 1: //user wants to add a song
addsong(titles, artists, genres);
break;
case 2: //user wants to remove an existing song
removesong(titles, artists, genres);
break;
case 3: //user wants to search for a song
searchsong(titles, artists, genres);
break;
case 4: //user wants to quit program
cout << "GOODBYE!\n";
break;
}
}while(choice !=4);
cin.get();
in_stream.close( );
return 0;
}
void addsong(vector<string>& titles, vector<string>& artists, vector<string>& genres)
{
ofstream in_stream;
in_stream.open("music_library.txt", ios::app);
string t_title, a_artist, g_genre;
if(in_stream.fail( ))
{
cout << "File failed to open." << endl;
}
cout << "Enter the title name: " << endl;
cin.ignore(100, '\n');
getline(cin, t_title);
titles.push_back(t_title);
cout << "Enter the artist name: " << endl;
getline(cin, a_artist);
artists.push_back(a_artist);
cout << "Enter the genre: " << endl;
getline(cin, g_genre);
genres.push_back(g_genre);
for(unsigned int i = 0; i < titles.size(); ++i)
{
if(t_title.compare(titles[i]) !=0&&(a_artist.compare(artists[i])!=0))
//compare is a function that i found on http://www.cplusplus.com/
{
cout << "Items have been added to library" << endl;
titles.push_back(t_title);
artists.push_back(a_artist);
genres.push_back(g_genre);
int length_t = t_title.length( );
int length_a = a_artist.length( );
int length_g = g_genre.length( );
if(length_t==0||length_a==0||length_g==0)
{
if(length_t==0&&length_a > 0&&length_g > 0)
{
in_stream << endl << a_artist << endl << g_genre;
}
if(length_a==0&&length_t > 0&&length_g >0)
{
in_stream << endl << t_title << endl << g_genre;
}
if(length_g==0&&length_t > 0&&length_a >0)
{
in_stream << endl << t_title << endl << a_artist;
}
}
if(length_g==0&&length_a==0)
{
cout << "No genre type or artist name added to library." << endl;
in_stream << endl << t_title;
}
if(length_g==0&&length_t==0)
{
cout << "No genre type or song title were added to the library." << endl;
in_stream << endl << a_artist;
}
if(length_a==0&&length_t==0)
{
cout << "No artist name or song title were added to the library." << endl;
in_stream << endl << g_genre;
}
if(length_g > 0 && length_t > 0 && length_a > 0)
{
in_stream << endl << t_title << endl << a_artist << endl << g_genre;
}
return;
}
else
cout << "Item exist!" << endl;
return;
}
in_stream.close( );
}
void removesong(vector<string>& titles, vector<string>& artists, vector<string>& genres)
{
ifstream library;
ofstream in_stream;
library.open("music_library.txt");
in_stream.open("music_library.txt");
string t_title, a_artist, g_genre;
cout << "Please enter the song title which you wish to remove: " << endl;
cin.ignore(100, '\n');
getline(cin, t_title);
cout << "Please enter the corresponding artist name: " << endl;
getline(cin, a_artist);
for(unsigned int i=0; i < titles.size(); i++)
{
if(t_title.compare(titles[i])!=0&&(a_artist.compare(artists[i])!=0))
{
cout << "Data not found in library!" << endl;
}
else
titles[i] = ' ';
artists[i] = ' ';
genres[i] = ' ';
in_stream << endl << titles[i] << endl << artists[i] << genres[i];
cout << "Song data has been removed." << endl;
return;
}
library.close();
in_stream.close();
}
void searchsong(vector<string>& titles, vector<string>& artists, vector<string>& genres)
{
ifstream in_stream;
ofstream library;
in_stream.open("music_library.txt");
library.open("library.txt");
int choice;
string t_title, a_artist, g_genre;
do
{
cout << "1. Search by song title." << endl;
cout << "2. Search by artist." << endl;
cout << "3. Search by genre." << endl;
cin >> choice;
switch(choice)
{
case 1:
cout << "Enter song title: " << endl;
cin.ignore(100, '\n');
getline(cin, t_title);
for(unsigned int i = 0; i < titles.size(); i++)
{
if(t_title.compare(titles[i])==0)
{
cout << titles[i] << endl << artists[i] << endl << genres[i] << endl << endl;
}
}
break;
case 2:
cout << "Enter artist: " << endl;
cin.ignore(100, '\n');
getline(cin, a_artist);
for(unsigned int i = 0; i < artists.size(); i++)
{
if(a_artist.compare(artists[i])==0)
{
cout << titles[i] << endl << artists[i] << endl << genres[i] << endl << endl;
}
}
break;
case 3:
cout << "Enter genre: " << endl;
cin.ignore(100, '\n');
getline(cin, g_genre);
for(unsigned int i = 0; i < genres.size(); i++)
{
if(g_genre.compare(genres[i])==0)
{
cout << titles[i] << endl << artists[i] << endl << genres[i] << endl << endl;
}
}
break;
}
}while(!in_stream.eof());
in_stream.close();
library.close();
}