PROGRAMA: GENERADOR DE HORARIOSFacultad de Ingeniería Económica, Estadística y CC.SS. UNIVERSIDAD...
Transcript of PROGRAMA: GENERADOR DE HORARIOSFacultad de Ingeniería Económica, Estadística y CC.SS. UNIVERSIDAD...
PROGRAMA: GENERADOR DE HORARIOSIntegrantes: Miranda Vasquez Jerad Nilson, Palomino Ricra Josué, Tito Canecillas Carlos,
Tiahuallpa Yucra YhonDocente: Serrano Carvajal, Anibal
Asignatura: Lenguaje de Programación EstadísticaEscuela Profesional de Ingeniería Estadística
Facultad de Ingeniería Económica, Estadística y CC.SS.UNIVERSIDAD NACIONAL DE INGENIERÍA
RESUMENEn este trabajo se diseñó un generador de horarios para
la Facultad de Ingeniería Estadística, Económica y Cien-cias Sociales para dar una mayor facilidad a los alumnosde dicha facultad al momento de armar sus horarios, dondedicho generador se diseñó mediante el lenguaje de progra-mación Visual Studio.net.
ABSTRACTIn this paper a generator of schedules was designed for
the Faculty of Statistical, Economic and Social Sciences fora greater facility for the students of said faculty at the timeof putting together their schedules, where said generatorwas designed by means of the Basic Visual ProgrammingLanguage .net.
INTRODUCCIÓNVisual Studio .NET es el entorno de programación vi-
sual de Microsoft para crear servicios web basados en eluso del lenguaje de marcado extensible (XML). Donde secrea formularios para interactuar con el usuario. VisualStudio .NET viene con .NET Framework e incluye varioslenguajes de programación: Visual Basic, Visual C ++,Visual C #.
Donde se usó el lenguaje de programación Visual Ba-sic.NET para crear el Generador de Horarios
PRESENTACIÓN DEL PROBLEMALos estudiantes de la Facultad de Ingeniería Estadística,
Económica y Ciencias Sociales, tienen la dificultad a lahora de tener que armar su horario con los cursos quele corresponden, ya que a algunos les genera un cruceal momento de armar su horario y por consiguiente segeneran depuraciones de dichos cursos, eso genera un granproblema para el alumno. Para poder facilitar al alumnoel armado de su horario y evitar inconvenientes, se hizoeste generador de horario, que es un formulario hecho enel programa Visual Basic 2012.
El método usado será el Muestreo por Captura y Re-captura usado generalmente en investigaciones de vidasilvestre para estimar parámetros de poblaciones. Lossupuestos consideradas para las posteriores definicionesson las siguientes:
OBJETIVOS
OBJETIVO PRINCIPAL:
Crear un programa que permita al alumno armar unhorario de un modo más dinámico.
OBJETIVOS PARTICULARES:• Avisar si existe algún cruce entre cursos que no nece-
sariamente pertenezcan a un mismo ciclo.• Mostrar al alumno el horario armado en el programa
Excel.
RESULTADOS
Fig. 1: Inicio
En la Fig. 1 se muestra la primera ventana del Generador dehorarios, en el cual el usuario podrá elegir la especialidad,el ciclo, nombre del curso y la sección a la que perteneceel curso que elegirá.
Fig. 2: Selección de la Especialidad
En la Fig. 2 se muestra la selección de la especialidad a laque pertenece el curso que desee elegir.
Fig. 3: Selección del Ciclo
En la Fig. 3 se muestra el ciclo al que pertenece el cursoque se va a elegir.
Fig. 4: Selección del Curso
En la Fig. 4 se muestra la selección del curso.
Fig. 5: Selección de la sección
En la Fig. 5 se muestra la nueva ventana que aparece paraseleccionar la sección, donde se muestra al principio todaslas secciones que ese curso posee, sea tanto de la escuelade Estadística o de Económica, porque hay cursos dondese puede llevar el curso en una sección que no pertenece ala escuela del alumno.
Fig. 6: Selección del Curso
En la Fig. 6 se muestra la sección seleccionada del cursoque se había establecido.
Fig. 7: Botón Aceptar
En la Fig. 7 se muestra una ventana que consulta si se hahecho una correcta elección de la sección
Fig. 8: Botón Agregar
En la Fig. 8 se muestra la activación del botón Agregar, locual sucede cuando ya se ha seleccionado la sección delcurso.
Fig. 9: Cuadro de Cursos Seleccionados
En la Fig. 9 se muestra lo que realiza el botón Agregar,este botón hace que el curso seleccionado se agregue alcuadro de cursos seleccionados, sume la cantidad de cursos
seleccionados, sume la cantidad de créditos que hasta elmomento se ha acumulado y en la Fig. 10 el curso que seagregó en las horas correspondientes del horario junto conel tipo de curso y el salón donde se dictará el curso.
Fig. 10: Cuadro del Horario
Fig. 11: Aviso de Cruce
En la Fig. 11 se muestra el aviso que se dará cuando seintente agregar un curso que se cruce con algún curso yaagregado, en el aviso se mostrará los tipos de cruce queexisten junto con las horas y los días donde ocurren.
Fig. 12: Quitar Curso
En la Fig. 12 se muestra una ventana donde se va a elegirel curso que se desea quitar y luego se presiona el botónquitar.
Fig. 13: Curso Quitado
Fig. 14: Curso Quitado
En la Fig. 13 se muestra el horario con el curso que seha quitado, donde a la vez se han disminuido los creditosacumulados y en la Fig. 14 se muestra el cuadro con elhorario que se ha modificado con el retiro del curso.
Fig. 15: Boton Exportar a Excel
En la Fig. 15 se muestra el boton que se usará para exportarel Horario armado a un archivo excel
Fig. 16: Excel Exportado
En la Fig. 16 se muestra el excel exportado, el cual contieneel horario y de esta forma se permite al alumno podermodificar el horario como se muestra en la Fig. 17.
Fig. 17: Horario Modificado
CONCLUSIONES1. El programa elaborado permite a cada alumno a ar-
mar su propio horario de una forma rápida y sencilla,mostrando la cantidad de créditos acumulados.
2. Se pudo avisar al alumno cada vez que surgía algúncruce en el horario, ya sea practica-practica, teoría-teoría o practica-teoría.
3. El horario armado se pudo mostrar en un Excel parapoder modificarlo y así poder presentarlo para lassolicitudes que se puedan realizar en la escuela
BIBLIOGRAFIA[1] Luis Miguel Blanco, "Programación En Visual Basic.Net,
Grupo EIDOS".
[2] Bill Sheldon, Billy Hollis, Rob Windsor David McCarter,Gastón C. Hillar and Todd Herman, "Professional VisualBasic® 2012 and .NET 4.5 Programming".
[3] Ying Bai, "Practical Database Programming with VisualBasic.NET, 2nd Edition"
ANEXOSEl respectivo código del generador es:
Module Module1Public tablaSeccion As DataTablePublic tablaEspecialidad As DataTablePublic tablaCiclo As DataTablePublic tablaCurso As DataTablePublic tabla As New DataTablePublic tablaAgregar As DataTablePublic Seccion As StringPublic Curso As StringPublic Ciclo As StringPublic Carrera As StringPublic aux As Integer = 0Public credito_cantidad As Integer = 0Public cursos_cantidad As Integer = 0
Function filtrarTabla(ByVal tabla AsDataTable, ByValfiltrar_por As String)As DataTable
Dim filas_seleccionadas As DataRow()Dim nueva_tabla As DataTablenueva_tabla = tabla.Clone()filas_seleccionadas =
tabla.Select(filtrar_por)For Each fila_filtrada As
DataRow In filas_seleccionadas
nueva_tabla.ImportRow(fila_filtrada)
NextReturn nueva_tablaEnd Function
End Module____________________________________________Imports System.IOImports System.TextImports Microsoft.Office.Interop.Excel
Public Class frmHorarioDim objExcelApp As Microsoft.Office.
Interop.Excel.ApplicationDim MiLibro As WorkbookDim MiHoja As Worksheet
Private Sub Form1_Load(sender AsObject, e As EventArgs) HandlesMyBase.Load
btnAgregar.Enabled = FalseWith tabla
.Columns.Add("Codigo",System.Type.GetType("System.
String")).Columns.Add("Seccion",
System.Type.GetType("System.String"))
.Columns.Add("Curso",System.Type.GetType("System.
String")).Columns.Add("Tipo",
System.Type.GetType("System.tring"))
.Columns.Add("Aula",System.Type.GetType("System.
String")).Columns.Add("Dia",
System.Type.GetType("System.String"))
.Columns.Add("Inicio",System.Type.GetType("System.
String")).Columns.Add("Final",
System.Type.GetType("System.String"))
.Columns.Add("Carrera",System.Type.GetType("System.
String")).Columns.Add("Ciclo",
System.Type.GetType("System.String"))
.Columns.Add("Creditos",System.Type.GetType("System.
String"))End With
Dim horarios As NewIO.StreamReader("Horarios.csv",
System.Text.Encoding.Default)
Dim aux As String = ""
Doaux = horarios.ReadLineIf aux Is Nothing Then
Exit Do
Dim columnas() As String = aux.Split(",")
Dim columna As DataRow = tabla.NewRow
columna("Codigo") = columnas(0)columna("Seccion") = columnas(1)columna("Curso") = columnas(2)columna("Tipo") = columnas(3)columna("Aula") = columnas(4)columna("Dia") = columnas(5)columna("Inicio") = columnas(6)columna("Final") = columnas(7)columna("Carrera") = columnas(8)columna("Ciclo") = columnas(9)columna("Creditos") = columnas(10)
tabla.Rows.Add(columna)Loophorarios.Close()tablaEspecialidad = tabla.DefaultView.
ToTable(True, "Carrera")cbEspecialidad.DataSource =
tablaEspecialidadcbEspecialidad.DisplayMember =
"Carrera"lstHorario.Items.Add(" 7 - 8")lstHorario.Items.Add(" 8 - 9")lstHorario.Items.Add(" 9 - 10")lstHorario.Items.Add("10 - 11")lstHorario.Items.Add("11 - 12")lstHorario.Items.Add("12 - 13")lstHorario.Items.Add("13 - 14")lstHorario.Items.Add("14 - 15")lstHorario.Items.Add("15 - 16")lstHorario.Items.Add("16 - 17")lstHorario.Items.Add("17 - 18")lstHorario.Items.Add("18 - 19")lstHorario.Items.Add("19 - 20")lstHorario.Items.Add("20 - 21")lstHorario.Items.Add("21 - 22")lstHorario.Items.Add("22 - 23")
For i = 0 To 17lstHorario.Items.Add("")
For j = 0 To 16lstHorario.Items.
Item(i).SubItems.Add("")Next
Next
For i = 0 To 10lstCursos.Items.Add("")
For j = 0 To 5lstCursos.Items.Item(i).
SubItems.Add("")Next
Next
btnQuitar.Enabled = FalseEnd Sub
Private Sub btnSalir_Click(sender As Object,e As EventArgs) Handles btnSalir.Click
IfMsgBox("Esta seguro que quiere salir?",MsgBoxStyle.OkCancel, "Salir") =
MsgBoxResult.OkThenMe.Close()
End If
End Sub
Private Sub btnSeccion_Click(sender As Object,e As EventArgs) Handles btnSeccion.Click
frmSeccion.grid1.DataSource = tablaCursotablaSeccion = tablaCurso.DefaultView.
ToTable(True, "Seccion")frmSeccion.cbSeccion.DataSource =
tablaSeccionfrmSeccion.cbSeccion.DisplayMember =
"Seccion"frmSeccion.Show()
End Sub
Private Sub cbEspecialidad_SelectedIndexChanged(sender As Object, e As
EventArgs) Handles cbEspecialidad.SelectedIndexChanged
Carrera = cbEspecialidad.TexttablaEspecialidad = filtrarTabla(tabla,
"Carrera = ’" & Carrera & "’")
End Sub
Private Sub cbCiclo_SelectedIndexChanged(sender As Object, e As EventArgs)
Handles cbCiclo.SelectedIndexChanged
Ciclo = cbCiclo.TexttablaCiclo = filtrarTabla
(tablaEspecialidad, "Ciclo = ’" &Ciclo & "’")
tablaCurso = tablaCiclo.DefaultView.ToTable(True, "Curso")
cbCurso.DataSource = tablaCursocbCurso.DisplayMember = "Curso"
End Sub
Private Sub cbCurso_SelectedIndexChanged(sender As Object, e As EventArgs)
Handles cbCurso.SelectedIndexChanged
Curso = cbCurso.TexttablaCurso = filtrarTabla(tabla, "Curso =
’" & Curso & "’")tablaSeccion = tablaCurso.DefaultView.
ToTable(True, "Seccion")frmSeccion.cbSeccion.DataSource =
tablaSeccionfrmSeccion.cbSeccion.DisplayMember =
"Seccion"
End Sub
Private Sub btnAgregar_Click(sender AsObject, e As EventArgs) Handles
btnAgregar.Click
Dim hor_ini As Integer = 0Dim hor_fin As Integer = 0Dim dia As Integer = 0Dim j As Integer = 0Dim indice As IntegerDim k, m As IntegerDim nuevo_curso As String
lstCursos.Items.Item(aux).SubItems(0).Text = tablaSeccion.Rows(0).Item(0).
ToStringlstCursos.Items.Item(aux).SubItems(1).
Text = tablaSeccion.Rows(0).Item(2).ToString
lstCursos.Items.Item(aux).SubItems(2).Text = tablaSeccion.Rows(0).Item(1).
ToStringlstCursos.Items.Item(aux).SubItems(3).
Text = tablaSeccion.Rows(0).Item(10).ToString
credito_cantidad = credito_cantidad +Val(lstCursos.Items.Item(aux).
SubItems(3).Text)txtcreditos.Text = credito_cantidad
cursos_cantidad = cursos_cantidad + 1txtCursos.Text = cursos_cantidad
aux = aux + 1indice = aux - 1
m = tablaSeccion.Rows.Count - 1
For k = 0 To mSelect Case tablaSeccion.Rows(k).
Item(5).ToString()Case "LU" dia = 1Case "MA" dia = 2Case "MI" dia = 3Case "JU" dia = 4Case "VI" dia = 5Case "SA" dia = 6
End Select
hor_ini = Int(Val(tablaSeccion.Rows(k).Item(6).ToString()) - 7)
hor_fin = Int(Val(tablaSeccion.Rows(k).Item(7).ToString()) - 8)
For j = hor_iniTohor_finIf Len(lstHorario.Items.Item(j).
SubItems(dia).ToString())> 19 Then
nuevo_curso = tablaCurso.Rows(k).Item(3).ToString()
antiguo_curso = tablaSeccion.Rows(k).Item(3).ToString}
MsgBox("CUIDADO! hay cruce: "& nuevo_curso & " y " &
antiguo_curso,MsgBoxStyle.Exclamation)
End IflstHorario.Items.Item(j).
SubItems(dia).Text =tablaSeccion.Rows(0).Item(2).ToString& " ("&tablaCurso.Rows(k).Item(3).ToString& ") "&tablaSeccion.Rows(k).Item(4).ToString
NextNext
If (Len(lstCursos.Items.Item(0).SubItems(0).ToString()) <> 19) Then
btnQuitar.Enabled = True
End If
btnAgregar.Enabled = False
End Sub
Private Sub btnQuitar_Click(sender As Object,e As EventArgs) Handles btnQuitar.Click
Dim horario_quitar As StringDim indice As IntegerDim letrascurso As IntegerDim creditoscurso As IntegerDim creditos_cantidad As String
indice = lstCursos.FocusedItem.Index
creditos_cantidad = lstCursos.Items(indice).SubItems(3).ToString()
creditoscurso = Val(Mid(creditos_cantidad,18 + 1, 1))
credito_cantidad = credito_cantidad -creditoscurso
txtcreditos.Text = credito_cantidad
horario_quitar = lstCursos.Items(indice).SubItems(1).ToString
letrascurso = Len(lstCursos.Items(indice).SubItems(1).ToString) - 19
horario_quitar = Trim(Mid(horario_quitar,18 + 1, letrascurso))For i As Integer = 0 To
lstCursos.SelectedItems.Count - 1lstCursos.SelectedItems(i).Remove()
Next
For i = 0 To 17For j = 0 To 16
If InStr(lstHorario.Items.Item(i).SubItems(j).ToString(), horario_ quitar) Then
lstHorario.Items.Item(i).SubItems(j).Text = ""
End If
NextNext
aux = aux - 1
If Len(lstCursos.Items.Item(0).SubItems(0).ToString()) = 19 Then
btnQuitar.Enabled = FalseEnd Ifcursos_cantidad = cursos_cantidad - 1txtCursos.Text = cursos_cantidad
End Sub
Private Sub btnExportarExcel_Click(senderAs Object, e As EventArgs) HandlesbtnExportarExcel.Click
objExcelApp = New Microsoft.Office.Interop.Excel.Application
objExcelApp = CreateObject("excel.application")
objExcelApp.Visible = TrueTry
objExcelApp.Visible = TrueMiLibro = objExcelApp.Workbooks.
Add(XlWBATemplate.xlWBATWorksheet)MiLibro.Worksheets.Add(,
MiLibro.Worksheets(1))MiHoja = MiLibro.Worksheets(1)MiHoja.Activate()
MiHoja.Cells(1, 1) = "Hora"MiHoja.Cells(1, 2) = "Lunes"MiHoja.Cells(1, 3) = "Martes"MiHoja.Cells(1, 4) = "Miércoles"MiHoja.Cells(1, 5) = "Jueves"MiHoja.Cells(1, 6) = "Viernes"MiHoja.Cells(1, 7) = "Sábado"MiHoja.Cells(2, 1) = "7 a 8"MiHoja.Cells(3, 1) = "8 a 9"MiHoja.Cells(4, 1) = "9 a 10"MiHoja.Cells(5, 1) = "10 a 11"MiHoja.Cells(6, 1) = "11 a 12"MiHoja.Cells(7, 1) = "12 a 13"MiHoja.Cells(8, 1) = "13 a 14"MiHoja.Cells(9, 1) = "14 a 15"MiHoja.Cells(10, 1) = "15 a 16"MiHoja.Cells(11, 1) = "16 a 17"MiHoja.Cells(12, 1) = "17 a 18"MiHoja.Cells(13, 1) = "18 a 19"MiHoja.Cells(14, 1) = "19 a 20"MiHoja.Cells(15, 1) = "20 a 21"MiHoja.Cells(16, 1) = "21 a 22"MiHoja.Cells(17, 1) = "22 a 23"
Dim i As Integer = 2
For i = 2 To 16MiHoja.Cells(i, 2) =
lstHorario.Items.Item(i -
1).SubItems(1).TextMiHoja.Cells(i, 3) = lstHorario.
Items.Item(i - 1).SubItems(2).Text
MiHoja.Cells(i, 4) = lstHorario.Items.Item(i - 1).SubItems(3).
TextMiHoja.Cells(i, 5) = lstHorario.
Items.Item(i - 1).SubItems(4).Text
MiHoja.Cells(i, 6) = lstHorario.Items.Item(i - 1).SubItems(5).
TextMiHoja.Cells(i, 7) = lstHorario.
Items.Item(i - 1).SubItems(6).Text
MiHoja.Cells(i, 8) = lstHorario.Items.Item(i - 1).SubItems(7).
TextNextCatchMsgBox(Err.Description)
End TryEnd Sub______________________________________________
Public Class frmSeccion
Private Sub btnAceptar_Click(sender As Object,e As EventArgs) Handles btnAceptar.ClickIf MsgBox("Esta seguro que desea elegir
esa seccion?", MsgBoxStyle.OkCancel,"Elegir Seccion") = MsgBoxResult.OkThenMe.Close()
End If
frmHorario.btnAgregar.Enabled = True
End Sub
Private Sub cbSeccion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbSeccion.SelectedIndexChanged
Seccion = cbSeccion.TexttablaSeccion = filtrarTabla(tablaCurso,
"Seccion = ’" &Seccion& "’")grid1.DataSource = tablaSeccionbtnAceptar.Enabled = True
End Sub
Private Sub frmSeccion_Load(sender As Object,e As EventArgs) Handles MyBase.Load
cbSeccion.Enabled = FalsebtnAceptar.Enabled = FalsecbSeccion.Enabled = True
End Sub