{"id":49573600,"url":"https://github.com/pitercoding/sistema-de-biblioteca","last_synced_at":"2026-05-03T15:39:20.220Z","repository":{"id":310980122,"uuid":"1041987828","full_name":"pitercoding/sistema-de-biblioteca","owner":"pitercoding","description":"Um sistema de biblioteca desenvolvido em Java para praticar Programação Orientada a Objetos, com cadastro de livros, usuários, empréstimos e devoluções. EN:  A library management system developed in Java to practice Object-Oriented Programming, including book and user registration, loans, and returns.","archived":false,"fork":false,"pushed_at":"2025-10-13T16:05:27.000Z","size":2426,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T15:39:16.426Z","etag":null,"topics":["biblioteca-service","cadastro-usuarios","console-app","crud","crud-application","emprestimo-livros","java","oop","programacao-orientada-objetos","sistema-biblioteca"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pitercoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-21T10:06:29.000Z","updated_at":"2025-10-13T16:02:03.000Z","dependencies_parsed_at":"2025-08-21T12:25:37.572Z","dependency_job_id":"2842e650-8ed5-4148-bff8-a880e014b6a2","html_url":"https://github.com/pitercoding/sistema-de-biblioteca","commit_stats":null,"previous_names":["pitercoding/sistema-de-biblioteca"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pitercoding/sistema-de-biblioteca","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fsistema-de-biblioteca","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fsistema-de-biblioteca/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fsistema-de-biblioteca/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fsistema-de-biblioteca/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pitercoding","download_url":"https://codeload.github.com/pitercoding/sistema-de-biblioteca/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fsistema-de-biblioteca/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32575114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["biblioteca-service","cadastro-usuarios","console-app","crud","crud-application","emprestimo-livros","java","oop","programacao-orientada-objetos","sistema-biblioteca"],"created_at":"2026-05-03T15:39:19.476Z","updated_at":"2026-05-03T15:39:20.208Z","avatar_url":"https://github.com/pitercoding.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📚 Sistema de Biblioteca (Java + MySQL)\n\nEste é um projeto de aprendizado em Java que implementa um sistema de **biblioteca com persistência em banco de dados MySQL**.\n\nEle foi desenvolvido para praticar os conceitos de **Programação Orientada a Objetos (POO)**, separação de responsabilidades e integração com JDBC.\n\nO sistema roda via **console (Scanner)** e permite cadastrar livros e usuários, realizar empréstimos e devoluções, além de consultar livros disponíveis e emprestados.\n\n## 🚀 Objetivos do Projeto\n\n- Aplicar conceitos de **POO** (encapsulamento, classes de domínio, serviços e interface).\n  \n- Treinar **separação de responsabilidades** em pacotes:\n  - `model` → classes de domínio (`Livro`, `Usuario`).\n  - `dao` → camada de persistência com JDBC (`ConnectionFactory`, `LivroDAO`, `UsuarioDAO`, `EmprestimoDAO`).\n  - `service` → regras de negócio (`BibliotecaService`).\n  - `ui` → interface via console (`App´`, `ConsoleUI`).\n    \n- Implementar **regras de negócio reais**, como:\n  - ➡️ Limite de 3 livros emprestados por usuário.\n  - ➡️ Controle de disponibilidade de livros.\n  - ➡️ Validação ao devolver apenas livros realmente emprestados.\n    \n- Criar um **CRUD completo** para livros e usuários.\n\n## 🏗️ Estrutura do Projeto\n```swift\nsistema-de-biblioteca/\n├── src/biblioteca/\n│ ├── dao/\n│ │ ├── ConnectionFactory.java\n│ │ ├── EmprestimoDAO.java\n│ │ ├── LivroDAO.java\n│ │ └── UsuarioDAO.java\n│ │\n│ ├── model/\n│ │ ├── Livro.java\n│ │ └── Usuario.java\n│ │\n│ ├──── service/\n│ │ └── BibliotecaService.java\n│ │\n│ ├──── ui/\n│ │ ├── App.java\n│ │ └── ConsoleUI.java\n│ │\n├── .gitignore\n├── README.md\n```\n\n## 🖥️ Funcionalidades Implementadas\n\n- **Cadastro de Livros**\n  - Persistência no banco de dados MySQL.\n  - Controle de disponibilidade (`disponivel`).\n  - Possibilidade de cadastrar e deletar livros.\n\n- **Cadastro de Usuários**\n  - Persistência no banco de dados.\n  - Cada usuário é identificado pela **matrícula**.\n  - Validações ao cadastrar para evitar duplicações.\n\n- **Empréstimo de Livros**\n  - Apenas livros **disponíveis** podem ser emprestados.\n  - Atualiza a disponibilidade no banco de dados.\n  - Usuário não pode ultrapassar o limite de **3 livros**.\n\n- **Devolução de Livros**\n  - Valida se o usuário realmente possui o livro no banco antes de devolver.\n  - Atualiza a disponibilidade do livro e remove o vínculo no banco.\n\n- **Listagem de Livros Disponíveis**\n  - Exibe todos os livros que podem ser emprestados.\n\n- **Listagem de Livros Emprestados por Usuário**\n  - Mostra exatamente quais livros cada usuário possui em aberto no banco.\n\n## ▶️ Exemplo de Uso (Console)\nAo executar o programa, o menu exibido será:\n\n```markdown\n===== Sistema de Biblioteca =====\n1. Cadastrar Livro\n2. Cadastrar Usuário\n3. Listar Livros Disponíveis\n4. Emprestar Livro\n5. Devolver Livro\n6. Deletar Livro\n7. Listar Livros Emprestados de um Usuário\n0. Sair\nEscolha uma opção:\n```\n### 🔹 Exemplo 1 → Cadastrar um livro\n```java\nEscolha uma opção: 1\nTítulo: O Senhor dos Anéis\nAutor: J.R.R. Tolkien\nAno de publicação: 1954\nLivro cadastrado com sucesso!\n```\n### 🔹 Exemplo 2 → Cadastrar um usuário\n```java\nEscolha uma opção: 2\nNome: João Silva\nMatrícula: 123\nUsuário cadastrado com sucesso!\n```\n### 🔹 Exemplo 3 → Emprestar um livro\n```java\nEscolha uma opção: 4\nMatrícula do usuário: 123\nTítulo do livro: O Senhor dos Anéis\nLivro emprestado com sucesso!\n```\n### 🔹 Exemplo 4 → Devolver um livro\n```java\nEscolha uma opção: 5\nMatrícula do usuário: 123\nTítulo do livro: O Senhor dos Anéis\nLivro devolvido com sucesso!\n```\n\n## ⚙️ Ajustes Recentes\n\n- Refatoração do **`BibliotecaService`**:\n  \n  - Toda validação de empréstimo e devolução agora é feita **diretamente no banco**, evitando inconsistências com listas em memória.\n  - Correção da regra de devolução (antes não encontrava o livro emprestado corretamente).\n  - Implementação robusta do limite de **3 livros por usuário**.\n\n- Refatoração da **`ConsoleUI`**:\n  - Ajustada para consultar livros diretamente no banco.\n  - Correção da opção **5 (Devolver Livro)**, que agora funciona corretamente.\n\n## 🛠️ Banco de Dados (MySQL)\n\nO sistema utiliza **MySQL** como banco de dados.  \n\nAqui está o script SQL para criar as tabelas necessárias:\n\n```sql\nCREATE DATABASE IF NOT EXISTS biblioteca;\nUSE biblioteca;\n\n-- Tabela de usuários\nCREATE TABLE IF NOT EXISTS usuarios (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    nome VARCHAR(100) NOT NULL,\n    matricula VARCHAR(50) UNIQUE NOT NULL\n);\n\n-- Tabela de livros\nCREATE TABLE IF NOT EXISTS livros (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    titulo VARCHAR(150) NOT NULL,\n    autor VARCHAR(100) NOT NULL,\n    ano_publicacao INT NOT NULL,\n    disponivel BOOLEAN DEFAULT TRUE\n);\n\n-- Tabela de empréstimos\nCREATE TABLE IF NOT EXISTS emprestimos (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    usuario_id INT NOT NULL,\n    livro_id INT NOT NULL,\n    data_emprestimo TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    data_devolucao TIMESTAMP NULL,\n    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),\n    FOREIGN KEY (livro_id) REFERENCES livros(id)\n);\n```\n\n## 📌 Configuração JDBC\nNo código, configure a conexão com MySQL (`ConnectionFactory` ou equivalente) com os dados do seu ambiente:\n```java\nprivate static final String URL = \"jdbc:mysql://localhost:3306/biblioteca\";\nprivate static final String USER = \"root\";\nprivate static final String PASSWORD = \"sua_senha\";\n```\n\n## 📅 Melhorias Futuras\n  \n- IDs automáticos para livros e usuários (já implementado via MySQL).  \n- Interface gráfica (JavaFX ou Swing).  \n- Melhorar a busca de livros e usuários (uso de `Map` em cache). \n- Relatórios mais detalhados de empréstimos. \n- Testes unitários com JUnit.  \n- Scripts adicionais para popular o banco com dados de exemplo.\n\n## 🤝 Contribuições\n\nEste projeto está aberto para contribuições!  \n\nSe você também está aprendendo Java ou quer ajudar com ideias e melhorias, sinta-se à vontade para abrir um Pull Request ou Issue.\n\n## 👨‍💻 Autor\n\nProjeto desenvolvido por um estudante de Java com fins educacionais e de aprendizado pessoal.  \n\nSe quiser trocar ideia ou colaborar, é só chamar!\n\n## 📄 Licença\n\nEste projeto está sob a licença MIT. Sinta-se livre para usar, modificar e compartilhar.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpitercoding%2Fsistema-de-biblioteca","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpitercoding%2Fsistema-de-biblioteca","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpitercoding%2Fsistema-de-biblioteca/lists"}