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 consoleQuantidade de visualizações: 12949 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. |
|
Link para compartilhar na Internet ou com seus amigos: | |
Android Java ::: android.widget ::: Button |
Como detectar um clique em um botão do Android usando setOnClickListener() e exibir uma mensagem AlertDialogQuantidade de visualizações: 1430 vezes |
O método setOnClickListener() nos permite definir a ação que será disparada ao clicarmos em um botão. Note que primeiro nós localizamos o botão no arquivo XML de layout usando o método findViewById() da classe View. Comece analisando o arquivo XML de layout no qual criamos um botão e o colocamos como filho de um elemento LinearLayout: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> tools:context=".MainActivity"> <Button xmlns:android=" ...... E agora o código Java no arquivo MainActivity.java: package com.example.estudosandroid; import androidx.appcompat.app.AppCompatActivity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // vamos detectar um clique no botão e exibir uma mensagem AlertDialog Button button = (Button) findViewById(R.id.btn_enviar); button.setOnClickListener(new View.OnClickListener(){ ...... |
PHP ::: PHP + MySQL ::: MySQL (mysql) |
Como criar uma tabela MySQL usando o comando CREATE TABLE e as funções mysql_query() e mysqli_query() do PHPQuantidade de visualizações: 21914 vezes |
Nesta dica mostrarei como podemos usar a função mysqli_query() do PHP para disparar uma instrução SQL CREATE TABLE para criar uma nova tabela na base de dados MySQL. Esta dica foi atualizada. Removi a função mysql_query(), já que esta não funciona mais nas versões atuais do PHP. Em seu lugar eu coloquei mysqli_query() e ajustei o código. Note que inclui neste exemplo o código para efetuar a conexão PHP + MySQL usando a função mysqli_connect(). Novamente vale lembrar que removi a função mysql_connect() e deixei apenas a versão mais atual. Se você pretende escrever seu primeiro CRUD PHP + MySQL, este é o exemplo ideal para você começar. Veja o código completo: <?php // vamos efetuar a conexao com o banco $servidor = "localhost"; $usuario = "root"; $senha = "osmar1234"; $base_dados = "estudos"; $conexao = mysqli_connect($servidor, $usuario, $senha, $base_dados); // Comando SQL para criar a tabela $sql = "CREATE TABLE my2_usuarios( id int(11) NOT NULL auto_increment, usuario varchar(50), senha varchar(10), ...... |
C ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular a área de um círculo em C dado o raio do círculoQuantidade de visualizações: 7743 vezes |
A área de um círculo pode ser calculada por meio do produto entre a constante PI e a medida do raio ao quadrado (r2). Comece analisando a figura abaixo: Sendo assim, temos a seguinte fórmula: Onde A é a área, PI equivale a 3,14 (aproximadamente) e r é o raio do círculo. O raio é a medida que vai do centro até um ponto da extremidade do círculo. O diâmetro é a medida equivalente ao dobro da medida do raio, passando pelo centro do círculo e dividindo-o em duas partes. A medida do diâmetro é 2 * Raio. Veja agora um código C completo que calcula a área de um círculo mediante a informação do raio: #include <stdio.h> #include <stdlib.h> #include <math.h> // vamos definir o valor de PI #define PI 3.14159265358979323846 int main(int argc, char *argv[]){ int raio; printf("Informe o raio do círculo: "); // efetua a leitura do raio ...... Ao executarmos este código nós teremos o seguinte resultado: Informe o raio do círculo: 5 A area do círculo de raio 5 é igual a 78.539816 A circunferência é um conjunto de pontos que estão a uma mesma distância do centro. Essa distância é conhecida como raio. A circunferência é estudada pela Geometria Analítica e, em geral, em um plano cartesiano. O círculo, que é formado pela circunferência e pelos infinitos pontos que preenchem seu interior, é estudado pela Geometria Plana, pois ele ocupa um espaço e pode ter sua área calculada, diferentemente da circunferência. |
C++ ::: C++ para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como calcular a norma ou módulo de vetores nos espaços R2 e R3 usando C++ - Geometria Analítica e Álgebra Linear usando C++Quantidade de visualizações: 1621 vezes |
Em Geometria Analítica e Álgebra Linear, a magnitude, norma, comprimento, tamanho ou módulo (também chamado de intensidade na Física) de um vetor é o seu comprimento, que pode ser calculado por meio da distância de seu ponto final a partir da origem, no nosso caso (0,0). Considere o seguinte vetor no plano, ou seja, no espaço bidimensional, ou R2: \[\vec{v} = \left(7, 6\right)\] Aqui este vetor se inicia na origem (0, 0) e vai até as coordenadas (x = 7) e (y = 6). Veja sua plotagem no plano 2D: Note que na imagem já temos todas as informações que precisamos, ou seja, o tamanho desse vetor é 9 (arredondado) e ele faz um ângulo de 41º (graus) com o eixo x positivo. Em linguagem mais adequada da trigonometria, podemos dizer que a medida do cateto oposto é 6, a medida do cateto adjacente é 7 e a medida da hipotenusa (que já calculei para você) é 9. Note que já mostrei também o ângulo theta (__$\theta__$) entre a hipotenusa e o cateto adjacente, o que nos dá a inclinação da reta representada pelos pontos (0, 0) e (7, 6). Relembrando nossas aulas de trigonometria nos tempos do colegial, temos que o quadrado da hipotenusa é a soma dos quadrados dos catetos, ou seja, o Teorema de Pitágoras: \[a^2 = b^2 + c^2\] Como sabemos que a potenciação é o inverso da radiciação, podemos escrever essa fórmula da seguinte maneira: \[a = \sqrt{b^2 + c^2}\] Passando para os valores x e y que já temos: \[a = \sqrt{7^2 + 6^2}\] Podemos comprovar que o resultado é 9,21 (que arredondei para 9). Não se esqueça da notação de módulo ao apresentar o resultado final: \[\left|\vec{v}\right| = \sqrt{7^2 + 6^2}\] E aqui está o código C++ que nos permite informar os valores x e y do vetor e obter o seu comprimento, tamanho ou módulo: #include <string> #include <iostream> #include <math.h> using namespace std; int main(int argc, char *argv[]){ float x, y, norma; // vamos ler os valores x e y cout << "Informe o valor de x: "; cin >> x; cout << "Informe o valor de y: "; ...... Ao executar este código C++ nós teremos o seguinte resultado: Informe o valor de x: 7 Informe o valor de y: 6 A norma do vetor é: 9.219544457292887 Novamente note que arredondei o comprimento do vetor para melhor visualização no gráfico. Para calcular a norma de um vetor no espaço, ou seja, no R3, basta acrescentar o componente z no cálculo. |
Python ::: Dicas & Truques ::: Matemática e Estatística |
Apostila Python para iniciantes - Como calcular juros compostos e montante usando PythonQuantidade de visualizações: 16969 vezes |
O regime de juros compostos é o mais comum no sistema financeiro e portanto, o mais útil para cálculos de problemas do dia-a-dia. Os juros gerados a cada período são incorporados ao principal para o cálculo dos juros do período seguinte. Chamamos de capitalização o momento em que os juros são incorporados ao principal. Após três meses de capitalização, temos: 1º mês: M = P . (1 + i) 2º mês: o principal é igual ao montante do mês anterior: M = P x (1 + i) x (1 + i) 3º mês: o principal é igual ao montante do mês anterior: M = P x (1 + i) x (1 + i) x (1 + i) Simplificando, obtemos a fórmula: M = P . (1 + i) ^ n Importante: a taxa i tem que ser expressa na mesma medida de tempo de n, ou seja, taxa de juros ao mês para n meses. Para calcularmos apenas os juros basta diminuir o principal do montante ao final do período: J = M - P Vejamos um exemplo: Considerando que uma pessoa empresta a outra a quantia de R$ 2.000,00, a juros compostos, pelo prazo de 3 meses, à taxa de 3% ao mês. Quanto deverá ser pago de juros? Veja o código Python para a resolução: # função principal do programa def main(): principal = 2000.00 taxa = 0.03 meses = 3 montante = principal * pow((1 + taxa), meses) juros = montante - principal ...... Ao executarmos este código Python nós teremos o seguinte resultado: O total de juros a ser pago é: 185.45400000000018 O montante a ser pago é: 2185.454 Um outra aplicação interessante é mostrar mês a mês a evolução dos juros. Veja o código a seguir: # função principal do programa def main(): principal = 2000.00 taxa = 0.03 meses = 3 anterior = 0.0 for i in range(1, meses + 1): montante = principal * pow((1 + taxa), i) juros = montante - principal - anterior ...... Ao executarmos este código Python nós teremos o seguinte resultado: Mês: 1 - Montante: 2060.0 - Juros: 60.0 Mês: 2 - Montante: 2121.7999999999997 - Juros: 61.79999999999973 Mês: 3 - Montante: 2185.454 - Juros: 63.65400000000045 |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
C# - Como remover um elemento em uma determinada posição de uma List<T> do C# usando a função RemoveAt() |
Quem Somos |
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 Civil 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 20 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.
|
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..
|
Linguagens Mais Populares |
1º lugar: Java |