Proyecto Final
Programación Avanzada II
Christian Vásquez Lolli
Instituto IACC
25 de oct. de 2021
Desarrollo:
Primeramente, se analizan los datos requeridos en el presente ejercicio debiéndose crear en lo
principal los argumentos o dativos que conformar la base de datos. En lo personal primeramente
me enfocaría en dos bases de datos como tal es decir una basándome en los clientes y productos
como tales libros de la biblioteca en comento.
A modo de ejemplo es necesario determinar los administradores del programa a diseñar (usuario
main) así como sus atributos.
Administrador o Super Usuario:
-Inicio de Sesión o Login.
-Cambio de contraseñas de usuarios.
-Añade Nuevos Usuarios.
-Elimina Usuario Existente.
-Modifica Usuario existente.
-Consulta usuario existente.
-Añade Libro y Categoría.
-Elimina Libro.
-Modifica Libro.
-Consulta libros.
-Realiza Prestamos.
-Realiza Devoluciones
Los atributos en este caso para CLIENTES, podemos definir los siguientes:
(como base de datos).
-Reservar Libro.
-Revisar Historial de Prestamos.
-Ver Libro y Consultar libros.
-Prestamo de Libros.
-Cambio de contraseña o login.
-Inicio de Sesión y revisión renovar libro
(referencia portal bibliotecario IACC).
Respecto a los libros ofrecidos como productos de nuestra biblioteca, estos deben tener atributos
que serán aplicados a la totalidad de libros.
LIBROS: AUTOR: ID_AUTOR
TITULO.
FECHA DE LANZAMIENTO CATEGORIA: id_Categoria
AUTOR
CATEGORIA
EDITORIAL Editoriales: Id_Editorial.
PAGINAS
DESCRIPCION
PORTADA
Por consiguiente, confeccionamos un Diagrama en lo personal utilizaré el software desde:
https://cacoo.com/es/examples/database-erd-software
Ahora debemos de cambiar la forma en la que, desde la tabla Libros, hacemos mención a su autor.
En vez de escribir su nombre lo que haremos será escribir el código del autor de la tabla autores
que identificará el autor inequívocamente. Lo primero es cambiar el Tipo de Datos del campo
autor, de la tabla Libros, de texto a numérico puesto que ahora no almacenaremos el nombre sino
el código del autor.
Con esta estructura estaríamos diciendo que un libro se puede alquilar varias veces y que un
Lector puede alquilar varios libros. La tabla alquileres tiene relaciones de uno a varios con los
Libros y los Lectores.
El paso anterior seria para aplicar directamente la base de datos. No obstante, utilizando Python
deberíamos generar el siguiente algoritmo:
Ilustración 1Crear un Nuevo Libro
Ilustración 2Prestar un Libro.
Ilustración 3Recibir un libro.
Objeto libro:
class Libro():
"""Objeto que representa un libro"""
def __init__(self, titulo, autor, id):
self.titulo = titulo
self.autor = autor
self.id = id
self.prestado = None
def __str__(self):
msg = "\nTitulo: "+str(self.titulo)+"\nautor: "+str(self.autor)\
+"\nid: "+str(self.id)+"\nPrestado: "+str(self.prestado)+"\n"
return msg
Clase Cliente:
class Cliente():
"""Objeto que representa un cliente"""
def __init__(self, nombre, id):
self.nombre = nombre
self.id = id
self.libros = list()
def __str__(self):
msg = "\nNombre: "+str(self.nombre)+"\nid: "+str(self.id)\
+"\nlibros: "+str(self.libros)+"\n"
return msg
Objeto Bibliotecario:
class Bibliotecario(Libro, Cliente):
"""Objeto que representa un bibliotecario"""
def __init__(self):
self.libros = dict()
self.clientes = dict()
self.l_disponibles = list()
self.l_prestados = list()
self.c_sin_libros = list()
self.c_con_libros = list()
def ingresar_libro(self, titulo, autor, id_libro):
"""Metodo que define como ingresar un libro"""
while True:
#Nuevo libro?
if self.libros.__contains__(id_libro):
print("\nLibro ya existe\n")
break
#Crear libro
n_libro = Libro(titulo, autor, id_libro)
self.libros.__setitem__(n_libro.id, n_libro)
self.l_disponibles.append(n_libro.id)
break
def borrar_libro(self, id_libro):
"""Metodo que define como borrar un libro"""
while True:
#Existe el libro?
if not self.libros.__contains__(id_libro):
print("\nEl libro no existe\n")
break
#Esta disponible?
if not self.l_disponibles.__contains__(id_libro):
print("\nEl libro no esta disponible\n")
break
#Eliminar libro
self.libros.__delitem__(id_libro)
self.l_disponibles.remove(id_libro)
break
def ingresar_cliente(self, nombre, id_cliente):
"""Metodo que define como ingresar un nuevo cliente"""
while True:
#Nuevo cliente?
if self.clientes.__contains__(id_cliente):
print("\nCliente ya existe\n")
break
#Crear cliente
n_cliente = Cliente(nombre, id_cliente)
self.clientes.__setitem__(n_cliente.id, n_cliente)
self.c_sin_libros.append(n_cliente.id)
break
def borrar_cliente(self, id_cliente):
"""Metodo que define como borrar un cliente"""
while True:
#Existe cliente?
if not self.clientes.__contains__(id_cliente):
print("\nEl cliente no existe\n")
break
#Cliente sin libros?
if not self.c_sin_libros.__contains__(id_cliente):
print("\nEl cliente tiene libros\n")
break
#Eliminar cliente
self.clientes.__delitem__(id_cliente)
self.c_sin_libros.remove(id_cliente)
break
def prestar_libro(self, id_cliente, id_libro):
"""Metodo que define como prestar un libro"""
while True:
#Existe el libro?
if not self.libros.__contains__(id_libro):
print("\nNo existe el libro\n")
break
#Existe el cliente?
if not self.clientes.__contains__(id_cliente):
print("\nNo existe el cliente\n")
break
#El libro esta disponible?
if not self.l_disponibles.__contains__(id_libro):
print("\nEl libro no esta disponible\n")
break
#El cliente tiene menos de tres libros?
if self.clientes.__getitem__(id_cliente).libros.__len__() > 2:
print("\nEl cliente ya tiene tres libros\n")
break
#Registrar cliente en libro
el_libro = self.libros.pop(id_libro)
el_libro.prestado = id_cliente
self.libros.__setitem__(id_libro, el_libro)
#Registrar libro en cliente
el_cliente = self.clientes.pop(id_cliente)
el_cliente.libros.append(id_libro)
self.clientes.__setitem__(id_cliente, el_cliente)
self.l_disponibles.remove(id_libro)
self.l_prestados.append(id_libro)
#Actualizar lista c_sin_libros
if self.c_sin_libros.__contains__(id_cliente):
self.c_sin_libros.remove(id_cliente)
#Actualizar lista c_con_libros
if not self.c_con_libros.__contains__(id_cliente):
self.c_con_libros.append(id_cliente)
break
def recibir_libro(self, id_cliente, id_libro):
"""Metodo que define como recibir un libro"""
while True:
#Existe el libro?
if not self.libros.__contains__(id_libro):
print("\nNo existe el libro\n")
break
#Existe el cliente?
if not self.clientes.__contains__(id_cliente):
print("\nNo existe el cliente\n")
break
#El libro esta prestado al cliente?
el_libro = self.libros.pop(id_libro)
if not el_libro.prestado == id_cliente:
print("\nEl libro no esta prestado a este cliente\n")
break
el_libro.prestado = None
el_cliente = self.clientes.pop(id_cliente)
el_cliente.libros.remove(id_libro)
#Actulizar libros y clientes
self.libros.__setitem__(id_libro, el_libro)
self.clientes.__setitem__(id_cliente, el_cliente)
self.l_disponibles.append(id_libro)
self.l_prestados.remove(id_libro)
#Actualizar lista c_sin_libros
if el_cliente.libros.__len__() < 1:
self.c_sin_libros.append(id_cliente)
#Actualizar lista c_con_libros
if el_cliente.libros.__len__() < 1:
self.c_con_libros.remove(id_cliente)
break
def __str__(self):
msg = "\nLibros disponibles: " + str(self.l_disponibles)\
+"\nLibros prestados: " + str(self.l_prestados)\
+"\nC. sin libros: " + str(self.c_sin_libros)\
+"\nC. con libros: " + str(self.c_con_libros)+"\n"
return msg
Bibliografía:
IACC(2021) – PROGRAMACIÓN AVANZADA II.- SEMANA 1 A 8.-