Questo è il programma definitivo...pensate ke potrei migliorarlo in qualke modo?
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
struct albums {
char titoloalb[40];
int anno;
int numerosong;
char casadisco[40];
};
albums alb;
struct canzone
{
char titolocanzone[40];
char artista[40];
char genere[40];
int durata;
struct albums alb;
};
canzone song;
const char * const archivio="song.dat";
int inserisci()
{
ofstream fout(archivio, ios::app |ios::binary);
if (!fout)
{
cout << "Errore apertura del file" << endl;
return 1;
}
cout <<"Inserisci il titolo della canzone (# per finire)\n";
cin>>song.titolocanzone;
cout << endl;
while (song.titolocanzone[0] != '#')
{
cin.ignore();
cout <<"Inserisci l'artista della canzone ";
cin.get(song.artista, 40);
cin.ignore();
cout << endl;
cout << "Inserire il genere della canzone ";
cin.get(song.genere, 40);
cin.ignore();
cout << endl;
cout <<"Inserisci la durata della canzone ";
cin >> song.durata;
cin.ignore();
cout << endl;
cout << "Inserisci il titolo dell'album dov'e' contenuta la canzone ";
cin.get(song.alb.titoloalb, 40);
cout << endl;
cout << "Inserisci l'anno di pubblicazione dell album ";
cin >> song.alb.anno;
cout << endl;
cout << "Inserisci il numero di canzoni dell album ";
cin >> song.alb.numerosong;
cin.ignore();
cout << endl;
cout << "Inserisci il nome della casa discografica dell'album ";
cin.get(song.alb.casadisco, 40);
cin.ignore();
cout << endl;
fout.write((char *) &song, sizeof song);
cout <<"Inserisci un altro titolo (# per finire)\n";
cin.get(song.titolocanzone, 20);
cin.ignore();
}
fout.close();
}
int ricercaxtitolo()
{
bool f=false;
char key[20];
ifstream fin;
fin.clear();
fin.open(archivio, ios::in | ios::binary);
if (!fin)
{
cout << "Errore apertura del file" << endl;
exit(1);
}
cout << "Inserire il titolo della canzone da cercare: ";
cin >> key;
while ( fin.read ((char *) &song, sizeof song))
{
if(strcmp(key,song.titolocanzone)==0)
{
cout << "Titolo canzone: "<<song.titolocanzone;
cout << endl;
cout<< "Artista: "<<song.artista;
cout << endl;
cout<< "Genere: "<<song.genere;
cout << endl;
cout<< "Anno: "<<song.alb.anno;
cout << endl;
cout << "Durata: "<<song.durata;
cout << endl;
cout << "Titolo Album: "<<song.alb.titoloalb;
cout << endl;
cout << "Numero canzoni dell'album: "<<song.alb.numerosong;
cout << endl;
cout << "Casa discografica: "<<song.alb.casadisco;
cout << endl;
f=true;
}
}
if (f==false)
cout << "La canzone non esiste"<<endl;
fin.close();
return(0);
}
int ricercaxartista()
{
bool f=false;
char key[20];
ifstream fin;
fin.clear();
fin.open(archivio, ios::in | ios::binary);
if (!fin)
{
cout << "Errore apertura del file" << endl;
exit(1);
}
cout << "Inserire l'artista da cercare: ";
cin >> key;
while ( fin.read ((char *) &song, sizeof song))
{
if(strcmp(key,song.artista)==0){
cout << "Titolo canzone: "<<song.titolocanzone;
cout << endl;
cout<< "Artista: "<<song.artista;
cout << endl;
cout<< "Genere: "<<song.genere;
cout << endl;
cout<< "Anno: "<<song.alb.anno;
cout << endl;
cout << "Durata: "<<song.durata;
cout << endl;
cout << "Titolo Album: "<<song.alb.titoloalb;
cout << endl;
cout << "Numero canzoni dell'album: "<<song.alb.numerosong;
cout << endl;
cout << "Casa discografica: "<<song.alb.casadisco;
cout << endl;
f=true;
}
}
if (f==false)
cout << "L'artista non esiste "<<endl;
fin.close();
return(0);
}
int main()
{
int scelta;
do
{
cout << endl;
cout <<"GESTIONE ARCHIVIO MP3\n";
cout <<"\n";
cout << "1. Aggiunta nuovi record mp3 \n";
cout << "2. Visualizzazione canzoni \n";
cout << "3. Visualizzazione artisti \n";
cout << "0. Fine lavoro \n";
cout << "Scegli funzione: \n";
cin >> scelta;
cin.ignore();
switch (scelta)
{
case 1:inserisci();break;
case 2:ricercaxtitolo();break;
case 3:ricercaxartista();break;
}
}
while (scelta !=0 );
}
|