Prova de Programação: Controle de Ocupação de Quartos de Hotel

Avatar do usuário
bernardino
Site Admin
Mensagens: 795
Registrado em: 28 Ago 2020, 15:11

Prova de Programação: Controle de Ocupação de Quartos de Hotel

Mensagem por bernardino »

Introdução

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);
}
Após implementar deve descomentar a linha do caso no menu

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");
    }
}
E descomente a função no menu

Código: Selecionar todos

            case 9:
                listarQuartosDisponiveis();
                break;
Questão 4: Calcular Total de Serviços Prestados no Hotel (1 ponto)

• 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);
}
E descomente a função no menu.

Código: Selecionar todos

            case 10:
               // calcularTotalServicosPrestados();
Questão 5: Validar Entrada de Quarto e Andar (1 ponto)

• 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);
}
Após implementar, descomente a função no menu.

Código: Selecionar todos

            case 11:
               // validarEntradaERegistrarPagamento();
Questão 6: Adicionar Registro de Pagamento no Quarto (2 pontos)

• 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!
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Responder