예제 #1
0
        static void Main()
        {
            Albergo albergo = new Albergo(10, 5, 3);
            Gestore gestore = new Gestore();

            ClienteCreator cliCreator = new ClienteCreator();
            List <Cliente> clienti    = new List <Cliente>();

            int count = 0;

            string       nome;
            FileInfo     file = new FileInfo("../../../nomi.txt");
            StreamReader sr   = new StreamReader(file.FullName);

            //Creo la lista di clienti tramite il creatore e i nomi presi dal file di testo
            while ((nome = sr.ReadLine()) != null)
            {
                clienti.Add(cliCreator.FactoryMethod(count, nome));
                count++;
            }

            //fino a quando l'albergo è aperto i clienti provano il check-in o si rilassano
            //ed eventualmente effettuano il check-out
            while (albergo.IsAperto())
            {
                foreach (Cliente c in clienti)
                {
                    if (c.GetCamera() == null)
                    {
                        gestore.CheckIn(c, albergo);
                    }
                }
                for (int i = 0; i < clienti.Count; i++)
                {
                    if (clienti[i].GetCamera() != null)
                    {
                        clienti[i].Relax();
                    }

                    if (clienti[i].GetGiorni() == 0)
                    {
                        gestore.CheckOut(clienti[i]);
                        clienti.Remove(clienti[i]);
                    }
                }
                if (clienti.Count == 0)
                {
                    albergo.ChiudiAlbergo();
                }
            }
        }
예제 #2
0
    public void CheckIn(Cliente cliente, Albergo albergo)
    {
        Camera[] listaCamere;
        Camera[] listaSuperior;
        Camera[] listaSuite;

        if (!albergo.Pieno())
        {
            //provo ad assegnare una suite al cliente
            listaSuite = albergo.GetSuite();
            if (cliente.GetGiorni() * listaSuite[0].GetPrezzo() <= cliente.GetBudget())
            {
                for (int i = 0; i < listaSuite.Length && cliente.GetCamera() == null; i++)
                {
                    if (!listaSuite[i].IsOccupata())
                    {
                        AssegnaCamera(cliente, listaSuite[i]);
                        Console.WriteLine("Il cliente " + cliente.GetNome() + " ha effettuato il check-in.");
                        Console.WriteLine("Gli è stata assegnata una suite.");
                        cliente.Paga(cliente.GetGiorni() * listaSuite[0].GetPrezzo());
                    }
                }
            }
            //provo ad assegnare una camera superior al cliente
            listaSuperior = albergo.GetCamereSuperior();
            if (cliente.GetCamera() == null &&
                cliente.GetGiorni() * listaSuperior[0].GetPrezzo() <= cliente.GetBudget())
            {
                for (int i = 0; i < listaSuperior.Length && cliente.GetCamera() == null; i++)
                {
                    if (!listaSuperior[i].IsOccupata())
                    {
                        AssegnaCamera(cliente, listaSuperior[i]);
                        Console.WriteLine("Il cliente " + cliente.GetNome() + " ha effettuato il check-in.");
                        Console.WriteLine("Gli è stata assegnata una camera superior.");
                        cliente.Paga(cliente.GetGiorni() * listaSuperior[0].GetPrezzo());
                    }
                }
            }
            //provo ad assegnare una camera semplice al cliente
            listaCamere = albergo.GetCamereNormali();
            if (cliente.GetCamera() == null &&
                cliente.GetGiorni() * listaCamere[0].GetPrezzo() <= cliente.GetBudget())
            {
                for (int i = 0; i < listaCamere.Length && cliente.GetCamera() == null; i++)
                {
                    if (!listaCamere[i].IsOccupata())
                    {
                        AssegnaCamera(cliente, listaCamere[i]);
                        Console.WriteLine("Il cliente " + cliente.GetNome() + " ha effettuato il check-in.");
                        Console.WriteLine("Gli è stata assegnata una camera semplice.");
                        cliente.Paga(cliente.GetGiorni() * listaCamere[0].GetPrezzo());
                    }
                }
            }
        }
        //Stampo a video un eventuale esito negativo del check-in
        if (cliente.GetCamera() == null)
        {
            Console.WriteLine("Il cliente " + cliente.GetNome() + " non è riuscito ad effettuare il check-in.");
        }
    }