Estructuras de datos y su procedimiento
Enviado por Wwwhatsstuff • 28 de Agosto de 2023 • Trabajo • 12.372 Palabras (50 Páginas) • 26 Visitas
[pic 1][pic 2]
EVIDENCIA CALIFICABLE 2
Nombre de la Unidad de Aprendizaje: _Estructuras de datos y su procedimiento ____
Nombre del proyecto: Repositorio en plataforma Git que demuestre el aprovechamiento de estructuras multidimensionales bajo NumPy y Pandas
Programa educativo: Licenciado en Tecnologías de Información
Semestre: _3_ Grupo: _32_
Nombre del maestro: _Álvaro Francisco Salazar González _
Nombre de los integrantes del equipo:
Jiménez Pérez Silvia Paola 2022465
Manchado Gonzales Dayana Lizbeth 2031097
Rodríguez Moncada Aldo Leonardo 2025629
Contenido mínimo a evaluar | Cumplimiento |
Índice | |
Introducción. - incluye valores UANL aplicados | |
Análisis y emisión de juicio | |
Conclusiones individuales | |
Conclusión del equipo | |
Identificación de sub resultados de aprendizaje ANECA. | |
Calificación Evidencia: | |
Firma del maestro |
San Nicolás de los Garza, ciudad universitaria a (04-03-2023)
Integrantes del equipo
Nombre | Fotografía |
Aldo Leonardo Rodríguez Moncada | [pic 3] |
Silvia Paola Jiménez Pérez | [pic 4] |
Dayana Lizbeth Manchado Gonzales | [pic 5] |
Reporte técnico
En esta evidencia se nos presenta una problemática en la cual consiste en la creación de un programa que pueda trabajar un archivo CSV previo con datos de una sesión anterior o si no existe ningún archivo CSV anterior cree uno nuevo para comenzar a trabajar, que contenga una serie de menús y submenús para que el usuario pueda desplazarse , también deberá de ser capaz de poder registrar nuevos ejemplares, deberá contar con un sistema de búsqueda para que pueda buscar un titulo por medio de su nombre o de su IBSN y también debe de ser capaz de mostrar reportes de los ejemplares existente, ejemplares que compartan año de publicación, ejemplares que compartan el género, los ejemplares que compartan año de publicación o los ejemplares que compartan al autor y que nos de la opción de exportarlo en formato CSV o MSExcel.
Listado de objetivos:
- Creación de un archivo CSV para trabajar si no existe un archivo previamente creado y si existe trabajar con este
- Menú que le dé la opción al usuario de ingresar un nuevo ejemplar, consultar o ver reportes o salir del programa.
- Si el usuario elige el ingresar un ejemplar, primero le dará la opción de continuar o volver, si elige continuar le preguntará el nombre del ejemplar, el autor, el género, el año de publicación, el ISBN y la fecha de adquisición
- Si el usuario elige la consulta, lo llevara a un submenú que le dé la opción de buscar un ejemplar por el titulo o por el ISBN
- Si el usuario elige ver reportes, lo llevara a un submenú que le da la opción de ver todos los ejemplares existentes, ver por año de publicación, ver por género o ver por autor.
- Si el usuario escoge cualquier opción del punto anterior además de desplegar el reporte también le dará la opción si quiere exportarlo en un archivo CSV o MSExcel.
Parte narrativa de la estructura de datos ocupadas en el programa
Capturas de pantallas de la interfaz del programa
[pic 6][pic 7]
[pic 8][pic 9][pic 10][pic 11][pic 12][pic 13][pic 14][pic 15][pic 16][pic 17]
Diagrama de flujo
[pic 18]
Código Python
- from prettytable import PrettyTable
- import datetime
- import sys
- import csv
- import openpyxl
- titulos = {}
- try:
- with open("titulos.csv","r", newline="") as archivo:
- lector = csv.reader(archivo)
- next(lector)
- for id,titulo,autor,genero,f_publicacion,isbn,f_adquisicion in lector:
- titulos[int(id)] = [titulo,autor,genero,f_publicacion,isbn,f_adquisicion]
- print(titulos)
- except FileNotFoundError:
- print("El archivo no se encontró, se procede a trabajar con un conjunto vacío")
- except Exception:
- Excepcion = sys.exc_info()
- print(f"Ocurrió un problema del tipo: {Excepcion[0]}")
- print(f"Mensaje del error: {Excepcion[1]}")
- while True:
- print("="*20)
- print("Menu principal")
- print("="*20)
- print("¿Que desea realizar?")
- print("1-Registrar un ejemplar\n2-Consultas y reportes\n3-Salir")
- opcion = input()
- if opcion == "1":
- while True:
- print("="*20)
- print("Ingreso de nuevo titulo")
- print("="*20)
- print("¿Desea ingresar un nuevo ejemplar? (ingrese S para continuar o ingrese X para volver")
- eleccion = input()
- if eleccion.upper() == "S":
- nombre = input("Ingrese el titulo: ")
- autor = input("Ingrese el nombre del autor: ")
- genero = input("Ingrese el genero: ")
- año_publ = input("Ingrese el año de publicacion: ")
- isbn = input("Ingrese el ISBN: ")
- fecha_adq = input("Fecha de adquisición(dd/mm/aaaa): ")
- id = max(titulos,default=0) + 1
- titulos[id] = [nombre,autor,genero,año_publ,isbn,fecha_adq]
- print(titulos) #solo fue agregado para comprobar que los datos se guardaban
- elif eleccion.upper() == "X":
- print("Volviendo al menu principal")
- break
- else:
- print("Ingrese un valor valido")
- elif opcion == "2":
- while True:
- print("="*20)
- print("Consultas y reportes")
- print("="*20)
- print("Que desea realizar\n1-consultar titulo\n2-Ver reportes\n3-salir")
- eleccion = input()
- if eleccion == "1":
- while True:
- busqueda = input("¿Como desea consultar el titulo?\n1-Por Titulo\n2-Por ISBN\n3-salir\n")
- if busqueda == "1":
- # Preguntar al usuario el título del libro
- titulo_buscado = input("Ingresa el título del libro para mostrar sus detalles: ")
- # Buscar el título ingresado
- titulos_encontrados = []
- for id, t in titulos.items():
- if t[0] == titulo_buscado:
- titulos_encontrados.append((id, t))
- # Verificar si se encontraron títulos
- if not titulos_encontrados:
- print("No se encontraron libros con el título", titulo_buscado)
- else:
- # Crear la tabla con los detalles de los libros encontrados
- tabla = PrettyTable()
- tabla.field_names = ["ID", "Título", "Autor", "Género", "Fecha de publicación", "ISBN", "Fecha de adquisición"]
- for id, t in titulos_encontrados:
- tabla.add_row([id, *t])
- # Mostrar la tabla
- print("Detalles de los libros con el título", titulo_buscado)
- print(tabla)
- elif busqueda == "2":
- isbn = input("ingrese el ISBN del libro\n")
- # Buscar el título con el ISBN ingresado
- titulo = None
- for t in titulos.values():
- if t[4] == isbn:
- titulo = t
- break
- # Verificar si se encontró el título
- if not titulo:
- print("No se encontró el libro con el ISBN", isbn)
- else:
- # Crear la tabla con los detalles del libro
- tabla = PrettyTable()
- tabla.field_names = ["ID", "Título", "Autor", "Género", "Fecha de publicación", "ISBN", "Fecha de adquisición"]
- for id, t in titulos.items():
- if t == titulo:
- tabla.add_row([id, *t])
- # Mostrar la tabla
- print("Detalles del libro con ISBN", isbn)
- print(tabla)
- elif busqueda == "3":
- print("volviendo al menu anteriror")
- break
- else:
- print("Ingrese el 1, el 2 o el 3")
- elif eleccion == "2":
- while True:
- reporte = input("¿Como quiere ver los reportes?\n1-Ver todos los ejemplares\n2-Ver los ejemplares de un autor\n3-Ver los ejemplares de un genero\n4-Ver los ejemplares de un año\n5-Salir\n")
- if reporte == "1":
- table = PrettyTable()
- table.field_names = ["ID", "Título", "Autor", "Género", "Fecha de publicación", "ISBN", "Fecha de adquisición"]
- for key, values in titulos.items():
- table.add_row([key] + values)
- print(table)
- generar = input("¿Desea exportar el archivo a...\n1-CSV\n2-MsExcel\n3-Salir\n")
- if generar == "1":
- with open("titulos_reporte.csv","w", newline="") as archivo:
- #Paso 4: Establecer una salida de escritura
- grabador = csv.writer(archivo)
- #Paso 5: Grabar el encabezado (OPCIONAL)
- grabador.writerow(("ID","TITULO","AUTOR","GENERO","F_PUBLICACION","ISBN","F_ADQUISICION"))
- #Paso 6: Iterar sobre los elementos de los datos a grabar o bien pedir de golpe que se graben todos los elementos
- grabador.writerows([(id, datos[0], datos[1], datos[2], datos[3], datos[4], datos[5]) for id, datos in titulos.items()])
- if generar == "2":
- # Creamos un nuevo libro de Excel
- wb = openpyxl.Workbook()
- # Seleccionamos la hoja de cálculo activa
- hoja_activa = wb.active
- # Definimos los encabezados de las columnas
- hoja_activa.cell(row=1, column=1).value = "ID"
- hoja_activa.cell(row=1, column=2).value = "Título"
- hoja_activa.cell(row=1, column=3).value = "Autor"
- hoja_activa.cell(row=1, column=4).value = "Género"
- hoja_activa.cell(row=1, column=5).value = "Fecha de publicación"
- hoja_activa.cell(row=1, column=6).value = "ISBN"
- hoja_activa.cell(row=1, column=7).value = "Fecha de préstamo"
- # Añadimos los datos del diccionario al archivo de Excel
- fila_actual = 2
- for i in titulos:
- hoja_activa.cell(row=fila_actual, column=1).value = i
- hoja_activa.cell(row=fila_actual, column=2).value = titulos[i][0]
- hoja_activa.cell(row=fila_actual, column=3).value = titulos[i][1]
- hoja_activa.cell(row=fila_actual, column=4).value = titulos[i][2]
- hoja_activa.cell(row=fila_actual, column=5).value = titulos[i][3]
- hoja_activa.cell(row=fila_actual, column=6).value = titulos[i][4]
- hoja_activa.cell(row=fila_actual, column=7).value = titulos[i][5]
- fila_actual += 1
- # Agregamos la fila de Fecha de actualización
- fila_actual += 1
- hoja_activa.cell(row=fila_actual, column=1).value = "Fecha de actualización"
- hoja_activa.cell(row=fila_actual, column=2).value = datetime.datetime.today().strftime('%d/%m/%Y')
- # Guardamos el archivo de Excel
- wb.save("titulos.xlsx")
- if generar == "3":
- print("Volviendo al menu de reportes")
- elif reporte == "2":
- # Preguntar al usuario el nombre del autor
- autor = input("Ingresa el nombre del autor para mostrar sus títulos: ")
- # Filtrar los títulos por el autor ingresado
- titulos_autor = [titulo for titulo in titulos.values() if titulo[1] == autor]
- # Verificar si se encontraron títulos del autor
- if not titulos_autor:
- print("No se encontraron títulos del autor", autor)
- else:
- # Crear la tabla con los títulos del autor
- tabla = PrettyTable()
- tabla.field_names = ["ID", "Título", "Autor", "Género", "Fecha de publicación", "ISBN", "Fecha de adquisición"]
- for id, titulo in titulos.items():
- if titulo[1] == autor:
- tabla.add_row([id, titulo[0], titulo[1], titulo[2], titulo[3], titulo[4], titulo[5]])
- # Mostrar la tabla
- print("Títulos del autor", autor)
- print(tabla)
- generar = input("¿Desea exportar el archivo a...\n1-CSV\n2-MsExcel\n3-Salir\n")
- if generar == "1":
- with open("autor_reporte.csv","w", newline="") as archivo:
- #Paso 4: Establecer una salida de escritura
- grabador = csv.writer(archivo)
- #Paso 5: Grabar el encabezado (OPCIONAL)
- grabador.writerow(("ID","TITULO","AUTOR","GENERO","F_PUBLICACION","ISBN","F_ADQUISICION"))
- #Paso 6: Iterar sobre los elementos de los datos a grabar o bien pedir de golpe que se graben todos los elementos
- grabador.writerows([(id, datos[0], datos[1], datos[2], datos[3], datos[4], datos[5]) for id, datos in titulos.items() if autor == datos[1]])
- if generar == "2":
- # Creamos un nuevo libro de Excel
- wb = openpyxl.Workbook()
- # Seleccionamos la hoja de cálculo activa
- hoja_activa = wb.active
- # Definimos los encabezados de las columnas
- hoja_activa.cell(row=1, column=1).value = "ID"
- hoja_activa.cell(row=1, column=2).value = "Título"
- hoja_activa.cell(row=1, column=3).value = "Autor"
- hoja_activa.cell(row=1, column=4).value = "Género"
- hoja_activa.cell(row=1, column=5).value = "Fecha de publicación"
- hoja_activa.cell(row=1, column=6).value = "ISBN"
- hoja_activa.cell(row=1, column=7).value = "Fecha de préstamo"
- # Añadimos los datos del diccionario al archivo de Excel
- fila_actual = 2
- for i in titulos:
- if titulos[i][1] == autor:
- hoja_activa.cell(row=fila_actual, column=1).value = i
- hoja_activa.cell(row=fila_actual, column=2).value = titulos[i][0]
- hoja_activa.cell(row=fila_actual, column=3).value = titulos[i][1]
- hoja_activa.cell(row=fila_actual, column=4).value = titulos[i][2]
- hoja_activa.cell(row=fila_actual, column=5).value = titulos[i][3]
- hoja_activa.cell(row=fila_actual, column=6).value = titulos[i][4]
- hoja_activa.cell(row=fila_actual, column=7).value = titulos[i][5]
- fila_actual += 1
- # Agregamos la fila de Fecha de actualización
- fila_actual += 1
- hoja_activa.cell(row=fila_actual, column=1).value = "Fecha de actualización"
- hoja_activa.cell(row=fila_actual, column=2).value = datetime.datetime.today().strftime('%d/%m/%Y')
- # Guardamos el archivo de Excel
- wb.save("autor.xlsx")
- if generar == "3":
- print("Volviendo al menu de reportes")
- else:
- print("Opcion no valida")
- elif reporte == "3":
- # Preguntar al usuario el género del libro
- genero_buscado = input("Ingresa el género del libro para mostrar sus detalles: ")
- # Buscar los libros correspondientes al género ingresado
- titulos_encontrados = []
- for id, t in titulos.items():
- if t[2] == genero_buscado:
- titulos_encontrados.append((id, t))
- # Verificar si se encontraron libros
- if not titulos_encontrados:
- print("No se encontraron libros en el género", genero_buscado)
- else:
- # Crear la tabla con los detalles de los libros encontrados
- tabla = PrettyTable()
- tabla.field_names = ["ID", "Título", "Autor", "Género", "Fecha de publicación", "ISBN", "Fecha de adquisición"]
- for id, t in titulos_encontrados:
- tabla.add_row([id, *t])
- # Mostrar la tabla
- print("Detalles de los libros en el género", genero_buscado)
- print(tabla)
- generar = input("¿Desea exportar el archivo a...\n1-CSV\n2-MsExcel\n3-Salir\n")
- if generar == "1":
- with open("genero_reporte.csv","w", newline="") as archivo:
- #Paso 4: Establecer una salida de escritura
- grabador = csv.writer(archivo)
- #Paso 5: Grabar el encabezado (OPCIONAL)
- grabador.writerow(("ID","TITULO","AUTOR","GENERO","F_PUBLICACION","ISBN","F_ADQUISICION"))
- #Paso 6: Iterar sobre los elementos de los datos a grabar o bien pedir de golpe que se graben todos los elementos
- grabador.writerows([(id, datos[0], datos[1], datos[2], datos[3], datos[4], datos[5]) for id, datos in titulos.items() if genero_buscado == datos[2]])
- if generar == "2":
- # Creamos un nuevo libro de Excel
- wb = openpyxl.Workbook()
- # Seleccionamos la hoja de cálculo activa
- hoja_activa = wb.active
- # Definimos los encabezados de las columnas
- hoja_activa.cell(row=1, column=1).value = "ID"
- hoja_activa.cell(row=1, column=2).value = "Título"
- hoja_activa.cell(row=1, column=3).value = "Autor"
- hoja_activa.cell(row=1, column=4).value = "Género"
- hoja_activa.cell(row=1, column=5).value = "Fecha de publicación"
- hoja_activa.cell(row=1, column=6).value = "ISBN"
- hoja_activa.cell(row=1, column=7).value = "Fecha de préstamo"
- # Añadimos los datos del diccionario al archivo de Excel
- fila_actual = 2
- for i in titulos:
- if titulos[i][2] == genero_buscado:
- hoja_activa.cell(row=fila_actual, column=1).value = i
- hoja_activa.cell(row=fila_actual, column=2).value = titulos[i][0]
- hoja_activa.cell(row=fila_actual, column=3).value = titulos[i][1]
- hoja_activa.cell(row=fila_actual, column=4).value = titulos[i][2]
- hoja_activa.cell(row=fila_actual, column=5).value = titulos[i][3]
- hoja_activa.cell(row=fila_actual, column=6).value = titulos[i][4]
- hoja_activa.cell(row=fila_actual, column=7).value = titulos[i][5]
- fila_actual += 1
- # Agregamos la fila de Fecha de actualización
- fila_actual += 1
- hoja_activa.cell(row=fila_actual, column=1).value = "Fecha de actualización"
- hoja_activa.cell(row=fila_actual, column=2).value = datetime.datetime.today().strftime('%d/%m/%Y')
- # Guardamos el archivo de Excel
- wb.save("genero.xlsx")
- if generar == "3":
- print("Volviendo al menu de reportes")
- else:
- print("Opcion no valida")
- elif reporte == "4":
- # Preguntar al usuario la fecha de publicación del libro
- fecha_buscada = input("Ingresa el año de publicacion para mostrar sus detalles: ")
- # Buscar los libros correspondientes a la fecha de publicación ingresada
- titulos_encontrados = []
- for id, t in titulos.items():
- if t[3] == fecha_buscada:
- titulos_encontrados.append((id, t))
- # Verificar si se encontraron libros
- if not titulos_encontrados:
- print("No se encontraron libros publicados en la fecha", fecha_buscada)
- else:
- # Crear la tabla con los detalles de los libros encontrados
- tabla = PrettyTable()
- tabla.field_names = ["ID", "Título", "Autor", "Género", "Fecha de publicación", "ISBN", "Fecha de adquisición"]
- for id, t in titulos_encontrados:
- tabla.add_row([id, *t])
- # Mostrar la tabla
- print("Detalles de los libros publicados en la fecha", fecha_buscada)
- print(tabla)
- generar = input("¿Desea exportar el archivo a...\n1-CSV\n2-MsExcel\n3-Salir\n")
- if generar == "1":
- with open("año_reporte.csv","w", newline="") as archivo:
- #Paso 4: Establecer una salida de escritura
- grabador = csv.writer(archivo)
- #Paso 5: Grabar el encabezado (OPCIONAL)
- grabador.writerow(("ID","TITULO","AUTOR","GENERO","F_PUBLICACION","ISBN","F_ADQUISICION"))
- #Paso 6: Iterar sobre los elementos de los datos a grabar o bien pedir de golpe que se graben todos los elementos
- grabador.writerows([(id, datos[0], datos[1], datos[2], datos[3], datos[4], datos[5]) for id, datos in titulos.items() if fecha_buscada == datos[3]])
- if generar == "2":
- # Creamos un nuevo libro de Excel
- wb = openpyxl.Workbook()
- # Seleccionamos la hoja de cálculo activa
- hoja_activa = wb.active
- # Definimos los encabezados de las columnas
- hoja_activa.cell(row=1, column=1).value = "ID"
- hoja_activa.cell(row=1, column=2).value = "Título"
- hoja_activa.cell(row=1, column=3).value = "Autor"
- hoja_activa.cell(row=1, column=4).value = "Género"
- hoja_activa.cell(row=1, column=5).value = "Fecha de publicación"
- hoja_activa.cell(row=1, column=6).value = "ISBN"
- hoja_activa.cell(row=1, column=7).value = "Fecha de préstamo"
- # Añadimos los datos del diccionario al archivo de Excel
- fila_actual = 2
- for i in titulos:
- if titulos[i][3] == fecha_buscada:
- hoja_activa.cell(row=fila_actual, column=1).value = i
- hoja_activa.cell(row=fila_actual, column=2).value = titulos[i][0]
- hoja_activa.cell(row=fila_actual, column=3).value = titulos[i][1]
- hoja_activa.cell(row=fila_actual, column=4).value = titulos[i][2]
- hoja_activa.cell(row=fila_actual, column=5).value = titulos[i][3]
- hoja_activa.cell(row=fila_actual, column=6).value = titulos[i][4]
- hoja_activa.cell(row=fila_actual, column=7).value = titulos[i][5]
- fila_actual += 1
- # Agregamos la fila de Fecha de actualización
- fila_actual += 1
- hoja_activa.cell(row=fila_actual, column=1).value = "Fecha de actualización"
- hoja_activa.cell(row=fila_actual, column=2).value = datetime.datetime.today().strftime('%d/%m/%Y')
- # Guardamos el archivo de Excel
- wb.save("año.xlsx")
- if generar == "3":
- print("Volviendo al menu de reportes")
- else:
- print("Opcion no valida")
- elif reporte == "5":
- print("Volviendo al menu anterior")
- break
- else:
- print("Ingrese el 1, el 2, el 3, el 4 o el 5")
- elif eleccion == "3":
- print("Volviendo al menu principal")
- break
- else:
- print("Ingrese el 1, el 2 o el 3")
- elif opcion == "3":
- with open("titulos.csv","w", newline="") as archivo:
- #Paso 4: Establecer una salida de escritura
- grabador = csv.writer(archivo)
- #Paso 5: Grabar el encabezado (OPCIONAL)
- grabador.writerow(("ID","TITULO","AUTOR","GENERO","F_PUBLICACION","ISBN","F_ADQUISICION"))
- #Paso 6: Iterar sobre los elementos de los datos a grabar o bien pedir de golpe que se graben todos los elementos
- grabador.writerows([(id, datos[0], datos[1], datos[2], datos[3], datos[4], datos[5]) for id, datos in titulos.items()])
- print("Gracias por usar el programa")
- break
- else:
- print("Ingrese el 1, el 2 o el 3")
Conclusiones
Conclusión grupal
Fue una evidencia con la cual tuvimos dificultades para concluirla y desgraciadamente no pudimos terminarla como queríamos, pero más que desanimarnos, nos vamos a esforzar más en la materia para la próxima evidencia poder terminarla con mejores resultados.
...