Capítulo 20: Projeto Integrador Final - FastLog TMS Enterprise
🎯 Objetivo da Aula
Chegou o momento de consolidar todos os conhecimentos adquiridos ao longo dos 20 capítulos do curso. Você iniciou aprendendo o que é um algoritmo e agora domina a Lógica de Programação Estruturada com sintaxe moderna C/Java no Portugol Studio.
Nesta aula final, você desenvolverá o Projeto Integrador FastLog TMS (Transportation Management System) Enterprise, um software corporativo completo em modo console que integra:
- Menus de navegação contínuos com
faca-enquantoeescolha-caso. - Persistência em memória com vetores paralelos para controle de 5 caminhões.
- Funções modulares de interface (
funcao vazio) e funções de cálculo estatístico (funcao real). - Algoritmos de busca linear com flag booleana e localização de maior valor.
🏢 O Cenário Prático (Seu Desafio Final)
Situação: A diretoria executiva da FastLog aprovou o projeto de automação da torre de controle operacional. O software precisa gerenciar a frota titular de 5 carretas pesadas, oferecendo aos operadores:
- Módulo 1 (Cadastro de Frota): Registro do Nome do Motorista Titular, Placa do Veículo (padrão Mercosul de 7 dígitos) e Quilometragem Mensal Rodada.
- Módulo 2 (Relatório de Performance): Tabela alinhada com todos os veículos, Quilometragem Total da frota e Média de KM por caminhão.
- Módulo 3 (Auditoria do Campeão): Identificação automática do motorista que mais rodou no mês para receber o Prêmio de Eficiência.
- Módulo 4 (Localizador Instantâneo): Busca dinâmica de caminhão por nome do motorista.
Missão: Programar o sistema completo seguindo a Arquitetura em 3 Camadas e apresentá-lo 100% funcional.
Por que este capítulo não tem “Checkpoint” nem “Desafio de Fixação”?
Por ser o Projeto Integrador Final, este capítulo substitui essas duas seções pelo 🛠️ Roteiro de Testes e Validação (ao final) — em vez de um exercício novo e isolado, sua tarefa é validar o sistema completo que acabou de construir, módulo por módulo.
🧠 Fundamentos: A Arquitetura em 3 Camadas do Sistema
graph TD
UI["1. CAMADA DE APRESENTAÇÃO (UI / Menu Principal)<br/>faca { ... } enquanto (opcao != 0)"] --> Router{"escolha opcao"}
Router -->|1| ModCad["Módulo 1: cadastrar_veiculos()<br/>(funcao vazio)"]
Router -->|2| ModRel["Módulo 2: emitir_relatorio()<br/>(funcao vazio + somar_km_total)"]
Router -->|3| ModAud["Módulo 3: identificar_campeao()<br/>(funcao vazio / Maior Elemento)"]
Router -->|4| ModBus["Módulo 4: pesquisar_motorista()<br/>(Busca Linear com Flag)"]
ModCad --> DB[(Camada de Dados em RAM:<br/>Vetores nomes, placas e kmRodados)]
ModRel --> DB
ModAud --> DB
ModBus --> DB
style UI fill:#8e44ad,stroke:#fff,color:#fff
style Router fill:#f39c12,stroke:#fff,color:#fff
style DB fill:#217346,stroke:#fff,color:#fffCada um dos 4 módulos acima aplica o Princípio da Responsabilidade Única (SRP) que você aprendeu no Capítulo 19: cada função tem exatamente uma responsabilidade (cadastrar, relatar, auditar ou buscar). É exatamente por causa dessa separação que é possível testar e corrigir cada módulo isoladamente, sem afetar os demais — veja o Roteiro de Testes e Validação ao final deste capítulo, que testa cada módulo em separado.
📖 Exemplo Guiado: O Código-Fonte Completo do Projeto Integrador FastLog TMS
🛠️ Prática Obrigatória 1: Compilação, Cadastro de Frota e Relatório de Performance
Roteiro de Execução
- Abra o Portugol Studio, crie um novo arquivo e cole o código-fonte integral do TMS.
- Teste Defensivo: Execute o programa e tente acessar diretamente a opção
[2](Emitir Relatório). Valide se o sistema emite o aviso amigável de base vazia sem travar. - Teste de Cadastro: Acesse a opção
[1]e cadastre 5 motoristas com placas e quilometragens:- Motorista 1:
Carlos Silva, Placa:ABC1D23, KM:3500.0 - Motorista 2:
Ana Santos, Placa:BRA2E45, KM:6200.0 - Motorista 3:
Marcos Lima, Placa:LOG3F67, KM:4100.0 - Motorista 4:
Juliana Souza, Placa:FST4G89, KM:7800.0 - Motorista 5:
Roberto Dias, Placa:ROD5H01, KM:5000.0
- Motorista 1:
- Teste de Validação Negativa: Tente digitar uma quilometragem negativa (ex:
-100.0) e verifique se o laçofaca ... enquantobloqueia a entrada. - Teste de Relatório: Acesse a opção
[2]e confira se a soma (26.600 km) e a média (5.320 km) aparecem perfeitamente calculadas.
✅ Resultado Esperado (Prática 1)
O console exibirá a tabela formatada com todos os 5 veículos e os cálculos estatísticos apurados com sucesso.
🛠️ Prática Obrigatória 2: Validação dos Algoritmos de Destaque e Busca Linear
Roteiro de Execução
- Com a base cadastrada na Prática 1, selecione a opção
[3](Apurar Motorista Destaque).- Valide se o sistema identifica corretamente
Juliana Souzacom7800.0 km.
- Valide se o sistema identifica corretamente
- Acesse a opção
[4](Pesquisar Veículo por Nome de Motorista):- Caso Positivo: Digite
Marcos Lima. Verifique se o box no pátio (Vaga #3), a placa e a KM são exibidos. - Caso Negativo: Digite
Pedro Alvares. Verifique se o aviso de motorista não localizado é apresentado sem interrupção abrupta.
- Caso Positivo: Digite
- Selecione a opção
[0]para encerrar o sistema e desconectar da torre de controle.
✅ Resultado Esperado (Prática 2)
Todos os módulos operacionais executarão com estabilidade defensiva, demonstrando a robustez da arquitetura em 3 camadas.
🔥 Desafio de Fixação: Expansão com Filtro de Quilometragem por Faixa
Implemente uma nova funcionalidade corporativa no seu TMS:
- No menu principal, adicione a opção
[5] Listar Veículos com Alta Rodagem (KM > 5000). - Crie a função
listar_alta_rodagem()que percorre os vetores e exibe apenas os veículos cuja quilometragem seja superior a 5.000 km. - Integre a chamada dessa função no
escolha (opcaoMenu)e atualize o laço de repetição.
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- Segundo o diagrama de Arquitetura em 3 Camadas, quais são os 4 módulos operacionais roteados a partir do menu principal (
escolha opcao)? - Quantos veículos o Sistema FastLog TMS gerencia, e quais três vetores paralelos armazenam os dados de cada um?
- O que faz a função
somar_km_total(), e como a funçãocalcular_media_km()reutiliza o resultado dela? - No módulo
cadastrar_veiculos(), qual validação defensiva é aplicada à quilometragem digitada, usando um laçofaca ... enquanto? - No módulo
identificar_campeao(), qual algoritmo é usado para encontrar o motorista com maior quilometragem, e a partir de qual índice o laço de comparação começa? - No módulo
pesquisar_motorista(), qual técnica é usada para indicar se o motorista foi ou não localizado no vetor de nomes? - Segundo o Roteiro de Testes e Validação, o que deve acontecer se o operador tentar acessar a opção
[2](Relatório) antes de cadastrar qualquer veículo? - Segundo o Roteiro de Testes, com as quilometragens de exemplo sugeridas (3.500, 6.200, 4.100, 7.800 e 5.000 km), qual deve ser o total somado e a média da frota?
- Segundo a Mensagem de Encerramento, quais estruturas fundamentais aprendidas no curso preparam você para reconhecer a sintaxe de linguagens como C, C++, Java, C# e JavaScript?
- Explique, com suas palavras, por que dividir o Projeto Integrador em módulos separados (cadastro, relatório, auditoria, busca) — em vez de escrever tudo dentro de
inicio()— facilita testar e corrigir o sistema.