// 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.
void darBaixaLocacao(FILE arquivoLocacoes, FILE arquivoVeiculos, int *totalLocacoes) { struct Locacao locacao; struct Veiculo veiculo;
}
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.