MateusFBL / TP_Locadora6

0 stars 0 forks source link

Implemente uma função que dê baixa em uma determinada locação, calcule e mostre o valor total a ser pago por um determinado cliente. #4

Open MateusFBL opened 7 months ago

Vikatormfc commented 7 months ago

void darBaixaLocacao(FILE arquivoLocacoes, FILE arquivoVeiculos, int *totalLocacoes) { struct Locacao locacao; struct Veiculo veiculo;

// Solicitar o c�digo da loca�o a ser encerrada
int codigoLocacao;
printf("Digite o codigo da locacao a ser encerrada: ");
scanf("%d", &codigoLocacao);

// Buscar a loca�o pelo c�digo
fseek(arquivoLocacoes, (codigoLocacao - 1) * sizeof(struct Locacao), SEEK_SET);
fread(&locacao, sizeof(struct Locacao), 1, arquivoLocacoes);

// Verificar se a loca�o existe
if (locacao.codigo == 0)
{
    printf("Locacao nao encontrada.\n");
    return;
}

// Solicitar a data de entrega do ve�culo
char dataEntrega[15];
printf("Digite a data de entrega (formato dd/mm/aaaa): ");
scanf(" %[^\n]s", dataEntrega);

// Comparar a data de entrega com a data de devolu�o prevista
int comparacaoDatas = strcmp(dataEntrega, locacao.dataDevolucao);

// Calcular a multa por atraso, se houver
float multa = 0.0;
if (comparacaoDatas > 0)
{
    // Calcular o n�mero de dias de atraso
    int diasAtraso = compararDatas(dataEntrega, locacao.dataDevolucao);

    // Calcular a multa
    multa = (0.05 * locacao.valorTotal) + (30.0 * diasAtraso);
    printf("Multa por atraso: R$ %.2f\n", multa);
}
else
{

    printf("Entrega realizada no prazo. Sem multa.\n");
}

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

// Atualizar o status da loca�o para "Encerrada"
fseek(arquivoLocacoes, (codigoLocacao - 1) * sizeof(struct Locacao), SEEK_SET);
strcpy(locacao.status, "Encerrada");
fwrite(&locacao, sizeof(struct Locacao), 1, arquivoLocacoes);

// Mostrar o valor total a ser pago (incluindo a multa, se aplic�vel)
float valorTotalPago = locacao.valorTotal + multa;
printf("Valor total a ser pago: R$ %.2f\n", valorTotalPago);

printf("Locacao encerrada com sucesso!\n");

}

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

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

Solicita ao usuário o código da locação a ser encerrada. Busca da Locação:

Utiliza o código fornecido para buscar as informações da locação no arquivo de locações. Verifica se a locação foi encontrada. Se não, exibe uma mensagem e encerra a função. Solicitação da Data de Entrega:

Pede ao usuário que digite a data de entrega do veículo. Comparação de Datas e Cálculo de Multa:

Compara a data de entrega com a data de devolução prevista. Calcula a multa por atraso, se houver, com base no valor total da locação e no número de dias de atraso. Atualização do Status do Veículo:

Atualiza o status do veículo associado à locação para "Disponível" no arquivo de veículos. Atualização do Status da Locação:

Atualiza o status da locação para "Encerrada" no arquivo de locações. Cálculo do Valor Total a Pagar:

Calcula o valor total a ser pago, considerando o valor total da locação e a multa, se aplicável. Saída de Resultados:

Exibe informações sobre a multa, se aplicável. Indica se a entrega foi realizada no prazo ou houve atraso. Mostra o valor total a ser pago. Exibe uma mensagem indicando que a locação foi encerrada com sucesso.