Sistema de Gerenciamento de Biblioteca
- #Lógica de Programação
- #Python
Atualmente, estou desenvolvendo um Sistema de Gerenciamento de Biblioteca com o objetivo de otimizar a organização e o controle dos recursos de bibliotecas pequenas e médias. Este projeto surgiu da necessidade pessoal de gerenciar a grande quantidade de livros que possuo, e achei interessante criar uma ferramenta eficiente para cadastrar, emprestar e gerenciar livros, além de controlar permissões de usuários.
Objetivo do Sistema
O sistema visa facilitar o processo de cadastro de livros, empréstimos e devoluções, além de permitir um controle de usuários com diferentes níveis de acesso, como usuários comuns e administradores. A ideia é que ele possa ser facilmente adaptado para bibliotecas de pequeno a médio porte.
Tecnologias Utilizadas
- Python: Linguagem principal para o desenvolvimento.
- SQLite: Banco de dados leve e eficaz para armazenar informações de livros, usuários e empréstimos.
- Tkinter: Biblioteca para a criação de uma interface gráfica amigável e intuitiva.
- Validações e Permissões: Controle de acesso diferenciado entre usuários comuns e administradores.
Funcionalidades Implementadas
1. Cadastro de Livros
O sistema permite que novos livros sejam cadastrados no banco de dados, armazenando informações como título, autor, ISBN, status de disponibilidade, entre outros. Um dos diferenciais é o uso de validações que garantem que os dados sejam inseridos corretamente, evitando duplicações e erros.
Exemplo de código para cadastro de livro:
import sqlite3
def cadastrar_livro(titulo, autor, isbn):
conn = sqlite3.connect('biblioteca.db')
cursor = conn.cursor()
# Verificar se o livro já existe
cursor.execute("SELECT * FROM livros WHERE isbn=?", (isbn,))
if cursor.fetchone():
print("Este livro já está cadastrado.")
else:
cursor.execute("INSERT INTO livros (titulo, autor, isbn, disponivel) VALUES (?, ?, ?, ?)",
(titulo, autor, isbn, True))
conn.commit()
print(f'Livro "{titulo}" cadastrado com sucesso!')
conn.close()
2. Controle de Empréstimos
O sistema permite o controle total dos empréstimos, associando um livro a um usuário, além de registrar as datas de empréstimo e previsão de devolução. Antes de realizar o empréstimo, o sistema verifica se o livro está disponível.
Exemplo de código para empréstimo de livro:
def emprestar_livro(usuario_id, isbn):
conn = sqlite3.connect('biblioteca.db')
cursor = conn.cursor()
# Verificar a disponibilidade do livro
cursor.execute("SELECT disponivel FROM livros WHERE isbn=?", (isbn,))
livro = cursor.fetchone()
if livro and livro[0]: # Livro disponível
cursor.execute("INSERT INTO emprestimos (usuario_id, isbn, data_emprestimo) VALUES (?, ?, date('now'))",
(usuario_id, isbn))
cursor.execute("UPDATE livros SET disponivel = 0 WHERE isbn = ?", (isbn,))
conn.commit()
print("Empréstimo realizado com sucesso!")
else:
print("Livro indisponível.")
conn.close()
3. Controle de Usuários com Níveis de Permissão
O sistema divide os usuários em dois níveis: usuários comuns e administradores. Apenas administradores têm permissão para editar ou remover livros, além de gerenciar outros usuários. Quando um livro precisa ser editado, o sistema sempre solicita o e-mail e verifica se o usuário é um administrador.
Exemplo de código para controle de permissão:
def editar_livro(email_admin, isbn, novo_titulo, novo_autor):
if verificar_admin(email_admin):
conn = sqlite3.connect('biblioteca.db')
cursor = conn.cursor()
cursor.execute("UPDATE livros SET titulo=?, autor=? WHERE isbn=?", (novo_titulo, novo_autor, isbn))
conn.commit()
print("Livro editado com sucesso.")
conn.close()
else:
print("Acesso negado. Apenas administradores podem editar livros.")
def verificar_admin(email):
conn = sqlite3.connect('biblioteca.db')
cursor = conn.cursor()
cursor.execute("SELECT admin FROM usuarios WHERE email=?", (email,))
result = cursor.fetchone()
conn.close()
return result and result[0] == 1 # Verifica se o usuário é admin
4. Banco de Dados
Utilizei o SQLite como banco de dados pela sua simplicidade e eficiência. As tabelas do banco incluem informações sobre livros, usuários e o histórico de empréstimos.
Estrutura do banco de dados (SQL):
CREATE TABLE IF NOT EXISTS livros (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titulo TEXT NOT NULL,
autor TEXT NOT NULL,
isbn TEXT UNIQUE NOT NULL,
disponivel BOOLEAN NOT NULL
);
CREATE TABLE IF NOT EXISTS usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
admin BOOLEAN NOT NULL
);
CREATE TABLE IF NOT EXISTS emprestimos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
usuario_id INTEGER,
isbn TEXT,
data_emprestimo DATE,
data_devolucao DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
FOREIGN KEY (isbn) REFERENCES livros(isbn)
);
Como Executar o Projeto no Seu PC
- Clone o Repositório: Clone o projeto diretamente do GitHub.
git clone https://github.com/jefteralex1/library-manager.git
- Instale as Dependências: Certifique-se de ter o Python e o SQLite instalados no seu sistema. Em seguida, instale a biblioteca Tkinter para a interface gráfica.
sudo apt-get install python3-tk # Para Linux
- Execute o Sistema: Rode o arquivo principal do projeto.
python main.py
- Configuração do Banco de Dados: Se o banco de dados não existir, ele será criado automaticamente na primeira execução.
Interface Gráfica
A interface gráfica está sendo desenvolvida com Tkinter para oferecer uma experiência de uso mais intuitiva. Aqui está uma prévia da tela de cadastro de livros:
Exemplo de código da interface gráfica:
import tkinter as tk
from tkinter import messagebox
def criar_tela_cadastro():
janela = tk.Tk()
janela.title("Cadastro de Livro")
tk.Label(janela, text="Título").grid(row=0, column=0)
titulo_entry = tk.Entry(janela)
titulo_entry.grid(row=0, column=1)
tk.Label(janela, text="Autor").grid(row=1, column=0)
autor_entry = tk.Entry(janela)
autor_entry.grid(row=1, column=1)
tk.Button(janela, text="Cadastrar", command=lambda: cadastrar_livro(titulo_entry.get(), autor_entry.get(), '0000')).grid(row=2, column=1)
janela.mainloop()
Próximos Passos
- Relatórios: Gerar relatórios para acompanhar o fluxo de empréstimos e a gestão dos livros.
- Aprimoramento da Interface: Melhorar a experiência do usuário com uma interface mais moderna.
- Segurança: Fortalecer o sistema de permissões, garantindo que as operações críticas sejam feitas apenas por administradores.
Conclusão
O Sistema de Gerenciamento de Biblioteca está em pleno desenvolvimento, e estou animado com as possibilidades que ele oferece para organizar e gerenciar bibliotecas de maneira eficiente.
Sugestões são bem-vindas para melhorias e novas funcionalidades.
O código-fonte está disponível no GitHub: Library Manager.