Skip to content

Sistema Simples de Empréstimo de Livros em Python - Atividade Ativa #87

Description

@lenovoloq905-cmd

import csv

Armazenamento de dados usando Dicionários

livros = {}
usuarios = {}

def cadastrar_livro():
codigo = input("Digite o código do livro: ")
titulo = input("Digite o título do livro: ")
# Criamos um dicionário dentro do dicionário 'livros'
livros[codigo] = {
"titulo": titulo,
"situacao": "disponível",
"nome_aluno": "",
"matricula_aluno": "",
"data_devolucao": ""
}
print(f"\nLivro '{titulo}' cadastrado com sucesso!")

def cadastrar_usuario():
matricula = input("Digite a matrícula do aluno: ")
nome = input("Digite o nome do aluno: ")
usuarios[matricula] = nome
print(f"\nUsuário {nome} cadastrado!")

def consultar_livros():
if not livros:
print("\nNenhum livro cadastrado no sistema.")
return
print("\n--- Acervo da Biblioteca ---")
for cod, info in livros.items():
print(f"Código: {cod} | Título: {info['titulo']} | Status: {info['situacao']}")

def emprestar_livro():
codigo = input("Código do livro que deseja emprestar: ")

if codigo in livros:
    if livros[codigo]['situacao'] == "disponível":
        matricula = input("Digite a matrícula do aluno: ")
        if matricula in usuarios:
            # Atualizando os dados do empréstimo
            livros[codigo]['situacao'] = "emprestado"
            livros[codigo]['nome_aluno'] = usuarios[matricula]
            livros[codigo]['matricula_aluno'] = matricula
            livros[codigo]['data_devolucao'] = input("Data prevista de devolução (dd/mm/aaaa): ")
            print("\nEmpréstimo registrado com sucesso!")
        else:
            print("\nErro: Matrícula não encontrada. Cadastre o usuário primeiro.")
    else:
        print("\nErro: Este livro já está emprestado.")
else:
    print("\nErro: Código de livro inexistente.")

def devolver_livro():
codigo = input("Código do livro a ser devolvido: ")
if codigo in livros and livros[codigo]['situacao'] == "emprestado":
# Resetando os campos para o estado original
livros[codigo]['situacao'] = "disponível"
livros[codigo]['nome_aluno'] = ""
livros[codigo]['matricula_aluno'] = ""
livros[codigo]['data_devolucao'] = ""
print("\nDevolução concluída!")
else:
print("\nErro: O livro não consta como emprestado ou não existe.")

def gerar_relatorio():
print("\n" + "="*30)
print("RELATÓRIO GERAL")
print("="*30)
for cod, dados in livros.items():
print(f"Livro: {dados['titulo']} ({cod})")
print(f"Status: {dados['situacao']}")
if dados['situacao'] == "emprestado":
print(f"Emprestado para: {dados['nome_aluno']} (Mat: {dados['matricula_aluno']})")
print(f"Devolução em: {dados['data_devolucao']}")
print("-" * 20)

def salvar_csv():
# Define o nome do arquivo conforme exigido na entrega
nome_arquivo = 'relatorio_biblioteca.csv'
with open(nome_arquivo, mode='w', newline='', encoding='utf-8') as file:
colunas = ['codigo', 'titulo', 'situacao', 'nome_aluno', 'matricula_aluno', 'data_devolucao']
writer = csv.DictWriter(file, fieldnames=colunas)

    writer.writeheader()
    for cod, info in livros.items():
        # Combina o código (chave) com o restante das informações
        linha = {'codigo': cod, **info}
        writer.writerow(linha)
print(f"\nArquivo '{nome_arquivo}' gerado com sucesso!")

def menu():
while True:
print("\n--- SISTEMA DE BIBLIOTECA ---")
print("1. Cadastrar livro")
print("2. Cadastrar usuário")
print("3. Consultar livros")
print("4. Emprestar livro")
print("5. Devolver livro")
print("6. Gerar relatório")
print("7. Salvar relatório em arquivo .csv")
print("8. Sair")

    opcao = input("Selecione uma opção: ")
    
    if opcao == '1': cadastrar_livro()
    elif opcao == '2': cadastrar_usuario()
    elif opcao == '3': consultar_livros()
    elif opcao == '4': emprestar_livro()
    elif opcao == '5': devolver_livro()
    elif opcao == '6': gerar_relatorio()
    elif opcao == '7': salvar_csv()
    elif opcao == '8': 
        print("Encerrando programa...")
        break
    else:
        print("Opção inválida, tente novamente.")

if name == "main":
menu()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions