Skip to content

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

@lenovoloq905-cmd

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions