Desenvolvendo um Sistema Completo em JavaScript
Parabéns por chegar até aqui! Ao longo das últimas 14 aulas, você construiu uma base sólida de conhecimentos em JavaScript: aprendeu sobre variáveis, tipos de dados, operadores, estruturas condicionais, loops, arrays, objetos e funções. Agora é hora de reunir todos esses conceitos em um projeto real e completo.
Nesse módulo, você vai desenvolver um Sistema de Gerenciamento de Biblioteca. Não se trata apenas de escrever código — você vai experimentar o processo completo de desenvolvimento de software: planejamento, implementação, testes e refinamento.
Ao final projeto, você será capaz de:
- Integrar múltiplos conceitos de JavaScript em um sistema coeso
- Planejar a arquitetura de uma aplicação antes de programar
- Implementar funcionalidades completas com validação de dados
- Organizar código em funções modulares e reutilizáveis
- Tratar erros e casos especiais para criar aplicações robustas
- Persistir dados usando JSON
- Aplicar boas práticas de nomenclatura e estruturação de código
Planejamento do Projeto
Antes de escrever uma única linha de código, precisamos entender o que vamos construir e por quê.
Cenário Real: Uma pequena biblioteca comunitária precisa de um sistema para gerenciar seu acervo. Atualmente, tudo é feito em papel: cadastro de livros, controle de empréstimos, busca de títulos. Isso gera problemas:
- Livros são perdidos ou duplicados no cadastro
- Não há forma rápida de buscar livros por autor ou categoria
- O controle de empréstimos é desorganizado
- Relatórios estatísticos são impossíveis de gerar
Nossa Solução: Criaremos um sistema que permita:
- Cadastrar livros com todas as informações necessárias
- Buscar livros por diferentes critérios
- Gerenciar empréstimos e devoluções
- Gerar relatórios sobre o acervo
Definindo Estruturas de Dados
O primeiro passo no planejamento é decidir como representaremos as informações.
Estrutura de um Livro
Que informações precisamos sobre cada livro?
const livro = {
id: 1, // Identificador único
titulo: "Dom Casmurro", // Nome do livro
autor: "Machado de Assis", // Quem escreveu
categoria: "Romance", // Tipo/gênero
isbn: "978-8535911664", // Código internacional
ano: 1899, // Ano de publicação
disponivel: true, // Está disponível para empréstimo?
emprestadoPara: null // Nome de quem pegou emprestado
};
Por que essas propriedades?
id: Garante que cada livro seja único no sistematituloeautor: Essenciais para identificação e buscacategoria: Permite filtrar livros por tipoisbn: Padrão mundial para identificar ediçõesano: Útil para filtros e estatísticasdisponivel: Controle de empréstimoemprestadoPara: Rastreabilidade de quem está com o livro
Estrutura do Acervo
Como armazenaremos múltiplos livros? Um array é perfeito para listas ordenadas:
const acervo = [
{ id: 1, titulo: "Dom Casmurro", autor: "Machado de Assis", ... },
{ id: 2, titulo: "1984", autor: "George Orwell", ... },
{ id: 3, titulo: "O Cortiço", autor: "Aluísio Azevedo", ... }
];
Mapeando Funcionalidades
Agora vamos listar o que o sistema deve fazer:
Operações de Cadastro:
- Adicionar novo livro ao acervo
- Remover livro do acervo
- Atualizar informações de um livro
Operações de Busca: 4. Buscar livro por título 5. Buscar livros por autor 6. Filtrar livros por categoria 7. Listar todos os livros disponíveis
Operações de Empréstimo: 8. Registrar empréstimo de livro 9. Registrar devolução de livro 10. Listar livros emprestados
Operações de Relatório: 11. Contar total de livros 12. Contar livros por categoria 13. Calcular taxa de disponibilidade 14. Listar autores no acervo
Persistência: 15. Salvar acervo em arquivo JSON 16. Carregar acervo de arquivo JSON
Organizando em Módulos
Para manter o código organizado, vamos agrupar funcionalidades relacionadas:
📦 Sistema de Biblioteca
├── 📄 Dados do Acervo (array de livros)
├── 🔧 Funções de Cadastro
│ ├── adicionarLivro()
│ ├── removerLivro()
│ └── atualizarLivro()
├── 🔍 Funções de Busca
│ ├── buscarPorTitulo()
│ ├── buscarPorAutor()
│ ├── filtrarPorCategoria()
│ └── listarDisponiveis()
├── 📚 Funções de Empréstimo
│ ├── emprestarLivro()
│ ├── devolverLivro()
│ └── listarEmprestados()
├── 📊 Funções de Relatório
│ ├── contarTotal()
│ ├── contarPorCategoria()
│ ├── calcularDisponibilidade()
│ └── listarAutores()
└── 💾 Funções de Persistência
├── salvarAcervo()
└── carregarAcervo()