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.
– Augusto Vasques
if(!erroNaReserva)
 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.
– Rebeca Nonato
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
– João Paulo Amorim
@Rebecanonate Esse
if(!erroNaReserva) salasReservadas[x] = ...
is the verification code if the reservation. I want the code that fills the reservations.– Augusto Vasques
@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.
– Rebeca Nonato
@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.
– Rebeca Nonato
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.
– João Paulo Amorim
These two lines
ValidDadosEntrada dadosRecebidos = new ValidDadosEntrada();
SalasParaReserva verificaReserva = new SalasParaReserva();
has reference to the classesValidDadosEntrada
andSalasParaReserva
without these classes I cannot execute your code.– Augusto Vasques
@Augustovasques Includes all code (classes) of the program.
– Rebeca Nonato