O objetivo deste programa é gerenciar a ocupação de quartos de um hotel. Ele utiliza uma matriz de structs (REGISTRO) para representar os quartos em um hotel de 4 andares, com 4 quartos por andar. Cada quarto armazena informações como:
• Status de ocupação (ocupado ou disponível);
• Nome do hóspede;
• Quantidade de dias hospedados;
• Valor acumulado de serviços prestados;
• Descrição dos serviços.
O programa oferece funcionalidades básicas, como check-in, check-out, adição de serviços e consulta de informações dos quartos, tudo isso organizado em funções que facilitam a modularidade e legibilidade do código.
Descrição das Funções
1. inicializarHotel:
o Função responsável por inicializar todos os quartos do hotel como disponíveis, atribuindo valores padrão (ex.: ocupado = 0, strings
vazias, etc.). o Utiliza dois laços de repetição para percorrer a matriz de quartos e inicializar cada elemento.
2. realizarCheckIn:
o Permite registrar a entrada de um hóspede. Solicita ao usuário o andar e o número do quarto e verifica sua disponibilidade.
o Caso o quarto esteja disponível, solicita o nome do hóspede e a
quantidade de dias que ficará hospedado, marcando o quarto como
ocupado.
3. realizarCheckOut:
o Calcula o valor total da estadia de um hóspede com base na
quantidade de dias hospedados e nos serviços utilizados. Exibe o
valor total e libera o quarto.
o Inclui limpeza dos dados associados ao quarto para que possa ser
reutilizado.
4. adicionarServico:
o Permite adicionar um serviço a um quarto ocupado, incluindo uma
descrição do serviço e o valor correspondente.
o Soma o valor informado ao total acumulado dos serviços do quarto
e atualiza a descrição dos serviços prestados.
5. consultarValorQuarto:
o Exibe informações detalhadas de um quarto específico, como o nome do hóspede, quantidade de dias, serviços prestados e valores acumulados.
o Verifica se o quarto está ocupado antes de exibir os dados.
6. main:
o Gerencia o fluxo do programa e apresenta o menu de opções ao usuário.
o Chama as funções correspondentes com base na escolha do usuário.
Enunciado da Prova
Parte 1: Análise do Código Base
1. Estude o código apresentado para o programa de controle de ocupação de quartos de hotel.
2. Certifique-se de compreender o funcionamento de cada função descrita acima.
3. Execute o programa, faça check-in de hóspedes, adicione serviços, consulte valores e faça check-out.
Parte 2: Implementação de Funcionalidades Adicionais
Questão 1: Contar Quartos Ocupados em um Andar (1 ponto)
• Objetivo: Implementar a função contarQuartosOcupados.
• Descrição: A função deve receber como parâmetro o número de um andar e retornar a quantidade de quartos ocupados neste andar.
• Orientação: o Percorra todos os quartos do andar informado usando um laço de repetição.
o Use uma condicional para verificar se cada quarto está ocupado.
Resposta
Basta implementar o código abaixo:
Código: Selecionar todos
void contarQuartosOcupadosPorAndar() {
int andar;
printf("Informe o número do andar (0 a %d): ", ANDARES - 1);
scanf("%d", &andar);
// Verifica se o andar informado está dentro do intervalo válido
if (andar < 0 || andar >= ANDARES) {
printf("Andar inválido!\n");
return;
}
int count = 0; // Inicializa o contador
// Percorre os quartos do andar informado
for (int i = 0; i < QUARTOS; i++) {
if (hotel[andar][i].ocupado) { // Verifica se o quarto está ocupado
count++;
}
}
// Exibe o resultado
printf("No andar %d, há %d quarto(s) ocupado(s).\n", andar, count);
}
Código: Selecionar todos
case 8:
contarQuartosOcupadosPorAndar(); // Comentario removido
Questão 2: Buscar Quarto por Nome do Hóspede (1 ponto)
• Objetivo: Implementar a função buscarQuartoPorHospede.
• Descrição: A função deve receber um nome de hóspede como parâmetro e localizar o quarto ocupado por ele, exibindo o número do andar e do quarto.
• Orientação:
o Utilize dois laços de repetição aninhados para percorrer todos os quartos.
o Verifique, com uma condicional, se o nome do hóspede no quarto coincide com o nome fornecido.
o Para comparar os nomes: Siga os seguintes Passos para Implementação:
▪ Inclusão da Biblioteca Necessária:
▪ Para trabalhar com strings e realizar comparações, é necessário incluir a biblioteca <string.h> no programa. Essa biblioteca contém diversas funções úteis para manipulação de strings em C.
▪ Uso da Função para Comparação de Strings:
▪ A função strcmp (string compare) deve ser usada para comparar duas strings.
▪ Sintaxe: int strcmp(char[] str1, char[] str2);
▪ Retorna 0 se as strings forem iguais.
▪ Retorna um valor negativo se str1 for menor que str2.
▪ Retorna um valor positivo se str1 for maior que str2.
Resposta: Foi identificado a função já instalada, sendo necessário apenas descomentar a função no menu.
Código: Selecionar todos
case 6:
buscarQuartoPorHospede();
Questão 3: Listar Quartos Disponíveis (1 ponto)
• Objetivo: Implementar a função listarQuartosDisponiveis.
• Descrição: A função deve percorrer todos os quartos do hotel e exibir os quartos que estão disponíveis (não ocupados).
• Orientação: o Utilize dois laços de repetição aninhados para percorrer toda a matriz de quartos.
o Use uma condicional para verificar quais quartos estão disponíveis.
Resposta
Implemente o código abaixo
Código: Selecionar todos
void listarQuartosDisponiveis() {
int disponiveis = 0;
printf("Lista de quartos disponíveis:\n");
// Percorre todos os andares e quartos
for (int i = 0; i < ANDARES; i++) {
for (int j = 0; j < QUARTOS; j++) {
// Verifica se o quarto não está ocupado
if (!hotel[i][j].ocupado) {
printf("Andar %d, Quarto %d\n", i, j);
disponiveis++;
}
}
}
// Caso não haja quartos disponíveis
if (disponiveis == 0) {
printf("Nenhum quarto disponível no momento.\n");
}
}
Código: Selecionar todos
case 9:
listarQuartosDisponiveis();
break;
• Objetivo: Implementar a função calcularTotalServicos.
• Descrição: A função deve percorrer todos os quartos ocupados e calcular a soma de todos os valores acumulados em serviços.
• Orientação: o Utilize dois laços de repetição aninhados para percorrer a matriz de quartos.
o Verifique se o quarto está ocupado antes de somar o valor dos serviços.
Implemente o código abaixo
Código: Selecionar todos
void calcularTotalServicos() {
float totalServicos = 0.0;
// Percorre todos os andares e quartos
for (int i = 0; i < ANDARES; i++) {
for (int j = 0; j < QUARTOS; j++) {
// Somente quartos ocupados contribuem para o total
if (hotel[i][j].ocupado) {
totalServicos += hotel[i][j].totalServicos;
}
}
}
printf("O total arrecadado com serviços adicionais é: R$ %.2f\n", totalServicos);
}
Código: Selecionar todos
case 10:
// calcularTotalServicosPrestados();
• Objetivo: Implementar a função validarEntrada.
• Descrição: A função deve solicitar ao usuário o número do andar e do quarto, verificando se os valores estão dentro dos limites permitidos.
Solicite novamente os dados até que sejam válidos.
• Orientação:
o Utilize um laço de repetição do-while para repetir a solicitação até
que os valores sejam válidos.
o Use condicionais para verificar os limites do andar e do quarto.
Resposta: Implemente o código abaixo
Código: Selecionar todos
void validarEntrada(int *andar, int *quarto) {
do {
printf("Informe o andar (0-%d): ", ANDARES - 1);
scanf("%d", andar);
if (*andar < 0 || *andar >= ANDARES) {
printf("Andar inválido! Tente novamente.\n");
continue;
}
printf("Informe o quarto (0-%d): ", QUARTOS - 1);
scanf("%d", quarto);
if (*quarto < 0 || *quarto >= QUARTOS) {
printf("Quarto inválido! Tente novamente.\n");
continue;
}
break; // Se ambos os valores forem válidos, sai do laço
} while (1);
}
Código: Selecionar todos
case 11:
// validarEntradaERegistrarPagamento();
• Objetivo: Implementar o registro de pagamentos para um quarto específico.
• Descrição:
o Crie uma nova struct chamada Pagamento com o campo float valorPago para armazenar o valor pago pelo hóspede.
o Adicione um campo do tipo Pagamento à struct Quarto.
o Implemente a função registrarPagamento que permita ao usuário registrar um pagamento informando o valor e associando-o ao quarto.
• Orientação:
o Verifique se o quarto está ocupado antes de registrar o pagamento.
o Atualize os valores da receita acumulada no quarto com o valor informado.
Questão 7: Relatório Geral de Ocupação (2 pontos)
• Objetivo: Implementar uma função para gerar um relatório do estado geral do hotel.
• Descrição:
o Crie a função gerarRelatorio que percorra todos os quartos do hotel e exiba:
▪ A quantidade total de quartos ocupados;
▪ A quantidade total de quartos disponíveis;
▪ A receita total acumulada (soma de todos os valores pagos e
serviços).
• Orientação:
o Use laços de repetição para percorrer a matriz de quartos.
o Mantenha contadores para os quartos ocupados e disponíveis, e
uma variável para acumular a receita total.
Critérios de Avaliação
• Implementar estruturas ensinadas na aula.
• Uso correto de laços de repetição e condicionais.
• Organização e clareza do código.
• Comentários explicativos para cada trecho de código. (1 ponto)
Boa sorte!