namespace Pr19; public class Libreria { private List libri; public Libreria() { libri = new List(); } public void AggiungiLibro(Libro libro) { if (!libri.Any(x => x.Isbn == libro.Isbn)) libri.Add(libro); } public void AggiungiRomanzo(string isbn, string titolo, string autore, string genere, double prezzoCopertina) { AggiungiLibro(new Romanzo(isbn, titolo, autore, genere, prezzoCopertina)); } public void AggiungiManuale(string isbn, string titolo, string autore, string materia, int pagine, double prezzoCopertina) { AggiungiLibro(new Manuale(isbn, titolo, autore, materia, pagine, prezzoCopertina)); } public void AggiungiLibroDiTesto(string isbn, string titolo, string autore, string materia, string adottato, string volume, double prezzoCopertina) { AggiungiLibro(new LibroDiTesto(isbn, titolo, autore, materia, adottato, volume, prezzoCopertina)); } public double PrezzoVendita(string isbn) { Libro libro = libri.Find(x => x.Isbn == isbn); if (libro != null) return libro.PrezzoVendita(); else return -1; } public bool EliminaLibro(string isbn) { return libri.Remove(libri.Find(x => x.Isbn == isbn)); } public void OrdinaPerAutoreTitolo() { libri.Sort((x, y) => x.Autore.Equals(y.Autore) ? x.Titolo.CompareTo(y.Titolo) : x.Autore.CompareTo(y.Autore)); } public void OrdinaPerGenere() { libri.Sort((x, y) => { if (x is Romanzo && y is Romanzo) return (x as Romanzo).Genere.CompareTo((y as Romanzo).Genere); else return 0; }); } public string StampaNumeroPerTipo() { int nRomanzi = 0; int nManuali = 0; int nLibriTesto = 0; foreach (Libro libro in libri) { switch (libro) { case Romanzo: nRomanzi++; break; case Manuale: nManuali++; break; case LibroDiTesto: nLibriTesto++; break; } } return String.Format( "Numero Romanzi: {0}\n" + "Numero Manuali: {1}\n" + "Numero Libri di testo: {2}\n", nRomanzi, nManuali, nLibriTesto); } public string StampaLibreria() { string s = String.Empty; foreach (Libro libro in libri) { s += libro.ToString() + "\n"; } return s; } }