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:

  1. Integrar múltiplos conceitos de JavaScript em um sistema coeso
  2. Planejar a arquitetura de uma aplicação antes de programar
  3. Implementar funcionalidades completas com validação de dados
  4. Organizar código em funções modulares e reutilizáveis
  5. Tratar erros e casos especiais para criar aplicações robustas
  6. Persistir dados usando JSON
  7. 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 sistema
  • titulo e autor: Essenciais para identificação e busca
  • categoria: Permite filtrar livros por tipo
  • isbn: Padrão mundial para identificar edições
  • ano: Útil para filtros e estatísticas
  • disponivel: Controle de empréstimo
  • emprestadoPara: 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:

  1. Adicionar novo livro ao acervo
  2. Remover livro do acervo
  3. 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()