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 consoleQuantidade de visualizações: 16612 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 ::: Desafios e Lista de Exercícios Resolvidos ::: Exceções e Tratamentos de Erros |
Exercício Resolvido de Java - Como forçar o usuário a informar dois inteiros válidos antes de efetuar sua soma - Exceções e Tratamentos de Erros em JavaQuantidade de visualizações: 3821 vezes |
|
Pergunta/Tarefa: Escreva um programa Java que usa tratamento de erros try...catch para forçar o usuário a informar dois valores inteiros válidos antes de tentar somá-los. Caso o usuário informe um ou os dois valores inválidos, o programa deverá exibir uma mensagem de erro e solicitar os valores novamente. Sua saída deverá ser parecida com: Informe o primeiro valor: M Dados inválidos: java.lang.NumberFormatException: For input string: "M" Por favor, informe os dois números novamente Informe o primeiro valor: 7 Informe o segundo valor: % Dados inválidos: java.lang.NumberFormatException: For input string: "%" Por favor, informe os dois números novamente Informe o primeiro valor: 5 Informe o segundo valor: 3 A soma dos valores é: 8 Veja a resolução comentada deste exercício usando Java:
package estudos;
import java.util.Scanner;
public class Estudos {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
// para verificar se os valores são inteiros válidos
boolean validos = false;
int n1, n2, soma;
// solicita que o usuário informe os dois valores
while(!validos) {
try {
System.out.print("Informe o primeiro valor: ");
// tenta fazer a conversão
n1 = Integer.parseInt(entrada.nextLine());
System.out.print("Informe o segundo valor: ");
// tenta fazer a conversão
n2 = Integer.parseInt(entrada.nextLine());
// se chegou até aqui é porque não houve erros na conversão,
// ou seja, o usuário informou inteiros válidos
soma = n1 + n2;
System.out.println("A soma dos valores é: " + soma);
validos = true;
}
catch (Exception ex) { // houve erro na conversão?
System.out.println("Dados inválidos: " + ex.toString());
System.out.println("Por favor, informe os dois números novamente");
}
}
}
}
|
Python ::: wxPython ::: Controles Visuais Básicos do wxPython |
Como exibir um botão em uma janela wx.Frame do wxPython, detectar um clique no botão e exibir uma caixa de mensagem wx.MessageDialogQuantidade de visualizações: 7823 vezes |
|
Nesta dica mostrarei como podemos usar a função Bind() do wxPython para indicar o código que será chamado ao clicar em um botão, ou seja, ao disparar um evento wx.EVT_BUTTON. Para isso criei uma função OnBtnClick() que é chamada e usa uma caixa de diálogo wx.MessageDialog para exibir uma mensagem indicando que o botão foi clicado. Veja o código wxPython completo para o exemplo:
# vamos importar a biblioteca wxPython
import wx
class Janela(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1,
"Usando wx.Button", size=(350, 200))
# Cria um painel
panel = wx.Panel(self)
# Cria um botão e o adiciona no painel
btn = wx.Button(panel, label="Clique Aqui",
pos=(10, 10), size=(100, 25))
# Anexa um evento ao botão
self.Bind(wx.EVT_BUTTON, self.OnBtnClick, btn)
# Método que será chamado ao clicar o botão
def OnBtnClick(self, event):
dlg = wx.MessageDialog(None, "Você clicou no botão!",
"Usando wx.Button", wx.OK | wx.ICON_INFORMATION)
result = dlg.ShowModal()
dlg.Destroy()
if __name__ == "__main__":
app = wx.App()
janela = Janela()
janela.Show(True)
app.MainLoop()
|
AutoCAD Civil 3D .NET C# ::: Dicas & Truques ::: Alinhamento - Alignment |
Como pedir para o usuário selecionar um alinhamento no Civil 3D usando a função GetEntity() do AutoCAD Civil 3D .NET C# APIQuantidade de visualizações: 1158 vezes |
|
Em várias situações nós precisamos pedir para o usuário selecionar um alinhamento e, após a seleção, obter o id do alinhamento selecionado para efetuarmos alguma operação nele. Para isso nós podemos usar a função GetEntity() do objeto Editor da AutoCAD Civil 3D .NET C# API. O primeiro passo é criar um objeto PromptEntityOptions passando a mensagem para o usuário selecionar o alinhamento. Se o usuário selecionar outro objeto que não seja um alinhamento, a mensagem definida em SetRejectMessage é exibida. Note o uso de AddAllowedClass para permitir a seleção apenas de objetos da classe Alignment ou derivadas dela. Depois de solicitar a seleção, nós obtemos um objeto ObjectId, que é retornado pela função GetEntity(). Veja o código AutoCAD Civil 3D .NET C# completo para o exemplo:
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Civil.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.Civil.DatabaseServices;
namespace Estudos {
public class Class1 : IExtensionApplication {
[CommandMethod("Alinhamento")]
public void Alinhamento() {
// vamos obter uma referência ao documento atual do Civil 3D
CivilDocument doc = CivilApplication.ActiveDocument;
// obtemos o editor
Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;
// vamos iniciar um nova transação
using (Transaction ts = Application.DocumentManager.MdiActiveDocument.
Database.TransactionManager.StartTransaction()) {
try {
// vamos pedir para o usuário selecionar o alinhamento
PromptEntityOptions opt = new PromptEntityOptions(
"\nSelecione um alinhamento");
opt.SetRejectMessage("\nO objeto precisa ser um alinhamento.\n");
opt.AddAllowedClass(typeof(Alignment), false);
// vamos obter o id do alinhamento selecionado
ObjectId id_alinhamento = editor.GetEntity(opt).ObjectId;
editor.WriteMessage("\nO id do alinhamento selecionado é: " +
id_alinhamento + '\n');
}
catch (System.Exception e) {
// vamos tratar o erro
editor.WriteMessage("Erro: {0}", e.Message);
}
}
}
public void Initialize() {
// pode deixar em branco
}
public void Terminate() {
// pode deixar em branco
}
}
}
Ao executar este código AutoCAD Civil 3D .NET C# nós teremos o seguinte resultado: O id do alinhamento selecionado é: (1455527762496) |
Nossas 20 dicas & truques de programação mais populares |
|
Java - Como retornar a quantidade de mapeamentos (chave-valor) em um HashMap do Java usando o método size() C - Como escrever uma função concat() que reproduz a funcionalidade da função strcat() da linguagem C Java - Como carregar uma imagem em um BufferedImage do Java usando o método read() da classe ImageIO |
Você também poderá gostar das dicas e truques de programação abaixo |
|
JavaScript - JavaScript para Trigonometria - Como converter radianos em graus na linguagem JavaScript C# - Como detectar a mudança de estado da CheckBox do C# Windows Forms usando o evento CheckedChanged TypeScript - Como calcular o coeficiente angular de uma reta em TypeScript dados dois pontos no plano cartesiano |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





