//Faz o Check-Out do cliente private void FazerCheckOut() { dynamic ObjConf = PegaConfigHotel(); dynamic ObjDado = PegaClientesHotel(); dynamic NewObjDado; ArrayList ClientesHotel = new ArrayList(); List <int> IdClientes = new List <int>(); int Contador = 0; int UsuarioSelecionado; bool UsuarioValido; string dataCheckIn; string dataCheckOut; string precoDiariaStr; string nomeCliente; int diasDecorridos; List <dynamic> servicosUt = new List <dynamic>(); float totalGasto = 0.0F; string AuxEnd; Stream StrmDado; StreamWriter StrmWr; Stream StrmCheckOut; string caminhoCheckOutFile; string saidaCheckOut; Console.Clear(); Console.WriteLine("###### FAZER CHECK-OUT ######\n"); if (ObjDado.Clientes.Count > 0) { foreach (var cliente in ObjDado.Clientes) { Contador++; Console.WriteLine("-------------------------------------"); Console.WriteLine("ID: " + Contador); Console.WriteLine("NOME: " + cliente.Nome); Console.WriteLine("-------------------------------------"); ClientesHotel.Add(cliente); IdClientes.Add(Contador); } Console.Write("Selecione um usuário (ID): "); do { UsuarioSelecionado = int.Parse(Console.ReadLine()); UsuarioValido = !Array.Exists(IdClientes.ToArray(), b => b == UsuarioSelecionado); if (UsuarioValido) { Console.Write("\nUsuário inválido, selecione outro (ID): "); } } while (UsuarioValido); dataCheckIn = ObjDado.Clientes[UsuarioSelecionado - 1].CheckIn; precoDiariaStr = ObjDado.Clientes[UsuarioSelecionado - 1].Servicos[0].Preco; nomeCliente = ObjDado.Clientes[UsuarioSelecionado - 1].Nome; Console.WriteLine("\nCliente Selecionado: {0}\n", nomeCliente); Console.Write("Data de CheckOut (DD/MM/AAAA): "); dataCheckOut = Console.ReadLine(); diasDecorridos = CalculaData(dataCheckIn, dataCheckOut); foreach (var servico in ObjDado.Clientes[UsuarioSelecionado - 1].Servicos) { servicosUt.Add(servico); } servicosUt.RemoveAt(0); Console.Clear(); Console.WriteLine("###### FAZER CHECK-OUT ######\n"); saidaCheckOut = "---------------------- " + ObjConf.NomeHotel + " ----------------------\n"; saidaCheckOut += "Cliente: " + nomeCliente + "\n"; saidaCheckOut += "Data CheckIn: " + dataCheckIn + " | Data CheckOut: " + dataCheckOut + "\n"; saidaCheckOut += "Dias no Hotel: " + diasDecorridos + "\n"; saidaCheckOut += "serviços Utilizados: " + servicosUt.Count + "\n"; saidaCheckOut += "----------------------------------------------------\n"; saidaCheckOut += "Nome: Diária do Hotel\n"; saidaCheckOut += "Perço: R$" + precoDiariaStr + "\n"; if (servicosUt.Count > 0) { saidaCheckOut += "----------------------------------------------------\n"; foreach (dynamic servico in servicosUt) { dynamic precoIn = servico.Preco; saidaCheckOut += "Nome: " + servico.Nome + "\n"; saidaCheckOut += "Preço: R$" + precoIn + "\n"; totalGasto += float.Parse(precoIn.ToString()); saidaCheckOut += "----------------------------------------------------\n"; } } else { saidaCheckOut += "----------------------------------------------------\n"; } totalGasto += diasDecorridos * float.Parse(precoDiariaStr); saidaCheckOut += "Total: R$" + totalGasto + " ---------------------------------\n\n"; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(saidaCheckOut); Console.ForegroundColor = ConsoleColor.Green; Console.Write("Deseja Concluir o Check-Out de {0} (S/N): ", nomeCliente); AuxEnd = Console.ReadLine(); if (AuxEnd == "S" || AuxEnd == "s") { ClientesHotel.RemoveAt(UsuarioSelecionado - 1); NewObjDado = new { Clientes = ClientesHotel }; StrmDado = File.Create(caminhoArqDado); StrmWr = new StreamWriter(StrmDado); StrmWr.Write(JsonConvert.SerializeObject(NewObjDado)); StrmWr.Close(); StrmDado.Close(); caminhoCheckOutFile = Path.GetFullPath(nomeCliente + "-checkout.txt"); StrmCheckOut = File.Open(caminhoCheckOutFile, FileMode.CreateNew); StrmWr = new StreamWriter(StrmCheckOut); StrmWr.WriteAsync(saidaCheckOut); StrmWr.Close(); StrmCheckOut.Close(); Console.WriteLine("Check-Out Concluido!"); Console.WriteLine("Arquivo de Nota: {0}", caminhoCheckOutFile); Thread.Sleep(timeSleep); Menu(); } else { Menu(); } } else { Console.WriteLine("Não há clientes para fazer Check-Out!"); Thread.Sleep(timeSleep); Menu(); } }
// Faz a configuração inicial do programa ou reseta private void ConfiguraPrograma(bool clear = false) { Stream StrmConf; Stream StrmDado; StreamReader Leitor; StreamWriter Escritor; dynamic ConfStruct; dynamic DadoStruct; string NomeHotel; int QuantidadeQuartos; float PrecoDiaria; // Verifica se o diretório existe, se não cria um if (!Directory.Exists(caminhoDir)) { Directory.CreateDirectory(caminhoDir); } // Verifica se os arquivos de dados e configurações existem if (!File.Exists(caminhoArqConf)) { StrmConf = File.Open(caminhoArqConf, FileMode.Create); StrmConf.Close(); } if (!File.Exists(caminhoArqDado)) { StrmDado = File.Open(caminhoArqDado, FileMode.Create); StrmDado.Close(); } // Abre os dois arquivos StrmConf = File.Open(caminhoArqConf, FileMode.Open); StrmDado = File.Open(caminhoArqDado, FileMode.Open); if (clear) { StrmConf.Close(); StrmDado.Close(); StrmConf = File.Open(caminhoArqConf, FileMode.Create); StrmDado = File.Open(caminhoArqDado, FileMode.Create); } Leitor = new StreamReader(StrmConf); // Verifica se o Arquivo está vazio if (Leitor.ReadToEnd() == "" || clear) { Console.Clear(); Console.WriteLine("###### CONFIGURAÇÃO INICIAL ######\n"); Console.Write("Nome do Hotel: "); NomeHotel = Console.ReadLine(); Console.Write("Quantidade de Quartos do Hotel: "); QuantidadeQuartos = int.Parse(Console.ReadLine()); Console.Write("Preço da Diária: R$"); PrecoDiaria = float.Parse(Console.ReadLine()); // Corpo do arquivo de Configurações ConfStruct = new { NomeHotel, QuantidadeQuartos, PrecoDiaria, Servico = new ArrayList() }; // Corpo do arquivo de dados DadoStruct = new { Clientes = new ArrayList() }; // Gerando arquivos padrões Escritor = new StreamWriter(StrmConf); Escritor.Write(JsonConvert.SerializeObject(ConfStruct)); Escritor.Close(); Escritor = new StreamWriter(StrmDado); Escritor.Write(JsonConvert.SerializeObject(DadoStruct)); Escritor.Close(); Console.WriteLine("Arquivo Criados com Sucesso!"); Console.WriteLine(caminhoDir); Console.WriteLine(caminhoArqConf); Console.WriteLine(caminhoArqDado); Thread.Sleep(timeSleep); Console.Clear(); } Leitor.Close(); StrmConf.Close(); StrmDado.Close(); }