-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbiblio3.py
More file actions
159 lines (133 loc) · 5.05 KB
/
biblio3.py
File metadata and controls
159 lines (133 loc) · 5.05 KB
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
import json
import os
class Libro:
ARCHIVO_DATOS = 'biblioteca.json'
libros = []
def __init__(self, titulo: str, autor: str, isbn: str, disponible: bool = True):
self.titulo = titulo
self.autor = autor
self.isbn = isbn
self.disponible = disponible
Libro.libros.append(self)
Libro.guardar_datos() # Guardar al crear un libro
@classmethod
def cargar_datos(cls):
"""Carga los libros desde el archivo JSON al iniciar el programa"""
if os.path.exists(cls.ARCHIVO_DATOS) and os.path.getsize(cls.ARCHIVO_DATOS) > 0:
with open(cls.ARCHIVO_DATOS, 'r') as f:
datos = json.load(f)
for libro_data in datos:
cls(
titulo=libro_data['titulo'],
autor=libro_data['autor'],
isbn=libro_data['isbn'],
disponible=libro_data['disponible']
)
else:
cls.libros = []
@classmethod
def guardar_datos(cls):
"""Guarda los libros en el archivo JSON"""
datos = []
for libro in cls.libros:
datos.append({
'titulo': libro.titulo,
'autor': libro.autor,
'isbn': libro.isbn,
'disponible': libro.disponible
})
with open(cls.ARCHIVO_DATOS, 'w') as f:
json.dump(datos, f, indent=2)
@classmethod
def agregar(cls):
"""Agrega un libro con validación de ISBN único"""
titulo = input("Ingrese el título: ")
autor = input("Ingrese el autor: ")
isbn = input("Ingrese el ISBN: ").strip()
if cls.buscar(isbn):
print(f"❌ Ya existe un libro con el ISBN: {isbn}")
return
disponible = input("¿Disponible? (s/n): ").lower() == "s"
cls(titulo, autor, isbn, disponible)
print("✅ Libro agregado correctamente.")
def prestar(self):
if self.disponible:
self.disponible = False
print(f'📚 "{self.titulo}" ha sido prestado.')
else:
print(f'❌ "{self.titulo}" ya está prestado.')
Libro.guardar_datos() # Guardar cambios
def devolver(self):
if not self.disponible:
self.disponible = True
print(f'📦 "{self.titulo}" ha sido devuelto.')
else:
print(f'✅ "{self.titulo}" ya estaba disponible.')
Libro.guardar_datos() # Guardar cambios
@classmethod
def mostrar(cls):
if not cls.libros:
print("⚠️ No hay libros registrados.")
return
print("\n📚 Biblioteca Completa:")
for libro in cls.libros:
estado = "Disponible" if libro.disponible else "Prestado"
print(f'• "{libro.titulo}" - {libro.autor} (ISBN: {libro.isbn}) - {estado}')
@classmethod
def buscar(cls, isbn: str = None):
if not isbn:
isbn = input("Ingrese el ISBN a buscar: ").strip()
for libro in cls.libros:
if libro.isbn == isbn:
return libro
print(f"\n❌ No se encontró el ISBN: {isbn}")
return None
@classmethod
def eliminar(cls):
"""Elimina un libro dado un ISBN"""
isbn = input("Ingrese el ISBN del libro a eliminar: ").strip()
libro = cls.buscar(isbn)
if libro:
cls.libros.remove(libro)
cls.guardar_datos()
print(f"✅ Libro con ISBN {isbn} ha sido eliminado correctamente.")
else:
print(f"❌ No se encontró un libro con el ISBN: {isbn}")
def main():
Libro.cargar_datos() # Cargar datos al iniciar
while True:
print("\n--- Menú de Biblioteca ---")
print("a) Agregar libro")
print("b) Prestar libro")
print("c) Devolver libro")
print("d) Mostrar todos los libros")
print("e) Eliminar libro")
print("f) Salir")
opcion = input("Seleccione una opción: ").strip().lower()
if opcion == 'a':
print("\n--- Agregar Nuevo Libro ---")
Libro.agregar()
elif opcion == 'b':
print("\n--- Prestar Libro ---")
isbn = input("ISBN del libro a prestar: ").strip()
libro = Libro.buscar(isbn)
if libro:
libro.prestar()
elif opcion == 'c':
print("\n--- Devolver Libro ---")
isbn = input("ISBN del libro a devolver: ").strip()
libro = Libro.buscar(isbn)
if libro:
libro.devolver()
elif opcion == 'd':
Libro.mostrar()
elif opcion == 'e':
print("\n--- Eliminar Libro ---")
Libro.eliminar()
elif opcion == 'f':
print("\n¡Hasta luego! 📖")
break
else:
print("⚠️ Opción inválida. Por favor, seleccione una opción del menú.")
if __name__ == "__main__":
main()