-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGerenciamento_biblioteca.py
272 lines (253 loc) · 11.1 KB
/
Gerenciamento_biblioteca.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
import json
import os
import logging
from datetime import datetime
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
class Livro:
def __init__(self, id, titulo, autor, ano, isbn, disponivel=True):
self.id = id
self.titulo = titulo
self.autor = autor
self.ano = ano
self.isbn = isbn
self.disponivel = disponivel
def exibir_informacoes(self):
status = "Disponível" if self.disponivel else "Emprestado"
print(f"ID: {self.id}, Título: {self.titulo}, Autor: {self.autor}, Ano: {self.ano}, ISBN: {self.isbn}, Status: {status}")
class Usuario:
def __init__(self, id, nome, email, telefone):
self.id = id
self.nome = nome
self.email = email
self.telefone = telefone
def exibir_informacoes(self):
print(f"ID: {self.id}, Nome: {self.nome}, Email: {self.email}, Telefone: {self.telefone}")
class Emprestimo:
def __init__(self, id, usuario_id, livro_id, data_emprestimo, data_devolucao=None):
self.id = id
self.usuario_id = usuario_id
self.livro_id = livro_id
self.data_emprestimo = data_emprestimo
self.data_devolucao = data_devolucao
def exibir_informacoes(self):
status = "Devolvido" if self.data_devolucao else "Pendende"
print(f"ID: {self.id}, Usuário ID: {self.usuario_id}, Livro ID: {self.livro_id}, Data Emprestimo: {self.data_emprestimo}, Data Devolução: {self.data_devolucao}, Status: {status}")
def carregar_dados(nome_arquivo):
if os.path.exists(nome_arquivo):
with open(nome_arquivo, 'r') as arquivo:
return json.load(arquivo)
else:
return []
def salvar_dados(nome_arquivo, dados):
with open(nome_arquivo, 'w') as arquivo:
json.dump(dados, arquivo, indent=4)
def cadastrar_livro(livros):
id = len(livros) + 1
titulo = input("Título do Livro: ").strip()
if not titulo:
print("Título não pode ser vazio.")
return
autor = input("Autor: ").strip()
if not autor:
print("Autor não pode ser vazio.")
return
ano = input("Ano de Publicação: ").strip()
if not ano.isdigit() or int(ano) <= 0:
print("Ano de publicação inválido")
return
isbn = input("ISBN: ").strip()
if not isbn:
print("ISBN não pode ser vazio.")
return
livro = Livro(id, titulo, autor, ano, isbn)
livros.append(livro.__dict__)
salvar_dados('livros.json', livros)
logging.info(f"Livro '{titulo}' cadastrado com sucesso!")
def listar_livros(livros):
print("\n=== Lista de Livros ===")
for livro_dict in livros:
livro = Livro(**livro_dict)
livro.exibir_informacoes()
def cadastrar_usuario(usuarios):
id = len(usuarios) + 1
nome = input("Nome do Usuário: ").strip()
if not nome:
print("Nome não pode ser vazio.")
return
email = input("Email: ").strip()
if "@" not in email or "." not in email:
print("Email inválido.")
return
telefone = input("Telefone: ").strip()
if not telefone.isdigit() or len(telefone) < 10:
print("Telefone inválido. Deve conter pelo menos 10 dígitos")
return
usuario = Usuario(id, nome, email, telefone)
usuarios.append(usuario.__dict__)
salvar_dados('usuarios.json', usuarios)
logging.info(f"Usuário '{nome}' cadastrado com sucesso!")
def listar_usuarios(usuarios):
print("\n=== Lista de Usuários ===")
for usuario_dict in usuarios:
usuario = Usuario(**usuario_dict)
usuario.exibir_informacoes()
def emprestar_livro(emprestimos, livros, usuarios):
id = len(emprestimos) + 1
usuario_id = int(input("ID do usuário: "))
livro_id = int(input("ID do Livro: "))
usuario_existente = any(u['id'] == usuario_id for u in usuarios)
if not usuario_existente:
print("Usuário não encontrado!")
return
livro = next((l for l in livros if l['id'] == livro_id), None)
if not livro:
print("Livro não encontrado!")
return
if not livro['disponivel']:
print("Livro não está disponível para empréstimo!")
return
data_emprestimo = datetime.now().strftime('%d/%m/%Y')
emprestimo = Emprestimo(id, usuario_id, livro_id, data_emprestimo)
emprestimos.append(emprestimo.__dict__)
livro['disponivel'] = False
salvar_dados('emprestimos.json', emprestimos)
salvar_dados('livros.json', livros)
logging.info(f"Livro ID {livro_id} emprestimo para Usuário ID {usuario_id}.")
def devolver_livro(emprestimos, livros):
id_emprestimo = int(input("ID do emprestimo: "))
emprestimo = next((e for e in emprestimos if e['id'] == id_emprestimo), None)
if not emprestimo:
print("Emprestimo não encontrado.")
return
if emprestimo['data_devolucao']:
print("Livro já devolvido.")
return
data_devolucao = datetime.now().strftime('%d/%m/%Y')
emprestimo['data_devolucao'] = data_devolucao
livro_id = emprestimo['livro_id']
livro = next ((l for l in livros if l['id'] == livro_id), None)
if livro:
livro['disponivel'] = True
salvar_dados('emprestimos.json', emprestimos)
salvar_dados('livros.json', livros)
logging.info(f"Livro ID {livro_id} devolvido pelo usuário ID {emprestimo['usuario_id']}.")
def listar_emprestimos(emprestimos):
print("\n=== Lista de Empréstimos")
for emprestimo_dict in emprestimos:
emprestimo = Emprestimo(**emprestimo_dict)
emprestimo.exibir_informacoes()
def pesquisar_livros(livros):
termo = input("Digite o termo de pesquisa para livros: ").lower()
resultados = [l for l in livros if termo in l['titulo'].lower()or termo in l['autor'].lower()]
if resultados:
print(f"\n=== Resultados da pesquisa por Livros: '{termo}' ===")
for livro_dict in resultados:
livro = Livro(**livro_dict)
livro.exibir_informacoes()
else:
print("Nenhum livro encontrado com o termo especificado.")
def pesquisar_usuarios(usuarios):
termo = input("Digite o termo de pesquisa para usuários: ").lower()
resultados = [u for u in usuarios if termo in u['nome'].lower() or termo in u['email'].lower()]
if resultados:
print(f"\n=== Resultados da pesquisa por usuários: '{termo}'=== ")
for usuario_dict in resultados:
usuario = Usuario(**usuario_dict)
usuario.exibir_informacoes()
else:
print("Nenhum usuário encontrado com o termo especificado.")
def gerar_relatorio_emprestimos(emprestimos, usuarios, livros):
print("\n=== Relatório de Empréstimo ===")
for emprestimo_dict in emprestimos:
emprestimo = Emprestimo(**emprestimo_dict)
usuario = next((u for u in usuarios if u['id']==emprestimo.usuario_id), None)
livro = next((l for l in livros if l['id'] == emprestimo.livro_id), None)
if usuario and livro:
status = "Devolvido" if emprestimo.data_devolucao else "Pendente"
print(f"Emprestimo ID: {emprestimo.id}, Usuário: {usuario['nome']}, Livro: {livro['titulo']}, Data Empréstimo: {emprestimo.data_emprestimo}, Data Devolução: {emprestimo.data_devolucao}, Status:{status}")
def atualizar_livros(livros):
id_livro = int(input("Digite o ID do livro a ser atualizado: "))
livro = next((l for l in livros if l['id'] == id_livro), None)
if not livro:
print("Livro não encontrado.")
return
print(f"Atualizando Livro ID {id_livro}:")
novo_titulo = input(f"Novo Título (atual: {livro['titulo']}): ") or livro['titulo']
novo_autor = input(f"Novo autor (atual: {livro['autor']}): ") or livro['autor']
novo_ano = input(f"Novo Ano de Publicação (atual: {livro['ano']}) ")or livro['ano']
novo_isbn = input(f"Novo ISBN (atual: {livro['isbn']}): ") or livro['isbn']
livro['titulo'] = novo_titulo
livro['autor'] = novo_autor
livro['ano'] = novo_ano
livro['isbn'] = novo_isbn
salvar_dados('livros.json', livros)
logging.info(f"Livro ID {id_livro} atualizado com sucesso!")
def atualizar_usuario(usuarios):
id_usuario = int(input("Digite o ID do usuário a ser atualizado: "))
usuario = next((u for u in usuarios if u['id'] == id_usuario), None)
if not usuario:
print("Usuário não encontrado.")
return
print(f"Atualizando Usuário ID {id_usuario}:")
novo_nome = input(f"Novo Nome (atual: {usuario['nome']}): ") or usuario['nome']
novo_email = input(f"Novo Email (atual: {usuario['email']}): ") or usuario['email']
novo_telefone = input(f"Novo Telefone (atual: {usuario['telefone']}): ") or usuario['telefone']
usuario['nome'] = novo_nome
usuario['email'] = novo_email
usuario['telefone'] = novo_telefone
salvar_dados('usuarios.json', usuarios)
logging.info(f"Usuário ID {id_usuario} atualizado com sucesso.")
def menu():
print("\n=== Sistema de Gerenciamento de Biblioteca ===")
print("1. Cadastrar Livro")
print("2. Listar Livro")
print("3. Cadastrar Usuários")
print("4. Listar Usuários")
print("5. Emprestar Livro")
print("6. Devolver Livro")
print("7. Listar Empréstimo")
print("8. Pesquisar Livros")
print("9. Pesquisar Usuários")
print("10. Gerar Relatório de Empréstimos")
print("11. Atualizar Livro")
print("12. Atualizar Usuário")
print("13. Sair")
opcao = input("Escolha uma opção: ")
return opcao
def main():
livros = carregar_dados('livros.json')
usuarios = carregar_dados('usuarios.json')
emprestimos = carregar_dados('empréstimos.json')
while True:
opcao = menu()
if opcao =='1':
cadastrar_livro(livros)
elif opcao == '2':
listar_livros(livros)
elif opcao == '3':
cadastrar_usuario(usuarios)
elif opcao == '4':
listar_usuarios(usuarios)
elif opcao == '5':
emprestar_livro(emprestimos, livros, usuarios)
elif opcao == '6':
devolver_livro(emprestimos, livros)
elif opcao == '7':
listar_emprestimos(emprestimos)
elif opcao == '8':
pesquisar_livros(livros)
elif opcao == '9':
pesquisar_usuarios(usuarios)
elif opcao == '10':
gerar_relatorio_emprestimos(emprestimos, usuarios, livros)
elif opcao == '11':
atualizar_livros(livros)
elif opcao == '12':
atualizar_usuario(usuarios)
elif opcao == '13':
print("Encerrando o sistema de biblioteca. Até mais!")
break
else:
print("Opção inválida. Por favor, escolha uma opção válida.")
if __name__== '__main__':
main()