Article image
Jefter Alexandre
Jefter Alexandre28/09/2024 12:16
Compartilhe

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

  1. Clone o Repositório: Clone o projeto diretamente do GitHub.
git clone https://github.com/jefteralex1/library-manager.git
  1. 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
  1. Execute o Sistema: Rode o arquivo principal do projeto.
python main.py
  1. 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.

Compartilhe
Comentários (0)