Você está aqui: Java ::: Projetos Java Completos - Códigos Fonte Completos Java ::: Projetos Java Programação Orientada a Objetos - Exemplos Java

Sistema para Biblioteca usando Programação Orientada a Objetos em Java - Projeto completo com código fonte - Versão console

Quantidade de visualizações: 4544 vezes
Sistema para Gestão de Biblioteca usando Programação Orientada a Objetos em Java - Projeto completo com código fonte - Versão console

Controle de Biblioteca - Sobre este projeto Java



Nesta dica apresento a idéia de um Controle de Gestão de Biblioteca em Java usando Programação Orientada a Objetos. Trata-se de um programa com código fonte em duas versões console.

Na primeira versão temos os dados sendo gerenciados por objetos ArrayList. Na segunda versão nós tiramos proveito dos métodos dos métodos readObject() e writeObject() e da interface Serializable para implementar a serialização de objetos em Java. Dessa forma, os dados do sistema podem ser salvos e carregados todas as vezes que o sistema for iniciado.

Um Controle de Gestão de Biblioteca é um projeto ideal para dominar a programação orientada a objetos em Java, além de permitir colocar em prática várias coisas que estudamos na linguagem e não temos a oportunidade de implementar. Assim, este código, se bem estudado e bem entendido, pode render um controle de biblioteca pronto para ser vendido no mercado ou implementado em sua própria escola ou faculdade. Basta conectar as funcionalidades das classes a um banco de dados tal como o MySQL e adicionar mais alguns pequenos detalhes.

O Diagrama de Classes Java

Antes de falarmos mais sobre o projeto do Sistema de Biblioteca, dê uma boa olhada no seu diagrama de classes:



Como a aplicação está estruturada?

Como podemos ver no diagrama de classes, todo o controle do sistema é feito a partir da classe Biblioteca, que contém objetos da classe ArrayList para guardar objetos das classes Usuario, Autor, Editora, Livro, Emprestimo e Multa.

O relacionamento entre os objetos das classes envolvidas está bem definido no código fonte, com comentários e menus individuais para o gerenciamento de cada parte que compõe o controle de biblioteca apresentado.

Um empréstimo envolve um livro e um usuário, e pode gerar uma multa caso a devolução seja feita fora do prazo. A multa é gerada somente na devolução. Em sistemas reais, o usuário não pode fazer uma nova locação caso a multa não seja paga. Deixamos como sugestão e desafio, essa implementação no código. No entanto, já fizemos todo o restante do cálculo para você, ou seja, fizemos a diferença entre a data do empréstimo e sua devolução e geramos a multa, se houver, já com o devido valor a ser pago.

Um livro está relacionado a um autor e a uma editora. Inicialmente o livro é cadastrado como disponível. Porém, esse status é alterado para indisponível quando ele está envolvido em um empréstimo, e novamente disponível quando é feita a devolução.

Tudo isso é feito por meio de vários menus de opções, como mostro a seguir.

As opções de menu para o gerencimento do sistema da biblioteca

O menu principal foi escrito usando-se o seguinte código:

// método que exibe o menu principal do sistema
public void menuPrincipal(){
  Scanner entrada = new Scanner(System.in);
    
  while(true){  
    limparTela();
    System.out.println("\n:: B I B L I O T E C A ::\n");
    System.out.println("Bem-vindo(a) ao sistem. 
      Escolha a opção desejada");
    System.out.println("1 - Livros");
    System.out.println("2 - Autores");
    System.out.println("3 - Editoras");
    System.out.println("4 - Usuários");
    System.out.println("5 - Empréstimos");
    System.out.println("6 - Multas");
    System.out.println("7 - Sair");
    System.out.print("Sua opção: ");
    // lê a opção do usuário 
    int opcao = Integer.parseInt(entrada.nextLine()); 
    
    switch(opcao){
      case 1:
        // chama o menu de gerenciamento de livros
        menuGerenciarLivros(); 
        break;
      
      case 2:
        // chama o menu de gerenciamento de autores
        menuGerenciarAutores(); 
        break;
      
      case 3:
        // chama o menu de gerenciamento de editoras
        menuGerenciarEditoras();
        break;
      
      case 4:
        // chama o menu de gerenciamento de usuários
        menuGerenciarUsuarios(); 
        break;
      
      case 5:
        // chama o menu de gerenciamento de emprestimos
        menuGerenciarEmprestimos();
        break;
        
      case 6:
        // chama o menu de gerenciamento de multas
        menuGerenciarMultas();
        break;
      
      case 7:
        System.out.println("\nObrigado por usar o 
          Sistema de Biblioteca\n");  
        System.exit(0);
    }
  }
}


Note que cada case do switch do menu principal chama um método que será responsável por exibir um menu individual para o gerencimento da classe correspondente.

Veja, por exemplo, o menu para cadastrar um novo usuário na biblioteca:

// menu para cadatrar, listar, pesquisar, excluir 
// e atualizar os usuários da biblioteca
public int menuGerenciarUsuarios(){ 
  Usuario temp; // serve para várias operações neste menu
  // serve para as pesquisas dos usuários
  String pesquisaUsuario;
  Scanner entrada = new Scanner(System.in);
    
  // mostra o menu de forma repetitiva até o usuário 
  // usar a opção de sair
  while(true){
    // tire caso não funcionar no seu sistema operacional
    limparTela();
    System.out.println("\n:: G E R E N C I A R   U S U Á R I O S ::\n");
    System.out.println("Escolha a opção desejada");
    System.out.println("1 - Novo Usuário");
    System.out.println("2 - Listar Usuários");
    System.out.println("3 - Pesquisar Usuário");
    System.out.println("4 - Excluir Usuário");
    System.out.println("5 - Atualizar Usuário");
    System.out.println("6 - Voltar Menu Anterior");
    System.out.print("Sua opção: ");
    // lê a opção do usuário
    int opcao = Integer.parseInt(entrada.nextLine()); 
    
    switch(opcao){
      case 1: // vamos cadastrar um novo usuário
        System.out.print("\nNome: ");
        String nomeUsuario = entrada.nextLine();
        System.out.print("Idade: ");
        int idadeUsuario = Integer.parseInt(entrada.nextLine());
        System.out.print("Sexo: ");
        char sexoUsuario = entrada.nextLine().charAt(0);
        
        // vamos incrementar o contador de usuários
        Usuario.contadorUsuarios++;
        
        // agora vamos criar um novo objeto da classe Usuario
        Usuario u = new Usuario(Usuario.contadorUsuarios,
          nomeUsuario, idadeUsuario, sexoUsuario);
        // e o adicionamos no ArrayList de usuários
        usuarios.add(u);
        
        // e finalmente mostramos uma mensagem de sucesso.
        System.out.println("\nO usuário foi cadastrado com sucesso");
        salvarDadosArquivo(); // salva os dados no arquivo
        
        break;
        ... 


Devo usar ArrayList do Java para desenvolver o sistema?

Sim, objetos da classe ArrayList são perfeitos quando precisamos representar relacionamentos um para muitos e muitos para um. É claro que poderíamos usar vetores de objetos (usando array), mas ficaríamos restritos a tamanhos fixos, enquanto o ArrayList nos permite cadastrar quantos usuários, livros, editoras, autores e empréstimos nós quisermos.

Dessa forma, veja, por exemplo, o trecho de código que registra um novo empréstimo:

case 1: // vamos cadastrar um novo empréstimmo
  // para registrar um novo empréstimo nós precisamos 
  // de um usuário
  // o usuário que será relacionado a este empréstimo
  Usuario usuario = null;
  while(usuario == null){
    System.out.print("\nInforme o id ou nome do usuário: ");
    String pesquisaUsuario = entrada.nextLine();
    // chamamos o método que pesquisa o usuario
    usuario = pesquisarUsuario(pesquisaUsuario);
    if(usuario == null){ // usuario não encotrado
      System.out.print("\nUsuário não 
       encontrado.\n\nDigite 1 para pesquisar 
       novamente ou 2 para voltar ao menu anterior: ");
      int opcaoTemp = Integer.parseInt(entrada.nextLine());
      if(opcaoTemp == 2){
        return 1; // saímos daqui e voltamos para o menu anterior  
      }
    }
  }
  System.out.println("Usuário selecionado: " + usuario.getNome());
  // fim para registrar um novo empréstimo nós 
  // precisamos de um usuário
          
  // para registrar um novo empréstimo nós precisamos 
  // de um livro
  Livro livro = null; // o livro que será relacionado 
  // a este empréstimo
  while(livro == null){
    System.out.print("Informe o id, título ou ISBN do livro: ");
    String pesquisaLivro = entrada.nextLine();
    // chamamos o método que pesquisa o livro
    livro = pesquisarLivro(pesquisaLivro);
    // livro não encontrado ou indisponível
    if((livro == null) || (!livro.isDisponivel())){
      System.out.print("\nLivro não encontrado 
       ou indisponível.\n\nDigite 1 para 
       pesquisar novamente ou 2 para voltar ao 
       menu anterior: ");
      int opcaoTemp = Integer.parseInt(entrada.nextLine());
      if(opcaoTemp == 2){
        return 1; // saímos daqui e voltamos para o menu anterior  
      }
    }
  }
  System.out.println("Livro selecionado: " + livro.getTitulo());
  // fim para cadastrar um novo empréstimo nós 
  // precisamos de um livro
 
  try{          
    System.out.print("Data do Empréstimo: ");
    String dataEmprestimo = entrada.nextLine();
    Date dataEmprestimoDate = 
      new SimpleDateFormat("dd/MM/yyyy").parse(dataEmprestimo);
    System.out.print("Data de Devolução: ");
    String dataDevolucao = entrada.nextLine();
    Date dataDevolucaoDate = 
      new SimpleDateFormat("dd/MM/yyyy").parse(dataDevolucao);
          
    // a data de devolução é menor que a data de empréstimo?
    if(dataDevolucaoDate.getTime() <= dataEmprestimoDate.getTime()){
      System.out.println("\nA data de devolução 
        deve ser maior que a data de empréstimo.\n");
    }
    else{
      // vamos incrementar o contador de empréstimos
      Emprestimo.contadorEmprestimos++;
        
      // vamos marcar o livro escolhido como indisponível
      livro.setDisponivel(false);
              
      // agora vamos criar um novo objeto da classe Emprestimo
      Emprestimo emprestimo = new Emprestimo(usuario,
        livro, Emprestimo.contadorEmprestimos, 
        dataEmprestimoDate, dataDevolucaoDate, 
        null, false);
      // e o adicionamos no ArrayList de empréstimos
      emprestimos.add(emprestimo);
        
      // e finalmente mostramos uma mensagem de sucesso.
      System.out.println("\nO empréstimo foi registrado com sucesso");
      salvarDadosArquivo(); // salva os dados no arquivo
    }
  }
  catch(ParseException e){
    System.out.println("\nAs datas informadas são inválidas.\n");
  }
            
  break;


Note que este trecho de código é parte do case da opção Novo Empréstimo do menu Gerenciar Empréstimos. Veja como usamos uma variável estática contadorEmprestimos da classe Emprestimo para criarmos um valor inteiro auto-incremento que nos permite identificadores únicos para cada empréstimo da biblioteca.

Viu que código mais lindo? Note como a Programação Orientada a Objetos em Java nos permite desenvolver idéias de forma bem parecida mesmo ao mundo real.

Como posso obter este código fonte?

O código fonte desta aplicação é fornecido em duas versões:

1) SBIBLIOJCNB-A - Sistema de Gestão de Biblioteca em Java com Código Fonte Versão Console - NetBeans IDE ou Eclipse.

2) SBIBLIOJCNB-B - Sistema de Gestão de Biblioteca em Java com Código Fonte Versão Console - Lê e salva os dados em arquivo usando serialização (Serializable), ou seja, os métodos readObject() e writeObject() - NetBeans IDE ou Eclpse.

Para adquirir, entre em contato conosco usando o WhatsApp ou e-mail indicados na lateral do site. Podemos combinar alterações e a adição de novas funcionalidades.

Não se esqueça: Uma boa forma de estudar o código é fazendo pequenas alterações e rodando para ver os resultados. Outra opção é começar um projeto Java do zero e ir adicionando trechos do código fonte para melhor entendimento de suas partes.


Java ::: Lista de Exercícios Resolvidos (Algorítmos Resolvidos) ::: Java Básico

Exercício Resolvido de Java - Como calcular o restante de um salário após o pagamento de duas contas com juros

Quantidade de visualizações: 2073 vezes
Pergunta/Tarefa:

Cintia acaba de receber seu salário mas precisa pagar duas contas atrasadas. Por causa do atraso, ela deverá pagar multa de 2% sobre cada conta. Faça um programa que leia o valor do salário e das duas contas e que calcule e mostre quanto restará do salário de Cintia.

Sua saída deverá ser parecida com:



Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso



Java ::: Fundamentos da Linguagem ::: Estruturas de Controle

Java para iniciantes - Como usar o laço while da linguagem Java

Quantidade de visualizações: 16380 vezes
O laço while é usado quando queremos executar um bloco de códigos continuamente até uma condição seja verdadeira. Veja sua estrutura:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso

Diferente de C e C++, a condição a ser testada no while do Java deve sempre retornar um valor boolean. E, muito cuidado deve ser tomado para não produzirmos laços infinitos, ou seja, a condição sendo testada nunca retornará um valor false. Veja um trecho de código no qual exibimos os números pares de 0 a 20:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso

Veja outro exemplo no qual o laço while é executado até que o usuário digite "fim":

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso

Para finalizar, lembre-se de que o laço while é executado somente enquanto a condição testada for verdadeira. Isso quer dizer que, se na primeira tentativa de execução, a condição já for falsa, o laço nunca será executado.


Java ::: Lista de Exercícios Resolvidos (Algorítmos Resolvidos) ::: Estruturas de Controle

Exercício Resolvido de Java - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou não

Quantidade de visualizações: 950 vezes
Pergunta/Tarefa:

Chama-se ano bissexto o ano ao qual é acrescentado um dia extra, ficando ele com 366 dias, um dia a mais do que os anos normais de 365 dias, ocorrendo a cada quatro anos (exceto anos múltiplos de 100 que não são múltiplos de 400). Isto é feito com o objetivo de manter o calendário anual ajustado com a translação da Terra e com os eventos sazonais relacionados às estações do ano. O último ano bissexto foi 2012 e o próximo será 2016.

Um ano é bissexto se ele for divisível por 4 mas não por 100, ou se for divisível por 400.

Escreva um programa Java que pede ao usuário um ano com quatro dígitos e informa se ele é bissexto ou não.

Sua saída deverá ser parecida com:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso



Java ::: Lista de Exercícios Resolvidos (Algorítmos Resolvidos) ::: Java Básico

Java Básico - Exercícios Resolvidos de Java - Ex. 31 - Um programa para calcular o Índice de Massa Corporal (IMC)

Quantidade de visualizações: 5862 vezes
Pergunta/Tarefa:

O índice de massa corporal (IMC) é uma medida internacional usada para calcular se uma pessoa está no peso ideal.

Ele foi desenvolvido pelo polímata Lambert Quételet no fim do século XIX. Trata-se de um método fácil e rápido para a avaliação do nível de gordura de cada pessoa, ou seja, é um preditor internacional de obesidade adotado pela Organização Mundial da Saúde (OMS).

O IMC é determinado pela divisão da massa do indivíduo pelo quadrado de sua altura, em que a massa está em quilogramas e a altura em metros. A fórmula é a seguinte:



A classificação é feita de acordo com as seguintes regras:

a) < 16 - Magreza grave
b) 16 a < 17 - Magreza moderada
c) 17 a < 18,5 - Magreza leve
d) 18,5 a < 25 - Saudável
e) 25 a < 30 - Sobrepeso
f) 30 a < 35 - Obesidade Grau I
g) 35 a < 40 - Obesidade Grau II (severa)
h) >= 40 - Obesidade Grau III (mórbida)

Escreva um programa Java que leia o peso e a altura de uma pessoa e retorna seu IMC classificado de acordo com a tabela acima.

Sua saída deverá ser parecida com:



Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso



Java ::: Lista de Exercícios Resolvidos (Algorítmos Resolvidos) ::: Java Básico

Java Básico - Exercícios Resolvidos de Java - Ex. 30 - Lendo a idade de um nadador e classificando sua categoria como infantil, juvenil, adolescente, adulto ou sênior

Quantidade de visualizações: 1759 vezes
Pergunta/Tarefa:

Escreva um programa Java que solicita a idade de um nadador e classifica sua categoria de acordo com as seguintes regras:

a) De 5 a 7 anos - Infantil;
b) De 8 a 10 anos - Juvenil;
c) De 11 a 15 anos - Adolescente;
d) De 16 a 30 anos - Adulto;
e) Acima de 30 anos - Sênior.

Sua saída deverá ser parecida com:



Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Este trecho de código ou resolução de exercício faz parte do Super Pack +10.000 Dicas e Truques de Programação e +500 Exercícios Resolvidos em Java, Delphi, C#, C, C++, Python, VB.NET, Golang, Pascal, Ruby, PHP, e várias outras linguagens.

Liberar Acesso



Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Linguagens Mais Populares

1º lugar: Java
2º lugar: C#
3º lugar: PHP
4º lugar: Python
5º lugar: Delphi
6º lugar: JavaScript
7º lugar: C
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

Quem Somos

Osmar J. Silva
Programador Freelancer
WhatsApp +55 (062) 98553-6711

Goiânia-GO
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Elétrica pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 15 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
José de Angelis
Programador Freelancer
WhatsApp +55 (062) 98243-1195

Goiânia-GO
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..


© 2021 Arquivo de Códigos - Todos os direitos reservados | Versión en Español | Versão em Português