- Leitura do ficheiro
Tarifas.txte armazenamento em memória:- Estado: ✅ Implementado.
- Função:
carregar_tarifas. - Descrição: Lê as tarifas do ficheiro
Tarifas.txte armazena-as na estruturaTarifario.
- Leitura do ficheiro
Estacionamentos.txte processamento dos registos:- Estado: ✅ Implementado.
- Função:
carregar_registos. - Descrição: Lê os registos do ficheiro
Estacionamentos.txt, identifica se têm hora de saída definida, e:- Calcula o valor pago para registos completos.
- Marca registos incompletos como "veículos ainda no parque".
- Integração com os dados em memória (ocupação do parque):
- Estado: ✅ Implementado.
- Descrição: Veículos sem hora de saída são considerados na ocupação do parque, garantindo que refletem o estado atual do estacionamento.
- Estruturas de Dados em Memória:
- Estado: ✅ Implementado.
- Descrição: A estrutura
Estacionamentoe o arrayestacionamentos[]armazenam todos os registos. A numeração dos registos e o estado de ocupação do parque estão devidamente integrados.
- Persistência dos Dados:
- Estado: ✅ Garantido no final da fase.
- Descrição: Os dados em memória (tarifas e registos) podem ser persistidos no ficheiro através de uma função dedicada.
- Detalhes necessários:
- Aplicar as tarifas de acordo com os horários especificados no ficheiro
Tarifas.txt. - Calcular o valor com base nos períodos de 15 minutos e ajustar ao valor máximo diário.
- Implementar suporte para estadias de múltiplos dias.
- Aplicar as tarifas de acordo com os horários especificados no ficheiro
- Leitura Automática de Ficheiros ao Iniciar o Programa:
- Estado: ✅ Implementado.
- Descrição:
- O programa lê automaticamente os ficheiros
config_parque.txteestado_parque.binao iniciar. - Validações:
- Verifica se o ficheiro
config_parque.txtexiste, não está vazio e segue o formato esperado. - Caso o ficheiro esteja ausente ou vazio, solicita a configuração do parque.
- Verifica a integridade dos dados no ficheiro binário e inicializa os dados em memória.
- Verifica se o ficheiro
- O programa lê automaticamente os ficheiros
- Carregamento de Configuração do Parque:
- Estado: ✅ Implementado.
- Função:
carregar_configuracao_parque. - Descrição:
- Carrega o nome, morada, número de pisos, filas, lugares por fila e total de lugares.
- Inicializa a ocupação e os estados dos lugares.
- Carregamento de Estado do Parque:
- Estado: ✅ Implementado.
- Função:
carregar_estado_binario. - Descrição:
- Lê o ficheiro binário
estado_parque.binpara carregar:- Ocupação atual dos lugares (livres, ocupados, indisponíveis).
- Registos de estacionamento ainda válidos.
- Atualiza o estado de ocupação no programa.
- Caso o ficheiro binário não exista ou esteja corrompido, inicializa com valores padrão.
- Lê o ficheiro binário
- Integração de Dados Carregados com a Ocupação:
- Estado: ✅ Implementado.
- Descrição:
- Ao carregar o estado do ficheiro binário:
- Atualiza os lugares ocupados e livres no parque.
- Recalcula estatísticas para garantir consistência.
- Ao carregar o estado do ficheiro binário:
- Persistência dos Dados Carregados:
- Estado: ✅ Implementado.
- Função:
guardar_estado_binario. - Descrição:
- Após carregar dados e realizar alterações, permite guardar o estado atualizado em
estado_parque.bin.
- Após carregar dados e realizar alterações, permite guardar o estado atualizado em
- Estado: ✅ Implementado.
- Descrição:
- Caso os ficheiros não estejam no formato esperado ou contenham dados inválidos:
- O utilizador é notificado com mensagens claras.
- O programa continua a execução sem interrupções.
- Registos incompatíveis com a configuração do parque são descartados e reportados.
- Caso os ficheiros não estejam no formato esperado ou contenham dados inválidos:
- Estrutura de Menus Adequada:
- Estado: ✅ Implementado.
- Descrição:
- O programa organiza os menus de forma modular:
- Menu Principal com as opções de configuração e registos.
- Submenu de Configuração para configurar o parque, visualizar dados e limpar memória.
- Submenu de Registos com funcionalidades como carregar registos de ficheiros
.txte ver estatísticas.
- Cada menu permite navegar entre submenus e voltar ao menu anterior.
- O programa organiza os menus de forma modular:
- Exibição de Estatísticas nos Menus:
- Estado: ✅ Implementado.
- Função:
exibir_lugares_por_piso. - Descrição:
- O número de lugares livres por piso é exibido no canto superior direito de todos os menus.
- Caso o parque não esteja configurado, exibe:
"N.º de lugares por pisos: Sem pisos configurados".
- Recalcular Estatísticas de Ocupação:
- Estado: ✅ Implementado.
- Função:
recalcular_estatisticas_parque. - Descrição:
- Recalcula os números de lugares livres, ocupados e indisponíveis por piso, além dos valores globais do parque.
- Atualiza automaticamente após carregar dados do ficheiro binário ou ao alterar a configuração do parque.
- Validação e Tratamento de Erros:
- Estado: ✅ Implementado.
- Descrição:
- Ao carregar registos ou estado do parque, valida:
- Compatibilidade com a configuração do parque (pisos, filas, lugares).
- Registos com dados incompatíveis são ignorados e reportados.
- Registos de lugares já ocupados ou indisponíveis também são descartados.
- Ao carregar registos ou estado do parque, valida:
- Registo de entrada de veículo:
- Estado: ✅ Implementado.
- Função:
registar_entrada_veiculo. - Descrição: Permite registar a entrada de um veículo, atribuindo automaticamente um lugar disponível no parque.
- O utilizador pode especificar ou deixar que o sistema determine a data e hora de entrada.
- A matrícula do veículo é verificada para evitar duplicados.
- O lugar atribuído é marcado como ocupado no parque e associado ao veículo.
- Atualização da ocupação do parque:
- Estado: ✅ Implementado.
- Função:
recalcular_estatisticas_parque. - Descrição: Recalcula automaticamente os lugares livres, ocupados e indisponíveis após o registo de entrada de um veículo.
- Persistência de dados:
- Estado: ✅ Implementado.
- Função:
guardar_estado_binario. - Descrição: Após a entrada de um veículo, o estado atualizado do parque é gravado no ficheiro binário.
- Validações:
- Estado: ✅ Implementado.
- Descrição:
- Matrículas duplicadas são rejeitadas.
- Caso não haja lugares disponíveis, o utilizador é informado.
- Atribuição de lugares é garantida de forma eficiente, respeitando a configuração do parque.
- Consulta de registos de estacionamento:
- Estado: ✅ Implementado.
- Função:
consultar_registo. - Descrição: Permite visualizar os detalhes de um registo específico, identificado pelo número de entrada, incluindo a matrícula, lugar atribuído e horário de entrada.
- Alteração de registo de estacionamento:
- Estado: ✅ Implementado.
- Função:
alterar_registo. - Descrição:
- Permite alterar o lugar atribuído a um registo existente, garantindo que o novo lugar esteja livre.
- Atualiza a ocupação do parque para refletir a mudança.
- Eliminação de registo de estacionamento:
- Estado: ✅ Implementado.
- Função:
eliminar_registo. - Descrição: Remove um registo de estacionamento, liberando o lugar associado no parque e atualizando a ocupação.
- Atualização da ocupação do parque:
- Estado: ✅ Implementado.
- Função:
recalcular_estatisticas_parque. - Descrição: Após alterações ou remoções de registos, as estatísticas de ocupação do parque são recalculadas para refletir o estado atual.
- Validações e tratamento de erros:
- Estado: ✅ Implementado.
- Descrição:
- Garantia de que apenas registos existentes podem ser consultados, alterados ou eliminados.
- Verificação de que o novo lugar atribuído está livre antes de efetuar alterações.
- Mensagens claras ao utilizador em caso de erros ou tentativas inválidas.