#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct Tdata{
int gg;
int mm;
int aa;
};
struct Topera {
char titolo[101];
char autore[101];
Tdata data;
int prezzo;
};
struct Tgalleria
{
Topera opera[100];
int numero;
};
void aggiungi(struct Tgalleria& ,struct Topera&);
void elimina(struct Tgalleria& ,char*);
void ordina(struct Tgalleria& ,char );
void stampa(struct Tgalleria&);
void scambia(struct Topera& ,struct Topera& );
int main() {
struct Topera opera;
struct Tgalleria galleria;
galleria.numero=0;
int scelta=1;
char ch;
cout<<"Cosa vuoi fare? (1 aggiungi, 2 elimina, 3 ordina, 4 stampa, 5 esci) ";
cin>>scelta;
while(scelta!=5) {
switch(scelta) {
case 1:
aggiungi(galleria,opera);
break;
case 2:
char titolo[101];
cout<<"Inserisci titolo: ";
cin>>titolo;
elimina(galleria, titolo);
break;
case 3:
ordina(galleria, ch);
break;
case 4:
stampa(galleria);
break;
default:
cout<<"Opzione inesistente"<<endl;
}
cout<<endl<<"Cosa vuoi fare? (1 aggiungi, 2 elimina, 3 ordina, 4 stampa, 5 esci) ";
cin>>scelta;
}
return 0;
}
void aggiungi(Tgalleria& galleria , Topera& opera){
cout<<"Inserisci il titolo dell'opera da aggiungere nella galleria: ";
cin.getline(galleria.opera[galleria.numero].titolo,101);
cout<<"Inserisci l'autore del titolo dell'opera da aggiungere nella galleria: ";
cin.getline(galleria.opera[galleria.numero].autore,101);
cout<<"Inserisci la data di creazione: ";
cin>>galleria.opera[galleria.numero].data.gg>>galleria.opera[galleria.numero].data.mm>>galleria.opera[galleria.numero].data.aa;
cout<<"Inserisci il prezzo del libro: ";
cin>>galleria.opera[galleria.numero].prezzo;
galleria.numero++;
}
void elimina(Tgalleria& galleria, char *titolo){
int i=0;
while(i<galleria.numero) {
if(strcmp (galleria.opera[i].titolo, titolo)==0){
galleria.numero--;
scambia(galleria.opera[i],galleria.opera[galleria.numero]);
cout<<"Elemento eliminato"<<endl;
return;
}
i++;
}
cout<<"Impossibile eliminare, elemento non esistente"<<endl;
}
void ordina(Tgalleria& galleria, char ch){
int i,j,s,ap;
Tdata x1,x2;
cout<<"Ordina per: titolo ('t'),autore ('a'), data di creazione ('d'), prezzo ('p'): ";
cin>>ch;
if((ch=='t')||(ch=='a')||(ch=='d')||(ch=='p')){
switch(ch){
case 't':
for(i=0;i<galleria.numero;++i){
for(j=galleria.numero-1;j>=i+1;j--){
if(strcmp(galleria.opera[j-1].titolo,galleria.opera[j].titolo)==1){
scambia(galleria.opera[j],galleria.opera[j-1]);
}}}
break;
case 'a':
for(i=0;i<galleria.numero;++i){
for(j=galleria.numero-1;j>=i+1;j--){
if(strcmp(galleria.opera[j-1].autore,galleria.opera[j].autore)==1){
scambia(galleria.opera[j],galleria.opera[j-1]);
}}}
break;
case 'd':
for(i=0;i<galleria.numero;++i){
for(j=galleria.numero-1;j>=i+1;j--){
x1=galleria.opera[j].data;
x2=galleria.opera[j-1].data;
s=x1.aa*10000+x1.mm*100+x1.gg;
ap=x2.aa*10000+x2.mm*100+x2.gg;
if(s<ap){
scambia(galleria.opera[j],galleria.opera[j-1]);}}}
break;
case 'p':
for(i=0;i<galleria.numero;++i){
for(j=galleria.numero-1;j>=i+1;j--){
if(galleria.opera[j].prezzo<galleria.opera[j-1].prezzo){
scambia(galleria.opera[j],galleria.opera[j-1]);}}}
break;
}
}}
void stampa(Tgalleria& galleria) {
for(int i=0;i<galleria.numero;i++) {
cout<<"Titolo: "<<galleria.opera[i].titolo<<"\n";
cout<<"Autore: "<<galleria.opera[i].autore<<"\n";
cout<<"Data: "<<galleria.opera[i].data.gg<<"/"<<galleria.opera[i].data.mm<<"/"<<galleria.opera[i].data.aa<<"\n";
cout<<"Prezzo: "<<galleria.opera[i].prezzo<<"\n";
cout<<endl;
}
}
void scambia(Topera& x1, Topera& x2){
Topera s;
s=x1;
x1=x2;
x2=s;
}