MateusFBL / TP_Locadora6

0 stars 0 forks source link

Implementar uma função que cadastre uma locação. #3

Open MateusFBL opened 10 months ago

Vikatormfc commented 9 months ago

void cadastrarLocacao(FILE arquivoLocacoes, FILE arquivoClientes, FILE arquivoVeiculos, int totalLocacoes) { struct Locacao novaLocacao; struct Cliente cliente; struct Veiculo veiculo;

printf("Digite o nome do cliente que deseja alugar o veiculo: ");
scanf(" %[^\n]s", cliente.nome);

// Check if the client exists
if (!clienteExiste(arquivoClientes, cliente.nome)) {
    printf("Cliente nao encontrado.\n");
    return;
}

// Solicitar informa�es adicionais para a loca�o
printf("Digite a data de retirada (formato dd/mm/aaaa): ");
scanf(" %[^\n]s", novaLocacao.dataRetirada);

printf("Digite a data de devolucao (formato dd/mm/aaaa): ");
scanf(" %[^\n]s", novaLocacao.dataDevolucao);

printf("Digite a quantidade de ocupantes necessaria: ");
scanf("%d", &novaLocacao.quantidadeDias);

// Buscar ve�culo dispon�vel para a necessidade do cliente
printf("\nVeiculos disponiveis:\n");

fseek(arquivoVeiculos, 0, SEEK_SET);
int veiculoEncontrado = 0;

while (fread(&veiculo, sizeof(struct Veiculo), 1, arquivoVeiculos) == 1)
{
    if (veiculo.ocupantes >= novaLocacao.quantidadeDias && strcmp(veiculo.status, "Disponivel") == 0)
    {
        printf("Codigo: %d | Descricao: %s | Modelo: %s | Cor: %s | Placa: %s | Valor Diaria: %.2f\n",
               veiculo.codigo, veiculo.descricao, veiculo.modelo, veiculo.cor, veiculo.placa, veiculo.valorDiaria);
        veiculoEncontrado = 1;
    }
}

if (!veiculoEncontrado)
{
    printf("Nenhum veiculo disponivel para a necessidade do cliente.\n");
    return;
}

// Solicitar escolha do ve�culo pelo c�digo
printf("\nDigite o codigo do veiculo escolhido: ");
scanf("%d", &novaLocacao.codigoVeiculo);

// Verificar se o ve�culo est� dispon�vel
if (!veiculoDisponivel(arquivoVeiculos, novaLocacao.codigoVeiculo))
{
    printf("Veiculo escolhido nao esta disponivel.\n");
    return;
}

// Oferecer op�o de contratar seguro
printf("Deseja contratar um seguro para o veiculo? (1 - Sim, 0 - Nao): ");
scanf("%d", &novaLocacao.contratarSeguro);

// Calcular o valor total da loca�o
float valorTotal = calcularValorLocacao(arquivoVeiculos, novaLocacao.codigoVeiculo, novaLocacao.quantidadeDias, novaLocacao.contratarSeguro);

if (valorTotal < 0)
{
    printf("Erro ao calcular o valor da locacao. Verifique se o veiculo foi encontrado.\n");
    return;
}

// Atualizar o status do ve�culo para "Locado"
fseek(arquivoVeiculos, 0, SEEK_SET);
while (fread(&veiculo, sizeof(struct Veiculo), 1, arquivoVeiculos) == 1)
{
    if (veiculo.codigo == novaLocacao.codigoVeiculo)
    {
        strcpy(veiculo.status, "Locado");
        fseek(arquivoVeiculos, -sizeof(struct Veiculo), SEEK_CUR);
        fwrite(&veiculo, sizeof(struct Veiculo), 1, arquivoVeiculos);
        break;
    }
}

// Gravar a nova loca�o no arquivo
fseek(arquivoLocacoes, 0, SEEK_END);
fwrite(&novaLocacao, sizeof(struct Locacao), 1, arquivoLocacoes);

(*totalLocacoes)++;
printf("Locacao cadastrada com sucesso! Valor total: R$ %.2f\n", valorTotal);

}

EXPLICAÇÃO DO CÓDIGO: Declaração de Estruturas:

struct Locacao: Representa informações sobre uma locação. struct Cliente: Armazena informações sobre um cliente. struct Veiculo: Contém detalhes sobre um veículo. Entrada de Dados:

Solicita o nome do cliente que deseja alugar um veículo. Verifica se o cliente existe no arquivo de clientes. Se não existir, exibe uma mensagem e encerra a função. Solicitação de Informações Adicionais:

Solicita a data de retirada, a data de devolução e a quantidade de dias para a locação. Busca por Veículos Disponíveis:

Lê informações sobre veículos a partir do arquivo de veículos. Verifica se um veículo atende aos requisitos de ocupantes e se está disponível. Exibe os veículos disponíveis para o cliente, se houver algum. Se não, exibe uma mensagem e encerra a função. Escolha do Veículo:

Solicita ao cliente que digite o código do veículo escolhido. Verifica se o veículo escolhido está disponível. Se não estiver, exibe uma mensagem e encerra a função. Opção de Contratar Seguro:

Pergunta se o cliente deseja contratar um seguro para o veículo. Cálculo do Valor Total da Locação:

Calcula o valor total da locação, levando em consideração o número de dias, o veículo escolhido e a opção de seguro. Atualização do Status do Veículo:

Atualiza o status do veículo escolhido para "Locado" no arquivo de veículos. Gravação da Nova Locação:

Adiciona as informações da nova locação ao final do arquivo de locações. Atualização do Contador Total de Locações:

Incrementa o contador total de locações. Saída: Exibe uma mensagem indicando que a locação foi cadastrada com sucesso, juntamente com o valor total da locação.