Está en la página 1de 18

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA

Facultad de Ingeniería
Escuela de Ciencias y Sistemas

Estructura de Datos
Secciones A, B y C
Ing. René Ornelyz, Ing. Carlos Alonzo, Ing. Espino
Aux. José Morejón, Josué Itzep, Juan José Lemus

PROYECTO 1
CYSTE+ MANAGER v.1.0

DESCRIPCION GENERAL
La Escuela de Ciencias y Sistemas de la Facultad de Ingeniería de la famosa y prestigiosa
Universidad de San Carlos de Guatemala, ha propuesto a los estudiantes del quinto semestre del
curso de Estructuras de Datos el desarrollo de una aplicación web la cual será de uso exclusivo para
los estudiantes de la carrera de Ingeniería en Ciencias y Sistemas, la cual consiste en un gestor de
horarios, cursos, control de notas, y agenda electrónica tanto para los estudiantes como para los
tutores académicos del proyecto DTT. Dicha aplicación constara de una base de datos en memoria
implementada por los estudiantes, así como una interfaz responsiva, y distintos módulos
exclusivos para los tutores académicos.
GLOSARIO

HTTP verbs:
métodos de solicitud (get, post, put, entre otros)

GET:
este método solicita una representación de un set de datos.

POST:
este método se utiliza para poder enviar un set de datos a un recurso específico, el cual genera un
cambio dentro de la información.

DELETE:
este método borra un set de datos específicos.

PUT:
este método cambia un recurso ya existente, la entidad o set adjunta debería de considerar una
versión modificada.

REST:
Se basa en un modelo cliente – servidor. REST es un conjunto de principios que describen cómo se
pueden usar los estándares para desarrollar aplicaciones web.

BACK-END:
Cuando el desarrollo se encuentra del lado del servidor aplicado a tecnologías o herramientas que
estas interactúan con capas internas existentes.

FRONT-END:
Son todas aquellas herramientas disponibles para la ejecución del lado del cliente, por ejemplo la
ejecución de una aplicación que se muestra del lado del cliente en el navegador web.
INICIO
La aplicación constara de 2 módulos principales, los cuales son:

• Administrador
• Estudiante

LOGIN
Al inicio deberá de mostrar una página de inicio la cual nos permitirá el ingreso al sistema
mediante las credenciales, el usuario ‘ADMIN’, la contraseña para el usuario ‘ADMIN’ se encuentra
en la sección ‘Observaciones’ para cada sección.

Imagen 0. Login
ADMINISTRADOR
Este módulo será accedido únicamente por el administrador del sistema, el cual contara con las
siguientes funcionalidades:

1. Administrar Estudiantes
2. Administrar Horarios

ADMINISTRAR ESTUDIANTES
Esta opción nos permitirá administrar la información correspondiente a los estudiantes de la
carrera de Ingeniería en Ciencias y Sistemas, y nos permitirá realizar las siguientes acciones:

▪ Agregar
▪ Modificar
▪ Visualizar
▪ Eliminar

Dicha información será almacenada en un árbol binario de búsqueda, la cual estará ordenada
mediante el número de carnet del estudiante, dicha información será solicitada para cada
estudiante (ver sección ‘ESTUDIANTE’). Además nos permitirá la carga masiva a través de archivos
de texto, cuya estructura será descrita más adelante.

ESTUDIANTE
La información que se desea almacenar acerca del estudiante es:

✓ Carnet
✓ DPI/CUI
✓ Nombres
✓ Apellidos
✓ Fecha de Nacimiento
✓ Dirección
✓ Número de Créditos
✓ Imagen
✓ Password
Imagen 1. Árbol binario de búsqueda, estudiantes

CARGA MASIVA DE ESTUDIANTES


El sistema deberá permitir la carga de archivos cuyo contenido tendrá la información descrita
anteriormente correspondiente a varios estudiantes, el archivo poseerá una extensión ‘edd’,
además su estructura sintáctica será en JSON, la cual se describirá a continuación:

* Tanto para la gestión como para la carga de archivos de estudiantes, si se repite un número de
carnet, este deberá de lanzar una advertencia con el número de carnet que causa conflicto, y NO se
deberá agregar a la lista

{"carné": 201256812, "dpi": "2020 55634 0103", "nombre":"Manuel Carlos", "apellidos": "Lopez
Santos", "fechaNacimiento": "13/08/1996", "direccion":"Zona 2 el Gallito", "creditos":0}

{"carnet": 201556112, "dpi": "9071 56634 1103", "nombre":"Zelda", "apellidos": "Hyrule",


"fechaNacimiento": "24/12/1989", "direccion":"El Castillo de Hyrule", "creditos":250}
Imagen 2. Menú Estudiantes

ADMINISTRAR HORARIOS
Dado que el sistema será utilizado a lo largo del tiempo, se podrán cargar varios horarios,
correspondientes a los distintos semestres y escuelas de vacaciones así como las distintas
versiones correspondientes a un horario, por lo que se tendrá una lista circular simplemente
enlazada ordenada por el número de año, cuyos nodos tendrán la siguiente información:

• Año
• Semestres (2 Pointers)
• Escuelas de Vacaciones (2 Pointers)

Donde el año será el año al que corresponde el horario, y los campos ‘Semestres’ y ‘Escuelas de
Vacaciones’ corresponden a los ciclos a lo largo del año (estos serán creados por defecto al inicio y
tendrán un valor nulo), así mismo al momento de crear o cargar un horario se debe de crear un
nodo Semestre o Escuela de Vacaciones el cual tendrá una pila que almacenara las distintas
versiones que puedan existir para un horario.

Para la lista de horarios se podrá:

▪ Agregar, Visualizar y Eliminar

HORARIO
Un horario tendrá una lista simplemente enlazada de cursos ordenada por código de curso

CURSO
Un curso poseerá la información correspondiente al horario de ese curso la cual será la siguiente:

✓ Código de Curso
✓ Nombre
✓ Sección
✓ Edificio
✓ Salón
✓ Catedrático
✓ Días
✓ Horas

Se podrán crear horarios con sus respectivos cursos, para cada horario y curso se podrá:

▪ Agregar
▪ Modificar
▪ Visualizar
▪ Eliminar
Tomar en cuenta que estas acciones implican la asignación de un horario a un año, semestre y
demás, de igual manera para los cursos

Imagen 3. Horarios (Estructura completa)

Imagen 4. Versiones de horario

CARGA DE HORARIOS
El archivo poseerá una extensión ‘edd’, ademas su estructura sintáctica será en JSON, la cual se
describirá a continuación:

{"codigo":770, "nombre": "introducción a la programación y computación 1", "seccion": "A",


"edificio": "T3", "salon": 216, "catedratico": "MOISES EDUARDO VELASQUEZ OLIVA",
"horario":[{"dia":"lunes", "hora_in":"7:10", "hora_fin":"8:50"},{"dia":"viernes", "hora_in":"7:10",
"hora_fin":"8:50"}]}

{"codigo":781, "nombre": "organización de lenguajes y compiladores 2", "seccion": "A", "edificio":


"T3", "salon": 403, "catedratico": "BAYRON WOSVELY LOPEZ LOPEZ", "horario":[{"dia":"lunes",
"hora_in":"7:10", "hora_fin":"8:50"},{"dia":"sabado", "hora_in":"11:10", "hora_fin":"13:50"}]}

Al cargar un archivo de horario a este se le deberá de asignar un año y semestre de igual manera
Imagen 5. Menú Horarios

CONFIGURACION
El administrador configurara el ciclo actual para todo el sistema, el cual consistirá de un año y un
semestre o un periodo de escuela de vacaciones

ESTUDIANTE
Este módulo será accedido tanto por estudiantes, el cual contara con las siguientes
funcionalidades:

1. Perfil
2. Gestionar Horarios
3. Mis Horarios
4. Agenda

Cada uno de estos incisos tendrá una estructura asociada la cual se detallara más adelante en su
respectiva descripción, esta información será almacenada en una lista simplemente enlazada
ordenada, que contendrá dicha información y además poseerá el numero carnet del estudiante, y
será independiente al listado de estudiantes, cada nodo de esta estructura almacenara el historial
de cada estudiante, el cual servirá para acceder a su información.

Cada nodo de esta lista tendrá la siguiente estructura:


Imagen 6. Nodo de Historial

PERFIL
Aquí se podrá consultar la información básica del estudiante, así como consultar el historial de
horarios guardados a lo largo del tiempo, y por defecto los cursos asignados por semestre, y el
historial de las agendas utilizadas y además cargar una imagen para su perfil.

IMAGEN
En esta sección se deberá permitir la carga de un archivo con extensión ‘bit’ con la siguiente
estructura:

< Coordenada X>, <Coordenada y> : <Color del punto>

Ejemplo del archivo de entrada:

0,0:#DA391B
1,0:#DB351B
2,0:#DE2D1B
3,0:#D2661B

Formato de salida:
Imagen 7. Generación de Imagen

El siguiente archivo será cargado a una matriz dispersa quedando de la siguiente manera:

Imagen 8. Reporte del Mapa Bit

Esta matriz esta almacenada en la estructura principal del estudiante. Después de haber cargado
el archivo ‘bit’, se deberá de mostrar las opciones de ver imagen, permitiendo tanto la visualización
de la estructura (ver Imagen 8) como la visualización de la imagen generada a través de la
estructura como se ilustra en el formato de salida (ver Imagen 7).
Imagen 9. Perfil Estudiante

GESTIONAR HORARIOS
Al inicio de semestre cuando la Facultad de Ingeniería sube los horarios de clases los alumnos
organizan sus horarios, de hecho organizan varios de ellos para determinar cuál es de mayor
conveniencia. Ya que se podrán tener varios, estos se almacenaran en una lista circular
doblemente enlazada. Un horario consta de un id autogenerado y auto incrementable y una
matriz ortogonal en la cual se tendrá un determinado número de columnas en las cuales se
podrán visualizar los días de la semana (lunes-domingo), que son los días en los que se imparten las
clases, y un número de filas en las cuales se tendrá los horarios en los que se imparte la clase.

Al momento de iniciar se contara con una matriz únicamente con cabeceras de columnas, las
cuales mostraran los días de la semana (ver Figura 4); se contara con un menú lateral el cual
contara con los distintos horarios para los cursos, los cuales serán de un rango de 50 minutos,
como se establecen normalmente. Al agregar un rango de horas, este agregara una casilla en cada
uno de los días de la semana. La funcionalidad de agregar rangos será drag-and-drop. Además se
contara con otro menú lateral, el cual listara los distintos cursos que se impartirán durante el
semestre, los cuales se podrán filtrar por escuela o área, así como por jornada, o bien se podrán
buscar por nombre o código de curso, las estructuras a utilizar para el listado de rango de horas
será una lista simplemente enlazada, además antes de visualizar estos listados se deberá de
elegir una versión de horarios correspondientes al semestre actual.
Imagen 10. Horario Inicial

Imagen 11. Horario con curso de 7-8

*Estos horarios no formaran parte de la base de datos, y serán almacenados en una especie de
memoria cache, y estarán en memoria por un tiempo limite

Al encontrar el curso deseado se deberá de poder seleccionar el curso y arrastrarlo o posicionarlo


en la matriz, en el horario correspondiente, si no existe la posición en fila para el curso esta se debe
agregar automáticamente, además se debe de validar que el curso concuerde con el horario y que
no exista traslape entre cursos.

Los horarios se podrán: Crear, Mostrar, Eliminar y Editar

Los cursos se podrán: agregar a un horario, remover de un horario, y visualizar la información


respectiva a cada horario

LABORATORIOS
Existirá una lista de horarios para laboratorios, la cual contara con los mismos filtros y búsquedas
que los cursos, sin embargo estos si podrán traslaparse. Por lo que en la matriz existirá una pila
para cada nodo.

La representación gráfica deberá mostrar algún indicio que diferencie los nodos donde exista una
pila, así mismo deberá de mostrar todos los elementos de la pila en un espacio de la pantalla
GUARDAR HORARIO
Luego de que el usuario haya comparado los horarios y de que elija el que más le convenga, este
podrá guardar su horario para que pueda persistir. Se utilizara una matriz ortogonal para
almacenar los horarios, únicamente los espacios utilizados, como se muestra a continuación:

Imagen 12. Matriz de Horario en BD

Imagen 13. Gestión Horarios

Además al momento de guardar se almacenara para cada estudiante su respectivo historial, en


una estructura similar a la de la imagen 3, la cual se muestra a continuación.
Imagen 14. Historial de Horario

MIS HORARIOS
En este se podrán ver los horarios guardados por el estudiante a lo largo del tiempo, ya sea por año
o por ciclo (ver Imagen 14), Se podrá ver cada horario, individualmente, o como un todo en una
sola estructura

Imagen 15. Historial Horarios


AGENDA
Al guardar un horario, se creara también una agenda virtual. Esta agenda reservara para cada uno
de los cursos y laboratorios espacios de memoria, para que los estudiantes puedan agregar a esta
las distintas tareas que son asignadas en curso y tener un espacio virtual donde se puedan
visualizar las tareas de una manera más sencilla.

EVENTO
Esta agenda contara de eventos, los cuales tendrán:

• Titulo
• Cuerpo o Listado
• Fecha de entrega
• Hora de entrega

Así mismo se tendrá un listado de tags o labels, que corresponderán al listado de cursos que tenga
el usuario actual, las cuales se podrán agregar a un evento, los eventos se ordenaran por orden de
entrega automáticamente en base a la fecha y a la hora. Los eventos podrán ser:

• Editados
• Eliminados
• Creados
• Marcados como Realizados

La agenda consistirá de una cola ordenada por fecha, la cual tendrá en cada uno de sus nodos
colas de eventos, dichos eventos estarán organizados por hora.

Imagen 16. Agenda

TAGS/LABELS
Estos servirán para organizar y etiquetar la agenda, y consistirá de un árbol binario de búsqueda
cuyo contenido serán los cursos guardados en el horario para el semestre actual, además el árbol
utilizara el código del curso en su valor ASCII para balancear el árbol

FILTRAR AGENDA
Dado que existen tags o labels, se tendra un panel lateral en el cual se podrá selecciona cada una
de estas labels y se deberán de filtrar por el curso que corresponde al label
Imagen 17. Vista Agenda

DISEÑO

Sección A
Para esta fase se debe crear una REST API el cual ayudara a disponibilizar la información. Para este
caso se deberá utilizar la herramienta nrest el cual nos proporciona una plantilla de como poder crear
servicios que puedan integrar fácilmente las estructuras de datos realizadas en el lenguaje de c++.
La lógica es simple, por ejemplo para una petición GET ngrest solo necesita del método que
devolverá el objeto ya transformado en un JSON el cual puede ser utilizado en la parte del Front-
End. A continuación se le presentara una perspectiva inicial de cómo se debe de implementar el
desarrollo.

Para mayor información de cómo utilizar ngrest visitar la siguiente página:


https://github.com/loentar/ngrest/wiki

Cuando ya se finalizó el desarrollo del backend, pueden utilizar una herramienta que permita
consumir los servicios de su API el cual pueden usar POSTMAN o SoapUI para poder visualizar el
JSON, finalizada sus pruebas pueden integrar en la parte del frontend algún framework como
AngularJS, ReactJs, Vue.js entre otros. Queda a decisión del estudiante que herramienta utilizar en
esta parte.

Sección B
Para el desarrollo de las api’s se deberá de usar para los carnets impares la herramienta: ngrest, al
igual que la sección A, y para los carnets pares se utilizara la herramienta: jersey en el IDE netbeans
y servidor GlassFish

Sección C
Para el desarrollo de las api’s se deberá de usar para los carnets impares la herramienta: jersey en
el IDE netbeans y servidor GlassFish, y para los carnets pares se utilizara la herramienta: ngrest al
igual que la sección A

OBSERVACIONES
• Lenguaje a utilizar
o Sección A: C/C++
o Sección B:
▪ Impares C/C++
▪ Pares: Java
o Sección C: C/C++
• Sistema Operativo: Linux
• IDE’s Permitidos:
o Seccion B y C: Netbeans
• Queda terminantemente prohibido el uso de librerías propias del lenguaje, uso de
arreglos, vectores, etc. de detectarse el uso de estas se anulara la practica
• Las gráficas deben de mostrarse dentro de la aplicación, sin necesidad de buscarse dentro
del S.O.
• Se debe de utilizar una herramienta para generar las imágenes que contendrán las
gráficas de las estructuras (Recomendado: Graphviz, viz.js)
• Contraseñas para usuario ‘ADMIN’
o Sección A: ‘140918’
o Sección B: ’201318613’
o Sección C: ‘140918’

PENALIZACIONES
• Si existe un “null pointer exception”, o “segmentation fault(core dumped)”, el auxiliar
podrá aplicar un 25% máximo de penalización de la nota obtenida final.
• Si la aplicación se cierra repentinamente existirá una penalización de un máximo del 25%
sobre la nota obtenida.
• Si no se siguen los lineamientos de la sección ‘OBSERVACIONES’, NO se calificará el
proyecto.
• Si no se genera la estructura de json con api de ngrest en el caso se las secciones A y C,
para las Apis deberá ser realizada con jersey generando una estructura json para la sección
B, la penalización que se aplicará será de una 25% de la nota obtenida.
• Se debe de implementarse el cliente web para poder mostrar el funcionamiento de las
estructuras de datos donde entrar las siguientes estructuras (manejo de usuario, cursos,
semestres, matriz de la agenda) caso contrario no se puede calificar.

FECHA Y MODO DE ENTREGA


• 14 de septiembre del 2018 antes de las 23:59, entregas tarde serán penalizadas
• Se deben de enviar los entregables según el mecanismo que proporcionara el tutor
académico, en un comprimido con el nombre: [EDD]_#carnet (e.g. [EDD] _201318613)
• Al no seguir instrucciones de entrega, se dejara a criterio del tutor académico que
penalización aplicar.

REQUERIMIENTOS MINIMOS
• Imágenes generadas de las estructuras de datos
• Páginas de: Login, Estudiantes, Horarios (Admin), Mi Perfil
• Carga de Archivos
• API’s REST, sirviendo todas las estructuras y métodos necesarios

*Copias totales, parciales y/o de internet, tendrán nota de 0 puntos, serán reportadas al
catedrático y a la Escuela de Ciencias y Sistemas FI-USAC

También podría gustarte