Universidad de San Carlos de Guatemala Escuela de Ingeniería en Ciencias y Sistemas, Facultad de Ingeniería Introducción a la Programación y Computación 2, 2do. Semestre 2026
SISTEMA DE GESTIÓN DE LIBROS: UNA BIBLIOTECA VIRTUAL CON USO DE POO, TDA’s NO LINEALES Y ASP.NET CORE MVC
202504833 – Schneyder Anderson Emmanuel Esquit Xico Resumen Abstract El presente proyecto expone el diseño e implementación de un sistema de gestión y simulación de biblioteca web desarrollado en el entorno ASP.NET Core MVC bajo el lenguaje C#. El objetivo principal consistió en resolver los requerimientos de organización jerárquica y optimización en tiempos de búsqueda sin utilizar colecciones nativas. Para satisfacer la búsqueda rápida y ordenada de libros por código ISBN se implementó un Árbol Balanceado por Altura (AVL). Al mismo tiempo, la clasificación de estanterías y subcategorías se estructuró mediante un Árbol Binario Jerárquico. El sistema cuenta con carga de datos mediante archivos XML, persistencia volátil en memoria RAM mediante el patrón de diseño Singleton, y visualización gráfica de las estructuras de datos utilizando lenguaje DOT (Graphviz) usando la librería cliente Viz.js. Palabras clave 1. 2. 3. 4. 5.
Árbol Graphviz (DOT) Framework Patrón (software) Volátil
This project presents the design and implementation of a web library management and simulation system developed in the ASP.NET Core MVC environment under the C# language. The main objective was to solve the requirements of hierarchical organization and optimization in search times without using native collections. To satisfy the fast and orderly search of books by ISBN code, a Balanced Height Tree (AVL) was implemented. At the same time, the classification of shelves and subcategories was structured through a Hierarchical Binary Tree. The system has data loading through XML files, volatile persistence in RAM memory using the Singleton design pattern, and graphical visualization of data structures using DOT language (Graphviz) using the Viz.js client library. Keywords 1. 2. 3. 4. 5.
Tree Graphviz (DOT) Framework Pattern (software) Volatile
Universidad de San Carlos de Guatemala Escuela de Ingeniería en Ciencias y Sistemas, Facultad de Ingeniería Introducción a la Programación y Computación 2, 2do. Semestre 2026
Introducción En este proyecto se hizo uso de herramientas, conceptos y soluciones que son fundamentales para el funcionamiento correcto del sistema. Por ello, en este documento se describen cada uno de estos conceptos usados, dejando constancia y evidencia del manejo e implementación. Además, se añaden gráficos para facilitar la interpretación de conceptos que son abstractos y que necesitan una manera visual para poder entender cómo se desarrollan.
diferentes problemas de diseño de software. Se trata de una plantilla que identifican problemas en el sistema y proporcionan soluciones apropiadas a problemas que se suelen encontrar al programar. (Canelo & Canelo, 2026) En este proyecto se hizo uso de uno patrón de diseño que es esencial para el funcionamiento correcto, el cual permite que solo se cree una instancia, permitiendo guardar así información que, de otra manera, tendría que estar en varias instancias, lo cual dificultaría el diseño para “unirlo después” de una ejecución. 2.1 Singleton
Por último, se añaden fuentes bibliográficas de donde se extrajo la información necesaria para poder llevar a cabo este documento. 1. Framework Es un término en inglés que se usa con frecuencia para referirse a “marco o entorno de trabajo”. Hace alusión a un conjunto de ideas, pautas y acciones que permiten abordar una determinada problemática. Para la programación, es una estructura conceptual que contribuye a organizar el desarrollo de los programas informáticos. (Porto & Gardey, 2024) Siendo así, un framework puede decirse que es parecida a una “aplicación genérica” lo cual el programador puede añadir lo que necesite, usando como base esta “aplicación”. 2. Patrones de diseño También conocidos como “design patterns”, son una solución general, reutilizable y aplicable a
Es un patrón de diseño que tiene por objetivo garantizar que una clase posea una única instancia a lo largo del ciclo de vida de la aplicación, proporcionando un punto de acceso global a dicha instancia. (Canelo & Canelo, 2026). En este proyecto, la clase encargada de manejar el sistema (BibliotecaManejador) fue implementada bajo este patrón. Esto debido a que el proyecto opera con persistencia volátil en la memoria RAM. 3. Persistencia en Memoria Volátil La persistencia de datos tradicionalmente se delega a sistemas gestores de bases de datos relacionales o no relacionales. (Tanenbaum & Bos, 2023). Sin embargo, en este proyecto el estado de la biblioteca se aloja en la RAM. Lo cual indica que, al cerrar el programa, se perderán los datos.
Universidad de San Carlos de Guatemala Escuela de Ingeniería en Ciencias y Sistemas, Facultad de Ingeniería Introducción a la Programación y Computación 2, 2do. Semestre 2026
4. Patrones de arquitectura Es una solución reusable a un problema arquitectónico común. Define la estructura general de cómo se organizan los componentes, las relaciones entre ellos, y proporciona beneficios probados como escalabilidad, mantenibilidad y rendimiento. (Arquitectónica, 2026) A diferencia de un patrón de diseño, que se centra en problemas específicos dentro del código (como el singleton) un patrón de arquitectura define una estructura general, como basada en Microservicios, N-tier y MVC, por ejemplo. 4.1 MVC
5.
ASP.NET Core MVC Es un framework de desarrollo web de código abierto, multiplataforma y de alto rendimiento creado por Microsoft. Se usa para construir aplicaciones web dinámicas y APIs, usando C# y el entorno de ejecución .NET. (Microsoft, 2026) La parte MVC indica que usa el patrón de arquitectura MVC. Características: • Multiplataforma • Rendimiento optimizado • Unificación
6. Estructura de Datos No Lineales
Es un patrón de arquitectura de software que separa una aplicación en tres componentes principales, Modelo, Vista y Controlador. Se creó originalmente para interfaces gráficas de escritorio, pero se usan para aplicaciones web como ASP.NET, Espress.js, entre otros. Las responsabilidades se dividen en: Distribución de MVC Nombre Modelo
Responsabilidad Información, reglas, comunicación de la app. Vista Interfaz de usuario Controlador Recibe acciones del usuario y decide que hacer llamando al Modelo. Fuente: Elaboración propia
Son aquellas en las que los elementos no están dispuestos de forma secuencial, a diferencia de las estructuras de datos lineales. En lugar de seguir una única trayectoria, los datos se organizan de manera más compleja, permitiendo relaciones más complejas entre ellos. (Programación Pro, 2024) Este tipo de estructura de datos se caracteriza por ser más amplio de que las lineales, ya que se pueden encontrar más ejemplos como los árboles, grafos, etc. Además, en este proyecto se hizo uso de dos tipos principales de estructura de datos no lineales. 6.1 Árboles En este tipo de estructura de dato no lineal cada elemento tiene uno o más elementos asociados, formando una jerarquía.
Universidad de San Carlos de Guatemala Escuela de Ingeniería en Ciencias y Sistemas, Facultad de Ingeniería Introducción a la Programación y Computación 2, 2do. Semestre 2026
Existen varios tipos de árboles, según como se distribuyen. 6.1.1
Árboles Binarios de Búsqueda (ABB)
Es un tipo de árbol en la que cada nodo contiene como máximo dos descendientes (hijo izquierdo e hijo derecho). Su propiedad fundamental establece que todos los elementos almacenados en el subárbol izquierdo deben poseer un valor menor que la clave del nodo raíz, mientras que todos los elementos del subárbol derecho deben ser mayores. (Sedgewick & Wayne, 2021) En el desarrollo de este proyecto, este concepto es la base para el catálogo de libros, utilizando el número ISBN como una identificación para ordenarlo. 6.1.1.1 Árboles Balanceados por Altura: Árboles AVL Un árbol binario de búsqueda “normal” tiene una gran debilidad, si los datos se insertan de forma ordenada o semiordenada, el árbol se degrada en una lista lineal lo cual hace que pierda su ventaja y degradando su complejidad algorítmica. Para resolver este inconveniente, se implementó un Árbol AVL (nombrado así por sus creadores Adelson-Velsky y Landis). Un Árbol AVL es un árbol binario de búsqueda auto-balanceable donde la diferencia entre las alturas de los subárboles izquierdo y derecho de cualquier nodo (denominada Factor de Equilibrio o Balance) no puede ser mayor que 1 ni menor que -1. (Cormen et al., 2022).
Figura 1. Diagrama de flujo de árbol AVL Fuente: elaboración propia
Universidad de San Carlos de Guatemala Escuela de Ingeniería en Ciencias y Sistemas, Facultad de Ingeniería Introducción a la Programación y Computación 2, 2do. Semestre 2026
7. Lenguaje DOT
Conclusiones
Para la representación gráfica de las estructuras de datos se integró el lenguaje DOT desarrollado por Graphviz. Además de Viz.js para mostrar el gráfico en la página web. •
•
Para las categorías: Se declaran nodos con forma de carpeta (shape=folder) y se enlazan mediante aristas dirigidas (->) desde el padre hacia cada uno de sus hijos. (DOT Language, 2024) Para los libros: Se declaran nodos divididos en celdas (shape=record) que muestran el ISBN, título y autor, enlazando hacia sus ramas, ya sea izquierda (I) o derecha (D).
1. Eficiencia con Árboles AVL: La implementación del árbol balanceado AVL garantizó tiempos de respuesta relativamente cortos en las operaciones de búsqueda, inserción y eliminación por ISBN, previniendo la degradación del árbol. 2. Independencia de Librerías Nativas: Se demostró que se puede realizar un proyecto sin el uso de colecciones genéricas de C# (List<T>, diccionarios) al diseñar estructuras de datos propias basadas (no lineales), logrando un control total sobre los datos y la estructura.
Ejemplo en lenguaje DOT: digraph ArbolLibros { node [shape=record, fillcolor="#FFF9C4"];
style=filled,
// Nodo: ISBN | Título | Autor nodo_500 [label="500 | Algoritmos | N. Wirth"]; nodo_250 [label="250 | Clean Code | R. Martin"]; nodo_750 [label="750 | Sapiens | Y. Harari"]; // Conexiones de ramas (Izquierda / Derecha) nodo_500 -> nodo_250 [label="I"]; nodo_500 -> nodo_750 [label="D"]; } El código anterior en lenguaje DOT define los nodos del árbol AVL con sus datos (ISBN, título, autor) y traza las ramas izquierda (I) y derecha (D) mediante (->)."
3. Visualización Gráfica: El uso del lenguaje DOT y también el uso con Viz.js en el área del cliente permitió mostrar diagramas de los árboles directamente en el navegador web, eliminando la necesidad de instalar software externo o dependencias en el servidor. 4. Uso de ASP.NET Core MVC: Se hizo uso de este framework para poder desarrollar la totalidad del proyecto, lo cual facilitó la implementación en el navegador web, el desarrollo del Modelo, Vista y Controlador.
Universidad de San Carlos de Guatemala Escuela de Ingeniería en Ciencias y Sistemas, Facultad de Ingeniería Introducción a la Programación y Computación 2, 2do. Semestre 2026
Referencias bibliográficas
Anexos
Porto, J. P., & Gardey, A. (2024, March 6). Framework - Qué es, ventajas, definición y concepto. Definición.de. https://definicion.de/framework/
Wadepickett. (n.d.). Introducción a ASP.NET Core MVC. Microsoft Learn. https://learn.microsoft.com/eses/aspnet/core/tutorials/first-mvc-app/startmvc?view=aspnetcore-10.0&tabs=visualstudio Arquitectónica, G. (2026, March 9). Patrones de Arquitectura de Software: Guía Completa. https://www.gestionarquitectonica.com.co/ blog/patrones-arquitectura-principales.html programacionpro.com & programacionpro.com. (2024, May 15). Estructura de Datos No Lineales. ProgramaciónPro. https://programacionpro.com/estructurasde-datos-no-lineales-ejemplos-y-conceptos/ Canelo, M. M., & Canelo, M. M. (2026, February 24). ¿Qué son los patrones de diseño de software? Profile Software Services. https://profile.es/blog/patrones-de-disenode-software/ DOT language. (2024, September 28). Graphviz. https://graphviz.org/doc/info/lang.html
Figura 2. Diagrama de clases Fuente: elaboración propia