// il metodo non fa altro che creare un'istanza della classe Esame
        // aggiungendo questa istanza alla lista degli esami che lo studente
        // deve sostenere
        public Esame RichiestaEsame(string nomeEsame)
        {
            Esame esame;

            // se lo studente non ha fatto richiesta di laurea
            if (!RichiestaLaurea)
            {
                // se l'esame può essere sostenuto nell'ambito del suo corsi di laurea
                // e se l'esame non supera i CFU massimi previsti dal corso di laurea,
                // iscrivo lo studente all'esame
                foreach (Corso c in _immatricolazione.CorsoDiLaurea.Corsi)
                {
                    if (c.NomeCorso == nomeEsame &&
                        _immatricolazione.CfuAccumulati + c.Cfu <= _immatricolazione.CorsoDiLaurea.Cfu)
                    {
                        esame = new Esame(c);
                        _esami.Add(esame);
                        return(esame);
                    }
                }
            }


            return(null);
        }
        // metodo che aggiorna lo stato di un esame, i numeri di cfu sostenuti
        // dallo studente e controlla se lo studente ha raggiunto i requisiti per
        // richiedere la laurea
        public void EsamePassato(Esame esame)
        {
            // controllo che faccio perchè l'esame potrebbe essere nullo (se non presente nel corso di laurea)
            if (esame != null)
            {
                esame.AggiornaStatoEsame();
                _immatricolazione.AggiornaCfu(esame.Corso.Cfu);

                if (_immatricolazione.CfuAccumulati == _immatricolazione.CorsoDiLaurea.Cfu)
                {
                    RichiestaLaurea = true;
                }
            }
        }
        static void Main(string[] args)
        {
            // creo dei corsi
            Corso linguaLatina         = new Corso("Lingua latina", 6);
            Corso letteraturaLatina    = new Corso("Letteratura latina", 12);
            Corso linguisticaApplicata = new Corso("Linguistica applicata", 6);
            Corso glottodidattica      = new Corso("Glottodidattica", 6);

            Corso programmazioneJava = new Corso("Programmazione Java", 15);
            Corso dataMining         = new Corso("Data mining", 6);
            Corso textAnalytics      = new Corso("Text analytics", 6);
            Corso semanticWeb        = new Corso("Semantic web", 6);

            // creo liste dei corsi che passerò ai costruttori dei corsi di laurea
            List <Corso> listaCorsiLettere     = CreaListaCorsi(linguaLatina, letteraturaLatina, linguisticaApplicata, glottodidattica);
            List <Corso> listaCorsiInformatica = CreaListaCorsi(programmazioneJava, dataMining, textAnalytics, semanticWeb);

            // creo i corsi di laurea
            CorsoDiLaurea lettere     = new CorsoDiLaurea(ListaCorsiLaurea.Lettere, listaCorsiLettere);
            CorsoDiLaurea informatica = new CorsoDiLaurea(ListaCorsiLaurea.Informatica, listaCorsiInformatica);

            // creo degli studenti
            Studente pino  = new Studente("Pino", "Pini", 1999, lettere);
            Studente rosa  = new Studente("Rosa", "Rosi", 1996, informatica);
            Studente paolo = new Studente("Paolo", "Paoli", 1997, informatica);

            Esame e1 = pino.RichiestaEsame("Letteratura latina");
            Esame e2 = rosa.RichiestaEsame("Text analytics");
            Esame e3 = paolo.RichiestaEsame("Glottodidattica");

            pino.EsamePassato(e1);
            rosa.EsamePassato(e2);
            paolo.EsamePassato(e3);

            Console.WriteLine(pino.InfoStudente);
            Console.WriteLine();
            Console.WriteLine(rosa.InfoStudente);
            Console.WriteLine();
            Console.WriteLine(paolo.InfoStudente);
        }