1+ # USO CORRECTO
2+ class Order :
3+ def __init__ (self , order_id , items ):
4+ self .order_id = order_id
5+ self .items = items
6+
7+ def calculate_total (self ):
8+ total = sum (item .price for item in self .items )
9+ return total
10+
11+ class OrderRepository :
12+ def save (self , order ):
13+ # Código para guardar la orden en la base de datos
14+ pass
15+
16+ class OrderEmailer :
17+ def send_confirmation_email (self , order ):
18+ # Código para enviar un email de confirmación al cliente
19+ pass
20+
21+
22+ class Items :
23+ def __init__ (self , name : str , price : int ) -> None :
24+ self .name : str = name
25+ self .price : str = price
26+
27+ item1 = Items ("Agenda" , 20 )
28+ item2 = Items ("Libro" , 10 )
29+ item3 = Items ("Cuaderno" , 30 )
30+
31+ order = Order (order_id = 1 , items = [item1 , item2 , item3 ])
32+
33+ total = order .calculate_total ()
34+ print (total )
35+
36+ order_repo = OrderRepository ()
37+ order_repo .save (order )
38+
39+ emalier = OrderEmailer ()
40+ emalier .send_confirmation_email (order )
41+
42+ # USO INCORRECTO
43+ class Order :
44+ def __init__ (self , order_id , items ):
45+ self .order_id = order_id
46+ self .items = items
47+
48+ def calculate_total (self ):
49+ total = sum (item .price for item in self .items )
50+ return total
51+
52+ def save_to_database (self ):
53+ # Código para guardar la orden en la base de datos
54+ pass
55+
56+ def send_confirmation_email (self ):
57+ # Código para enviar un email de confirmación al cliente
58+ pass
59+
60+
61+ """
62+ EXTRA
63+ """
64+ # USO INCORRECTO
65+ class Library :
66+ def __init__ (self ) -> None :
67+ self .libros : list [dict ] = []
68+ self .usuarios : list [dict ] = []
69+ self .prestamos : dict = {}
70+
71+
72+ def registrar_libros (self , titulo : str , autor : str , copias : int ) -> None :
73+ libro = {"Titulo" :titulo , "Autor" :autor , "Copias" :copias }
74+ self .libros .append (libro )
75+
76+ def registrar_usuario (self , nombre : str , user_id : int , email : str ) -> None :
77+ usuario = {"Nombre" :nombre , "ID" :user_id , "Email" :email }
78+ self .usuarios .append (usuario )
79+
80+ def prestar_libro (self , user_id : int , titulo_libro : str ) -> bool :
81+ for libro in self .libros :
82+ if libro ["Titulo" ] == titulo_libro and libro ["Copias" ] > 0 :
83+ self .prestamos [user_id ] = titulo_libro
84+ libro ["Copias" ] -= 1
85+ return True
86+ return False
87+
88+ def devolver_libro (self , user_id : int ) -> bool :
89+ if user_id in self .prestamos :
90+ titulo_libro = self .prestamos .pop (user_id )
91+ for libro in self .libros :
92+ if libro ["Titulo" ] == titulo_libro :
93+ libro ["Copias" ] += 1
94+ return True
95+ return False
96+
97+
98+ libreria = Library ()
99+ libreria .registrar_libros ("La pata del pato" , "Sergio Ruiz" , 10 )
100+ libreria .registrar_usuario ("Maicol" , 5 , "maicol@gmail.com" )
101+ print (libreria .libros )
102+ libreria .prestar_libro (5 , "La pata del pato" )
103+ print (libreria .libros )
104+ print (libreria .usuarios )
105+ print (libreria .prestamos )
106+ libreria .devolver_libro (5 )
107+ print (libreria .libros )
108+
109+
110+ # USO CORRECTO
111+ class Libro :
112+ def __init__ (self ) -> None :
113+ self .libros : dict = {}
114+
115+ def registrar_libro (self , titulo : str , autor : str , copias : int ):
116+ if titulo in self .libros :
117+ print (f"Titulo { titulo } ya existe" )
118+ return
119+ self .libros [titulo ] = {"Autor" : autor ,
120+ "Copias" : copias }
121+ print (f"Titulo { titulo } fue agregado correctamente" )
122+
123+ def buscar_libro (self , titulo : str ):
124+ for titulos , libro in self .libros .items ():
125+ if titulos == titulo :
126+ return titulos , libro
127+ print (f"Titulo { titulo } no fue encontrado" )
128+
129+
130+ class User :
131+ def __init__ (self ) -> None :
132+ self .usuarios = {}
133+
134+ def registrar_usuario (self , nombre : str , id : int , email : str ):
135+ if nombre in self .usuarios :
136+ print (f"Usuario { nombre } ya se encuentra registrado" )
137+ return
138+
139+ self .usuarios [id ] = {"nombre" : nombre , "Correo" : email }
140+ print (f"Usuario { nombre } fue agregado correctamente" )
141+
142+ def buscar_usuario (self , id : int ):
143+ for ids , user in self .usuarios .items ():
144+ if ids == id :
145+ return ids , user
146+ print (f"Identificador { id } no fue encontrado" )
147+
148+ class LibraryManager :
149+ def __init__ (self , book_manager , user_manager ) -> None :
150+ self .list_loans = {}
151+ self .book_manager = book_manager
152+ self .user_manager = user_manager
153+
154+ def prestamo (self , id , titulos ):
155+ libro = self .book_manager .buscar_libro (titulos )
156+ usuario = self .user_manager .buscar_usuario (id )
157+ if usuario and libro and libro [1 ]['Copias' ] > 0 :
158+ self .list_loans [id ] = titulos
159+ libro [1 ]['Copias' ] -= 1
160+ print (f"Libro { titulos } fue prestado al dni { id } y quedan { libro [1 ]['Copias' ]} disponibles" )
161+ return
162+ print (f"Ha ocurrido un error" )
163+
164+ def retornar (self , id , titulo ):
165+ for ids , titles in self .list_loans .items ():
166+ if ids == id and titles == titulo :
167+ del self .list_loans [id ]
168+ book = self .book_manager .buscar_libro (titulo )
169+ if book :
170+ book [1 ]['Copias' ]+= 1
171+ print (f"Libro { titulo } fue devuelto por el id { id } , quedan { book [1 ]['Copias' ]} disponibles" )
172+ return
173+ print (f"Ha ocurrido un error al retornar el libro" )
174+ book_manager = Libro ()
175+ book_manager .registrar_libro ("La culpa es de la vaca" , "Jaime Lopera" , 15 )
176+ book_manager .registrar_libro ("El programador pragmatico" , "Andrew Hunt" , 20 )
177+
178+ user_manager = User ()
179+ user_manager .registrar_usuario ("alan" , 123456 , "alan2085@gmail.com" )
180+ user_manager .registrar_usuario ("matheo" , 852963 , "matheo0301@gmail.com" )
181+
182+ library_manager = LibraryManager (book_manager , user_manager )
183+ library_manager .prestamo (123456 , "El programador pragmatico" )
184+ library_manager .prestamo (852963 , "El programador pragmatico" )
185+ library_manager .retornar (123456 , "El programador pragmatico" )
186+ library_manager .retornar (852963 , "El programador pragmatico" )
0 commit comments