(C#) Does the Code Not Save the information in the array (table)?

Asked

Viewed 75 times

0

I have the code below. Its purpose is to check if it already exists in the table SalaReservada an appointment on the same day/time/room. If any, I check the next room I brought codSala, and if it also already exists with this room, I return true erroNaReserva. In case you only have a reservation in the first room, and on the second, no, I can record on this table SalaReservada, the reservation.

Error: My table SalaReservada is always empty. When I run the first reservation, say that you have saved, but in the second position 0 is empty.

Question: This recording mode is incorrect?

salasReservadas[x] = new SalaReservada { Codigo = codSala[j], DtEntrada = dataIniReuni, DtSaida = dataFimReuni, TempoPerm = tempoReuniao };

Code in C#.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReservaSala
{
    class SalaReservada
    {
        private int codigo;
        private DateTime dtEntrada;
        private DateTime dtSaida;
        private int tempoPerm;

        public int Codigo { get => codigo; set => codigo = value; }
        public DateTime DtEntrada { get => dtEntrada; set => dtEntrada = value; }
        public DateTime DtSaida { get => dtSaida; set => dtSaida = value; }
        public int TempoPerm { get => tempoPerm; set => tempoPerm = value; }

        public SalaReservada[] salasReservadas = new SalaReservada[10];

        public bool VerificaReservaSala(int[] codSala, DateTime dataIniReuni, DateTime dataFimReuni, int tempoReuniao)
        {
            bool[] veriNaReserva = new bool[10];
            bool erroNaReserva = false;
            int horaFinalJaMarcada = 0;
            int horaInicialSerAgendada = 0;
            int j = 0;
            int i = 0;
            int x = 0;

            while (codSala[j] != 0)
            {
                while (salasReservadas[i] != null)
                {
                    if (codSala[j] == salasReservadas[i].codigo
                            && dataIniReuni.ToShortDateString() == salasReservadas[i].dtEntrada.ToShortDateString())
                    {
                        horaFinalJaMarcada = Convert.ToDateTime(salasReservadas[i].dtSaida.ToShortTimeString()).Hour;
                        horaInicialSerAgendada = Convert.ToDateTime(dataIniReuni.ToShortTimeString()).Hour;

                        if (horaInicialSerAgendada <= horaFinalJaMarcada)
                        {
                            veriNaReserva[i] = true;
                            break;
                        }
                    }
                    i = i + 1;
                }
                Console.WriteLine(" \n\n\t ******* Reserva ate o momento :" + erroNaReserva);

                j = j + 1;
            }

            for(x = 0; x < i; x++)
            {
                if (veriNaReserva[x])
                { 
                    erroNaReserva = true;
                    break;
                }
            }
            if(!erroNaReserva)
                salasReservadas[x] = new SalaReservada { Codigo = codSala[j], DtEntrada = dataIniReuni, DtSaida = dataFimReuni, TempoPerm = tempoReuniao };

            return erroNaReserva;
        }

    }
}

//-----------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReservaSala
{
    class Program
    {
        static void Main(string[] args)
        {
            ValidDadosEntrada dadosRecebidos = new ValidDadosEntrada();
            SalasParaReserva verificaReserva = new SalasParaReserva();
            SalaReservada salasReservadas = new SalaReservada();
            int codValidaDadosEntrada = 0;
            string dtIniString = null;
            string dtFimString = null;
            string axSair = null;
            string axInternet = "N";
            string axTv = "N";
            string axWebcam = "N";
            string axLugares = null;
            string axComputador = "N";
            const int V = 12;
            int[] codSala;
            codSala = new int[V];
            bool reservaNok = false;


            do
            {
                dtIniString = null;
                dtFimString = null;
                axSair = null;
                axInternet = "N";
                axTv = "N";
                axWebcam = "N";
                axLugares = null;
                axComputador = "N";

                Console.Title = "Reservas de Sala para Reunião";

                //______________________________________________________________________Valida Data Inicial 
                do
                {
                    codValidaDadosEntrada = 0;
                    Console.Clear();
                    Console.WriteLine("\n\n\tVAMOS EFETUAR A RESERVA DA SALA ");
                    Console.Write("\n\tDigite a Data do Inicio Reunião e a Hora (dd/mm/yyyy 00:00:00): ");
                    dtIniString = Console.ReadLine();

                    codValidaDadosEntrada = dadosRecebidos.validaInformacoesEntrada(dtIniString, dtFimString);

                    switch (codValidaDadosEntrada)
                    {
                        case 1:
                            Console.Clear();
                            Console.WriteLine("\n\t ***Favor verificar se a data é Válida e seu Formato!***");
                            Console.ReadLine();
                            break;
                        case 2:
                            Console.Clear();
                            Console.WriteLine("\n\t ***As reuniões devem ser agendadas com no mínimo um dia de antecedência!***");
                            Console.ReadLine();
                            break;
                        case 3:
                            Console.Clear();
                            Console.WriteLine("\n\t ***As reuniões devem ser agendadas com no máximo 40 dia de antecedência!***");
                            Console.ReadLine();
                            break;
                        case 4:
                            Console.Clear();
                            Console.WriteLine("\n\t ***As reuniões devem ser agendadas apenas para os dias úteis!***");
                            Console.ReadLine();
                            break;
                    }
                } while (codValidaDadosEntrada != 0);

                //______________________________________________________________________Valida Data Final
                do
                {
                    codValidaDadosEntrada = 0;
                    Console.Clear();
                    Console.WriteLine("\n\n\tVAMOS EFETUAR A RESERVA DA SALA ");
                    Console.WriteLine("\n\tInicio da Reunião: " + dadosRecebidos.DataIni);
                    Console.Write("\n\tDigite a Data do Fim da Reunião e a Hora (dd/mm/yyyy 00:00:00): ");
                    dtFimString = Console.ReadLine();

                    codValidaDadosEntrada = dadosRecebidos.validaInformacoesEntrada(dtIniString, dtFimString);

                    switch (codValidaDadosEntrada)
                    {
                        case 1:
                            Console.Clear();
                            Console.WriteLine("\n\t ***Favor verificar se a data é Válida e seu Formato!***");
                            Console.ReadLine();
                            break;
                        case 5:
                            Console.Clear();
                            Console.WriteLine("\n\t ***A data/hora do Fim da Reunião deve ser maior que a do Inicio!***");
                            Console.ReadLine();
                            break;
                        case 6:
                            Console.Clear();
                            Console.WriteLine("\n\t ***Reuniões não podem durar mais que 8 horas!***");
                            Console.ReadLine();
                            break;
                    }
                } while (codValidaDadosEntrada != 0);

                //______________________________________________________________________Valida informações da sala

                do
                {
                    codValidaDadosEntrada = 0;
                    Console.Clear();
                    Console.WriteLine("\n\n\tVAMOS EFETUAR A RESERVA DA SALA ");
                    Console.WriteLine("\n\tInicio da Reunião: " + dadosRecebidos.DataIni);
                    Console.WriteLine("\n\tFim da Reunião: " + dadosRecebidos.DataFim);
                    Console.WriteLine("\n\tTempo de Reunião: " + dadosRecebidos.TempoReuniao);
                    Console.Write("\n\tPRecisa de Quantos Lugares na Sala: ");
                    axLugares = Console.ReadLine();
                    Console.Write("\n\tPRecisa de Internet (S/N): ");
                    axInternet = Console.ReadLine();
                    Console.Write("\n\tPRecisa de Computador (S/N): ");
                    axComputador = Console.ReadLine();
                    Console.Write("\n\tPRecisa de TV (S/N): ");
                    axTv = Console.ReadLine();
                    Console.Write("\n\tPRecisa de Webcam (S/N): ");
                    axWebcam = Console.ReadLine();

                    codValidaDadosEntrada = dadosRecebidos.verificaInformacoesSala(axLugares, axInternet, axComputador, axTv, axWebcam);

                    if (codValidaDadosEntrada == 7)
                    {
                        Console.Clear();
                        Console.WriteLine("\n\t ***Você digitou informações inválidas!***");
                        Console.ReadLine();
                    }

                } while (codValidaDadosEntrada != 0);

                codSala = verificaReserva.Reservar(dadosRecebidos.LugaresReserva, dadosRecebidos.InternetReserva, dadosRecebidos.ComputadorReserva, dadosRecebidos.TvReserva, dadosRecebidos.WebcamReserva);

                Console.WriteLine("\n\n Sugestão de Salas ");
                codSala.ToList().ForEach(i => Console.WriteLine(i.ToString()));
                Console.ReadLine();

                if (codSala != null)
                {
                    reservaNok = salasReservadas.VerificaReservaSala(codSala, dadosRecebidos.DataIni, dadosRecebidos.DataFim, dadosRecebidos.TempoReuniao);

                    if (reservaNok)
                        Console.WriteLine("\n\tSua Reserva Não pode ser Feita, pois não há salas Disponíveis Nesse Dia/Hora");
                    else
                        Console.WriteLine("\n\tSua Reserva Foi Realizada Com Sucesso");
                }
                else
                    Console.WriteLine("\n\tSua Reserva Não pode ser Feita, pois não há salas que atendam seus critérios.");



                Console.Write("\n\tPara sair informe 'S', ou para reservar mais 'enter': ");
                axSair = Console.ReadLine();
                Console.ReadKey();

            } while (axSair != "s");
        }//Main
    } //Program
}// ReservaSala

//-------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReservaSala
{
    class Sala
    {
        private int codigo;
        private int lugares;
        private bool internet;
        private bool computador;
        private bool tv;
        private bool webcam;

        public int Codigo { get => codigo; set => codigo = value; }
        public int Lugares { get => lugares; set => lugares = value; }
        public bool Internet { get => internet; set => internet = value; }
        public bool Tv { get => tv; set => tv = value; }
        public bool Webcam { get => webcam; set => webcam = value; }
        public bool Computador { get => computador; set => computador = value; }
    }
}

//------------------------------------------------

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ReservaSala
{
    class ValidDadosEntrada
    {
        private DateTime dataIni;
        private DateTime dataFim;
        private int lugaresReserva;
        private bool internetReserva;
        private bool computadorReserva;
        private bool tvReserva;
        private bool webcamReserva;
        private int tempoReuniao;

        public int LugaresReserva { get => lugaresReserva; set => lugaresReserva = value; }
        public bool InternetReserva { get => internetReserva; set => internetReserva = value; }
        public bool ComputadorReserva { get => computadorReserva; set => computadorReserva = value; }
        public bool TvReserva { get => tvReserva; set => tvReserva = value; }
        public bool WebcamReserva { get => webcamReserva; set => webcamReserva = value; }
        public DateTime DataIni { get => dataIni; set => dataIni = value; }
        public DateTime DataFim { get => dataFim; set => dataFim = value; }
        public int TempoReuniao { get => tempoReuniao; set => tempoReuniao = value; }

        public int validaInformacoesEntrada(string dtIniString, string dtFimString)
        {

            bool dataOk = false;
            bool dadosOk = false;
            int codRetorno = 0;
            string diaSemana = null;
            //Feriados_Nacionais objFeriado = new Feriados_Nacionais();

            if (dtFimString == " " || dtFimString == null)
            {

                dataOk = verificaFormatoData(dtIniString); // Valida formato de Data e Hora
                if (dataOk)
                {
                    this.DataIni = Convert.ToDateTime(dtIniString);
                    dadosOk = verificaDiaAnterior(); // Valida dados Recebidos para Efetuar a reserva

                    if (dadosOk)
                    {
                        dadosOk = verificaDiaApos(); // Valida dados Recebidos para Efetuar a reserva
                        if (dadosOk)
                        {
                            diaSemana = DataIni.DayOfWeek.ToString();
                            if (diaSemana == "Saturday" || diaSemana == "Sunday")
                            {
                                codRetorno = 4;
                            }
                        }
                        else
                            codRetorno = 3;
                    }
                    else
                        codRetorno = 2;
                }
                else
                    codRetorno = 1;
            }
            else //_______________________________________________ Valida data Fim
            {

                dataOk = verificaFormatoData(dtFimString); // Valida formato de Data e Hora
                if (dataOk)
                {
                    this.DataFim = Convert.ToDateTime(dtFimString);
                    dadosOk = verificaDataFim();
                    if (dadosOk)
                    {
                        dadosOk = verificaTempoReuniao();
                        if (!dadosOk)
                            codRetorno = 6;
                    }
                    else
                        codRetorno = 5;
                }
                else
                    codRetorno = 1;
            }
            return codRetorno;
        }


        public bool verificaDiaAnterior()
        {
            DateTime dataAtual = DateTime.Now;
            bool solicitacaoOk = false;
            int result = DateTime.Compare(this.DataIni, dataAtual);

            if (result > 0)
                solicitacaoOk = true;

            return solicitacaoOk;
        }

        public bool verificaDiaApos()
        {
            DateTime dataAtual = DateTime.Now;
            bool solicitacaoOk = false;
            TimeSpan diferenca = this.DataIni.Subtract(dataAtual);
            int diferencaDias = diferenca.Days;

            if (diferencaDias < 40)
                solicitacaoOk = true;

            return solicitacaoOk;
        }

        public bool verificaFormatoData(string dataHora)
        {
            bool dataOk = false;
            DateTime dataValida;
            Regex r = new Regex(@"(\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2})");
            dataOk = r.Match(dataHora).Success;
            if (dataOk)
            {
                if (!DateTime.TryParse(dataHora, out dataValida))
                    dataOk = false;
            }
            return dataOk;
        }

        public bool verificaDataFim()
        {
            bool tempoOk = false;
            if (this.DataFim > this.DataIni)
                tempoOk = true;

            return tempoOk;
        }

        public bool verificaTempoReuniao()
        {
            bool tempoOk = false;
            TimeSpan tempoOitoHoras = TimeSpan.Parse("08:00:00");
            TimeSpan diferenca = this.DataIni.Subtract(this.DataFim);

            int diferencaDias = diferenca.Hours;
            diferencaDias = Math.Abs(diferencaDias);
            int totalMaximoHoras = tempoOitoHoras.Hours;
            TempoReuniao = diferencaDias;

            if (diferencaDias <= totalMaximoHoras)
                tempoOk = true;

            return tempoOk;
        }

        public int verificaInformacoesSala(string axLugares, string axInternet, string axComputador, string axTv, string axWebcam)
        {
            int codigoRetorno = 0;
            axInternet = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(axInternet);
            axTv = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(axTv);
            axWebcam = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(axWebcam);
            axComputador = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(axComputador);

            try
            {
                lugaresReserva = Convert.ToInt32(axLugares);
            }
            catch (FormatException)
            {
                codigoRetorno = 7;
            }

            if (codigoRetorno == 0)
            {
                switch (axInternet)
                {
                    case "N":
                        internetReserva = false;
                        break;
                    case "S":
                        internetReserva = true;
                        break;
                    default:
                        codigoRetorno = 7;
                        break;
                }
            }

            if (codigoRetorno == 0)
            {
                switch (axComputador)
                {
                    case "N":
                        ComputadorReserva = false;
                        break;
                    case "S":
                        ComputadorReserva = true;
                        break;
                    default:
                        codigoRetorno = 7;
                        break;
                }
            }

            if (codigoRetorno == 0)
            {
                switch (axTv)
                {
                    case "N":
                        tvReserva = false;
                        break;
                    case "S":
                        tvReserva = true;
                        break;
                    default:
                        codigoRetorno = 7;
                        break;
                }
            }

            if (codigoRetorno == 0)
            {
                switch (axWebcam)
                {
                    case "N":
                        webcamReserva = false;
                        break;
                    case "S":
                        webcamReserva = true;
                        break;
                    default:
                        codigoRetorno = 7;
                        break;
                }
            }

            return codigoRetorno;
        }
    }
}

// ---------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReservaSala
{
    class SalasParaReserva
    {
        public List<Sala> salas = new List<Sala>();

        public SalasParaReserva()
        {
            salas[0] = new Sala { Codigo = 1, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[1] = new Sala { Codigo = 2, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[2] = new Sala { Codigo = 3, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[3] = new Sala { Codigo = 4, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[4] = new Sala { Codigo = 5, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[5] = new Sala { Codigo = 6, Lugares = 10, Internet = true, Computador = false, Tv = false, Webcam = false };
            salas[6] = new Sala { Codigo = 7, Lugares = 10, Internet = true, Computador = false, Tv = false, Webcam = false };
            salas[7] = new Sala { Codigo = 8, Lugares = 3, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[8] = new Sala { Codigo = 9, Lugares = 3, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[9] = new Sala { Codigo = 10, Lugares = 3, Internet = true, Computador = true, Tv = true, Webcam = true };
            salas[10] = new Sala { Codigo = 11, Lugares = 20, Internet = false, Computador = false, Tv = false, Webcam = false };
            salas[11] = new Sala { Codigo = 12, Lugares = 20, Internet = false, Computador = false, Tv = false, Webcam = false };
        }

        public int[] Reservar(int axlugares, bool axInternet, bool axComputador, bool axTv, bool axWebcam)
        {
            int[] axCodigo = new int[12];
            int x = 0;
            bool axControle = false;
            bool axControleI = false;
            bool axControleC = false;
            bool axControleT = false;
            bool axControleW = false;

            for (int i = 0; i < 12; i++)
            {
                axControle = false;
                axControleI = false;
                axControleC = false;
                axControleT = false;
                axControleW = false;

                if (!axInternet && !axComputador && !axTv && !axWebcam)
                    axControle = true;

                if (salas[i].Internet && axInternet)
                    axControleI = true;

                if (salas[i].Computador && axComputador)
                    axControleC = true;

                if (salas[i].Tv && axTv)
                    axControleT = true;

                if (salas[i].Webcam && axWebcam)
                    axControleW = true;

                if (axControle || axControleI && axControleC && axControleT && axControleW) { 
                    if (salas[i].Lugares >= axlugares)
                    {
                        axCodigo[x] = salas[i].Codigo;
                        x = x + 1;
                    }
                }

            }
            return axCodigo;
        }
    }
}
  • Where is the part of the code that makes the reservation? I ask because it may be in it that the error is found.

  • if(!erroNaReserva)&#xA; salasReservadas[x] = new SalaReservada { Codigo = codSala[j], DtEntrada = dataIniReuni, DtSaida = dataFimReuni, TempoPerm = tempoReuniao }; // Será feito nesse trecho do código, somente após a verificação se já existe a reserva ou não.

  • 2

    You are not saving in the table just by instantiating a new object in this code of the new Salareservada, you have to take this new created object and insert in its context and save the same

  • @Rebecanonate Esse if(!erroNaReserva) salasReservadas[x] = ... is the verification code if the reservation. I want the code that fills the reservations.

  • 1

    @Augustovasques I put in question, the code I receive the user information, and I call to check whether or not the reservation can be performed.

  • @Joãopauloamorim The "save" is only to store the information in the table. Because in this code I do not use BD, it is only online, the user during the same execution, will call the reservation as many times as you want. And as soon as he calls, I would have to "store" the information on an online table.

  • I get it, the code is quite extensive with this many arrays, can’t you turn it into lists? so it becomes much more legible, easier to check and easier to you popular also these guys.

  • These two lines ValidDadosEntrada dadosRecebidos = new ValidDadosEntrada(); SalasParaReserva verificaReserva = new SalasParaReserva(); has reference to the classes ValidDadosEntrada and SalasParaReservawithout these classes I cannot execute your code.

  • 1

    @Augustovasques Includes all code (classes) of the program.

Show 4 more comments

1 answer

1


The problem is that the instance salas is the type List<Sala> and was being populated as if it were an instance of the vectorSala[].

There are two solutions to this problem.

The first solution is to change the type salas of an instance of List<Sala> for a vector instanceSala[]:

//É só alterar a classe de salas de List<Sala> para Sala[] 
public Sala[] salas = new Sala[12];

The second solution, a little more laborious, is popular the List<Sala> using the method List<T>.Add(T):

 public List<Sala> salas = new List<Sala>();

        public SalasParaReserva()
        {
            salas.Add(new Sala { Codigo = 1, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 2, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 3, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 4, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 5, Lugares = 10, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 6, Lugares = 10, Internet = true, Computador = false, Tv = false, Webcam = false });
            salas.Add(new Sala { Codigo = 7, Lugares = 10, Internet = true, Computador = false, Tv = false, Webcam = false });
            salas.Add(new Sala { Codigo = 8, Lugares = 3, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 9, Lugares = 3, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 10, Lugares = 3, Internet = true, Computador = true, Tv = true, Webcam = true });
            salas.Add(new Sala { Codigo = 11, Lugares = 20, Internet = false, Computador = false, Tv = false, Webcam = false });
            salas.Add(new Sala { Codigo = 12, Lugares = 20, Internet = false, Computador = false, Tv = false, Webcam = false });
        }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.