Informe1 0
Informe1 0
Materia: Programación 1
Fecha: 02/09/24
1
Indicé
Carátula…………………………………………………………………………………..1
Dedicatoria……………………………………………………………………………….3
Justificación………………………………………………………………………………4
Objetivos……………..........................................................................................................5
Objetivo General………........................................................................................................6
Objetivos Específicos…………………………………………………………………….....7
I: Antecedentes……………………………………………………………………………..8
Estructuras de Control…………………………………………………………………….12
Programación Modular……………………………………………………………………13
Cadena de Caracteres……………………………………………………………………...14
III: Desarrollo…………………………………………………………………………….16
Interfaces de Usuario………………………………………………………………………17
Código……………………………………………………………………………………...20
Conclusiones………………………………………………………………………………22
Recomendaciones…………………………………………………………………………23
Bibliografía……………………………………………………………………………….24
Glosario……………………………………………………………………………………25
2
Dedication
Firstly, we dedicate this project to our instructor, Robert Wilson Cruz Claure, whose teaching
and guidance have been crucial in overcoming the challenges we faced during the
development. Thank you for sharing your extensive knowledge and inspiring us to achieve
our goals.
To our colleagues and friends, we sincerely appreciate your support and collaboration. Your
willingness to exchange ideas and work as a team has been key to reaching our objectives.
We also want to express our gratitude to the institutions and platforms that provided us with
the resources and technical support necessary to carry out this project. Your support has been
fundamental to the successful execution of our ideas.
In addition, we extend our gratitude to all those who provided feedback and constructive
criticism throughout the development process. Your insights and suggestions helped refine
our work and enhance its quality, making it a more robust and effective tool.
Finally, we dedicate this project to all those who, in some way, were part of this process,
whether through their advice, experience, or simply their presence. Each of you has left a
mark on this work, and for that, we are deeply grateful.
3
Justificación
La programación básica es una habilidad que abre muchas puertas en el mundo actual, pero
aprenderla puede ser un reto. Muchos estudiantes se enfrentan a la incertidumbre de no saber
si están avanzando adecuadamente, y los docentes a menudo desean herramientas más
precisas para poder acompañar mejor a sus alumnos en este proceso de aprendizaje. En este
contexto, surge la necesidad de una solución que facilite el monitoreo y el apoyo constante
tanto para estudiantes como para docentes.
Este proyecto nace del deseo de ofrecer una herramienta que, con la información correcta,
permita a los estudiantes sentirse más seguros y conscientes de su progreso, y a los docentes
tener una visión más clara y detallada del rendimiento de sus alumnos. Creemos que con las
herramientas adecuadas, cada estudiante puede superar los desafíos que presenta la
programación básica y cada docente puede potenciar el aprendizaje de su clase.
En definitiva, este proyecto es más que un simple software; es nuestra manera de contribuir
a una educación más efectiva y cercana, donde cada estudiante tiene la oportunidad de
alcanzar su máximo potencial, y cada docente cuenta con el apoyo necesario para guiar a sus
alumnos de la mejor manera posible.
4
Objetivos
Objetivo General
Por otro lado, el análisis del promedio de rendimiento entre hombres y mujeres permitirá a
los docentes obtener una visión más completa y equitativa del progreso de sus alumnos,
identificando posibles brechas de género y facilitando la implementación de estrategias
pedagógicas más inclusivas y adaptadas a las necesidades de todos los estudiantes. Este
enfoque permitirá una enseñanza más justa y equilibrada, contribuyendo al objetivo de
ofrecer una educación de calidad para todos.
Además, el software estará diseñado con una interfaz intuitiva y amigable, que permitirá a
los usuarios interactuar con la plataforma de manera sencilla y efectiva. Este enfoque en la
usabilidad garantizará que tanto estudiantes como docentes puedan acceder fácilmente a las
funcionalidades del software, aprovechando al máximo sus capacidades sin necesidad de una
formación técnica extensa. La simplicidad en el diseño, combinada con potentes
herramientas analíticas, hará que el software sea una herramienta indispensable en el aula,
5
facilitando la toma de decisiones informadas y el desarrollo de estrategias de enseñanza
personalizadas.
Objetivo Específico
Desarrollar y perfeccionar un módulo dentro del software que permita identificar de manera
automática y en tiempo real a los cinco estudiantes con mayor participación en las preguntas
de clase, creando un ranking que refleje su compromiso y contribución al aprendizaje. Este
ranking no solo tiene como objetivo reconocer a los alumnos más activos, sino también
inspirar a toda la clase a participar más, fomentando un ambiente de colaboración y
motivación.
El módulo capturará cada intervención de los estudiantes, evaluando tanto la frecuencia como
la calidad de sus respuestas. Utilizando un sistema inteligente, el software valorará las
aportaciones de los alumnos, considerando su relevancia y el impacto que tienen en las
discusiones del aula. Con esta información, el ranking destacará a aquellos que, con sus
aportaciones valiosas, enriquecen la experiencia de aprendizaje para todos.
Este enfoque no solo busca mejorar el rendimiento académico, sino también fortalecer
habilidades blandas cruciales como la autoconfianza, la comunicación y el liderazgo. Al
valorar la participación activa y reconocer el esfuerzo, el software ayudará a los estudiantes
a sentirse más valorados y motivados. De esta manera, se crea un entorno de aprendizaje en
el que todos los estudiantes tienen la oportunidad de brillar, ya sea que sean naturalmente
participativos o necesiten un pequeño empujón para involucrarse más.
6
En última instancia, el objetivo de este módulo es transformar la experiencia educativa,
haciendo del aula un lugar más dinámico y centrado en el estudiante. Al destacar y premiar
la participación activa, el software no solo contribuirá a un aprendizaje más profundo y
significativo, sino que también preparará a los estudiantes para enfrentar los desafíos futuros
con confianza y habilidad, tanto en el ámbito académico como en el personal.
Antecedentes
Problema
Además, muchos sistemas actuales no permiten una visión clara de la participación en tiempo
real ni proporcionan un análisis equitativo del rendimiento académico. Esto puede llevar a
una falta de motivación en los estudiantes que no se sienten reconocidos y a desafíos para los
docentes que buscan implementar métodos de enseñanza más inclusivos y efectivos. La
necesidad de un software que combine estas funcionalidades en un sistema fácil de usar es
evidente.
Solución
Para abordar estos desafíos, se propone el desarrollo de un software modular diseñado para
mejorar el seguimiento y la evaluación en la enseñanza de programación básica. Este
software integrará varias características clave para ofrecer una solución completa. En primer
lugar, incluirá un módulo para generar un ranking en tiempo real de los cinco estudiantes con
mayor participación en las preguntas de clase. Este ranking ayudará a destacar a los alumnos
7
más activos y a motivar a todos los estudiantes a involucrarse más en el proceso de
aprendizaje.
El software también contará con una herramienta para calcular y comparar el promedio de
rendimiento académico entre hombres y mujeres, proporcionando a los docentes una visión
clara y equilibrada del progreso de los diferentes grupos. Este análisis permitirá a los docentes
identificar posibles brechas de rendimiento y ajustar sus enfoques de enseñanza para
fomentar una educación más equitativa.
Además, el sistema estará dividido en tres niveles de análisis: un nivel básico que
proporcionará un resumen general de la participación, un nivel intermedio que mostrará el
ranking detallado de los cinco mejores estudiantes, y un nivel avanzado que ofrecerá un
análisis comparativo del rendimiento por género. Este enfoque modular asegura que el
software sea flexible y pueda adaptarse a las necesidades cambiantes del aula.
8
I.2. Lista de Requerimientos Funcionales
El software debe incluir un módulo que capture y registre la participación de los estudiantes
en tiempo real durante las clases.
Debe permitir la generación de un ranking dinámico que destaque a los cinco estudiantes
con mayor participación, actualizando este ranking continuamente a lo largo de la clase.
El software debe ofrecer un sistema de ranking que identifique y muestre a los cinco
estudiantes más participativos de manera clara y accesible tanto para los docentes como para
los estudiantes.
El ranking debe ser ajustable en función de los criterios establecidos por el docente,
permitiendo personalizar la forma en que se valora la participación.
Esta herramienta debe permitir al docente comparar de manera equitativa el progreso de los
estudiantes y detectar posibles disparidades en el rendimiento.
9
La funcionalidad debe incluir opciones para visualizar estadísticas y gráficos que faciliten
la interpretación de los datos.
2. Nivel Intermedio: Presentación del ranking de los cinco estudiantes más participativos,
con detalles sobre sus intervenciones en la clase.
Debe permitir la personalización de la interfaz según las necesidades del docente, facilitando
la gestión de la clase y el acceso rápido a las herramientas principales del software.
Esta personalización debe ser sencilla de configurar y aplicar, asegurando que el sistema se
adapte a diferentes contextos y estilos de enseñanza.
10
8. Actualización y Mantenimiento del Software
Debe incluir soporte técnico y documentación completa para facilitar su uso y mantenimiento
a largo plazo.
9. Funcionalidad de Notificaciones
El software debe incluir una funcionalidad de notificaciones que informe a los estudiantes
sobre su posición en el ranking y sus niveles de participación.
Las notificaciones deben ser configurables y permitir a los docentes enviar recordatorios o
mensajes motivacionales personalizados a los estudiantes.
11
II. Marco conceptual
Las estructuras de decisión permiten que un programa elija entre diferentes opciones
basándose en condiciones específicas. En nuestro proyecto, estas estructuras son utilizadas
para determinar el resultado de las pruebas de los estudiantes y la navegación entre
formularios.
12
En el formulario FrmFinalTest, se usa una estructura de decisión para evaluar la puntuación
del estudiante y generar un mensaje adecuado. A continuación se muestra cómo se utiliza el
if-else en el método CargarSalida:
Explicación:
if (PunE <= 40): Si la puntuación (PunE) es menor o igual a 40, el mensaje será “FALTA DE
SKILL!”.
else if (PunE >= 60 && PunE <= 80): Si la puntuación está en el rango de 60 a 80, el mensaje
será “NIVEL ACEPTABLE!”.
else: Para cualquier otra puntuación mayor a 80, el mensaje será “NIVEL MARK
ZUCKERBERG”.
Este uso de if-else permite adaptar el mensaje mostrado al usuario según su desempeño en el
test.
13
Explicación:
Las estructuras de repetición permiten ejecutar un bloque de código varias veces. Son
fundamentales para procesar listas de datos, como en la gestión de los estudiantes en el
proyecto.
14
Explicación:
for (int i = 0; i < Vis; i++)`: Itera sobre todos los estudiantes (Vis es el número de estudiantes).
Dentro del bucle, se asignan los valores de cada estudiante a las celdas correspondientes del
`DataGridView.
En FrmFinalTest, el bucle for también puede ser utilizado para actualizar datos si se
necesitara iterar sobre múltiples elementos en una versión extendida del software.
Además de las estructuras básicas, existen estructuras adicionales que permiten un control
más fino sobre el flujo del programa.
15
En el método MostrarBusqueda, se utiliza [Link]() para limpiar el DataGridView antes
de mostrar los resultados de una búsqueda:
Explicación:
Utiliza el operador ?? para determinar si se deben mostrar los estudiantes filtrados o todos
los estudiantes.
16
Procesamiento de Datos En FrmInfo, el uso de for para iterar sobre los estudiantes y
actualizar el DataGridView muestra cómo las estructuras de repetición manejan la
visualización de datos.
17
1. Constructor de Formulario FrmInfo
Explicación:
18
Explicación:
Explicación:
El método Buscar es modular porque encapsula la lógica de búsqueda de estudiantes en
función de un nombre dado. Este enfoque permite que la funcionalidad de búsqueda sea
19
aislada, lo que facilita su prueba y reutilización en otros formularios o partes de la aplicación.
La llamada al método MostrarBusqueda al final también muestra cómo los módulos
interactúan entre sí, proporcionando una salida coherente basada en la búsqueda realizada.
Explicación:
Explicación:
20
Este evento modulariza la interacción con otro formulario (FrmTeam). Al mantener la
creación y presentación de FrmTeam dentro de un método de evento específico, se sigue el
principio de responsabilidad única. Si la lógica para abrir `FrmTeam` cambia, solo será
necesario modificar este método, evitando impactos en otras partes de la aplicación.
21
Manipulación de Cadenas de Caracteres en el Proyecto
Explicación:
En este ejemplo, se realiza la concatenación de cadenas para formar mensajes que contienen
información sobre el estudiante, el modo de test, el tiempo y el resultado final. En C#, la
concatenación se realiza utilizando el operador `+`. A pesar de su simplicidad, este método
de concatenación es eficiente para unir un pequeño número de cadenas, como se muestra
aquí. Sin embargo, para operaciones más intensivas, se podrían considerar otras técnicas,
como el uso de StringBuilder, que es más eficiente en situaciones donde se requiere
manipular cadenas repetidamente.
22
Explicación:
Aquí, el método Contains se utiliza para buscar subcadenas dentro de los nombres de los
estudiantes. Este método es parte de la clase `string` y devuelve un valor booleano (`true` o
`false`) dependiendo de si la subcadena especificada (en este caso, `nombreBuscar`) se
encuentra dentro de otra cadena ([Link]). Esta operación es común cuando se necesita
filtrar o buscar texto dentro de un conjunto de datos. Convertir las cadenas a minúsculas
(`ToLower`) garantiza que la búsqueda sea insensible a mayúsculas.
Explicación:
En esta línea de código, se utilizan los métodos Trim y ToLower para manipular la cadena de
caracteres. Trim elimina los espacios en blanco al principio y al final de la cadena, lo que es
útil para limpiar el input del usuario antes de procesarlo. ToLower convierte todos los
caracteres de la cadena a minúsculas, lo que ayuda a realizar comparaciones insensibles a
mayúsculas y minúsculas. Estos métodos son ejemplos de cómo se pueden preparar y
manipular cadenas para cumplir con los requisitos de procesamiento específicos.
23
Explicación:
La conversión de un valor numérico a una cadena de caracteres se realiza aquí con el método
[Link](). Este método es útil cuando se necesita representar valores numéricos
como texto, por ejemplo, al mostrarlos en controles de UI como etiquetas o cuadros de texto.
Es una forma directa y sencilla de asegurar que el valor se convierte correctamente a una
cadena, manteniendo la legibilidad del código.
Explicación:
Este método genera mensajes dinámicos basados en la puntuación (`PunE`) del estudiante.
La cadena SalFin se actualiza con diferentes mensajes dependiendo del valor de la
puntuación. Este tipo de manipulación es común en aplicaciones donde es necesario
proporcionar retroalimentación o resultados personalizados basados en las entradas del
usuario. Los mensajes se almacenan como cadenas y se devuelven al llamador para que sean
utilizados en la interfaz de usuario.
24
Programación con Estructuras Unidimensionales
Explicación:
Concepto Clave:
El uso de arreglos unidimensionales permite la agrupación de elementos relacionados bajo
una sola variable. Esto es útil para manejar colecciones de datos homogéneos como la lista
de estudiantes en este caso.
25
Ejemplo 2: Iteración sobre un Arreglo en MostrarEstudiantes
Explicación:
Este código muestra cómo recorrer un arreglo unidimensional para llenar un `DataGridView`
con la información de los estudiantes. El bucle `for` permite acceder secuencialmente a cada
elemento del arreglo `obj`, utilizando el índice `i`. Cada propiedad del objeto `TEstudiante`
(como `Nombre`, `Genero`, etc.) se asigna a una celda específica del `DataGridView`.
Concepto Clave:
Explicación:
26
En este ejemplo, se realiza una operación de filtrado sobre el arreglo `obj` utilizando LINQ.
La función Where filtra los elementos del arreglo que contienen el texto de búsqueda en la
propiedad Nombre. El resultado se almacena en un nuevo arreglo `estudiantesFiltrados`, que
contiene solo los estudiantes que coinciden con el criterio de búsqueda.
Concepto Clave:
El filtrado de arreglos permite extraer subconjuntos de datos que cumplen con condiciones
específicas, lo cual es fundamental en aplicaciones que requieren búsqueda y clasificación
de información.
27
II. Desarrollo
28
Consistencia en la Experiencia del Usuario: Se ha mantenido una consistencia visual en
todos los formularios del proyecto, desde FrmHome hasta FrmTeam. Esta consistencia en el
uso de colores, fuentes y estilos de botones ayuda a los usuarios a familiarizarse
rápidamente con la aplicación, reduciendo el tiempo necesario para adaptarse a nuevas
funciones y aumentando la eficiencia en el uso del software.
29
Interacción Clara y Efectiva: La interacción entre el usuario y la aplicación está diseñada
para ser clara y efectiva. Por ejemplo, en el formulario FrmFinalTest, los controles como los
botones de “Regresar” y “Actualizar Estadísticas” tienen acciones bien definidas y
proporcionan retroalimentación inmediata. Esto asegura que los usuarios puedan realizar sus
tareas sin enfrentar problemas o malentendidos.
30
Consideraciones de Usabilidad: Los elementos de la interfaz, como los botones para buscar
y actualizar en FrmInfo, están diseñados para ser accesibles y funcionales. Sin embargo, sería
beneficioso considerar una retroalimentación más detallada para acciones específicas, como
confirmaciones al realizar búsquedas o actualizaciones, para mejorar aún más la experiencia
del usuario.
31
Manejo de Datos y Resultados: La interfaz de usuario también se encarga de presentar datos
de manera comprensible. En FrmInfo, el DataGridView se utiliza para mostrar la información
de los estudiantes de manera ordenada. La capacidad de buscar y filtrar datos directamente
desde la interfaz facilita la gestión de grandes volúmenes de información, mejorando la
eficiencia del usuario en el manejo de datos.
Adaptación a Necesidades Específicas: La interfaz está adaptada para cumplir con las
necesidades específicas del proyecto, como la gestión de inventarios y la evaluación del
rendimiento de los estudiantes. Esto demuestra que la interfaz no solo es visualmente
atractiva, sino también funcional y adaptada a los requisitos del usuario final.
32
Código fuente por formulario:
Using System;
Using [Link];
Using [Link];
Using [Link];
Using [Link];
Namespace FINAL_24
33
{
Public string Modo; // Modo del test tomado (Fácil, Normal, Difícil, Completo)
Public fmrHome()
{
InitializeComponent();
Ingresar();
34
// Este método maneja lo que pasa cuando el usuario quiere ingresar al cuestionario.
If ([Link]([Link]))
Else
Genero = “Hombre”;
Else
{
Genero = “Mujer”;
If ([Link])
{
Modo = “Facil”;
35
}
Else if ([Link])
Modo = “Normal”;
Else
Modo = “Dificil”;
}
}
[Link]();
36
Public void ActualizarEstadisticas()
Int totalParticipantes = 0;
If ([Link])
modoSeleccionado = “Facil”;
Else if ([Link])
{
modoSeleccionado = “Normal”;
Else if ([Link])
modoSeleccionado = “Dificil”;
}
// Filtrar los estudiantes que tomaron el test en el modo seleccionado y ordenarlos por
puntaje
37
.Take(5)
.ToArray();
If ([Link] > 0)
[Link] = top5[0].Nombre;
[Link] = top5[0].[Link]();
Else
[Link] = “-“;
[Link] = “-“;
If ([Link] > 1)
[Link] = top5[1].Nombre;
[Link] = top5[1].[Link]();
}
Else
[Link] = “-“;
[Link] = “-“;
If ([Link] > 2)
38
{
[Link] = top5[2].Nombre;
[Link] = top5[2].[Link]();
Else
[Link] = “-“;
[Link] = “-“;
If ([Link] > 3)
[Link] = top5[3].Nombre;
[Link] = top5[3].[Link]();
}
Else
[Link] = “-“;
[Link] = “-“;
}
If ([Link] > 4)
[Link] = top5[4].Nombre;
[Link] = top5[4].[Link]();
}
Else
39
{
[Link] = “-“;
[Link] = “-“;
If ([Link] > 0)
MostrarImagenAleatoria();
Else
[Link] = null;
[Link] = [Link]();
[Link] = [Link]();
[Link] = [Link]();
40
Private void button6_Click(object sender, EventArgs e)
[Link]();
[Link]();
// Inicializamos variables para acumular los puntajes y contar participantes por género
Int totalPuntos = 0;
Int totalPuntosHombres = 0;
Int totalPuntosMujeres = 0;
Int contadorHombres = 0;
Int contadorMujeres = 0;
41
totalPuntos += VEstudiante[i].Puntaje;
If (VEstudiante[i].Genero == “Hombre”)
totalPuntosHombres += VEstudiante[i].Puntaje;
contadorHombres++;
totalPuntosMujeres += VEstudiante[i].Puntaje;
contadorMujeres++;
totalParticipantes = Vis;
Else
promedioGeneral = 0;
42
}
If (contadorHombres > 0)
Else
promedioHombres = 0;
If (contadorMujeres > 0)
{
Else
promedioMujeres = 0;
}
43
// Obtener todas las rutas de las imágenes en la carpeta
If ([Link] > 0)
[Link] = [Link](imagenSeleccionada);
}
Else
[Link] = null;
}
ActualizarEstadisticas();
}
44
Private void OpRank2_CheckedChanged(object sender, EventArgs e)
ActualizarEstadisticas();
ActualizarEstadisticas();
Formulario 2
Using System;
45
Using [Link];
Using WMPLib;
Using [Link];
Namespace FINAL_24
Struct TPreguntas
Public bool Respuesta; // Respuesta correcta (true para Verdadero, false para Falso)
TPreguntas[] VPregFac;
TPreguntas[] VPregNor;
TPreguntas[] VPregDif;
int puntaje, conP, puntosRespuesta, Vis; // Variables para puntaje, conteo de preguntas
y puntos por respuesta
DateTime FecE;
46
Private Timer timer; // Temporizador
Public FrmQuiz([Link][] objEst, int Visit, string Nom, string Gen, string
Mod)
InitializeComponent();
Vis = Visit;
47
VPregFac[0].Pregunta = “En C#, los tipos de datos primitivos son objetos. (Falso)”;
VPregFac[0].Respuesta = false;
VPregFac[1].Respuesta = false;
VPregFac[2].Respuesta = false;
VPregFac[3].Respuesta = true;
VPregFac[4].Respuesta = true;
VPregNor[0].Respuesta = false;
VPregNor[1].Respuesta = false;
VPregNor[3].Respuesta = false;
VPregNor[4].Respuesta = true;
48
// Inicialización de preguntas para el modo Difícil
VPregDif[0].Respuesta = false;
VPregDif[1].Respuesta = false;
VPregDif[2].Respuesta = false;
VPregDif[3].Respuesta = true;
VPregDif[4].Respuesta = false;
{
// Inicializa los controles con los datos proporcionados
[Link] = NomE;
[Link] = [Link](puntaje);
puntosRespuesta = 20;
49
[Link] = [Link](TieTrans).ToString(@”mm\:ss”);
// Método que se ejecuta cada vez que el temporizador hace “tick” (cada segundo)
TieTrans++;
[Link] = [Link](TieTrans).ToString(@”mm\:ss”);
// Evento que se ejecuta al hacer clic en el botón para pasar a la siguiente pregunta
{
// Verifica si se ha seleccionado una respuesta
}
Else
Bool respuestaCorrecta;
If (ModE == “Facil”)
{
50
respuestaCorrecta = VPregFac[conP].Respuesta;
Else
If (ModE == “Normal”)
respuestaCorrecta = VPregNor[conP].Respuesta;
Else
respuestaCorrecta = VPregDif[conP].Respuesta;
If (respuestaUsu == respuestaCorrecta)
Puntaje += puntosRespuesta;
ReproducirSonidoCorrecto();
}
Else
ReproducirSonidoIncorrecto();
If (conP < 4)
{
51
[Link] = [Link](puntaje);
conP += 1;
[Link] = false;
[Link] = false;
Else
If (respuestaUsu == respuestaCorrecta)
ReproducirSonidoCorrecto();
Else
{
ReproducirSonidoIncorrecto();
}
}
[Link]();
TieE = [Link]; // Guarda el tiempo final
52
FecE = [Link];
GuardarTest(NomE, GenE, ModE, puntaje, TieE, FecE); // Guarda los resultados del
test
[Link]();
[Link]();
[Link]();
}
53
{
If (modo == “Facil”)
Else
If (modo == “Normal”)
Else
Obj[Vis].Nombre = Nom;
Obj[Vis].Genero = Gen;
Obj[Vis].Modo = Mod;
54
Obj[Vis].Puntaje = Pun;
Obj[Vis].Tiempo = Tie;
Obj[Vis].FechaHora = Fec;
Vis++;
Else
[Link]();
[Link] = “Sonidos/Incorrecto.mp3”;
[Link]();
55
Formulario 3
Using System;
Using [Link];
Using WMPLib;
Using [Link];
Namespace FINAL_24
{
Public partial class FrmQuiz : Form
56
{
Struct TPreguntas
Public bool Respuesta; // Respuesta correcta (true para Verdadero, false para Falso)
TPreguntas[] VPregFac;
TPreguntas[] VPregNor;
TPreguntas[] VPregDif;
string NomE, GenE, ModE; // Variables para almacenar el nombre, género y modo del
test
int puntaje, conP, puntosRespuesta, Vis; // Variables para puntaje, conteo de preguntas
y puntos por respuesta
DateTime FecE;
Public FrmQuiz([Link][] objEst, int Visit, string Nom, string Gen, string
Mod)
InitializeComponent();
57
Obj = objEst; // Inicializa la instancia de CTest
Vis = Visit;
VPregFac[0].Pregunta = “En C#, los tipos de datos primitivos son objetos. (Falso)”;
VPregFac[0].Respuesta = false;
VPregFac[1].Respuesta = false;
VPregFac[2].Respuesta = false;
58
VPregFac[3].Pregunta = “En C#, un ‘class’ puede ser instanciado. (Verdadero)”;
VPregFac[3].Respuesta = true;
VPregFac[4].Respuesta = true;
VPregNor[0].Respuesta = false;
VPregNor[1].Respuesta = false;
VPregNor[3].Respuesta = false;
VPregNor[4].Respuesta = true;
VPregDif[0].Respuesta = false;
VPregDif[1].Respuesta = false;
59
VPregDif[2].Pregunta = “En C#, una clase puede heredar de múltiples clases.
(Falso)”;
VPregDif[2].Respuesta = false;
VPregDif[3].Respuesta = true;
VPregDif[4].Respuesta = false;
{
// Inicializa los controles con los datos proporcionados
[Link] = NomE;
[Link] = [Link](puntaje);
puntosRespuesta = 20;
[Link] = [Link](TieTrans).ToString(@”mm\:ss”);
// Método que se ejecuta cada vez que el temporizador hace “tick” (cada segundo)
Private void timer1_Tick(object sender, EventArgs e)
60
{
TieTrans++;
[Link] = [Link](TieTrans).ToString(@”mm\:ss”);
// Evento que se ejecuta al hacer clic en el botón para pasar a la siguiente pregunta
Else
{
Bool respuestaCorrecta;
If (ModE == “Facil”)
respuestaCorrecta = VPregFac[conP].Respuesta;
Else
If (ModE == “Normal”)
{
61
respuestaCorrecta = VPregNor[conP].Respuesta;
Else
respuestaCorrecta = VPregDif[conP].Respuesta;
If (respuestaUsu == respuestaCorrecta)
Puntaje += puntosRespuesta;
ReproducirSonidoCorrecto();
Else
{
ReproducirSonidoIncorrecto();
[Link] = [Link](puntaje);
conP += 1;
[Link] = false;
[Link] = false;
62
}
Else
If (respuestaUsu == respuestaCorrecta)
ReproducirSonidoCorrecto();
Else
ReproducirSonidoIncorrecto();
}
}
{
[Link]();
FecE = [Link];
GuardarTest(NomE, GenE, ModE, puntaje, TieE, FecE); // Guarda los resultados del
test
63
[Link]();
[Link]();
[Link]();
}
If (modo == “Facil”)
}
Else
64
{
If (modo == “Normal”)
Else
Public void GuardarTest(string Nom, string Gen, string Mod, int Pun, string Tie,
DateTime Fec)
Obj[Vis].Nombre = Nom;
Obj[Vis].Genero = Gen;
Obj[Vis].Modo = Mod;
Obj[Vis].Puntaje = Pun;
Obj[Vis].Tiempo = Tie;
Obj[Vis].FechaHora = Fec;
Vis++;
Else
65
{
[Link] = “Sonidos/Correcto.mp3”;
[Link]();
{
WindowsMediaPlayer player = new WindowsMediaPlayer();
[Link] = “Sonidos/Incorrecto.mp3”;
[Link]();
}
}
66
Formulario 4
Using System;
Using [Link];
Using WMPLib;
Using [Link];
Namespace FINAL_24
{
Public bool Respuesta; // Respuesta correcta (true para Verdadero, false para Falso)
67
}
TPreguntas[] VPregFac;
TPreguntas[] VPregNor;
TPreguntas[] VPregDif;
string NomE, GenE, ModE; // Variables para almacenar el nombre, género y modo del
test
int puntaje, conP, puntosRespuesta, Vis; // Variables para puntaje, conteo de preguntas
y puntos por respuesta
DateTime FecE;
Public FrmQuiz([Link][] objEst, int Visit, string Nom, string Gen, string
Mod)
{
InitializeComponent();
Vis = Visit;
68
puntaje = 0; // Inicializa el puntaje
VPregFac[0].Pregunta = “En C#, los tipos de datos primitivos son objetos. (Falso)”;
VPregFac[0].Respuesta = false;
VPregFac[1].Respuesta = false;
VPregFac[2].Respuesta = false;
VPregFac[3].Respuesta = true;
VPregFac[4].Respuesta = true;
69
// Inicialización de preguntas para el modo Normal
VPregNor[0].Respuesta = false;
VPregNor[1].Respuesta = false;
VPregNor[3].Respuesta = false;
VPregDif[0].Respuesta = false;
VPregDif[1].Respuesta = false;
VPregDif[2].Respuesta = false;
VPregDif[3].Respuesta = true;
70
VPregDif[4].Pregunta = “En C#, los métodos estáticos no pueden ser sobrecargados.
(Falso)”;
VPregDif[4].Respuesta = false;
[Link] = NomE;
[Link] = [Link](puntaje);
puntosRespuesta = 20;
[Link] = [Link](TieTrans).ToString(@”mm\:ss”);
// Método que se ejecuta cada vez que el temporizador hace “tick” (cada segundo)
TieTrans++;
[Link] = [Link](TieTrans).ToString(@”mm\:ss”);
71
// Evento que se ejecuta al hacer clic en el botón para pasar a la siguiente pregunta
Else
Bool respuestaCorrecta;
If (ModE == “Facil”)
respuestaCorrecta = VPregFac[conP].Respuesta;
Else
{
If (ModE == “Normal”)
respuestaCorrecta = VPregNor[conP].Respuesta;
Else
{
respuestaCorrecta = VPregDif[conP].Respuesta;
72
}
If (respuestaUsu == respuestaCorrecta)
Puntaje += puntosRespuesta;
ReproducirSonidoCorrecto();
Else
ReproducirSonidoIncorrecto();
[Link] = [Link](puntaje);
conP += 1;
[Link] = false;
[Link] = false;
Else
If (respuestaUsu == respuestaCorrecta)
{
73
ReproducirSonidoCorrecto();
Else
ReproducirSonidoIncorrecto();
{
[Link]();
FecE = [Link];
GuardarTest(NomE, GenE, ModE, puntaje, TieE, FecE); // Guarda los resultados del
test
[Link]();
[Link]();
74
Private void button1_Click(object sender, EventArgs e) { }
[Link]();
If (modo == “Facil”)
{
Return VPregFac[index].Pregunta; // Obtener pregunta del modo Fácil
Else
If (modo == “Normal”)
75
Else
Public void GuardarTest(string Nom, string Gen, string Mod, int Pun, string Tie,
DateTime Fec)
Obj[Vis].Nombre = Nom;
Obj[Vis].Genero = Gen;
Obj[Vis].Modo = Mod;
Obj[Vis].Puntaje = Pun;
Obj[Vis].Tiempo = Tie;
Obj[Vis].FechaHora = Fec;
Vis++;
}
Else
76
Private void ReproducirSonidoCorrecto()
[Link] = “Sonidos/Correcto.mp3”;
[Link]();
[Link] = “Sonidos/Incorrecto.mp3”;
[Link]();
}
}
77
Conclusión
A lo largo de este proyecto, hemos desarrollado una aplicación integral que gestiona
eficientemente información sobre estudiantes, evaluaciones, y resultados de rendimiento en
un entorno educativo. Este proyecto ha sido un ejercicio de aplicación práctica de múltiples
conceptos de programación en C#, como estructuras de control, programación modular, y el
manejo de estructuras unidimensionales y cadenas de caracteres. Cada uno de estos
elementos ha desempeñado un papel clave en la construcción de un sistema robusto, eficiente
y fácil de mantener.
Modularidad y Mantenibilidad:
Estructuras de Control:
78
rendimiento de los estudiantes hasta la personalización de la interfaz de usuario en función
de los datos procesados.
Integración y Colaboración:
En conclusión, el proyecto no solo ha cumplido con los objetivos técnicos propuestos, sino
que también ha servido como un valioso proceso de aprendizaje en el que se han consolidado
habilidades y conocimientos clave en el desarrollo de software. La experiencia adquirida y
79
las soluciones implementadas constituyen un sólido punto de partida para enfrentar nuevos
desafíos en el ámbito del desarrollo tecnológico.
Estudio de Casos de Código: Preste especial atención a los ejemplos de código incluidos en
el informe. Estos ejemplos ilustran cómo se aplican las teorías y técnicas en el contexto del
proyecto real. Analizar estos casos le ayudará a entender cómo se implementan las soluciones
en el software desarrollado.
80
3. Comprensión de Conceptos Clave:
4. Aplicación Práctica:
[Link] Cruzadas:
Relacionar Secciones: Utilice las referencias cruzadas entre las diferentes secciones del
informe para obtener una comprensión más profunda. Por ejemplo, relacionar las estructuras
de control con ejemplos específicos de programación modular puede ayudar a visualizar
cómo se implementan estos conceptos en el código.
Adopción de Buenas Prácticas:Al revisar el informe, considere cómo las buenas prácticas
descritas pueden ser adoptadas en proyectos similares. La implementación de técnicas
efectivas de programación y diseño puede mejorar significativamente la calidad y el
rendimiento del software.
81
8. Feedback y Mejoras:
Bibliografía
1. Deitel, H. M., & Deitel, P. J. (2021). C# Cómo Programar (9ª ed.). Pearson Educación.
2. Miller, B., & Ranum, D. (2020). Fundamentals of Computer Programming with C#.
CreateSpace Independent Publishing Platform.
3. Gaddis, T. (2022). Starting Out with C#: From Control Structures through Objects (9ª
ed.). Pearson.
82
5. Microsoft. (2023). Microsoft Docs: C# Programming Guide. Recuperado de
[[Link]
guide/]([Link]
Glosario
83
Estructura de Datos: Formato en el que se organizan y gestionan los datos en un
programa, como arreglos, listas o estructuras.
Método: Bloque de código que realiza una tarea específica, puede ser llamado desde
otras partes del código y puede recibir parámetros y devolver resultados.
84
85