Está en la página 1de 149

INSTITUTO TECNOLGICO DE CIUDAD JUREZ

Desarrollo de Simulador del Mdulo de Preinscripciones para Sistemas

INFORME DE RESIDENCIA PROFESIONAL

QUE PRESENTA: Jenice Gabriela Vzquez Soria

PARA OBTENER EL TTULO DE: Ingeniera en Sistemas Computacionales

Cd. Jurez, Chihuahua

Septiembre 2011

Agradecimientos
A mis padres por darme la oportunidad de estudiar, por apoyarme y aconsejarme siempre y esforzarse tanto como yo para lograr una meta ms en mi vida. A mis amigos quienes siempre me dijeron que no me rindiera y siempre estuvieron apoyndome. A mis profesores quienes me ensearon muchas cosas como profesionistas y personas,por su tiempo, dedicacin y motivacin a seguir adelante. A mi esposo que a pesar de las dificultades me apoyo para terminar la carrera. Y principalmente a mis hijos quienes fueron da a da la fuerza que me hiciera luchar y por quienes estoy aqu. Jenice.

ndice de figuras
Figura 1.1 Organigrama ........................................................................................ 13 Figura 2.1 Tipos de modelos de Ingeniera de Software ....................................... 19 Figura 3.1 Caso de uso .......................................................................................... 40 Figura 3.2 Logo de la aplicacin ........................................................................... 42 Figura 3.3 Imgenes para identificar los botones .................................................. 42 Figura 3.4 Retcula 1 ............................................................................................. 43 Figura 3.5 Retcula 2 ............................................................................................. 43 Figura 3.6 Proceso de captura de alumnos ............................................................ 44 Figura 3.7 Proceso para generar reporte ................................................................ 45 Figura 3.8 Proceso de preinscripcin ................................................................... 46 Figura 3.9 Proceso para manejar usuarios ............................................................. 47 Figura 3.10 Proceso para la sesin ........................................................................ 48 Figura 3.11 Forma 1 .............................................................................................. 53 Figura 3.12 Forma 2 .............................................................................................. 53 Figura 3.13 Forma 3 .............................................................................................. 54 Figura 3.14 Forma 4 .............................................................................................. 54 Figura 3.15 Forma 5 .............................................................................................. 54 Figura 3.16 Forma 6 .............................................................................................. 55 Figura 3.17 Forma 7 .............................................................................................. 55 Figura 3.18 Forma 8 .............................................................................................. 55 Figura 3.19. Forma 10 ........................................................................................... 56 Figura 3.20 Forma 11 ............................................................................................ 56 Figura 3.21 Forma 12 ............................................................................................ 56 3

ndice de tablas
Tabla 2.1Comandos DDL ...................................................................................... 33 Tabla 2.2 Comandos DML .................................................................................... 33 Tabla 2.3 Clusulas .............................................................................................. 34 Tabla 3.1 Requisitos ............................................................................................. 41 Tabla 3.2 Alumno .................................................................................................. 57 Tabla 3.3 Alumno detalle ...................................................................................... 57 Tabla 3.4 Bajas ...................................................................................................... 58 Tabla 3.5 Carrera ................................................................................................... 58 Tabla 3.6 Departamento ........................................................................................ 58 Tabla 3.7 Especialidad ........................................................................................... 58 Tabla 3.8 Materias ................................................................................................. 59 Tabla 3.9 Movimiento ........................................................................................... 59 Tabla 3.10 Periodo ................................................................................................. 59 Tabla 3.11 Permiso ................................................................................................ 59 Tabla 3.12 Permisoxususario ................................................................................ 60 Tabla 3.13 Preinscripcin ..................................................................................... 60 Tabla 3.14 Reporte ................................................................................................ 60 Tabla 3.15 Semestre .............................................................................................. 61 Tabla 3.16 Status ................................................................................................... 61 Tabla 3.17 Usuario ............................................................................................... 60

Resumen
El Instituto Tecnolgico de Ciudad Jurez (ITCJ) fue creado el 3 de octubre de 1964 y en 1973 se estableci el sistema de crditos.

En la dcada de los 70 se inici el sistema semestral, que sustituy al anual y en 1973 se estableci el sistema de crditos, el cual sustituy al plan semestral.

Actualmente en el ITCJ la demanda de materias se hace al trmino del semestre, citando a los alumnos para que realicen la solicitud de materias a llevar el siguiente semestre, para despus contabilizar la demanda de materias y ver que grupos y horarios son los adecuados para ofertar, pero la falta de materias u horarios propuestos en el semestre provoca en ocasiones a los alumnos el empalme de materias o saturacin de ellas. Tambin ocasiona atrasos de materias de acuerdo al semestre que cursa, integrndose despus a grupos de primeros semestres siendo los alumnos de semestres ms avanzados.

Es por esto que se desarroll un sistema de preinscripcin que brinda la informacin necesaria para conocer las necesidades de los alumnos en cuanto los grupos a ofertar, minimizando los cambios en los horarios y grupos de las reinscripciones en las primeras semanas de inicio de clase y tambin poder cursar el semestre con las materias como se encuentran en la retcula, para terminar en el tiempo indicado. La simulacin fue hecha con una muestra de alumnos de Licenciatura en Informticaquienes requeran preparar su horario para el siguiente semestre. Con la informacin generada en los reportes ya sea por carrera o materia fue suficiente para dar una idea de en qu horarios y turno abrir materias de una forma rpida y ms acertada.

ndice temtico
Portada ............................................................................................................... i Agradecimientos ............................................................................................... ii ndice de figuras .............................................................................................. iii ndice de tablas ............................................................................................... iv Resumen .......................................................................................................... v ndice temtico ............................................................................................... vi 1. CAPTULO I: INTRODUCCIN ................................................................. 8 1.1. Antecedentes .............................................................................................. 9 1.2. Departamento de realizacin del proyecto ............................................... 12 1.3. Definicin del problema ........................................................................... 13 1.4. Justificacin .............................................................................................. 14 1.5. Objetivo .................................................................................................... 15 1.6. Metas ........................................................................................................ 16 1.7. Hiptesis o supuesto ................................................................................. 17 2. CAPTULO II: MARCO TERICO .......................................................... 18 2.1. Ingeniera de software .............................................................................. 18 2.2. Ciclo de vida............................................................................................. 20 2.3. Metodologa.............................................................................................. 23 2.4. Lenguaje de programacin ....................................................................... 29 2.4.1. Visual C# .......................................................................................... 29 2.5. Bases de datos .......................................................................................... 31 2.5.1. SQL .................................................................................................. 31

2.5.2. MySQL ............................................................................................. 34 3. CAPTULO III. DESARROLLO DE LA INVESTIGACIN ................. 35 3.1. Introduccin.............................................................................................. 35 3.2. Cronograma .............................................................................................. 36 3.3. Descripcin de actividades ....................................................................... 37 3.3.1. Determinacin de requerimientos .................................................... 37 3.3.2. Anlisis de requerimientos ............................................................... 38 3.3.2.1. Caractersticas de los usuarios ................................................ 39 3.3.2.2. Requisitos especficos ............................................................. 40 3.3.3. Documentos de Diseo..................................................................... 41 3.3.4. Codificacin ..................................................................................... 52 3.3.5. Presentacin de avance..................................................................... 62 3.3.6. Revisin de requisitos y planificacin ............................................. 62 3.3.7. Validacin de cdigo y diseo final ................................................. 62 3.3.8. Pruebas y correcciones ..................................................................... 62 3.3.9. Entrega del sistema........................................................................... 63 4. CAPTULO IV: RESULTADOS OBTENIDOS ........................................ 64 4.1. Resultados obtenidos ................................................................................ 64 4.2. Conclusiones generales ............................................................................ 64 5. Fuentes consultadas ......................................................................................... 65 6. Glosario .......................................................................................................... 66 7. ANEXOS ........................................................................................................ 69 8. ANEXO 1: MANUAL DE USUARIO 9. ANEXO 2: MANUAL TCNICO 7

CAPTULO I: INTRODUCCIN

El objetivo principal de este proyecto es obtener de una forma rpida y ms acertada la programacin de materias que se ofertan al alumnado del departamento de sistemas computacionales por medio del desarrollo de un sistema que simular la preinscripcin. Dicho sistema dar como resultado la agilizacin del proceso de preinscripcin y minimizar cambios y cancelaciones.

1.1

Antecedentes

La educacin tecnolgica en el antiguo Paso del Norte se remonta a la fundacin de la Escuela Tcnica Industrial nmero 5 en 1935 a iniciativa del Prof. Alberto lvarez y lvarez.

Posteriormente cambi su nombre por el de Escuela de Enseanzas Especiales nmero 21 y ya, en su cuarta y ltima etapa, se transform en la Escuela Tcnica Industrial y Comercial.

El ITCJ fue creado el 3 de octubre de 1964, sin embargo, ste vino a sustituir al Instituto Tecnolgico Regional (ITR), Nmero 11, que a su vez sustituy a la Escuela Tcnica Industrial y Comercial N 21.

En 1960 el Presidente Adolfo Lpez Mateos prometi que creara el Instituto Tecnolgico tomando en consideracin que la Ciudad requera de tcnicos cada vez ms especializados para su incipiente industria. Adems, la poblacin urbana se haba incrementado a 276,995 habitantes.

Resuelta favorablemente la solicitud del profesor Ramn Rivera Lara, que luego fuera el primer director, el Ayuntamiento cedi a la Federacin el edificio del reformatorio juvenil, mismo que fue ocupado por el Instituto Tecnolgico Regional nmero 11 en 1964.

En 1966 empez a impartirse la primera carrera profesional, que fue la de Contador Pblico y Auditor, seguida un ao despus por la de Ingeniera Industrial, con 53 estudiantes.

As, en septiembre de 1967 abri la matrcula para la carrera de Ingeniera Industrial, con especialidades en Mecnica, Elctrica, Electrnica y Produccin. 9

En la dcada de los 70 se inici el sistema semestral, que sustituy al anual, con la tercera carrera profesional, Administracin de Empresas, y con la primera generacin de egresados de licenciatura.

En 1973 se estableci el sistema de crditos, el cual sustituy al plan semestral y se pusieron en servicio los edificios Administrativo, el del Laboratorio de Produccin y de la Cafetera. Dos aos ms tarde comenz el posgrado, inaugurndose el edificio del Centro de Graduados.

La forma en la actualidad de realizar las preinscripciones en el rea sistemas es al trmino de cada semestre, citando a los alumnos para que ellos realicen la solicitud de materias a llevar el siguiente semestre de forma manual, entregando los reportes a las coordinadoras de carrera para ellas despus contabilizar la demanda de materias y ver que grupos y horarios son los adecuados para ofertar. Los problemas que ocurran era que la planeacin de materias y horarios ofertados no eran adecuadas. Provocando empalmes y saturacines de materias y como consecuencia, atraso en las materias a las que se inscriben los alumnos.

10

Misin del ITCJ


Formar profesionistas especialistas e investigadores capaces de crear, innovar, y aplicar conocimientos para el bien comn y el mejoramiento de la calidad de vida basada en valores fundamentales para una convivencia solidaria.

Visin del ITCJ


El Instituto Tecnolgico de ciudad Jurez ser una institucin de excelencia educativa de nivel superior dinmicamente acreditada, que ofrezca educacin tecnolgica de punta y contribuya al desarrollo sustentable.

Poltica de calidad del ITCJ


La organizacin establece el compromiso de implementar todos sus procesos orientndolos hacia la satisfaccin de sus alumnos sustentada en la calidad del proceso educativo, para cumplir con sus requerimientos mediante la eficacia de un sistema de gestin de la calidad y de mejora continua, conforme la norma ISO9001-2000/NMX-CC-9001-IMMNC-200.

El instituto cuenta con varios departamentos como vinculacin, administracin, sistemas computacionales, idiomas, industrial, entre otros pero en los que se estar realizando el proyecto es en los departamentos tanto en el de econmico administrativo como en el centro de cmputo en donde se pretende obtener un mejor desempeo y servicio.

11

1.2 Departamento de realizacin del Proyecto


El departamento de sistemas computacionales se encuentra dentro del Instituto Tecnolgico de Ciudad Jurez que se encuentra ubicado en la Av. Tecnolgico #1340 Frac. El crucero.

Organigrama Ing. Margarita Bailn Estrada


Jefe de Departamento

Lic. Hctor Snchez Snchez


Jefe de Laboratorio

Mara del Carmen Martnez Daz


Residente

Jenice Gabriela Vzquez Soria


Residente

Figura 1.1. Organigrama.

12

1.3 Definicin del problema


En el departamento de Sistemas y Computacin del ITCJ la planeacin de materias y horarios ofertados no ha sido adecuada. Esto a provocado empalme y saturacin de materias y en consecuencia, atraso en las materias a las que se inscriben los alumnos.

13

1.4 Justificacin
El proyecto tiene como finalidad el ofrecer las opciones de grupos a los cuales los alumnos se puedan inscribir ms de acuerdo a sus necesidades reales haciendo el proceso de inscripcin ms gil y sin necesidad de hacer grandes cambios de ltima hora como el cerrar o abrir grupos, adems de dar la ventaja de comenzar con las clases regulares ms rpido.

Los beneficiados con el proyecto sern tanto alumnos como docentes ya que los alumnos desde el inicio tendrn un horario conveniente y los docentes no tendrn que aceptar nuevos grupos, sobrecupos o cancelaciones. Adems de ser menos el trabajo en coordinacin en las primeras semanas del semestre que se utilizan para las inconformidades y dudas de los alumnos.

14

1.5 Objetivo

Desarrollo de un sistema de preinscripcin que brinde la informacin necesaria para conocer las necesidades de los alumnos en cuanto los grupos a ofertar, todo esto presentado con una interfaz agradable y fcil de utilizar.

15

1.6 Metas

Ofrecer a los alumnos grupos ms acordes a sus necesidades. Minimizar los cambios en los horarios y grupos de las reinscripciones en las primeras semanas de inicio de clase.

Que los alumnos cuenten con horarios disponibles de las materias que le corresponden cursar segn el orden de la reticula, para terminar en el tiempo indicado.

16

1.7 Hiptesis o supuesto


El sistema de preinscripcin facilitar el mtodo de reinscripcin actual al dar a conocer la demanda de materias real que el alumno necesita.

El sistema ahorrar tiempo y trabajo de alumnos, coordinadores de carrera as como docentes del instituto, evitando las filas al inicio de clases en departamento de sistemas, teniendo mayor tiempo de resolver otros problemas que se originen en el periodo en curso.

El proyecto aporta al personal administrativo la informacin necesaria para abrir o cerrar grupos, as como buscar profesores antes de que el periodo de clases comience y evitar la prdida de clases en los primeros das del semestre.

La informacin generada por el sistema resolver las situaciones de sobrecupo, adems de permitir al alumno tomar clases ms acorde a sus necesidades.

17

CAPTULO II: MARCO TERICO


2.1 Ingeniera de software

La ingeniera de software es la disciplina tecnolgica y administrativa dedicada a la produccin sistemtica de productos de programacin, que son desarrollados y modificados a tiempo y dentro de un presupuesto definido.

Los objetivos de la ingeniera de software son:

Mejorar la calidad de los productos de software Aumentar la productividad y trabajo de los ingenieros del software. Facilitar el control del proceso de desarrollo de software. Suministrar a los desarrolladores las bases para construir software de alta calidad en una forma eficiente.

Definir una disciplina que garantice la produccin y el mantenimiento de los productos software desarrollados en el plazo fijado y dentro del costo estimado.

Figura 2.1Tipos de modelos de Ingeniera de software 18

El quehacer de la ingeniera de software se desarrolla dentro del contexto organizacional de una empresa, por lo que necesita un alto grado de comunicacin entre los clientes, administradores, ingenieros de programacin, ingenieros de computacin y dems tcnicos.

Por lo tanto, la ingeniera de software requiere la gestin de proyectos para que se pueda desarrollar una aplicacin en el plazo previsto y con el presupuesto establecido que sea satisfactoria para el cliente (el concepto de calidad).

19

2.2 Ciclo de vida


El mtodo del ciclo de vida para desarrollo de sistemas es el conjunto de actividades que los analistas, diseadores y usuarios realizan para desarrollar e implantar un sistema de informacin.

El mtodo del ciclo de vida para el desarrollo de sistemas consta de las siguientes actividades:

1) Investigacin preliminar

La solicitud para recibir ayuda de un sistema de informacin pueden originarse por una persona, cuando se formula la solicitud comienza la primera actividad del sistema.

Despus de aprobar la solicitud de un proyecto se estima su costo, el tiempo necesario para terminarlo y las necesidades de personal

2. Determinacin de los requisitos del sistema.

Los analistas, al trabajar con los empleados y administradores, deben estudiar los procesosde una empresa para dar respuesta a ciertas preguntas claves.

Reunidos los detalles, los analistas estudian los datos sobre requerimientos con la finalidad de identificar las caractersticas que debe tener el nuevo sistema.

20

3. Diseo lgico del sistema

El diseo de un sistema de informacin responde a la forma en la que el sistema cumplir con los requerimientos identificados durante la fase de anlisis.

Se indican los datos de entrada, los que sern calculados y los que deben ser almacenados. Los diseadores seleccionan las estructuras de archivo y los dispositivos de almacenamiento. Los procedimientos que se escriben indican cmo procesar los datos y producir salidas.

4. Desarrollo de software (diseo fsico).

Los encargados de desarrollar software pueden instalar software comprado a terceros o escribir programas diseados a la medida del solicitante. Los programadores son responsables de la documentacin de los programas y de explicar su codificacin, esta documentacin es esencial para probar el programay hacer el mantenimiento.

5. Prueba de sistemas.

Durante esta fase, el sistema se emplea de manera experimental para asegurarse que el software no tenga fallas, es decir, que funciona de acuerdo con las especificaciones y en la forma en que los usuarios esperan que lo haga. Se alimentan como entradas conjuntosde datos de prueba para su procesamiento y despus se examinan los resultados.

6. Implantacin y evaluacin.

La implantacin es el proceso de verificar e instalar nuevo equipo, entrenar a los usuarios, instalar la aplicacin y construir todos los archivos de datos necesarios para utilizarla. 21

Los sistemas de informacin deben mantenerse siempre al da, la implantacin es un proceso de constante evolucin.

La evaluacin de un sistema se lleva a cabo para identificar puntos dbiles y fuertes. La evaluacin ocurre a lo largo de: evaluacin operacional, impacto organizacional, desempeo del desarrollo.

22

2.3 Metodologa
Programacin extrema

Algunas bases de la programacin extrema

En la programacin extrema se da por supuesto que es imposible prever todo antes de empezar a codificar. Es imposible capturar todos los requisitos del sistema, saber qu es todo lo que tiene que hacer ni hacer un diseo correcto al principio.

La idea de la programacin extrema consiste en que el proyecto se encuentre en desarrollo la mayor parte del tiempo, programando en parejas y trabajar estrechamente con el cliente, hacindole mini-versiones con mucha frecuencia (cada dos semanas). En cada mini-versin se debe hacer el mnimo de cdigo y lo ms simple posible para que funcione correctamente. El diseo se hace sobre la marcha, haciendo un mini-diseo para la primera mini-versin y luego modificndolo en las siguientes mini-versiones. Adems, no hay que hacer una documentacin para el diseo, no hay mejor documentacin que el mismo cdigo. El cdigo, por tanto, tambin se modifica continuamente de mini-versin en miniversin, aadindole funcionalidad y extrayendo sus partes comunes.

Los pasos a seguir en un proyecto

En un proyecto usando programacin extrema se siguen ms o menos los siguientes pasos:

El cliente junto al equipo de desarrollo definen qu es lo que se quiere hacer. Para ello utilizan las "historias de usuario". Una historia de usuario en un texto de una o dos frases en las que se dice algo que debe hacer el sistema. Es ms extensa que un

23

requisito (que suele ser una frase corta) y menos que un caso de uso (que puede ser de una o dos pginas). Se evala para cada historia de usuario el tiempo que puede llevar, que debe ser corto, de aproximadamente una semana. Un programador puede estimar con cierta fiabilidad un trabajo que le lleve unos das, pero la estimacin es menos fiable si es de un plazo superior a una semana. Si es ms largo, hay que partir la historia en otras ms pequeas. Luego se ordenan en el orden en que se van a desarrollar y se establecen las mini-versiones, de forma que cada mini-versin implementa varias de las historias de usuario.

Toda esta planificacin va a ser, por supuesto, inexacta. No se puede saber todo lo que va a ser necesario ni evaluar los tiempos correctamente. La planificacin deber revisarse y modificarse continuamente a lo largo del proyecto. Las historias de usuario se modificarn, se quitarn o se aadirn nuevas sobre la marcha. Puesto que el cliente estar presente da a da durante todo el proyecto, ver el efecto y el esfuerzo necesario para las modificaciones pedidas y sabr evaluar si merecen o no la pena.

Para las primeras historias que se van a implementar, se define una prueba para ver si la versin cumple perfectamente con la historia. Estas pruebas deben ser automticas, de forma que haya un programa de pruebas que ejecutemos y nos diga si la mini-versin es o no correcta.

Justificacin de trabajo en pareja

Los programadores se ponen por parejas (dos personas en el mismo ordenador) para codificar esas historias. Primero codifican el programa de pruebas y ven que falla. Luego piensan cmo van a implementar la historia y hacen sus propios programas de prueba 24

(tambin automticos). Codifican sus programas de prueba y ven que tambin fallan. Luego se ponen a codificar hasta que se pasen con xito todas las pruebas. En su cdigo hacen de la forma ms sencilla posible lo mnimo imprescindible para que se pasen las pruebas automticas.

Las parejas de programadores se intercambian con frecuencia, de forma que todos acaban trabajando con todos. El trabajo por parejas haciendo intercambios tiene las siguientes ventajas:

Cuatro ojos ven ms que dos. Al trabajar de dos en dos, el cdigo ser de mayor calidad desde el mismo momento de crearlo y tendr menos fallos.

Los programadores novatos aprendern de los expertos al emparejarse con ellos.

Si una pareja realiza un trozo de cdigo susceptible de ser reutilizado en el proyecto, hay dos programadores que lo saben y que lo reutilizarn cuando puedan (ya que saben cmo funciona), ensendolo a sus nuevos compaeros. De esta manera el conocimiento del cdigo ya hecho se propaga de forma natural entre todos los programadores del equipo.

El estilo de programacin tiende a unificarse.

Cuando una nueva pareja va a realizar un nuevo cdigo para una historia de usuario, puede que uno de ellos recuerde haber hecho un trozo de cdigo en otro lado que podra reutilizar. Esta pareja ir a ese trozo de cdigo y lo reutilizar, modificndolo si es necesario. Despus de modificarlo, deben asegurarse que se siguen pasando las pruebas automticas que se hicieron en su momento, as como aadir nuevas pruebas para comprobar las modificaciones que han hecho. 25

Si una pareja al reutilizar cdigo ya hecho ve que es mejorable, lo mejoran, pasando las pruebas automticas despus. Si al reutilizar el cdigo ya hecho descubren un error que las pruebas automticas no detectan, aaden pruebas capaces de detectar el error y lo corrigen.

El cdigo, por tanto, no es de nadie. Cualquier pareja puede tocar el cdigo ya hecho por otras personas si lo necesita, con la condicin de que despus de tocarlo las pruebas automticas sigan pasndose correctamente y que aadan sus propias pruebas automticas para las correcciones realizadas.

Todos los das se hace una pequea reunin a primera hora de la maana con todo el equipo en la que se comentan problemas, cdigo que se est realizando, historias de usuario terminadas, etc.

Cada vez que se consigue codificar y que funcione una historia de usuario, se le da al cliente para que la vea, la pruebe y aada las posibles modificaciones para las siguientes mini-versiones. Cuando se realiza un mini-versin completa (compuesta por varias de las historias de usuario), incluso se entrega al usuario final para que empiece a trabajar con ella y reportar incidencias o mejoras.

Este ciclo se va repitiendo una y otra vez hasta que el cliente se d por satisfecho y cierre el proyecto.

Prcticas bsicas de la programacin extrema

Para que todo esto funcione, la programacin extrema se basa en trece "prcticas bsicas" que deben seguirse al pie de la letra.

26

Equipo completo: Forman parte del equipo todas las personas que tienen algo que ver con el proyecto, incluido el cliente y el responsable del proyecto.

Planificacin: Se hacen las historias de usuario y se planifica en qu orden se van a hacer y las mini-versiones. La planificacin se revisa continuamente.

Test del cliente: El cliente, con la ayuda de los desarrolladores, propone sus propias pruebas para validar las mini-versiones.

Versiones pequeas: Las mini-versiones deben ser lo suficientemente pequeas como para poder hacer una cada pocas semanas. Deben ser versiones que ofrezcan algo til al usuario final y no trozos de cdigo que no pueda ver funcionando.

Diseo simple: Hacer siempre lo mnimo imprescindible de la forma ms sencilla posible. Mantener siempre sencillo el cdigo.

Pareja de programadores: Los programadores trabajan por parejas (dos delante del mismo ordenador) y se intercambian las parejas con frecuencia (un cambio diario).

Desarrollo guiado por las pruebas automticas: Se deben realizar programas de prueba automtica y deben ejecutarse con mucha frecuencia. Cuantas ms pruebas se hagan, mejor.

Mejora del diseo: Mientras se codifica, debe mejorarse el cdigo ya hecho con el que nos crucemos y que sea susceptible de ser mejorado. Extraer funcionalidades comunes, eliminar lneas de cdigo innecesarias, etc.

Integracin continua: Deben tenerse siempre un ejecutable del proyecto que funcione y en cuanto se tenga una nueva pequea funcionalidad, debe recompilarse y probarse. Es un error mantener una versin congelada dos meses mientras se

27

hacen mejoras y luego integrarlas todas de golpe. Cuando falle algo, no se sabe qu es lo que falla de todo lo que hemos metido. El cdigo es de todos: Cualquiera puede y debe tocar y conocer cualquier parte del cdigo. Para eso se hacen las pruebas automticas. Normas de codificacin: Debe haber un estilo comn de codificacin (no importa cul), de forma que parezca que ha sido realizado por una nica persona. Metforas: Hay que buscar unas frases o nombres que definan cmo funcionan las distintas partes del programa, de forma que slo con los nombres se pueda uno hacer una idea de qu es lo que hace cada parte del programa. Un ejemplo claro es el "recolector de basura" de java. Ayuda a que todos los programadores (y el cliente) sepan de qu estamos hablando y que no haya mal entendidos. Ritmo sostenible: Se debe trabajar a un ritmo que se pueda mantener indefinidamente. Esto quiere decir que no debe haber das muertos en que no se sabe qu hacer y que no se deben hacer un exceso de horas otros das. Al tener claro semana a semana lo que debe hacerse, hay que trabajar duro en ello para conseguir el objetivo cercano de terminar una historia de usuario o mini-versin.

28

2.4 Lenguaje de programacin

Un lenguaje de programacin es aquel elemento dentro de la informtica que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis; que pone a disposicin del programador para que este pueda comunicarse con los dispositivos hardware y software existentes.

El programador es el encargado de utilizar un lenguaje de programacin para crear un conjunto de instrucciones que, al final, constituir un programa o subprograma informtico.

Los lenguajes de programacin pueden clasificarse segn el paradigma que usan en: procedimentales, orientados a objetos, funcionales, lgicos, hbridos, etc.

Son ejemplos de lenguajes de programacin: php, prolog, ASP, ActionScript, ada, python, pascal, c, basic, JAVA, JavaScript, etc.

2.4.1 Lenguaje Visual C#

Microsoft C# es un nuevo lenguaje de programacin diseado para crear un amplio nmero de aplicaciones empresariales que se ejecutan en .NET Framework. Supone una evolucin de Microsoft C y Microsoft C++; es sencillo, moderno, proporciona seguridad de tipos y est orientado a objetos. El cdigo creado mediante C# se compila como cdigo administrado, lo cual significa que se beneficia de los servicios de Common Language Runtime.

C# se presenta como Visual C# en el conjunto de programas Visual Studio .NET. Visual C# utiliza plantillas de proyecto, diseadores, pginas de propiedades, asistentes de cdigo, 29

un modelo de objetos y otras caractersticas del entorno de desarrollo. La biblioteca para programar en Visual C# es .NET Framework.

C# es un lenguaje orientado a objetos simple, elegante y con seguridad en el tratamiento de tipos, que permite a los programadores de aplicaciones empresariales crear una gran variedad de aplicaciones.

C# tambin proporciona la capacidad de generar componentes de sistema duraderos en virtud de las siguientes caractersticas:

Total compatibilidad entre COM y plataforma para integracin de cdigo existente. Gran robustez, gracias a la recoleccin de elementos no utilizados (liberacin de memoria) y a la seguridad en el tratamiento de tipos.

Seguridad implementada por medio de mecanismos de confianza intrnsecos del cdigo.

Plena compatibilidad con conceptos de metadatos extensibles.

Adems, es posible interaccionar con otros lenguajes, entre plataformas distintas, y con datos heredados, en virtud de las siguientes caractersticas:

Plena interoperabilidad por medio de los servicios de COM+ 1.0 y .NET Framework con un acceso limitado basado en bibliotecas.

Compatibilidad con XML para interaccin con componentes basados en tecnologa Web.

Capacidad de control de versiones para facilitar la administracin y la implementacin. 30

2.5 Bases de Datos


Una base de datos es una coleccin de informacin organizada de forma que un programa de ordenador pueda seleccionar rpidamente los fragmentos de datos que necesite. Una base de datos es un sistema de archivos electrnico.

Las bases de datos tradicionales se organizan por campos, registros y archivos. Un campo es una pieza nica de informacin; un registro es un sistema completo de campos; y un archivo es una coleccin de registros. Por ejemplo, una gua de telfono es anloga a un archivo. Contiene una lista de registros, cada uno de los cuales consiste en tres campos: nombre, direccin, y nmero de telfono.

A veces se utiliza DB, de database en ingls, para referirse a las bases de datos.

2.5.1 SQL

El lenguaje de consulta estructurado (SQL)es un lenguaje de base de datos normalizado. Es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en stas. Una de sus caractersticas es el manejo del lgebra y el clculo relacional permitiendo efectuar consultas con el fin de recuperar -de una forma sencilla- informacin de inters de una base de datos, as como tambin hacer cambios sobre ella. A travs de SQLse para manipular bases de datos remotas cliente servidor.

31

Componentes del SQL

El lenguaje SQL est compuesto por comandos, clusulas, operadoresy funciones de agregado. Estos elementos se combinan en las instrucciones paracrear, actualizar y manipular las bases de datos.

Existendos tipos de comandos SQL: losDLL que permiten crear y definir nuevas bases de datos, campos e ndices y los DML que permiten generar consultas para ordenar, filtrar y extraer datosde la base de datos.

Tabla 2.1 Comandos DLL

Comando Descripcin Utilizado para crear nuevas tablas, campos CREATE e ndices DROP Empleado para eliminar tablas e ndices Utilizado para modificar las tablas agregando ALTER campos o cambiando la definicin de los campos.

Tabla 2.2 Comandos DML

Comando Descripcin Utilizado SELECT para consultar registros de la base de datos que satisfagan un criterio determinado

32

Utilizado INSERT para cargar lotes de datos en la base de datos en una nica operacin. Utilizado UPDATE para modificar los valores de los campos y registros especificados Utilizado DELETE para eliminar registros de una tabla de una base de datos

Clusulas

Las clusulas son condiciones de modificacin utilizadas paradefinir los datos que desea seleccionar o manipular.

Tabla 2.3. Clusulas

Comando

Descripcin Utilizada para especificar la tabla de la cual se van a seleccionar los

FROM registros Utilizada para especificar las condiciones que deben reunir los registros WHERE que se van a seleccionar GROUP BY Utilizada para separar los registros seleccionados en grupos especficos HAVING Utilizada para expresar la condicin que debe satisfacer cada grupo Utilizada para ordenar los registros seleccionados de acuerdo con un ORDER BY orden especfico

33

2.5.2 MySQL

El sistema de base de datos operacional MySQL es hoy en da uno de los ms importantes en lo que hace al diseo y programacin de base de datos de tipo relacional. El programa MySQL se usa como servidor a travs del cual pueden conectarse mltiples usuarios y utilizarlo al mismo tiempo.

La historia del MySQL (cuya sigla en ingls se traslada a My Structured Query Language o Lenguaje de Consulta Estructurado) se remite a principios de la dcada de 1980. Programadores de IBM lo desarrollaron para contar con un cdigo de programacin que permitiera generar mltiples y extendidas bases de datos para empresas y organizaciones de diferente tipo. Desde esta poca numerosas versiones han surgido y muchas de ellas fueron de gran importancia. Hoy en da MySQL es desarrollado por la empresa Sun Mycrosystems.

Una de las caractersticas ms interesantes de MySQL es que permite recurrir a bases de datos multiusuario a travs de la web y en diferentes lenguajes de programacin que se adaptan a diferentes necesidades y requerimientos. Por otro lado, MySQL es conocida por desarrollar alta velocidad en la bsqueda de datos e informacin, a diferencia de sistemas anteriores. Las plataformas que utiliza son de variado tipo y entre ellas podemos mencionar LAMP, MAMP, SAMP, BAMP y WAMP (aplicables a Mac, Windows, Linux, BSD, Open Solaris, Perl y Phyton entre otras).

34

3. CAPTULO III: DESARROLLO DE LA INVESTIGACIN


3.1. Introduccin
Para desarrollar el proyecto se hizo un anlisis de la situacin actual, con entrevistas con la coordinadora de carrera del departamento de sistemas con el fin de proporcionarnos los requerimientos y cumplir con sus expectativas.

Ya que se tena el anlisis se tom la decisin de desarrollar el proyecto con el lenguaje de programacin Visual C# versin 2010, este programa cuenta con todo lo necesario para el desarrollo de este programa, y para el manejo de la base de datos se us el programa de MySQL y SQL Server 6.0.

Una vez programado el sistema se agreg en el cdigo fuente validaciones para establecer restricciones como tipo de dato a introducir, numero de caracteres permitidos y materias disponibles segn los crditos permitidos a la situacin escolar del alumno, basndonos en el reglamento de la institucin.

Se efectuaron pruebas del sistema introduciendo datos correctos e incorrectos para probar la validacin. Una vez probado el sistema sin que arrojara algn error se entreg a la coordinadora de carrera para que lo implementara en la preinscripcin.

Cada una de las actividades se program en un tiempo fijo para tener un plan de trabajo y cumplir las actividades en el tiempo estipulado. Esto qued plasmado en el cronograma de actividades.

3.2. Introduccin
35

3.2. Cronograma

Actividad 1. Determinacin de requerimientos


TE TR

Agosto 1 2

Septiembre 1 2 3

Octubre 1 2 3

Noviembre 1 2 3

Diciembre 1 2

2. Anlisis de requerimientos

TE TR

3. Documentos de diseo

TE TR

4. Codificacin

TE TR

5. Presentacin de avance

TE TR

6. Revisin de requisitos y planificacin

TE TR

7. Validacin de cdigo y diseo final

TE TR

8. Pruebas y correcciones

TE TR

9. Entrega del sistema

TE TR

3.3. Descripcin de actividades 3.3.1. Determinacin de requerimientos


Despues de definir la problemtica presente y establecer las causas que ameritan de un nuevo sistema, es pertinente realizar un estudio de factibilidad para determinar los beneficios y el grado de aceptacin de la propuesta en el departamento de sistemas.

Evaluando el hardware existente, la institucin no requiri realizar inversin inicial para la adquisicin de nuevos equipos ni actualizar los existentes, ya que los mismos satisfacen los requerimientos establecidos para el sistema. Tambien cuenta con todas las aplicaciones que emplearon para el desarrollo del proyecto y funcionamiento del sistema, lo cual no amerita inversin alguna.

Los beneficios del sistema propuesto est orientado a mejorar el control y velocidad del proceso del sistema actual, haciendo nfasis en que la propuesta o represento ninguna inversin a la Institucin.

Entre los beneficios se pueden incluir:

Ofrecer a los alumnos grupos ms acordes a sus necesidades. Minimizar los cambios en los horarios y grupos de las reinscripciones en las primeras semanas de inicio de clase.

Que los alumnos cuenten con horarios disponibles de las materias que le corresponden cursar segn el orden de la reticula, para terminar en el tiempo indicado.

Basndose en entrevistas y conversaciones sostenidas con la coordinadora de carrera del departamento de sistemas y alumnado de Licenciatura en Informtica se demostr que estos no representan ninguna oposicin al cambio, por lo que el sistema es factible operacionalmente.

Se estudi del sistema actual a fin de conocer cmo trabaja y donde debe mejorarse el procedimiento de la preinscripcin, dado que no se conoca a la perfeccin el funcionamiento del sistema era necesario entrevistarnos con la coordinadora de carrera del departamento de sistemas y recibir informacin de quien est en operacin con l, aportando las necesidades y actividades del proceso de preinscripcin.

3.3.2. Anlisis de requerimientos


Se estudiaron los requerimientos para verificar cuales son las necesidades que se tenan y lo que esperaran del proyecto. Se hizo un enfoque y solucionaron las deficiencias que los requerimientos puedan presentar. Se realiz una revisin al reglamento para una mejor recopilacin de restricciones.Se tomaron todas las notas necesarias con la mayor cantidad de detalles posibles para definir lo que se necesita en el sistema a desarrollar.

Se determinaron estor requerimientos entre otros:

Contar con una base de datos con la informacin del alumo. Mostrar de una forma amigable y sencilla el avance del alumno con la estructura de su reticula correspondiente para una fcil comprensin de su situacin escolar.

Restricciones para el alumno en el momento de elegir las materias segn los crditos permitidos por su situacin escolar actual. 38

Permisos para los diferentes tipos de usuarios que utilizaran el sistema. Reportes para los jefes de departamento, coordinadores y personal involucrado en el proceso de preinscripciones.

Con la finalidad de garantizar el buen funcionamiento del sistema y que impacte de forma positiva a los usuarios, el mismo se desarrollar presentando una interfaz amigable, de fcil manejo y comprensin.

3.3.2.1. Caractersticas de los usuarios


Las personas que utilizarn esta aplicacin son los coordinadores de carrera, jefes de departamento y auxiliares de esta rea. A cada uno de ellos se le crea un usuario limitndolos a realizar solo algunas actividades o todas siendo el administrador del sistema.

Figura 3.1Caso de uso 39

3.3.2.2. Requisitos especficos


4. Una vez hecha varias entrevistas con la coordinadora de carrera quien es la encargada de realizar el procedimiento de preinscripcin, se hizo una lista de las requisitos que se deben cubrir en la aplicacin a desarrollar, misma aprobada por ella.

REQUISITOS Realizar inicio/cierre de sesin validando los usuarios y contraseas. Poder configurar el sistema para usarse de forma local o con conexin a un servidor. Administrar usuarios que usaran el sistema, crear, actualizar o borrar. Tener control de los movimientos realizados con fecha y por quien. Tener la capacidad de importar la base de datos o exportarla. Realizar la captura de nuevos alumnos o modificarlos. Realizar el proceso de preinscripcin Generar los reportes con los datos almacenados

5. Tabla 3.2. Requisitos. 6.

40

6.1.1. Documentos de diseo


Documentos de diseo

Se gener un documento el cual fue la base para la codificacin del programa y la base de datos, integrando a este diagrama de flujo de datos.

Actividades que se pondrn en el men principal:


Captura de alumnos Realizar preinscripciones Imprimir reportes Manejar las bases de datos

Control de usuarios Configuracin

Cerrar sesin

Imgenes que darn presentacin a la aplicacin:

Figura 3. 3.2Logo de la aplicacin

Figura 3.3 Imgenes para identificar los botones ara

41

Retcula de la carrera de Licenciatura en Informtica:

Figura 3.4 Retcula 1

Figura 3.5 Retcula 2 42

Realizar captura de alumnos. El proceso de captura de alumnos ser el siguiente:

Inicio

Agregar alumno

No
Agregar

Modificar alumno

Si Num control Nombre Carrera Semestre Promedio Especialidad Retcula Si Status de la materia No
Modificar

Borrar alumno

Si No Borrar

No
Guardar

Si
Fin

Figura 3.6 Proceso de captura de alumnos

43

Generar reporte

El proceso para generar el reporte ser:

Inicio

Reporte

No
Materia

No Carrera

Si Si Seleccionar carrera

Seleccionar materia

Generar reporte

Imprimir reporte

Fin

Figura 3.7 Proceso para generar reporte 44

Realizar el proceso de preinscripcin

El proceso de preinscripcin se realizar de la siguiente manera:

Figura 3.8 Proceso de preinscripcin 45

Control de usuarios

El proceso para manejar usuarios es:

Inicio

Usuarios No Modificar Borrar Si Si No Datos Usuario Si Nombre Correo rea Password No Datos No Si

No Nuevo

Modificar contrasea

Agregar permisos

Si Contrasea

Permisos Si No Guardar No

Permisos

Fin

Figura 3.9 Proceso para manejar usuarios 46

Sesin

El proceso para la sesin

Inicio

Iniciar sesin

Usuario Password

Validar

No
Correcto

Si

Cualquier men

Fin

Figura 3.10 Proceso para la sesin

47

Asignar permisos a usuarios

Los permisos necesarios para asignar segn sea el usuario son:

Agregar alumno Borrar alumno Modificar alumno Buscar alumno Ver retcula Modificar retcula

Capturar calificaciones Preinscribir alumno Ver reporte Imprimir reporte Exportar reporte

Importar BDD Exportar BDD Configuracin Administrar usuarios Ver movimientos

Alumnos:

Caractersticas de los alumnos:

Nombre, nmero de control, semestre, carrera, periodo, promedio, materias, especialidad.

La situacin de alumno ser:

Alumno regular Alumno irregular: de repeticin, con especial.

Usuarios

Las caractersticas de los usuarios sern:

Usuario, nombre, password, departamento al que pertenecen, y correo electrnico status en el sistema.

La contrasea deber ser almacenada en la base de datos encriptada.

48

Cada uno poseer permisos con los que podr trabajar en el sistema como realizar consulta, modificar, crear o borrar.

Materias

Las caractersticas de las materias sern:

Clave de la materia, nombre, crditos, carrera a la que pertenecen, calificacin, status, forma de acreditacin, prerrequisito, optativa, especialidad.

Cada alumno tendr sus materias para registrar los datos.

Restricciones para el inicio de sesin

Solo podr acceder a la aplicacin los usuarios que estn activos. Se validar la contrasea y usuario con los datos guardados en la base de datos. Mostrar mensaje de error en caso de que alguno de los puntos anteriores no se cumpla para iniciar de nuevo el procedimiento.

Restricciones para la captura

Podr acceder a la captura el usuario que tenga este permiso. Se tendr la posibilidad de dar de visualizar, dar de alta, modificar o borrar algn alumno segn los permisos asignados al usuario.

Los campos de captura estarn validados siendo de la siguiente forma: o Nmero de control no ms de 8 caracteres numricos. o Semestre. Solo nmeros no ms de 2. o Promedio. Dos nmeros enteros y dos decimales. 49

o Carrera. Solo Licenciatura en Informtica plan 7, Ingeniera en Sistemas Computacionales plan 6 y 26. o Especialidad. Redes, Bases de datos u otra. o Periodo. Enero-junio, agosto-diciembre o Materias. Clave de la materia, nombre, el estatus de las materias, calificacin y modo de aprobacin

Restricciones para la preinscripcin

La carga mnima es de 32 crditos, la mxima ser de 64 crditos. Podr tomar un mximo de 8 materias. Deber tomar las materias de acuerdo al semestre que cursa, sin poder adelantar materias de 2 semestres arriba.

Verificar en las materias optativas que solo se tomen las dos que se solicitan en la carrera.

Verificar si la materia tiene prerrequisito verificando si ya fue aprobado para poder incluirla en la preinscripcin.

Ser de prioridad las materias no cursadas de semestres anteriores. En caso de llevar materias de repeticin, son de prioridad al escogerlas, podr llevar hasta 4 materias de repeticin, pero si son de ciencias bsicas solo podr tomar 2.

No podr haber empalmes de materias con los horarios. Podr tomar hasta 2 exmenes especiales. Las materias seleccionadas se guardaran para despus generar el reporte.

50

Las personas encargadas de realizar la preinscripcin debern tener este permiso en su usuario.

Restricciones para la configuracin

La aplicacin deber hacerse de modo que se ejecute de modo local o a travs de un servidor externo.

Los campos necesarios para este procedimiento sern: usuario, password y el nombre de la base de datos.

51

6.1.2. Codificacin
Con el documento de diseo se pas a cdigo, utilizando los lenguajes antes mencionados y las herramientas de apoyo, para el desarrollo de la aplicacin y la estructura de la base de datos, desarrollando cada una de las formas que se mostrarn en la aplicacin. Cada una de las formas cuenta con su cdigo para hacerlas funcionales de acuerdo al anlisis antes planteado. En el cdigo est la sintaxis que har conexin con la base de datos para mostrar los resultados deseados, as como las libreras necesarias para la BD y las que mandan llamar las funciones del programa.

Nota. La explicacin detallada del cdigo de la aplicacin se encuentra en el anexo 2: Manual Tcnico.

1 forma. frm_usuario

Figura 3.11 Forma 1

2 forma. ppal

Figura 3.12 Forma 2 52

3 forma. frm_config

Figura 3.13 Forma 3

4 forma. Frm_captura

Figura 3.14 Forma 4

5 forma. frm_capret

Figura 3.15 Forma 5

53

6 forma. frm_import

Figura 3.16 Forma 6

7 forma. frm_pre

Figura 3.17 Forma 7

8 forma. frm_agregar

Figura 3.18 Forma 8

54

10 forma. frmuser

Figura 3.19 Forma 10

11 forma. frmpermisos

Figura 3.20 Forma 11


using System;

12 forma. frmmov

Figura 3.21 Forma 12

55

Base de datos

La base de datos diseada para esta aplicacin tiene por nombre Coordinacin la cual contiene las siguientes tablas, cada una con sus campos y tipo de campo. La estructura es la siguiente:

Tabla alumno Comentarios de la tabla: Contiene los datos del alumno


Campo cnumcontrol nombre semestre carrera promedio periodo especialidad Tipo varchar(10) varchar(100) int(10) char(1) decimal(4,2) int(10) int(10) Nul o No No No No S S S NULL NULL NULL Predeterminado Comentarios Numero de control del alumno Nombre del Alumno Semestre en el que se encuentra el alumno Carrera del Alumno Promedio del Alumno Periodo del alumno Ago-Dic Especialidad del Alumno MIME

Tabla 3.2 Alumno Tabla alumno_detalle Comentarios de la tabla: Contiene las materias que el alumno ha cursado
Campo numcontrol cvemateria status Tipo varchar(10) varchar(5) varchar(2) Nul o No No S NULL Predeterminado Comentarios Numero de control del Alumno Clave de la materia Estatus en el que se encuentra la materia, si ya la paso A, P, etc. Calificacin de la materia Cdigo de Aprobacin de la Materia MIME

calificacin coaprobada

decimal(2,0) varchar(2)

S S

NULL NULL

Tabla 3.3 Alumno_detalle

56

Tabla bajas
Campo numcontrol fechamto periodo motivo Tipo varchar(10) timestamp int(10) text Nulo No No No No CURRENT_TIMESTAMP Predeterminado Comentarios Numero de control del alumno Fecha en la que se realiza el movimiento Periodo en el que se dio de baja Motivo por el cual el alumno se est dando de baja Coordinador que realiza la baja MIME

usuario

varchar(10)

No

Tabla 3.4 Bajas Tabla carrera


Campo clave descripcion especialidad Tipo char(1) varchar(100) char(1) Nulo No No No Predeterminado Comentarios Clave del nombre de la carrera Nombre de la carrera Id de la especialidad MIME

Tabla 3.5 Carrera Tabla departamento


Campo clave descripcion Tipo int(10) varchar(75) Nulo No No Predeterminado Comentarios Id del departamento Nombre del Departamento MIME

Tabla 3.6 Departamento Tabla especialidad


Campo clave descripcion Tipo int(10) varchar(75) Nulo No No Predeterminado Comentarios Clave de la especialidad de la carrera Nombre de la especialidad MIME

Tabla 3.7 Especialidad

57

Tabla materias
Campo cvemateria nombre creditos semestre carrera premateria Tipo varchar(5) varchar(55) varchar(2) char(1) char(1) varchar(3) Nulo No No No No No No Predeterminado Comentarios Clave de la materia Nombre de la materia Creditos de la materia Semestre que corresponde la materia Carrera que corresponde la materia Materia que es prerequisito MIME

Tabla 3.8 Materias

Tabla movimiento
Campo usuario movimiento fecha Tipo varchar(10) varchar(50) datetime Nulo No No No Predeterminado Comentarios Usuario que usa el sistema Accion que hace Fecha y hora del movimiento MIME

Tabla 3.9 Movimiento

Tabla periodo
Campo clave descripcion status Tipo int(10) varchar(45) char(1) Nulo No No No Predeterminado Comentarios Clave del periodo Nombre del periodo Si est activo o Inactivo MIME

Tabla 3.10 Periodo

Tabla permiso
Campo clave descripcion Tipo int(10) varchar(100) Nulo No No Predeterminado Comentarios Id del permiso Nombre del permiso MIME

Tabla 3.11 Permiso 58

Tabla permisoxusuario
Campo usuario permiso Tipo varchar(10) int(10) Nulo No No Predeterminado Comentarios Id del usuario Id del permiso MIME

Tabla 3.12 Permisoxusuario

Tabla preinscripcion
Campo numcontrol cvemateria hora status Tipo varchar(8) varchar(3) char(1) char(1) Nulo No No No No Predeterminado Comentarios Num de control del alumno preinscrito Clave de la materia preinscrita Hora de la materia preinscrita Id del status MIME

Tabla 3.13 Preinscripcion

Tabla reporte
Campo cvemateria A B C D E F G H I J K L M N Tipo varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) varchar(3) Nulo No No No No No No No No No No No No No No No Predeterminado Comentarios Clave materia 7am 8am 9am 10am 11am 12am 1pm 2pm 3pm 4pm 5pm 6pm 7pm 8pm MIME

59

Mat

varchar(3)

No

Alumnos preinscritos en turno matutino Alumnos preinscritos en turno vespertino Total de alumnos preinscritos

Vesp

varchar(3)

No

Total

varchar(3)

No

Tabla 3.14 Reporte

Tabla semestre
Campo clave descripcion Tipo int(10) varchar(45) Nulo No No Predeterminado Comentarios Id del semestre Datos del semestre MIME

Tabla 3.15 Semestre

Tabla status
Campo clave descripcion color Tipo char(1) varchar(15) varchar(15) Nulo No No No Predeterminado Comentarios Id del status Normal, repeticin, adeudo, especial Color del status MIME

Tabla 3.16 Status

Tabla usuario
Campo usuario nombre password status email depto Tipo varchar(10) varchar(45) varchar(45) char(1) varchar(45) int(10) Nulo No No No No No No Predeterminado Comentarios Id del usuario Nombre de la persona Contrasea del usuario Si el usuario est Activo, Baja, etc. Email del usuario Departamento al que pertenece MIME

Tabla 3.17 Usuario 60

Diagrama entidad-relacin

61

6.1.3. Presentacin de avance


Se present un avance del sistema a la coordinadora para verificar los requerimientos codificados hasta el momento y cercioramos de haber interpretado correctamente dichos requerimientos.

6.1.4. Revisin de requisitos y planificacin


Las observaciones hechas en el punto anterior de requerimientos o correcciones se realizaron en esta actividad, se incluyeron pruebas al sistema tomando datos de errores que se presentaron y los tiempos de ejecucin.

6.1.5. Validacin de cdigo y diseo final


Al ir desarrollando la aplicacin en el cdigo quedaron lneas innecesarias o ms tarde se encontr otro mtodo el cual no necesitaba tanto cdigo.

Se depur el cdigo eliminando sintaxis innecesarias y se verific que el diseo del sistema fuera agradable al usuario desde los colores, botones, imgenes utilizadas, acceso a las funciones, probando que usuarios ajenos al desarrollo de la aplicacion identificara fcil las actividades y pudieran trabajar con la aplicacin.

6.1.6. Pruebas y correcciones


Se realizaron pruebas funcionales con la ejecucin, revisin y retroalimentacin del sistema introduciendo datos correctos e incorrectos se busco evaluar todas las opciones y se

62

realizaron las actividades que se programaron en el sistema para comprobar consistencia y en caso de mostrar algn error se corrigi en el cdigo fuente.

Se hicieron pruebas unitarias, probando los modulos funcionaran independientemente para luego hacer pruebas de integracin para asegurar el correcto funcionamiento.

6.1.7. Entrega del sistema


Se entreg el sistema con la documentacin tcnica y de usuario y las herramientas necesarias para as poder implementarsetodo esto contenido en un CD. Aparte del

ejecutable del programa se incluy tambin el cdigo de la aplicacin por si se desea modificarlo o adaptarlo a otras areas de la institucin.

63

7. CAPITULO IV: RESULTADOS OBTENIDOS 7.1. Resultados obtenidos


Con la simulacin de la preinscripcin hecha al rea de la Licenciatura en Informtica arroj los todos los datos capturados. Esta simulacin fue hecha con una muestra de 20 alumnos que requeran preparar su horario para el siguiente semestre. Con la informacin generada en los reportes ya sea por carrera o materia fue suficiente para dar una idea de en qu horarios y turno existe la demanda de la carrera, de esta forma se podr abrir materias en los horarios necesarios segn el alumno.

7.2. Conclusiones generales


La aplicacin desarrollada podr hacer ms eficiente el proceso de preinscripcin, esto se comprob mediante la simulacin, introduciendo los datos para obtener la demanda, adems de ser ms acertada a la hora de ofrecer las materias en el proceso de inscripcin ya que consultamos con los alumnos las materias y los horarios que les gustara tener para luego hacer un conteo eficiente y rpido, tambin porque evitar que este se haga de manera manual y se le indicar al alumno las prioridades de las materias que tendr disponibles para elegir por medio de las restricciones del programa en el momento de tomar las materias que desea cursar.

Tambin se evitarn errores al realizar el conteo, los reportes generados se pueden exportar para poder manipularla informacin y generar estadsticas que muchas veces son necesarias para mostrar la situacin en la que se encuentra el departamento o el proceso de preinscripcin. 64

Fuentes consultadas

Fairley, Richard E. 1988 Ingeniera de Software. 1era ed. Ediciones McGraw-Hill Mxico.

Jeffrey L. Whitten, Ionnie D. Bentley. Anlisis y diseo de sistemas de informacin, 3er ed. Ediciones Mc Graw Hill. Mxico

James a. Senn. Anlisis y diseo de sistemas de informacin, 2da Ed. Ediciones Mc Graw Hill. Mxico.

http://www.maestrosdelweb.com/editorial/tutsql1/

http://www.chuidiang.com/ood/metodologia/extrema.php

http://www.desarrolloweb.com/manuales/9/

http://msdn.microsoft.com/es-es/vcsharp/aa336809

http://dev.mysql.com/doc/refman/5.0/es/index.html

65

Glosario
Aplicacin

Para la informtica, una aplicacin es uno de diversos tipos de programas de computacin diseados especialmente para cumplimentar una funcin o actuar como herramienta para acciones puntuales del usuario.

Bases de datos

Una base de datos es una coleccin de informacin organizada de forma que un programa de ordenador pueda seleccionar rpidamente los fragmentos de datos que necesite. Una base de datos es un sistema de archivos electrnico.

BDD

Abreviatura de base de datos.

Checkbox

Los checkbox son espacios seleccionables (dos estados, seleccionado y deseleccionado), definidos como cajas para verificar o no alguna accin en un formulario. Diseados para que el usuario decida frente a una accin a seguir.

Codificacin

Es el proceso por el cual la informacin de una fuente es convertida en smbolos para ser comunicada. En otras palabras, es la aplicacin de las reglas de un cdigo.

66

Consulta

Es un mtodo que permite acceder a los datos de una base de datos y realizar diversas acciones: modificar, agregar, eliminar informacin, etc.

Evento

Suceso que ocurre en un sistema. Eventos pueden ser un clic, doble clic, minimizar una ventana, etc.

Grid

A travs de un grid se muestran los datos de una base de datos por medio de renglones y columnas.

Hardware

Hardware son los dispositivos fsicos como la placa base, la CPU o el monitor.

Radiobutton

Botn de opcin. Elemento en las interfaces grficas que permite elegir slo una opcin de un conjunto predefinido de opciones

Sentencia

Una sentencia es una lnea de cdigo en algn lenguaje de programacin. Las sentencias de programacin suelen tener algn carcter que determina su final. Una sentencia de programacin tiene una sintaxis y una semntica. 67

Sistema

Un sistema es un conjunto de partes o elementos organizados y relacionados que interactan entre s para lograr un objetivo. Los sistemas reciben (entrada) datos, energa o materia del ambiente y proveen (salida) informacin, energa o materia.

Software

Software es todo el conjunto intangible de datos y programas de la computadora.

SQL

El lenguaje de consulta estructurado o SQL (por sus siglas en ingls structured query language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en stas.

Textbox

Las cajas de texto (TextBox) son los controles, para la introduccin de informacin por parte del usuario.

68

Anexos ANEXO 1 MANUAL DE USUARIO

ITCJ

Manual de usuario

Mdulo de simulacin de preinscripciones

Autores: Jenice Gabriela Vzquez Soria Mara del Carmen Martnez Daz

ndice
Introduccin................................................................................ 2 Anlisis y requerimientos del sistema ................................................. 3 Instalacin ................................................................................. 4 Explicacin del funcionamiento ......................................................... 6 Ventana de inicio de sesin ................................................. 6 Mens disponibles ............................................................. 7 Configuracin ................................................................. 7 Usuarios ........................................................................ 8 Agregar modificar .................................................... 8 Ver movimientos..................................................... 11 Mi usuario............................................................. 12 Bases de datos ................................................................ 13 Importar .............................................................. 13 Exportar .............................................................. 14 Captura ....................................................................... 15 Preinscripcin ................................................................ 24 Reporte ........................................................................ 29 Cerrar sesin .................................................................. 34 Glosario .................................................................................... 33

Manual de Usuario

Introduccin
El siguiente manual de usuario tiene como objetivo explicar el funcionamiento del sistema del mdulo de simulacin de preinscripciones. En el documento se puede observar la explicacin detallada para un fcil entendimiento de las funciones. Este sistema fue creado con el fin de dar a conocer la demanda de materias de las diferentes carreras del rea de sistemas y as preparar los horarios y materias disponibles de acuerdo a los datos arrojados por esta. Este es un sistema de aplicacin de formularios por medio de los cuales introducimos informacin para despus ser manipulada y obtener los resultados deseados. Descripcin del proceso de preinscripcin El alumno registra en un formulario las materias que puede cursar el siguiente semestre con los horarios deseados. Los coordinadores de carrera realizan el conteo de materias y horarios de forma manual. De acuerdo a los resultados obtenidos el coordinador de carrera programa las materias disponibles para cursar el siguiente semestre y el alumno escoge de la lista publicada las materias.

Manual de Usuario

Anlisis y requerimientos del sistema


Requerimientos mnimos de la computadora donde ser instalado el sistema: Memoria RAM 512 MB. Velocidad del procesador 2.66 GHZ. Espacio en disco duro 20 MB. Monitor, teclado, impresora, mouse.

Software necesario:

Sistema operativo Windows XP o posterior MySQL Server 6.0 XAMPP versin 1.7.3

Manual de Usuario

Instalacin

El sistema se encuentra en el archivo .rar al que accederemos para ejecutar el setup y comenzar la instalacin.

Al ejecutar el setup, prepara al sistema operativo para la instalacin del mdulo de preinscripciones apareciendo la siguiente ventana que es el instalador el que muestra los pasos para la instalacin.

El paso siguiente muestra en donde ser guardada la carpeta del programa o si se desea se puede cambiar la ubicacin en examinar, tambin se escoge que usuarios tendrn acceso al sistema.

Manual de Usuario

En el siguiente paso indica y que ya esta listo para la instalacin y se da siguiente en lo que se crea el directorio necesario. Una vez concluida la instalacin se cierra la ventana y el programa ya se encuentra listo para usar.

Si es necesario desinstalar el programa o repararlo se ejecuta de nuevo el setup en donde se mostrara la ventana con estas opciones.

Manual de Usuario

Funcionamiento del software


Se puede acceder al sistema a travs del acceso directo creado en el escritorio o en el men de inicio.

Ventana de inicio de sesin

En la 1 ventana es para el inicio de sesin de los usuarios autorizados para utilizar el sistema.

En la casilla de usuario se teclea no importando si es en minsculas ya que lo convierte a maysculas. El ejemplo ser con el usuario administrador porque es el que no tiene restricciones al usar el sistema. En caso de teclear la contrasea mal o querer iniciar sesin sin ella mostrara un cuadro de error en donde indica los posibles errores.

Una vez que se inicia sesin con el usuario y password correcto se muestra la pantalla de inicio con los mens disponibles.

Manual de Usuario

Funcionamiento del software


Mens disponibles

Las funciones que se pueden realizar en el men son: Captura de alumnos Realizar preinscripciones Imprimir reportes Manejar las bases de datos Control de usuarios Configuracin Cerrar sesin

Configuracin
En el men de configuracin podemos modificar la forma de acceder a la carpeta de configuracin del servidor en este caso MySQL.

Los campos que se pueden modificar son los del nombre o direccin del servidor, el usuario, password, el nombre de la base de datos y el folder bin de MySQL. Si se quiere seleccionar otra ubicacin del folder bin de MySQL se da click en el botn buscar mostrando la siguente ventana con el directorio de carpetas del equipo. Una vez hecha la conexin con el servidor se mostrara el siguiente mensaje:

Manual de Usuario

Funcionamiento del software


Usuarios
En el men de usuarios podemos crear, modificar o eliminar caractersticas de los usuarios o borrarlos del sistema, tambin ver los movimientos realizados de forma detallada.

Agregar/modificar
En esta seccin de usuarios se muestra la ventana que contiene a todos los usuarios dados de alta, cada uno con sus datos como: Usuario Nombre Status Email Departamento

Modificar datos Seleccionando el usuario y dando clic en el botn modificar se habilitan los campos que se pueden modificar.
Nota: Esto funciona mientras el usuario tenga este permiso.

Manual de Usuario

Funcionamiento del software


Los campos para modificar son: Nombre. Cualquier carcter. Email. Cualquier carcter. Departamento: se despliega una lista con: divisin de estudios, coord. sistemas y jefatura sistemas. Status. A: activo, I: inactivo. Si el status es inactivo, aunque este dado de alta no podr ingresar al sistema. Contrasea. Escribindolo 2 veces para confirmarlo. En caso de que no coincidan las contraseas mostrara un mensaje de error teniendo que volverlas a escribir.

Una vez finalizados los cambios al usuario se guardan o descartan, mostrando un mensaje como el siguiente:

Agregar nuevo usuario Dando clic en el botn agregar los se activan los campos de los datos de usuario en blanco para capturar la informacin nueva, la contrasea debe repetirse 2 veces para confirmar que fue introducida correctamente. Una vez finalizado se guarda o cancela el nuevo movimiento, as para tener al usuario disponible.

Ya que se han guardado los cambios, el programa nos mostrara un mensaje en donde nos confirma que fue agregado exitosamente.

Manual de Usuario

Funcionamiento del software


Permisos de usuario Con los usuarios dados de alta en el sistema podemos pasar a darles permisos para manipular el programa como lo son: Quien tiene todos los permisos es el administrador, y es quien, por tener el permiso de administrar usuarios puede crear, modificar o borrar los existentes as como dar permiso para acceder a diferentes funciones del sistema.

La forma siguiente:

de

otorgar

permisos

es

la

Se selecciona el usuario al que le modificaremos los permisos, despus de esto oprimimos el botn permisos en donde tendremos la siguiente ventana: En este caso solo le damos los permisos necesarios para el auxilio en la preinscripcin, de este modo podemos tener un control sobre que puede hacer cada persona que este utilizando el sistema de preinscripciones. Dando clic en aceptar nos mostrara un mensaje en el cual nos indica que las modificaciones fueron guardadas.

Al iniciar sesin con este usuario, solo las funciones del programa a las que se le otorgo permiso estarn habilitadas.

Manual de Usuario

10

Funcionamiento del software


Borrar usuario Si se desea dar de baja algn usuario, seleccionamos al usuario y oprimimos el botn borrar: Nos mostrara un mensaje para confirmar que queremos borrar al usuario, una vez borrado mostrar el siguiente mensaje:

Ver movimientos
En esta opcin del men usuarios podemos ver cada uno de los movimientos realizados en el sistema cada vez que un usuario inicia sesin.

Se pueden mostrar los movimientos filtrando por medio del usuario, el tipo de movimiento y la fecha mostrando as solo la informacin que queremos ver o mostrar todo el historial de movimientos en el botn ver todos los movimientos.

Manual de Usuario

11

Funcionamiento del software


Mi usuario
En esta opcin, el usuario que haya iniciado sesin podr ver los datos registrados en el sistema, teniendo la opcin de modificarlos: nombre, email, departamento, status o cambiar contrasea.

Para modificar la informacin es necesario que el usuario tenga este permiso.

Cuando se quiere modificar se habilitan los cuadros de texto, la contrasea igual que en las opciones anteriores del men usuario se tiene que escribir 2 veces para validarla.

Una vez terminadas las modificaciones se guardan o descartan cambios.

Manual de Usuario

12

Funcionamiento del software


Bases de datos

En este men podemos importar o exportar la base de datos con la que est trabajando el sistema, tenindolo as como un respaldo en caso de alguna falla en el sistema o equipo.

Importar
En el men base de datos est la opcin de importar en donde la base de datos ya creada con su estructura y/o datos la podemos cargar al sistema en caso de alguna falla de software o hardware. Las opciones que tenemos con importar un archivo de texto o un respaldo de SQL

En ambas opciones, seleccionaremos el archivo a travs del botn <<Seleccione archivo>> que nos mostrara el directorio en donde tenemos la base de datos:

Manual de Usuario

13

Funcionamiento del software

Una vez seleccionado el archivo se da clic en importar mostrando el mensaje de: Importacin de BDD exitosa.

Exportar
En esta segunda parte del men Bases de datos tenemos la opcin de exportar la base de datos en la que hemos trabajado, esto sirve para crear un respaldo en caso de alguna falla. Solo dando clic en el men de bases de datos seguido de exportar:

Crear un archivo de texto ubicado en el disco C:, mostrando el siguiente mensaje en el que indica que la copia fue realizada con xito y donde se encuentra guardada:

Manual de Usuario

14

Funcionamiento del software


Captura
En el men de captura, el usuario que tenga este permiso podr dar de alta a los alumnos con cada uno de los datos necesarios para el sistema. En el ejemplo se estar manipulando la informacin a travs de un usuario administrador, quien cuenta con todos los permisos. Una vez iniciada esta funcin la siguiente ventana es:

En esta ventana se encuentran el listado de alumnos inscritos en el rea de sistemas, cada uno de ellos con la informacin necesaria para el departamento.

Datos del alumno Opciones para modificar

Opciones de bsqueda

Listado de alumnos

Manual de Usuario

15

Funcionamiento del software


En el listado que se muestra podemos realizar la bsqueda de los alumnos de acuerdo a los siguientes criterios:

Teniendo la tabla de los alumnos, al dar clic sobre uno de ellos, en la parte superior se mostrarn los datos de los alumnos, para despus si se desea poder modificarlos junto con su avance reticular.

Dejando el campo de bsqueda vaco el listado que se nos muestra contendr todos los alumnos pertenecientes al departamento. Se puede manejar esta lista oprimiendo en cada uno de los encabezados de la tabla, esto har que se ordenen de modo alfabtico.

Nmero de control

Solo muestra al alumno que le corresponde ese nmero de control.

Manual de Usuario

16

Funcionamiento del software


Nombre Se puede introducir nombre o apellido y mostrar los registros en donde coincida este nombre.

Semestre

Muestra los alumnos pertenecientes al semestre introducido.

Carrera o Licenciatura en informtica plan 7 o Ingeniera en Sistemas Computacionales plan 26 o Ingeniera en Sistemas Computacionales plan 6

Esta bsqueda solo mostrara a los alumnos pertenecientes a la carrera seleccionada.

En cualquiera de los criterios de bsqueda, si se introduce algn dato no incluido en esta tabla de la base de datos solo mostrara un registro vaco.

Manual de Usuario

17

Funcionamiento del software


Para poder modificar algn dato del alumno, ya sea para actualizar o corregir algn error solo se realiza la bsqueda del alumno, se selecciona el registro que se quiere modificar y se da clic en el botn <<Modificar>>.

Seguido a esto se habilitan los campos de datos del alumno para as poder cambiarlos de ser necesario. Los campos que se pueden modificar son: Nmero de control. No repitindose con ningn otro alumno. Nombre Semestre Promedio Carrera o Licenciatura en informtica plan 7. o Ingeniera en Sistemas Computacionales plan 26. o Ingeniera en Sistemas Computacionales plan 6. Periodo o Enero-Junio o Agosto-Diciembre Especialidad o Redes o Bases de datos o Otro Retcula

Manual de Usuario

18

Funcionamiento del software


Botn retcula La retcula se puede modificar para un alumno ya existente o un alumno al cual apenas estamos introduciendo al sistema. La retcula que se despliega es segn la carrera y el plan en el que est el alumno. Desde la bsqueda de un alumno.

Desde el listado de los alumnos, solo seleccionarlo y clic en el botn retcula.

Esta es una retcula de un alumno ya en el sistema

Datos del alumno

Botones para modificar retcula

Materias del alumno

Listado de materias con el estatus, el cual podemos usar para recorrer la retcula

Status de las materias

Manual de Usuario

19

Funcionamiento del software


Para modificar la retcula del alumno damos clic en <<Modificar retcula>>:

La forma en que se puede modificar es cambiando materias, siendo estos: Especial Repeticin Pendiente Disponible Cursando Sin cursar

el status de cada una de las Rojo Amarillo Azul marino Azul claro Morado Gris E R P D C S

El color es para identificar de manera visual el status de la materia y la letra indica el estatus que se muestra en el listado de materias. Una vez que damos clic en modificar retcula podemos desplegar las siguientes opciones:

Son los status de materias de la retcula

Segn la opcin que escojamos y la materia que deseemos modificar, cambiar el color y status con tan solo dar clic sobre ella. Ejemplo: La materia Bases de datos Distribuidas con clave 26E esta en color azul que significa pendiente, si el alumno ya la esta cursando solo tenemos que cambiar la opcin a cursando y seleccionamos la materia y esta cambiara de color y status reflejndose en la lista de materias.

Manual de Usuario

20

Funcionamiento del software


Al final de hacer las modificaciones solo hay que guardar los cambios en el botn de guardar a un lado de la lista de materias. De este modo ya se actualiz el estado de las materias del alumno.

Agregar un alumno En la ventana principal de captura se encuentra el botn para dar de alta un alumno.

Seguido a esto los campos de datos del alumno se muestran en blanco listos para realizar la captura de ellos. Restricciones de los campos: Numero de control solo acepta nmeros y no repetidos en la tabla ya existente. Nombre no tiene restriccin alguna. Semestre solo acepta 2 caracteres. Promedio acepta 2 nmeros enteros. Carrera, periodo y especialidad vienen predeterminados ya en el sistema.

Manual de Usuario

21

Funcionamiento del software


Despus de la captura de los datos generales del alumno se guardan los cambios en el botn de guardar que despus mostrara el mensaje de que se guard con xito.

Una vez guardado el alumno se busca en la lista, para poder actualizar la retcula con los status de las materias que le corresponden. Este procedimiento se llevara a cabo tal como se explic en el punto anterior de modificar retcula. La retcula se mostrara toda en gris, para ello si el alumno ya ha cursado algunas materias se modifican de acuerdo a la explicacin anterior.

Una vez actualizado el status se guardan cambios y se regresa de nuevo a la ventana de captura para posteriores movimientos.

Manual de Usuario

22

Funcionamiento del software


Borrar alumno En esta opcin podemos eliminar a un alumno de la siguiente manera: Buscamos al alumno que se desea dar de baja, por medio de cualquiera de los criterios de bsqueda o solo seleccionndolo. Seguido a esto damos clic en el botn borrar y nos mostrar el siguiente mensaje:

En esta ventana podemos cancelar la accin de borrar o confirmarla dando por resultado:

Y regresar de nuevo al listado de alumnos.

Manual de Usuario

23

Funcionamiento del software


Preinscripciones

La funcin principal del sistema es para realizar el procedimiento de las preinscripciones en el departamento de sistemas, para ello en esta parte del men se realiza esta actividad. Al dar clic en el men de Preinscripciones se mostrar la siguiente ventana:

Datos del alumno

rea donde se desplegara la retcula del alumno

Estatus de las materias

Restricciones y control de la preinscripcin

Para comenzar con la preinscripcin se deber buscar al alumno por medio de su nmero de control teclendolo en el campo correspondiente y dar enter.

Si el nmero de control introducido no se encuentra en la base de datos de los alumnos mostrara el siguiente mensaje teniendo que volver a introducir el nmero correcto. Si falta un nmero para completar este campo tambin mostrara un error.

Manual de Usuario

24

Funcionamiento del software


Otra forma es en la opcin de buscar alumno nos mandara a la ventana del listado de alumnos donde podremos seleccionarlo para comenzar la preinscripcin.

Ya que tenemos al alumno con el cual trabajaremos su preinscripcin, nos mostrar la retcula con el avance hasta el momento, cada una de las materias coloreadas para identificarlas. Para comenzar damos clic en el botn <<Iniciar reinscripcin >>.

Activar posibles a preinscripcin

Finalizar preinscripcin Ver preinscripcin registrada

Cuando se inicia la preinscripcin se habilitan tres botones ms en la parte inferior derecha que son: Activar posibles a preinscripcin Ver preinscripcin registrada Finalizar preinscripcin

Manual de Usuario

25

Funcionamiento del software


Activar posibles a preinscripcin
Al dar clic a este botn se remarcan los cuadros con las materias que podremos seleccionar, tal como se muestra en la imagen:

Al seleccionar una materia, en este caso Configuracin bsica de routers aparece otra ventana la que contiene la clave de la materia, materia, horarios disponibles, crditos y status.

Al seleccionar uno de los horarios en los nos gustara llevar la materia le damos clic en agregar y en el listado aparecer la materia con sus caractersticas y el horario seleccionado y un mensaje indicando que la materia fue registrada.

Manual de Usuario

26

Funcionamiento del software


Al dar clic en aceptar nos lleva de nuevo a la ventana de preinscripcin y la materia que ya seleccionamos ya no se encuentra activa. Seguimos el mismo procedimiento hasta que las materias posibles a cursar el siguiente semestre estn en el registro con sus horarios.

En caso de que alguna materia ya registrada se quisiera borrar se da clic en el botn <<Borrar >> mostrando el siguiente mensaje: Una vez que se oprimi si el mensaje de confirmacin ser el siguiente:

Manual de Usuario

27

Funcionamiento del software


Si al seleccionar un horario se la materia que se empalma con otro mandara el error y se tendr que seleccionar otra hora. Como el lmite de crditos es mnimo 32 y mximo 64, en caso de haber un excedente no nos permitir elegir la materia para seleccionar un horario o si faltan crditos para completar el mnimo avisara de esto, siendo as ya el final de la preinscripcin.

Para salir de la preinscripcin y guardar los datos damos clic en el botn finalizar preinscripcin donde aparecer el siguiente mensaje: Seguido por:

En donde si aceptamos nos llevar a la ventana principal del sistema, en caso de un no nos llevara de nuevo a la ventana de preinscripciones para seleccionar un nuevo alumno se cual se preinscribir.

Manual de Usuario

28

Funcionamiento del software


Reportes
Esta parte del men nos permitir crear reportes de acuerdo a los datos obtenidos durante la preinscripcin. La primera ventana que nos muestra es la siguiente:
Reportes por carrera Estadstica general

Opciones de reporte rea para la bsqueda de materias

rea de reportes

Reporte por carrera Al seleccionar una de las carreras en el cuadro donde se muestran y dar clic en el botn de <<De carrera>> desplegar en la parte inferior el listado de materias de la carrera y retcula correspondiente, con el nombre de la materia, la clave de ella, la cantidad de gente inscrita en cada uno de los horarios, un resumen de en qu turno matutino o vespertino hay preinscrita tanta gente y por ltimo el total de alumnos que solicitan la materia. Si se desea se puede guardar el informe en el botn <<Guardar datos>> que enviar el archivo a un libro de Excel para despus desde ah manejar la informacin.
rea para seleccionar la carrera y generar reporte

Botn para seleccionar tipo de reporte

Botn para exportar reporte

rea de resultado de la demanda de materias

Manual de Usuario

29

Funcionamiento del software


Reporte por materia
Los pasos para generar este tipo de reporte son los siguientes:

Primero seleccionamos la carrera para que en el listado de materias se muestren las materias correspondientes a ella.
Botn para seleccionar tipo de reporte Botn de bsqueda

Clave de la materia

Carrera para generar reporte

rea donde se generar el reporte Listado de materias correspondiente a la carrera

Seleccionamos del listado de materias la que nos gustara generar en reporte para ver la cantidad de alumnos inscritos en ella y le damos clic al botn de bsqueda. Seguido a esto nos generar el reporte en la parte inferior que contiene: la clave con el nombre de la materia, el total de alumnos inscritos, el porcentaje, la cantidad de alumnos inscritos por turno y por ltimo la cantidad de alumnos inscritos por hora.

Materia seleccionada

Demanda total de alumnos por materia

rea del reporte Porcentaje de inscripcin

Cantidad de alumnos por turno

Cantidad de alumnos por hora

Manual de Usuario

30

Funcionamiento del software


Otra forma de bsqueda de la materia es introduciendo la clave de la materia y dar enter, del mismo modo se generar el reporte con los mismos rubros.

Para imprimir el reporte o exportarlo tenemos las siguientes opciones para la configuracin de este:

Imprimir directamente Ver pgina completa Configurar pagina Exportar archivo a: PDF, Excel y Word

En caso de exportar segn sea la opcin seleccionada aparecer un cuadro para indicar donde ser guardado este nuevo archivo, una vez seleccionada la direccin se da aceptar y el archivo ha quedado importado.

Manual de Usuario

31

Funcionamiento del software


Cerrar sesin
Ya por ltimo para cerrar sesin se la clic en el men <<Cerrar sesin>>, este nos llevar de nuevo a la ventana de inicio de sesin para que alguien ms ingrese al sistema o solo cerrarlo.

Manual de Usuario

32

Glosario
Software Conjunto de instrucciones y datos codificados para ser ledas e interpretadas por una computadora. Estas instrucciones y datos fueron concebidos para el procesamiento electrnico de datos. Hardware Elementos fsicos de un sistema informtico (teclado, ratn, pantalla, disco duro, microprocesador, tarjeta de sonido). Password Una contrasea o clave (en ingls password) es una forma de autentificacin que utiliza informacin secreta para controlar el acceso hacia algn recurso. SQL El lenguaje de consulta estructurado o SQL (por sus siglas en ingls structured query language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en stas. BDD Una base de datos (cuya abreviatura es BD) es una entidad en la cual se pueden almacenar datos de manera estructurada, con la menor redundancia posible. Registro En una base de datos relacional, un registro (tambin llamado fila o tupla) representa un objeto nico de datos implcitamente estructurados en una tabla. Cada fila de una tabla representa un conjunto de datos relacionados, y todas las filas de la misma tabla tienen la misma estructura. Retcula Enfocado a planes de estudio, contiene la carga de materias con crditos y horarios que llevara cierto plan de estudio.

Manual de Usuario

33

ANEXO 2 MANUAL TCNICO

ITCJ

Manual tcnico

Mdulo de simulacin de preinscripciones

Autores: Jenice Gabriela Vzquez Soria Mara del Carmen Martnez Diaz

ndice
ndice ....................................................................................... 1 Introduccin................................................................................ 2 Funcionamiento del software ........................................................... 5 Ventana de inicio ............................................................. 5 Ventana principal ............................................................. 7 Ventana captura.............................................................. 10 Ventana retcula ............................................................. 12 Ventana de preinscripciones ............................................... 18 Ventana de registro .......................................................... 30 Ventana de reportes ......................................................... 31 Ventana de importar base de datos ....................................... 36 Ventana usuario .............................................................. 40 Ventana permisos ............................................................ 41 Ventana movimientos ....................................................... 41 Ventana configuracin ...................................................... 42

Manual Tcnico

Introduccin
El objetivo de este manual es dar a conocer a los usuarios avanzados la forma en que funciona el modulo, mostrando el cdigo que se realiza en los procesos principales. El coordinador del rea de sistemas as como el jefe de departamento debe realizar cada semestre evaluaciones para determinar la demanda de materias del semestre prximo, razn por la cual nos motiv a realizar dicho software. La evaluacin para determinar la demanda de materias de los alumnos de sistemas es un proceso que requiere informacin de cada alumno, hacer un diagnstico as como consultar y registrar las materias que los alumnos tomaran en el siguiente periodo escolar por lo que herramientas computacionales son indispensables para agilizar el proceso. Este software es un programa computacional que permite la digitacin de datos de identificacin de alumnos as como su preinscripcin, informacin necesaria para conocer los alumnos que desean tomar cada materia de la retcula. Tambin es una herramienta que realiza los procesos de evaluacin de las materias que debe de tomar cada alumno de forma obligatoria, as como las opcionales a tomar y no permitir adelantarse en su retcula ni quedarse con pocas o ms crditos de las que permite el reglamento de la institucin, tambin genera los listados de los alumnos que desean tomar cada materia, as como su horario de preferencia o de forma ms general, por turnos, dando una vista ms general del escenario que se presentara en fechas de inscripciones. Antiguamente, el coordinador de carrera llevaba un registro de cada retcula por alumno en bitcoras en papel, pintando cada semestre las materias y calificaciones que haba cursado dicho alumno para luego marcar diez materias probables a tomar y contabilizarlos todos por materias para luego mandar dicho reporte final al jefe de departamento quien analizaba y determinaba los grupos que se ofreceran en la prxima inscripcin pero ahora este proceso se podr hacer de una forma ms rpida y ms automatizada.

Manual Tcnico

Diccionario de datos

Manual Tcnico

Manual Tcnico

Funcionamiento del software


Ventana de inicio
Al iniciar el programa se leen los parmetros para la conexin a la base de datos que estn almacenados en config.txt y nos muestra la ventana de inicio para autentificarnos.

Al dar clic en el botn Ingresar luego de haber ingresado su usuario y contrasea se almacena en variables el usuario y la contrasea encriptada con el algoritmo Hash-1 que es un algoritmo de solo ida es decir, no se puede desencriptar, esto es una forma de tener mayor seguridad en el sistema. Luego se hace la conexin a la base de datos, y se busca el usuario en la tabla usuario, si este se encuentra se revisa que las contraseas coincidan y el estado del usuario sea Activo. Si lo anterior es correcto, se registra el movimiento en la tabla movimiento como Ingresa al sistema al igual que el usuario, la fecha y hora, adems de guardar el usuario en una variable pblica para luego mostrar la ventana principal, si no se cumple lo anterior, solo muestra un mensaje de error.

Evento al dar clic a boton Ingresar privatevoid btningresar_Click(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor; string pass1 = ""; string pass2 = ""; string status = ""; //pass ingresado pass1 = txtpass.Text; pass1 = encriptarSHA1(pass1); //pass registrado

Manual Tcnico

ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); string checar = "select password FROM usuario where usuario='" + txtusuario.Text + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar, MyConnection); if (MyCmd2.ExecuteScalar() != null){ pass2 = MyCmd2.ExecuteScalar().ToString(); //su status checar = "select status FROM usuario where usuario='" + txtusuario.Text + "';"; MySqlCommand MyCmd3 = newMySqlCommand(checar, MyConnection); status = MyCmd3.ExecuteScalar().ToString();} if (pass1 == pass2 && status=="A")//Y SI ESTA ACTIVO{ accion = "Ingresar sistema"; movimiento(accion); frm_ppal f2 = newfrm_ppal(); f2.usuario = txtusuario.Text; f2.Show(); this.Hide(); }else{ MessageBox.Show("Usuario/password incorrecto o cuenta inactiva", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); this.Cursor = Cursors.Default;} Evento al cargar formulario privatevoid frm_usuario_Load(object sender, EventArgs e){ //Cargar variables de config StreamReader leido = File.OpenText("config.txt"); server = leido.ReadLine(); user = leido.ReadLine(); database = leido.ReadLine(); password = leido.ReadLine(); leido.Close();} Funcin para encriptar password con algoritmo SHA1 privatestring encriptarSHA1(string CadenaOriginal){ System.Security.Cryptography.HashAlgorithm hashValue = new System.Security.Cryptography.SHA1CryptoServiceProvider(); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(CadenaOriginal); byte[] byteHash = hashValue.ComputeHash(bytes); hashValue.Clear(); return (Convert.ToBase64String(byteHash));} Funcin para registrar movimiento privatevoid movimiento(string query){ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); string insert = "INSERT INTO movimiento (usuario,movimiento,fecha) VALUES('" + txtusuario.Text + "','" + query + "',LOCALTIMESTAMP());"; MySqlCommand MyCmd = newMySqlCommand(insert, MyConnection); MyCmd.ExecuteNonQuery(); MyConnection.Close();}

Manual Tcnico

Ventana principal
Luego de autentificarnos, veremos la ventana principal quien al cargar inicializa leyendo los parmetros de config.txt para hacer la conexin a la base de datos, luego busca los permisos que tiene el usuario de la tabla permisoxusuario y habilita el men al que tiene acceso.

La cual contendr la mayora del men disponible del programa.

Captura: Muestra la ventana captura pasando el usuario y la variable operacin con valor captura para mostrar la ventana adecuada para esta accin.

Preinscripciones: Muestra la ventana de preinscripcin pasando aun el usuario que est usando el programa en una variable pblica. Reportes: Muestra la ventana de reportes que nos dar el conteo y otras estadsticas acerca de las preinscripciones registradas, aun se pasa la variable usuario para el control de permisos.

Base de datos Importar: Muestra la ventana para importar una base de datos adems de pasar el usuario que hace dicho movimiento. Exportar: Lee el archivo config.txt lnea por lnea y lo almacena en variables y crea un nuevo proceso con MySqlDump y escribe el resultado lnea por lnea

Manual Tcnico

en un archivo en el directorio raz con nombre basededatos_ao-mesdia_hora-minuto.sql. En caso de ser exitoso, muestra el mensaje Copia de seguridad realizada con xito, Copia guardada en C:// y registra el movimiento Exportar BDD con la funcin para registrar movimiento, en caso contrario muestra el mensaje No se encontr MySqlDump, revise su configuracin.

Usuarios o Agregar/Modificar: Muestra la ventana usuario para agregar o modificar un usuario en forma de caja de dialogo con un resultado de dialogo de Cancel que refresca la ventana principal, nuevamente se pasa la variable usuario. o Ver movimientos: Muestra la ventana de movimientos que nos mostrara los cambios hechos en la base de datos por cada usuario. o Mi usuario: Mostrara de nuevo la ventana usuario pasando adems de la variable publica usuario, la variable publica operacin con el valor micuenta para dar la vista necesaria a la ventana usuario para que se puedan modificar los datos propios de la persona que est en el sistema.

Configuracin: Nos muestra la ventana de configuracin para establecer los parmetros de configuracin para MySQL. Cerrar sesin: Se reinicia la aplicacin, mostrando de nuevo la ventana de autentificacin, esto puede tardar un poco.

Al cerrarse la ventana, se registrara el movimiento de salir del sistema junto con su usuario, fecha y hora.
Evento del submen exportar del men base de datos privatevoid exportarToolStripMenuItem_Click(object sender, EventArgs e){ this.Cursor = Cursors.AppStarting; //Cargar variables de config StreamReader leido = File.OpenText("config.txt"); server = leido.ReadLine(); user = leido.ReadLine(); database = leido.ReadLine(); password = leido.ReadLine(); filebin = leido.ReadLine(); leido.Close(); try {

Manual Tcnico

this.Cursor = Cursors.AppStarting; DateTime backupTime = DateTime.Now; int year = backupTime.Year; int month = backupTime.Month; int day = backupTime.Day; int hour = backupTime.Hour; int minute = backupTime.Minute; int second = backupTime.Second; int ms = backupTime.Millisecond; String tmestr = backupTime.ToString(); tmestr = "C:\\" + database + "_" + year + "-" + month + "-" + day + "_" + hour + "-" + minute + ".sql"; ProcessStartInfo proc = newProcessStartInfo(); proc.FileName = string.Format(@"{0}\mysqldump.exe",filebin); proc.Arguments = string.Format("{0} --single-transaction --quick --databases --host={1} --user={2} --password={3}", database, server, user, password); proc.RedirectStandardInput = false; proc.RedirectStandardOutput = true; proc.StandardOutputEncoding = Encoding.UTF8; proc.UseShellExecute = false; proc.CreateNoWindow = true; try{ Process p = Process.Start(proc); StreamReader sr = p.StandardOutput; StreamWriter file = newStreamWriter(tmestr, false, Encoding.UTF8); String linea; while ((linea = sr.ReadLine()) != null){ file.WriteLine(linea);} p.WaitForExit(); p.Close(); file.Close(); MessageBox.Show("Copia de seguridad realizada con xito\nCopia guardada en C:\\"); accion = "Exportar BDD"; movimiento(accion);} catch{ MessageBox.Show("No se encontro MySqlDump, revise su configuracion");}} this.Cursor = Cursors.Default;} Funcin para inicializar y permisos privatevoid refrescar(){ //Cargar variables de config StreamReader leido = File.OpenText("config.txt"); server = leido.ReadLine(); user = leido.ReadLine(); database = leido.ReadLine(); password = leido.ReadLine(); filebin = leido.ReadLine(); leido.Close(); ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); ////////////PERMISOS DataTable tabla = newDataTable(); string consulta = "SELECT permiso FROM permisoxusuario WHERE usuario='" + usuario + "';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tabla); for (int i = 0; i < tabla.Rows.Count; i++){

Manual Tcnico

if (tabla.Rows[i]["permiso"].ToString() == "8") preinscripcionesToolStripMenuItem.Enabled = true; elseif (tabla.Rows[i]["permiso"].ToString() == "9") reportesToolStripMenuItem.Enabled = true; elseif (tabla.Rows[i]["permiso"].ToString() == "12") importarToolStripMenuItem.Enabled = true; elseif (tabla.Rows[i]["permiso"].ToString() == "13") exportarToolStripMenuItem.Enabled = true; elseif (tabla.Rows[i]["permiso"].ToString() == "14") configuracionToolStripMenuItem.Enabled = true; elseif (tabla.Rows[i]["permiso"].ToString() == "15") agregarUsuarioToolStripMenuItem.Enabled = true; elseif (tabla.Rows[i]["permiso"].ToString() == "16") verMovimientosToolStripMenuItem.Enabled = true;}}

Ventana captura
Inicializa cargando las variables para la conexin a la bdd de config.txt y carga la lista de alumnos con la tabla alumno y los combo box de carrera, periodo y especialidad desde sus respectivas tablas en la base de datos.

Datos del alumno 1 4 Campo de bsqueda 5 6 Criterio de busqueda

Lista de alumnos

Si se accedi desde el men Captura de la ventana principal habilitara el grupo de botones para capturar Agregar, Borrar, Modificar y habilita el men al que tiene acceso el usuario. Al cambiar la seleccin en la lista de alumnos, los campos de datos mostraran los del alumno seleccionado. Al seleccionar una opcin de bsqueda la variable criterio tendr ese valor.

Manual Tcnico

10

Si se accedi desde la ventana de preinscripcin se habilita el botn de preinscripcin la cual pasa los datos del alumno seleccionado a la ventana de preinscripcin. 1. Botn Agregar: Habilita y limpia los campos de texto para capturar nuevos alumnos. a. Botn Guardar: Agrega en la tabla alumno nmero de control, semestre, carrera, promedio, periodo y especialidad de un nuevo alumno. Si se hizo correctamente, se muestra el mensaje de Se agreg exitosamente, se registra la accin Agregar alumno en la tabla movimientos y se deshabilitan los campos de texto, en caso contrario muestra el mensaje Error al agregar y se inicializa la ventana. 1. Botn Borrar: Hace la pregunta Est seguro de querer realizar esta accin? Si la respuesta es Si se borra el registro de la tabla alumno donde el nmero de control sea igual al seleccionado, muestra el mensaje Se ha borrado exitosamente, registra el movimiento Borrar alumno e inicializa la ventana. 2. Botn Cancelar: Inicializa la ventana. 3. Botn Modificar: Habilita los campos de texto para modificar datos. 4. Botn Guardar: Si est habilitado el campo de nmero de control, se modificara en la tabla alumno el nmero de control donde el nombre sea igual al seleccionado. a. Ontlki99l.hbrario se modificara en la tabla alumno los datos donde el nmero de control sea igual al seleccionado. b. Se mostrara el mensaje Se ha modificado exitosamente y se registrara el movimiento Modificar alumno, en caso contrario mostrara el mensaje Error al modificar y se inicializara la ventana. 5. Botn Retcula: Muestra la ventana retcula pasando los datos del alumno seleccionado. 6. Botn Buscar: Si el criterio es carrera, mostrara los alumnos en la lista de alumnos que sean carrera seleccionada, si el criterio es otro, mostrara los alumnos que contengan lo escrito en el campo de bsqueda. 7. Botn Todos: Inicializa la ventana haciendo la conexin a la base de datos seleccionando todos los alumnos de la tabla alumno y mostrarlo en la lista.

Manual Tcnico

11

Ventana retcula
Se hace la conexin a la base de datos, carga el combo box de status de la tabla status y habilita segn los permisos del usuario.

1. Botn Modificar retcula: Registra el movimiento Modificar retcula y habilita los el arreglo de botones para poder modificar su status. 2. Botn Listo: Deshabilita el arreglo de botones. 3. Botn Actualizar disponibles: Determina cuales materias estn disponibles para tomar. 4. Botn Guardar: Guarda las calificaciones modificadas del alumno, muestra el mensaje Se ha modificado exitosamente y se registra el movimiento Capturar calificaciones.
Libreras usadas using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; using using using using using System.Text; System.Windows.Forms; MySql.Data.MySqlClient; arreglobotones; System.IO;

Variables publicstring numctrl; publicstring nombre; publicstring ret; publicstring semestre; publicstring usuario; MySqlConnection MyConnection;

Manual Tcnico

12

string ConnStr; string materia; string clave; string state; string accion; int tcred = 0; string micolor = "Gray"; string carrera;

string server; string user; string database; string password; //Declaracin de la matriz d botones privateArrayControles<Button> m_button;

Evento clic en alguna materia para cambiar su status privatevoid m_button_Click(object sender, EventArgs e){ //PINTAR ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); DataTable status = newDataTable(); string b = "SELECT clave,color FROM status where descripcion='"+cbstatus.Text+"';"; MySqlDataAdapter d = newMySqlDataAdapter(b, MyConnection); MySqlCommandBuilder c = newMySqlCommandBuilder(d); d.Fill(status); micolor = status.Rows[0]["color"].ToString(); state = status.Rows[0]["clave"].ToString(); m_button[sender].BackColor = Color.FromName(micolor); m_button[sender].Visible = true; clave = m_button[sender].Text; clave = clave.Substring(0, 3); //GUARDAR EN LA BDD ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //BUSCAR, INSERTAR O MODIFICAR //BUSCAR DataTable tabla = newDataTable(); string consulta = "select * FROM alumno_detalle where numcontrol='" + numctrl + "' AND cvemateria= '" + clave + "';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tabla); int contador = tabla.Rows.Count; if (contador==0){ //No se encuentra consulta = "INSERT INTO alumno_detalle (numcontrol, cvemateria, status) VALUES ('" + numctrl + "','" + clave + "','" + state + "')"; }else{ //Se encontro consulta = "UPDATE alumno_detalle SET status='" + state + "' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + clave + "';";} int Done = 0; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); Done = MyCmd.ExecuteNonQuery(); MyConnection.Close(); refrescar();} Funcin para mostrar la retcula del alumno

privatevoid refrescar(){ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";";

Manual Tcnico

13

MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //CARRERA (RETICULA) string consulta = "SELECT carrera FROM alumno where numcontrol= '" + numctrl + "';"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); carrera = MyCmd.ExecuteScalar().ToString(); //DATAGRID DataSet ds = newDataSet(); DataTable tabla = newDataTable(); string busqueda0 = "select alumno_detalle.cvemateria, alumno_detalle.status, alumno_detalle.calificacion, alumno_detalle.coaprobada from alumno_detalle where numcontrol='" + numctrl + "';"; MySqlDataAdapter da = newMySqlDataAdapter(busqueda0, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tabla); dataGridView1.DataSource = tabla; //TITULOS DATAGRID dataGridView1.Columns[0].HeaderText = "Clave materia"; dataGridView1.Columns[0].ReadOnly = true; dataGridView1.Columns[1].HeaderText = "Status"; dataGridView1.Columns[1].ReadOnly = true; dataGridView1.Columns[2].HeaderText = "Calificacion"; dataGridView1.Columns[2].ReadOnly = false; dataGridView1.Columns[3].HeaderText = "Codigo"; dataGridView1.Columns[3].ReadOnly = true; //////////CARGAR RETICULA///////// //Cargar por semestre x for (int x = 1; x <= 9; x++){ //tabla con materias de semestre x DataTable tablamaterias = newDataTable(); string busqueda1 = "select * from materias where semestre='" + x.ToString() + "' AND carrera= '" + carrera + "';"; MySqlDataAdapter dax = newMySqlDataAdapter(busqueda1, MyConnection); MySqlCommandBuilder cmdx = newMySqlCommandBuilder(dax); dax.Fill(tablamaterias); if (tablamaterias.Rows.Count > 0){ int y = (x - 1) * 7; //cargar botones de semestre x for (int i = 0; i < tablamaterias.Rows.Count; i++){ clave = tablamaterias.Rows[i][0].ToString(); materia = tablamaterias.Rows[i][1].ToString(); //Renglon con estado de las materias de tablamaterias (info boton) DataTable tablabtn = newDataTable(); string busqueda2 = "select alumno_detalle.*,status.clave, status.color from alumno_detalle,status where numcontrol='" + numctrl + "' AND cvemateria='" + clave + "' AND alumno_detalle.status=status.clave;"; da = newMySqlDataAdapter(busqueda2, MyConnection); cmd = newMySqlCommandBuilder(da); da.Fill(tablabtn); if (tablabtn.Rows.Count > 0){ string estado = tablabtn.Rows[0]["clave"].ToString(); //elegir color if (tablabtn.Rows.Count > 0) micolor = tablabtn.Rows[0]["color"].ToString();} //Contar creditos if (micolor == "LightGreen" || micolor == "Purple"){ string checar = "select creditos from materias where cvemateria='" + clave + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar, MyConnection); string cred = MyCmd2.ExecuteScalar().ToString(); tcred += int.Parse(cred); }

Manual Tcnico

14

m_button[y].BackColor = Color.FromName(micolor);//pintar boton m_button[y].Font = newFont(this.Font, FontStyle.Regular); m_button[y].FlatStyle = FlatStyle.Flat; m_button[y].Visible = true; m_button[y].Text = clave + " " + materia;//texto y++;} ////FIN cargar botones de semestre x }else{ MessageBox.Show("No se tiene reticula capturada"); this.Close(); break;}}//FIN CARGAR RETICULA} Evento del botn Actualizar disponibles

privatevoid btdisponibles_Click(object sender, EventArgs e){ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); int sem = int.Parse(txt_semestre.Text); int contador = 0; //ESTABLECER PENDIENTES, DISPONIBLES Y SIN CURSAR //Buscar pendientes, disponibles y sin cursar y ponerlas sin cursar string consulta = "UPDATE alumno_detalle SET status='S' where numcontrol='" + numctrl + "' AND (status='D' OR status='P');"; MySqlCommand MyCmd3 = newMySqlCommand(consulta, MyConnection); MyCmd3.ExecuteNonQuery(); //contar reprobadas y especiales DataTable tabla = newDataTable(); consulta = "select cvemateria,status from alumno_detalle where numcontrol='" + numctrl + "' AND (status='R' OR status='E');"; MySqlDataAdapter da3 = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd3 = newMySqlCommandBuilder(da3); da3.Fill(tabla); contador += tabla.Rows.Count; //ATRASADAS (PENDIENTES) for (int i = 1; i < sem; i++){ //seleccionar las de i semestre con status de sin cursar DataTable tabla2 = newDataTable(); string seleccion = "select alumno_detalle.numcontrol,alumno_detalle.cvemateria,alumno_detalle.status,materia s.semestre from alumno_detalle, materias where alumno_detalle.numcontrol='" + numctrl + "' AND alumno_detalle.cvemateria = materias.cvemateria AND materias.semestre='" + i.ToString() + "' AND alumno_detalle.status='S';"; MySqlDataAdapter da2 = newMySqlDataAdapter(seleccion, MyConnection); MySqlCommandBuilder cmd2 = newMySqlCommandBuilder(da2); da2.Fill(tabla2); for (int y = 0; y < tabla2.Rows.Count; y++){ //clave materia string cve = tabla2.Rows[y]["cvemateria"].ToString(); //clave prerrequisito string checar = "SELECT premateria FROM materias where cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd = newMySqlCommand(checar, MyConnection); string premateria = MyCmd.ExecuteScalar().ToString(); if (premateria == ""){ if (cve == "17F" || cve == "17G"){ if (tcred > 180){ //se registra Pendiente string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';";

Manual Tcnico

15

MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra Pendiente string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //buscar status de prerrequisito string checar2 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + premateria + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar2, MyConnection); string status = MyCmd2.ExecuteScalar().ToString(); if (status == "A" || status == "C"){ //checar si otro prerrequisito if (cve == "C63" || cve == "17C"){ string prerreq = ""; if (cve == "C63") prerreq = "A63"; if (cve == "17C") prerreq = "G74"; string checar5 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + prerreq + "';"; MySqlCommand MyCmd5 = newMySqlCommand(checar5, MyConnection); string status2 = MyCmd5.ExecuteScalar().ToString(); if (status2 == "A" || status2 == "C"){ //se registra disponible string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra disponible string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;}}}}} /////DISPONIBLES for (int i = sem; i <= (sem + 2); i++){ if (contador >= 8){ break;} //seleccionar las de i semestre con status de sin cursar DataTable tabla2 = newDataTable(); string seleccion = "select alumno_detalle.numcontrol,alumno_detalle.cvemateria,alumno_detalle.status,materia s.semestre from alumno_detalle, materias where alumno_detalle.numcontrol='" + numctrl + "' AND alumno_detalle.cvemateria = materias.cvemateria AND materias.semestre='" + i.ToString() + "' AND alumno_detalle.status='S';"; MySqlDataAdapter da2 = newMySqlDataAdapter(seleccion, MyConnection); MySqlCommandBuilder cmd2 = newMySqlCommandBuilder(da2); da2.Fill(tabla2); for (int y = 0; y < tabla2.Rows.Count; y++){ //clave materia string cve = tabla2.Rows[y]["cvemateria"].ToString(); //clave prerrequisito string checar = "SELECT premateria FROM materias where cvemateria= '" + tabla2.Rows[y][1].ToString() + "';";

Manual Tcnico

16

MySqlCommand MyCmd = newMySqlCommand(checar, MyConnection); string premateria = MyCmd.ExecuteScalar().ToString(); if (premateria == ""){ if (cve == "17F" || cve == "17G"){ if (tcred > 180){ //se registra Pendiente string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra Pendiente string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //buscar su status string checar2 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + premateria + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar2, MyConnection); string status = MyCmd2.ExecuteScalar().ToString(); if (status == "A" || status == "C"){ //checar si otro prerrequisito if (cve == "C63" || cve == "17C"){ string prerreq = ""; if (cve == "C63") prerreq = "A63"; if (cve == "17C") prerreq = "G74"; string checar5 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + prerreq + "';"; MySqlCommand MyCmd5 = newMySqlCommand(checar5, MyConnection); string status2 = MyCmd5.ExecuteScalar().ToString(); if (status2 == "A" || status2 == "C"){ //se registra disponible string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra disponible string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;}}}}} MyConnection.Close(); refrescar(); MessageBox.Show("Actualizado", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Information);}

Manual Tcnico

17

Ventana de preinscripciones
Se crea un arreglo de botones con la clase arreglobotones con nombre btnindice, se asigna el evento el mismo evento clic para cualquier botn del arreglo y se hace la conexin a la base de datos.

Datos del alumno 1 2

Arreglo de botones

En el campo nmero de control escribimos el nmero del alumno luego Enter para mostrar su retcula. Se revisara si el nmero de control escrito es de 8 nmeros, si es as, se conectara a la base de datos, buscara el nmero de control, si lo encuentra seleccionara los datos del alumno y los mostrara en los campos de datos del alumno, cargara la retcula, en caso contrario se mostrara el mensaje Nm. de ctrl incorrecto o si no se encuentra mostrara el mensaje No existe nmero de control. 1. Botn Buscar alumno: Abre la ventana de captura como una ventana de dialogo, si su resultado es OK pasa los datos del alumno seleccionado a variables y la variable operacin con el valor preinscripcin para luego ver la retcula del alumno. 2. Iniciar preinscripcin: Revisa que materias tiene para tomar, muestra el mensaje Tienes especiales registrados en caso de tenerlos y revisa que

Manual Tcnico

18

tiene registrado en su preinscripcin para saber cules son las materias de mayor prioridad para tomar y registra el movimiento Preinscripcin alumno. 3. Botn activar: Habilita todas las materias que puede tomar sin prioridad. 4. Botn ver preinscripcin: Muestra la ventana de registro como una ventana de dialogo pasando el nmero de control del alumno y un 1 que significa que solo se consulta que materias estn registradas y si su resultado es Retry, inicializa la ventana. 5. Botn Cerrar: Da por terminada la preinscripcin, muestra el mensaje "Preinscripcin completada, puede modificar o terminar" si se tiene registradas ms o igual a los crditos mnimos, o en caso contrario muestra los mensajes "Faltan materias para carga mnima" y Desea salir? si su respuesta es S, se cierra la ventana, en caso contrario se inicializa la ventana.

Libreras usadas using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; using using using using using System.Text; System.Windows.Forms; MySql.Data.MySqlClient; arreglobotones; System.IO;

Variables publicstring numctrl; publicstring nombre; publicstring ret; publicstring usuario; publicint paso = 0; int pasito = 0; int crepe = 0; int tcred = 0; bool continuar = false; MySqlConnection MyConnection; string accion; string ConnStr; string materia; string clave; string micolor = "Gray"; string carrera; string server; string user; Funciones y eventos Funcin para cargar reticula privatevoid refrescar(){ for (int i = 0; i < registro.Length; i++) registro[i] = 0; for (int i = 0; i < reticula.Length; i++) string database; string password; int caso=0; string[] dificiles = { "A74", "B74", "B76", "C74", "C76", "D74" }; string[] status = { "E", "R", "P", "D" };//Especial, reprobada,pendiente, disponible int[] registro = { 0, 0, 0, 0 };//Cuantas E,R,P,D tiene registradas en preinscripcion int[] reticula = { 0, 0 };//Cuantas especiales y repeticiones tiene int[] tomar = { 0, 0, 0 };//CuantasE,R,PoD puede tomar privateArrayControles<Button> m_button; //Declaracion de la matriz d botones

Manual Tcnico

19

reticula[i] = 0; //Conexion ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //CARRERA (RETICULA) string consulta = "SELECT carrera FROM alumno where numcontrol= '" + numctrl + "';"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); carrera = MyCmd.ExecuteScalar().ToString(); label1.Visible = true; label2.Visible = true; label3.Visible = true; label4.Visible = true; label5.Visible = true; label6.Visible = true; label7.Visible = true; label8.Visible = true; label9.Visible = true; //////////CARGAR RETICULA///////// //Cargar por semestre x for (int x = 1; x <= 9; x++){ //tabla con materias de semestre x DataTable tablamaterias = newDataTable(); string busqueda1 = "select * from materias where semestre='" + x.ToString() + "' AND carrera= '" + carrera.ToString() + "';"; MySqlDataAdapter da = newMySqlDataAdapter(busqueda1, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tablamaterias); if (tablamaterias.Rows.Count > 0){ int y = (x - 1) * 7; //cargar botones de semestre x for (int i = 0; i < tablamaterias.Rows.Count; i++){ clave = tablamaterias.Rows[i][0].ToString(); materia = tablamaterias.Rows[i][1].ToString(); //Renglon con estado de las materias de tablamaterias (info boton) DataTable tablabtn = newDataTable(); string busqueda2 = "select alumno_detalle.*,status.clave, status.color from alumno_detalle,status where numcontrol='" + numctrl + "' AND cvemateria='" + clave + "' AND alumno_detalle.status=status.clave;"; da = newMySqlDataAdapter(busqueda2, MyConnection); cmd = newMySqlCommandBuilder(da); da.Fill(tablabtn); if (tablabtn.Rows.Count > 0){ string estado = tablabtn.Rows[0]["clave"].ToString(); //optativas//// bool pintar = true; if (clave == "17F" || clave == "17H" || clave == "26E" || clave == "26G"){ string cvesig = tablamaterias.Rows[i + 1][0].ToString(); if (estado == "C" || estado == "A") i++; else{ string checar = "select status from alumno_detalle where numcontrol='" + numctrl + "' AND cvemateria='" + cvesig + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar, MyConnection); string sig = MyCmd2.ExecuteScalar().ToString(); if (sig == "C" || sig == "A") pintar = false; }} //fin optativas///////////// if (pintar == true) {//elegir color if (tablabtn.Rows.Count > 0)

Manual Tcnico

20

micolor = tablabtn.Rows[0]["color"].ToString();} //Contar creditos if (micolor == "LightGreen" || micolor == "Purple"){ string checar = "select creditos from materias where cvemateria='" + clave + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar, MyConnection); string cred = MyCmd2.ExecuteScalar().ToString(); tcred += int.Parse(cred); } //Contar cuantas especiales y repe tiene if (micolor == "Yellow" || micolor == "Red"){ if (micolor == "Red") reticula[0]++; elseif (micolor == "Yellow") reticula[1]++; } m_button[y].BackColor = Color.FromName(micolor);//pintar boton m_button[y].Font = newFont(this.Font, FontStyle.Regular); m_button[y].FlatStyle = FlatStyle.Flat; m_button[y].Visible = true; m_button[y].Text = clave + " " + materia;//texto y++;} ////FIN cargar botones de semestre x} else{ MessageBox.Show("No se tiene reticula capturada"); this.Close(); break;} }//FIN CARGAR RETICULA //DEFINIR CASO if (reticula[1] > 0 && reticula[0] == 0)//repe caso = 3; elseif (reticula[1] == 0 && reticula[0] > 0)//especial{ caso = 1; lblmin.Text = "0"; lblmax.Text = "32";} elseif (reticula[1] > 0 && reticula[0] > 0)//repe esp{ caso = 2; lblmin.Text = "0"; lblmax.Text = "32";} else caso = 0;//reg /////INFO PREINSCRIPCION // Marcar las que estan registradas foreach (Button btn in m_button) { clave = btn.Text; clave = clave.Substring(0, 3); DataTable tabla = newDataTable(); string buscar = "SELECT * FROM preinscripcion WHERE cvemateria = '" + clave + "' AND numcontrol='" + numctrl + "';"; MySqlDataAdapter adap = newMySqlDataAdapter(buscar, MyConnection); MySqlCommandBuilder mycmd = newMySqlCommandBuilder(adap); adap.Fill(tabla); if (tabla.Rows.Count > 0) { btn.Font = newFont(this.Font, FontStyle.Bold); btn.Enabled = false; btn.FlatStyle = FlatStyle.Flat; }} //Contar por estatus for (int i = 0; i < status.Length; i++){ DataTable tablita = newDataTable(); string buscar2 = "SELECT * FROM preinscripcion WHERE numcontrol='" + numctrl + "' AND status='" + status[i] + "';"; MySqlDataAdapter da2 = newMySqlDataAdapter(buscar2, MyConnection); MySqlCommandBuilder cmd2 = newMySqlCommandBuilder(da2); da2.Fill(tablita); registro[i] = tablita.Rows.Count; }

Manual Tcnico

21

//etiquetas DataTable preinscripcion = newDataTable(); string pre = "select preinscripcion.*,materias.creditos from preinscripcion,materias where numcontrol='" + numctrl + "' AND preinscripcion.cvemateria=materias.cvemateria;"; MySqlDataAdapter da3 = newMySqlDataAdapter(pre, MyConnection); MySqlCommandBuilder cmd3 = newMySqlCommandBuilder(da3); da3.Fill(preinscripcion); lblcmat.Text = preinscripcion.Rows.Count.ToString(); int creditos = 0; for (int i = 0; i < preinscripcion.Rows.Count; i++){ creditos += int.Parse(preinscripcion.Rows[i]["creditos"].ToString());} lblcreditos.Text = creditos.ToString(); int faltan = (int.Parse(lblmin.Text)) - (int.Parse(lblcreditos.Text)); if (faltan < 0) faltan = 0; lblfaltan.Text = faltan.ToString(); int disp = (int.Parse(lblmax.Text)) - (int.Parse(lblcreditos.Text)); if (disp < 0) disp = 0; lbldisp.Text = disp.ToString();} privatevoid m_button_Click(object sender, EventArgs e) { //INFO DE LA MATERIA ESCOGIDA bool dif =false; clave = m_button[sender].Text; clave = clave.Substring(0, 3); ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //info de la materia y estatus DataTable tabla = newDataTable(); string buscar = "SELECT materias.cvemateria,materias.nombre,materias.creditos,materias.semestre,materias. carrera,materias.premateria,alumno_detalle.status FROM materias,alumno_detalle WHERE materias.cvemateria = '" + clave + "' AND alumno_detalle.numcontrol='"+numctrl+"' AND materias.cvemateria=alumno_detalle.cvemateria;"; MySqlDataAdapter da = newMySqlDataAdapter(buscar, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tabla); if (caso == 1) { if (tabla.Rows[0][6].ToString() == "E"){ //AGREGARLA A PREINSCRIPCION string consulta = "INSERT INTO preinscripcion (numcontrol,cvemateria,hora,status) VALUES ('" + numctrl + "','" + clave + "','O','E')"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); int Done = MyCmd.ExecuteNonQuery(); if (Done > 0) { refrescar(); if (registro[0] > 0) MessageBox.Show("Tienes especiales registrados"); continuar = seguir(); if (registro[0] == 2) paso = 4; elseif (continuar == true&& registro[0] < 2) paso = 2; proceso();}} if (tabla.Rows[0][6].ToString() == "D"){ int temp = int.Parse(lbldisp.Text) int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 4) {

Manual Tcnico

22

//agregar refrescar(); continuar = seguir(); if (continuar == true) { paso++; proceso(); }else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");}} return; } if (caso == 2) { if (tabla.Rows[0][6].ToString() == "E"){ //AGREGARLA A PREINSCRIPCION string consulta = "INSERT INTO preinscripcion (numcontrol,cvemateria,hora,status) VALUES ('" + numctrl + "','" + clave + "','O','E')"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); int Done = MyCmd.ExecuteNonQuery(); if (Done > 0){ refrescar(); if (registro[0] > 0) MessageBox.Show("Tienes especiales registrados"); paso++; proceso();}} if (tabla.Rows[0][6].ToString() == "R"){ if (registro[1] == 0)//primer registro{ ventana(); continuar = seguir(); if (continuar == true) { paso++; proceso();} else{ foreach (string dificil in dificiles) { if (clave == dificil) dif = true; } if (dif == true) { paso++; proceso();}}} elseif (registro[1] == 1)//segundo registro{ foreach (string dificil in dificiles) { if (clave == dificil) dif = true; } if (dif == false) { ventana(); paso++; proceso();} else MessageBox.Show("No puedes tomar otra de ciencias basicas");}} if (tabla.Rows[0][6].ToString() == "P"){ int temp = int.Parse(lbldisp.Text)int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 4){ ventana(); continuar = seguir(); if (continuar==true) { pasito++; if (pasito == int.Parse(txt_semestre.Text)) paso++; proceso();}} else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");} if (tabla.Rows[0][6].ToString() == "D"){

Manual Tcnico

23

int temp = int.Parse(lbldisp.Text)int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 4) { ventana(); continuar = seguir(); if (continuar == true) { paso++; proceso();}} else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");} return; } if (caso == 3) if (tabla.Rows[0][6].ToString() == "R"){ if (registro[1] == 0)//primer registro{ ventana(); continuar = seguir(); if (continuar == true) { paso++; proceso();} else{ foreach (string dificil in dificiles){ if (clave == dificil) dif = true; } if (dif == true){ crepe += 2; paso++; proceso();} else crepe++;}} elseif (registro[1] > 0 && continuar == false)//segundo registro{ int x = 1; foreach (string dificil in dificiles){ if (clave == dificil) { dif = true; x = 2;}} int temp = int.Parse(lbldisp.Text) int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 && (registro[1] + x) <= 4) { ventana(); crepe += x; continuar = seguir(); if (continuar == true){ paso++; proceso();} }else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");}} if (tabla.Rows[0][6].ToString() == "P"){ int temp = int.Parse(lbldisp.Text) int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 8){ ventana(); continuar = seguir(); if (continuar == true){ pasito++; if (pasito == int.Parse(txt_semestre.Text)) paso++; proceso();}} else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");}

Manual Tcnico

24

if (tabla.Rows[0][6].ToString() == "D"){ int temp = int.Parse(lbldisp.Text)int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 8){ ventana(); continuar = seguir(); if (continuar == true){ paso++; proceso();}} else MessageBox.Show("Materia de "+tabla.Rows[0]["creditos"].ToString()+" creditos","Sobrecarga de creditos");} return;} if (caso == 0){ if (tabla.Rows[0][6].ToString() == "P"){ int temp = int.Parse(lbldisp.Text) int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 8){ ventana(); continuar = seguir(); if (continuar == true){ pasito++; if (pasito == int.Parse(txt_semestre.Text)) paso++; proceso();} else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");} if (tabla.Rows[0][6].ToString() == "D"){ int temp = int.Parse(lbldisp.Text) int.Parse(tabla.Rows[0]["creditos"].ToString()); if (temp >= 0 &&int.Parse(lblcmat.Text) < 8){ ventana(); continuar = seguir(); if (continuar == true){ paso++; proceso();}} else MessageBox.Show("Materia de " + tabla.Rows[0]["creditos"].ToString() + " creditos", "Sobrecarga de creditos");} return;}} bool seguir(){ int r = 0; foreach(Button btn in m_button){ if (btn.Enabled == true) r++;} if (r == 0) returntrue; else returnfalse;} Funcin para mostrar la ventana de registro con datos de la materia seleccionada privatevoid ventana(){ frm_agregar fagregar = newfrm_agregar(); fagregar.clave = clave; fagregar.numctrl = numctrl; fagregar.ver = 0; fagregar.ShowDialog(); if (fagregar.DialogResult == DialogResult.Yes) refrescar();}

Manual Tcnico

25

Funcin para determinar las materias disponibles a tomar privatevoid btdisponibles_Click(object sender, EventArgs e) { ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); int sem = int.Parse(txt_semestre.Text); int contador=0; //ESTABLECER PENDIENTES, DISPONIBLES Y SIN CURSAR //Buscar pendientes, disponibles y sin cursar y ponerlas sin cursar string consulta = "UPDATE alumno_detalle SET status='S' where numcontrol='" + numctrl + "' AND (status='D' OR status='P');"; MySqlCommand MyCmd3 = newMySqlCommand(consulta, MyConnection); MyCmd3.ExecuteNonQuery(); //contar reprobadas y especiales DataTable tabla = newDataTable(); consulta = "select cvemateria,status from alumno_detalle where numcontrol='" + numctrl + "' AND (status='R' OR status='E');"; MySqlDataAdapter da3 = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd3 = newMySqlCommandBuilder(da3); da3.Fill(tabla); contador += tabla.Rows.Count; //ATRASADAS (PENDIENTES) for (int i = 1; i <sem; i++){ //seleccionar las de i semestre con status de sin cursar DataTable tabla2 = newDataTable(); string seleccion = "select alumno_detalle.numcontrol,alumno_detalle.cvemateria,alumno_detalle.status,materia s.semestre from alumno_detalle, materias where alumno_detalle.numcontrol='" + numctrl + "' AND alumno_detalle.cvemateria = materias.cvemateria AND materias.semestre='" + i.ToString() + "' AND alumno_detalle.status='S';"; MySqlDataAdapter da2 = newMySqlDataAdapter(seleccion, MyConnection); MySqlCommandBuilder cmd2 = newMySqlCommandBuilder(da2); da2.Fill(tabla2); for (int y = 0; y < tabla2.Rows.Count; y++){ //clave materia string cve = tabla2.Rows[y]["cvemateria"].ToString(); //clave prerrequisito string checar = "SELECT premateria FROM materias where cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd = newMySqlCommand(checar, MyConnection); string premateria = MyCmd.ExecuteScalar().ToString(); if (premateria == ""){ if (cve == "17F" || cve == "17G"){ if (tcred > 180){ //se registra Pendiente string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra Pendiente string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //buscar status de prerrequisito string checar2 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + premateria + "';";

Manual Tcnico

26

MySqlCommand MyCmd2 = newMySqlCommand(checar2, MyConnection); string status = MyCmd2.ExecuteScalar().ToString(); if (status == "A" || status == "C"){ //checar si otro prerrequisito if (cve == "C63" || cve == "17C"){ string prerreq = ""; if (cve == "C63") prerreq = "A63"; if (cve == "17C") prerreq = "G74"; string checar5 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + prerreq + "';"; MySqlCommand MyCmd5 = newMySqlCommand(checar5, MyConnection); string status2 = MyCmd5.ExecuteScalar().ToString(); if (status2 == "A" || status2 == "C"){ //se registra disponible string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra disponible string update = "UPDATE alumno_detalle SET status='P' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;}}}}} /////DISPONIBLES for (int i = sem; i <= (sem+2); i++){ if (contador >= 8) { break; } //seleccionar las de i semestre con status de sin cursar DataTable tabla2 = newDataTable(); string seleccion = "select alumno_detalle.numcontrol,alumno_detalle.cvemateria,alumno_detalle.status,materia s.semestre from alumno_detalle, materias where alumno_detalle.numcontrol='" + numctrl + "' AND alumno_detalle.cvemateria = materias.cvemateria AND materias.semestre='" + i.ToString() + "' AND alumno_detalle.status='S';"; MySqlDataAdapter da2 = newMySqlDataAdapter(seleccion, MyConnection); MySqlCommandBuilder cmd2 = newMySqlCommandBuilder(da2); da2.Fill(tabla2); for (int y = 0; y < tabla2.Rows.Count; y++){ //clave materia string cve = tabla2.Rows[y]["cvemateria"].ToString(); //clave prerrequisito string checar = "SELECT premateria FROM materias where cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd = newMySqlCommand(checar, MyConnection); string premateria = MyCmd.ExecuteScalar().ToString(); if (premateria == ""){ if (cve == "17F" || cve == "17G"){ if (tcred > 180) { //se registra Pendiente string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra Pendiente

Manual Tcnico

27

string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;}} else{ //buscar su status string checar2 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + premateria + "';"; MySqlCommand MyCmd2 = newMySqlCommand(checar2, MyConnection); string status = MyCmd2.ExecuteScalar().ToString(); if (status == "A" || status == "C"){ //checar si otro prerrequisito if (cve == "C63" || cve == "17C"){ string prerreq = ""; if (cve == "C63") prerreq = "A63"; if (cve == "17C") prerreq = "G74"; string checar5 = "SELECT status FROM alumno_detalle where numcontrol= '" + numctrl + "' AND cvemateria='" + prerreq + "';"; MySqlCommand MyCmd5 = newMySqlCommand(checar5, MyConnection); string status2 = MyCmd5.ExecuteScalar().ToString(); if (status2 == "A" || status2 == "C"){ //se registra disponible string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;} }else{ //se registra disponible string update = "UPDATE alumno_detalle SET status='D' WHERE numcontrol='" + numctrl + "' AND cvemateria= '" + tabla2.Rows[y][1].ToString() + "';"; MySqlCommand MyCmd4 = newMySqlCommand(update, MyConnection); int Done = MyCmd4.ExecuteNonQuery(); contador++;}}}}} MyConnection.Close(); refrescar(); MessageBox.Show("Actualizado","Atencion",MessageBoxButtons.OK,MessageBoxIcon.Info rmation); } privatevoid proceso(){ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); int sem = int.Parse(txt_semestre.Text); //HABILITA O DESHABILITA SEGUN EL CASO //ESPECIALES if (paso == 0) { foreach (Button btn in m_button) { if (btn.BackColor == Color.FromName("Red") && btn.Font.Bold == false) { btn.Enabled = true; btn.FlatStyle = FlatStyle.Standard; MessageBox.Show("Tienes especiales que tomar");}}} //REPETICIONES if (paso == 1) { foreach (Button btn in m_button) { if (btn.BackColor == Color.FromName("Yellow") && btn.Font.Bold == false) { btn.Enabled = true; btn.FlatStyle = FlatStyle.Standard; }}} //ATRASADAS

Manual Tcnico

28

if (paso == 2) { //ATRASADAS for (int i = pasito; i < sem; i++){ //seleccionar las de i semestre con status de pendiente DataTable tabla = newDataTable(); string consulta2 = "SELECT alumno_detalle.cvemateria from alumno_detalle,materias where alumno_detalle.numcontrol='" + numctrl + "' AND alumno_detalle.cvemateria = materias.cvemateria AND materias.semestre='" + i.ToString() + "' AND alumno_detalle.status='P';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta2, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tabla); if (tabla.Rows.Count > 0) { pasito = i; string cve; for (int y = 0; y < tabla.Rows.Count; y++){ foreach (Button btn in m_button) { cve = btn.Text; cve = cve.Substring(0, 3); //buscar boton de materia sin cursar y sin preinscribir if (cve == tabla.Rows[y][0].ToString() && btn.Font.Bold == false) { btn.Enabled = true; btn.FlatStyle = FlatStyle.Standard; break;//sale del foreach}}} break;//salir del for i=pasito si encontro pendiente}} //continuar? continuar = seguir(); if (continuar == true) paso++;} //DISPONIBLES if (paso == 3) { foreach (Button btn in m_button) { if (btn.BackColor == Color.FromName("DodgerBlue") && btn.Font.Bold == false) { btn.Enabled = true; btn.FlatStyle = FlatStyle.Standard; }}} //FIN if (paso == 4) { if (int.Parse(lblcreditos.Text) >= int.Parse(lblmin.Text)) MessageBox.Show("Preinscripcion completada, puede modificar o terminar", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show("Faltan materias para carga minima","Atencion",MessageBoxButtons.OK,MessageBoxIcon.Information); string res = MessageBox.Show("Desea salir?","",MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString(); if (res == "Yes") this.Close(); else{ refrescar(); btiniciar.Enabled = true; gbproceso.Enabled = false; }}}

Manual Tcnico

29

Ventana de registro
Si la variable es ver es igual a 0 mostrara la ventana para registrar la materia seleccionada.

1. Botn agregar: Hace la conexin a la base de datos, busca que no se

encuentre registrada otra materia a la misma hora y que no est la misma materia registrada si no se encuentran se registrara en la tabla preinscripcin el nmero de control, la clave de la materia, la hora y el status en caso contrario muestra el mensaje Ya tienes registrada la materia en la hora: o Hora registrada con la materia: Se revisa si es optativa para registrar la otra opcin con horario de Otra y que no pueda ser tomada, muestra el mensaje Materia registrada.

Si la variable ver es igual a 1 mostrara la ventana para consultar las materias registradas.

1. Botn Borrar: Pregunta Esta seguro de borrar? si su respuesta es Si se borra el registro de la materia seleccionada de la tabla preinscripcin y si es optativa borra la otra opcin para que puedan ser tomadas de nuevo, muestra el mensaje Se ha borrado exitosamente.

Manual Tcnico

30

Ventana de reportes
Al iniciar la ventana hace la conexin a la base de datos, llena los combo box de carrera y habilita las opciones segn los permisos del usuario.

1 2

2. Botn Por materia: Calcula las estadsticas generales, las muestra y habilita las materias de la carrera seleccionada para ver el reporte de cada una. Se selecciona la materia a consultar del combo box de materias o se ingresa la clave luego Enter para generar y registrar el reporte, en caso de no encontrarse la materia mostrara el mensaje No se encontr la materia. 3. Botn Buscar: Busca la materia seleccionada para generar y registrar el reporte.

Manual Tcnico

31

4. Botn De carrera: Muestra la tabla reporte donde la carrera sea la seleccionada. 5. Botn Guardar datos: Guarda los datos en un archivo de Excel.

Evento del boton Por carrera privatevoid btreporte_Click(object sender, EventArgs e){ gbbuscar.Enabled = true; btnExportar.Visible = false; dataGridView1.Visible = false; reportViewer1.Visible = true; ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //ESTADISTICAS GENERALES //Total de alumnos System.Data.DataTable tablaalumnos = new System.Data.DataTable(); string consulta = "SELECT numcontrol FROM alumno WHERE carrera='"+carrera+"';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tablaalumnos); total2 = tablaalumnos.Rows.Count; //Alumnos preinscritos System.Data.DataTable tablapreinscritos = new System.Data.DataTable(); consulta = "SELECT DISTINCT numcontrol FROM preinscripcion"; da = newMySqlDataAdapter(consulta, MyConnection); cmd = newMySqlCommandBuilder(da); da.Fill(tablapreinscritos); int preinscritos = tablapreinscritos.Rows.Count; double porpre = preinscritos * 100; porpre = porpre / total2; porpre = Math.Round(porpre, 2); int ausentismo = total2 - preinscritos; double poraus = 100 - porpre; poraus = Math.Round(poraus, 2); //etiquetas lbltotalal.Text = total2.ToString(); lblpreinscritos.Text = preinscritos.ToString(); lblausentismo.Text = ausentismo.ToString(); lblprepor.Text = porpre.ToString(); lblauspor.Text = poraus.ToString(); gbgral.Visible = true; //gbbuscar //Materias de la carrera DataSet dsmaterias = newDataSet(); consulta = "SELECT nombre FROM materias WHERE carrera='"+carrera+"';"; da = newMySqlDataAdapter(consulta, MyConnection); da.Fill(dsmaterias, "nombre"); cbmaterias.DataSource = dsmaterias.Tables[0].DefaultView; cbmaterias.DisplayMember = "nombre"; gbbuscar.Visible = true;} Funcin para generar el reporte privatevoid generarrep(){ this.Cursor = Cursors.WaitCursor;

Manual Tcnico

32

ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //Total de alumnos en la materia System.Data.DataTable tablaalumnos = new System.Data.DataTable(); string consulta = "SELECT numcontrol FROM preinscripcion WHERE cvemateria='" + clave + "';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tablaalumnos); total = tablaalumnos.Rows.Count; mat = 0; vesp = 0; System.Data.DataTable tablahora = new System.Data.DataTable(); for (int i = 0; i < 7; i++){ //Total de alumnos por hora (matutino) consulta = "SELECT numcontrol FROM preinscripcion WHERE cvemateria='" + clave + "' AND hora='"+ hora[i] +"';"; da = newMySqlDataAdapter(consulta, MyConnection); cmd = newMySqlCommandBuilder(da); da.Fill(tablahora); alumnos[i] = tablahora.Rows.Count; mat+=alumnos[i]; } for (int i = 7; i < 14; i++){ //Total de alumnos por hora (vespertino) consulta = "SELECT numcontrol FROM preinscripcion WHERE cvemateria='" + clave + "' AND hora='" + hora[i] + "';"; da = newMySqlDataAdapter(consulta, MyConnection); cmd = newMySqlCommandBuilder(da); da.Fill(tablahora); alumnos[i] = tablahora.Rows.Count; vesp += alumnos[i]; }// pormateria = total * 100; pormateria = pormateria/total2; pormateria = Math.Round(pormateria, 2); this.Cursor = Cursors.Default; } Funcin para registrar y mostrar el reporte privatevoid registrarrep(){ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); //BUSCAR que no est la materia System.Data.DataTable tabla = new System.Data.DataTable(); string consulta = "select cvemateria FROM reporte where cvemateria= '" + clave + "';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta, MyConnection); MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); da.Fill(tabla); if (tabla.Rows.Count == 0) consulta = "INSERT INTO reporte (cvemateria,A,B,C,D,E,F,G,H,I,J,K,L,M,N,Mat,Vesp,Total) VALUES ('" + clave + "','" + alumnos[0].ToString() + "','" + alumnos[1].ToString() + "','" + alumnos[2].ToString() + "','" + alumnos[3].ToString() + "','" + alumnos[4].ToString() + "','" + alumnos[5].ToString() + "','" + alumnos[6].ToString() + "','" + alumnos[7].ToString() + "','" + alumnos[8].ToString() + "','" + alumnos[9].ToString() + "','" + alumnos[10].ToString() + "','" + alumnos[11].ToString() + "','" + alumnos[12].ToString() + "','" + alumnos[13].ToString() +"','"+mat.ToString()+"','"+vesp.ToString()+"','"+total.ToString()+"');"; else

Manual Tcnico

33

consulta = "UPDATE reporte SET A='" + alumnos[0].ToString() + "',B='" + alumnos[1].ToString() + "',C='" + alumnos[2].ToString() + "',D='" + alumnos[3].ToString() + "',E='" + alumnos[4].ToString() + "',F='" + alumnos[5].ToString() + "',G='" + alumnos[6].ToString() + "',H='" + alumnos[7].ToString() + "',I='" + alumnos[8].ToString() + "',J='" + alumnos[9].ToString() + "',K='" + alumnos[10].ToString() + "',L='" + alumnos[11].ToString() + "',M='" + alumnos[12].ToString() + "',N='" + alumnos[13].ToString() + "',Mat='" + mat.ToString() + "',Vesp='" + vesp.ToString() + "',Total='" + total.ToString() + "' WHERE cvemateria='" + clave + "';"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); MyCmd.ExecuteNonQuery(); MyConnection.Close(); //reportviewer //Info de la reporte DataSet ds = newDataSet(); System.Data.DataTable dt = new System.Data.DataTable(); string busqueda = "select * FROM reporte where cvemateria= '" + clave + "';"; da = newMySqlDataAdapter(busqueda, MyConnection); cmd = newMySqlCommandBuilder(da); da.Fill(dt); try{ ReportParameter[] parametro = newReportParameter[20]; parametro[0] = newReportParameter("pclave", clave); parametro[1] = newReportParameter("pmateria", materia); parametro[2] = newReportParameter("ptotal", total.ToString()); parametro[3] = newReportParameter("pportotal", pormateria.ToString()); parametro[4] = newReportParameter("pa", alumnos[0].ToString()); parametro[5] = newReportParameter("pb", alumnos[1].ToString()); parametro[6] = newReportParameter("pc", alumnos[2].ToString()); parametro[7] = newReportParameter("pd", alumnos[3].ToString()); parametro[8] = newReportParameter("pe", alumnos[4].ToString()); parametro[9] = newReportParameter("pf", alumnos[5].ToString()); parametro[10] = newReportParameter("pg", alumnos[6].ToString()); parametro[11] = newReportParameter("ph", alumnos[7].ToString()); parametro[12] = newReportParameter("pi", alumnos[8].ToString()); parametro[13] = newReportParameter("pj", alumnos[9].ToString()); parametro[14] = newReportParameter("pk", alumnos[10].ToString()); parametro[15] = newReportParameter("pl", alumnos[11].ToString()); parametro[16] = newReportParameter("pm", alumnos[12].ToString()); parametro[17] = newReportParameter("pn", alumnos[13].ToString()); parametro[18] = newReportParameter("pmat", mat.ToString()); parametro[19] = newReportParameter("pvesp", vesp.ToString()); reportViewer1.ProcessingMode = ProcessingMode.Local; ReportDataSource datasource = newReportDataSource("ds", dt); reportViewer1.LocalReport.ReportEmbeddedResource = "Preinscripciones.Report1.rdlc"; reportViewer1.LocalReport.DataSources.Clear(); reportViewer1.LocalReport.DataSources.Add(datasource); reportViewer1.LocalReport.SetParameters(parametro); reportViewer1.Visible = true; reportViewer1.RefreshReport();} catch (Exception ex) { MessageBox.Show(ex.ToString());}} Evento del boton Guardar datos privatevoid btnExportar_Click(object sender, EventArgs e){ string[] titulos = { "Materia", "Clave", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "Matutino", "Vespertino", "Total" }; nmExcel.ApplicationClass ExcelApp = new nmExcel.ApplicationClass();

Manual Tcnico

34

ExcelApp.Application.Workbooks.Add(Type.Missing); //titulos for (int j = 0; j < 19; j++){ ExcelApp.Cells[1, j + 1] = titulos[j];} //contenido for (int i = 0; i < dataGridView1.Rows.Count; i++){ DataGridViewRow Fila = dataGridView1.Rows[i]; for (int j = 0; j < Fila.Cells.Count; j++){ ExcelApp.Cells[i + 2, j + 1] = Fila.Cells[j].Value;}} ExcelApp.Columns.AutoFit(); // ---------- cuadro de dialogo para Guardar SaveFileDialog CuadroDialogo = newSaveFileDialog(); CuadroDialogo.DefaultExt = "xls"; CuadroDialogo.Filter = "xls file(*.xls)|*.xls"; CuadroDialogo.AddExtension = true; CuadroDialogo.RestoreDirectory = true; CuadroDialogo.Title = "Guardar"; CuadroDialogo.InitialDirectory = @"c:\"; if (CuadroDialogo.ShowDialog() == DialogResult.OK){ ExcelApp.ActiveWorkbook.SaveCopyAs(CuadroDialogo.FileName); ExcelApp.ActiveWorkbook.Saved = true; CuadroDialogo.Dispose(); CuadroDialogo = null; ExcelApp.Quit();}}}}

Manual Tcnico

35

Ventana de importar base de datos


Al iniciar la ventana, se hace la conexin a la base de datos y muestra las tablas en ella a la cual se le podrn importar datos.

1 2
1. Botn Seleccionar archivo: Muestra la ventana para elegir el archivo a importar dependiendo de la opcin seleccionada se permitir elegir un archivo *.txt o *.sql. 2. Botn Importar: Se revisa si se importara un txt, si los datos se importaran a tabla alumnos, se valida el archivo, en caso contrario, se pregunta Esta seguro de importar? si la respuesta es OK se importa y muestra el mensaje Se insertaron X registros, si es un sql se crea un proceso que importa el archivo y se mostrara el mensaje Importacin de bdd exitosa y se registrara el movimiento Importacin respaldo bdd.

Evento del boton Importar privatevoid btnImportar_Click(object sender, EventArgs e){ this.Cursor = Cursors.WaitCursor; if (rbTxt.Checked == true){ if (cbtabla.Text == "alumno"){ validaralumnos();} else{ //Importar txt try{ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); string consulta = "LOAD DATA INFILE '" + archivo + "' INTO TABLE " + cbtabla.Text + " FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';"; string res = MessageBox.Show("Seguro de importar: " + archivo + "?", "Confirmacion", MessageBoxButtons.OKCancel, MessageBoxIcon.Question).ToString(); if (res == "OK"){ MySqlCommand cmd = newMySqlCommand(consulta, MyConnection); int Done = 0; Done = cmd.ExecuteNonQuery(); MessageBox.Show("Se insertaron : " + Done.ToString() + " registros");} this.Close(); accion = "Importar txt"; movimiento(accion); this.Cursor = Cursors.Default;} catch (MySqlException ex){ MessageBox.Show("Error: " + ex.Message);}

Manual Tcnico

36

MyConnection.Close();}} elseif (rbSql.Checked == true){ StreamReader file = newStreamReader(archivo); ProcessStartInfo proc = newProcessStartInfo(); proc.Arguments = string.Format("--host={0} --user={1} -password={2}",server, user, password); proc.FileName = string.Format(@"{0}\mysql.exe", filebin); proc.RedirectStandardInput = true; proc.RedirectStandardOutput = false; proc.UseShellExecute = false; proc.CreateNoWindow = true; try{ Process p = Process.Start(proc); string res = file.ReadToEnd(); file.Close(); p.StandardInput.WriteLine(res); p.Close(); this.Cursor = Cursors.Default; MessageBox.Show("Importacion de BDD exitosa"); accion = "Importar respaldo bdd"; movimiento(accion);} catch(Exception exc){ MessageBox.Show(exc.ToString());}}} Funcion para validar alumnos privatevoid validaralumnos(){ ConnStr = "Server=" + server + ";User id=" + user + ";Database=" + database + ";Password=" + password + ";"; MySqlConnection MyConnection = newMySqlConnection(ConnStr); MyConnection.Open(); string[] insertar = { "\n", "\n", "\n", "\n", "\n", "\n", "\n" }; //leer linea a linea int contador = 0; bool continuar=false; StreamReader leido; try{ leido = File.OpenText(archivo); continuar = true; } catch{ MessageBox.Show("Error, verifique que el archivo a importar no este siendo usado");} if (continuar == true){ leido = File.OpenText(archivo); do{ string registro = leido.ReadLine(); string[] campos = Regex.Split(registro, "\t"); for (int i = 0; i < campos.Length; i++){ insertar[i] = campos[i].Trim();} int error = 0; //Numcontrol (sean 8 carac num y k no se repita)//////////// if (insertar[0].Length != 8){ string resp = MessageBox.Show("El num de control " + insertar[0] + " esta incompleto","Error",MessageBoxButtons.OKCancel).ToString(); if (resp == "Cancel"){ leido.ReadToEnd();} error++;} //k no se repita if (error == 0){ DataTable tabla = newDataTable(); string consulta = "select numcontrol FROM alumno where numcontrol='" + insertar[0] + "';"; MySqlDataAdapter da = newMySqlDataAdapter(consulta, MyConnection);

Manual Tcnico

37

MySqlCommandBuilder cmd = newMySqlCommandBuilder(da); try { da.Fill(tabla);} catch { } if (tabla.Rows.Count > 0){ error++;}} //k sean numeros if (error == 0){ try{ int x = int.Parse(insertar[0]);} catch{ MessageBox.Show("Solo se aceptan numeros"); error++;}} ///////////Nombre (k no tengan numeros)/////// if (error == 0){ if (insertar[1] != "\n"){ insertar[1] = Regex.Replace(insertar[1], "[0-9]", ""); if (insertar[1] == ""){ MessageBox.Show("El num de control " + campos[0] + " no tiene nombre registrado");} }else{ MessageBox.Show("El num de control " + campos[0] + " no tiene nombre registrado");}} /////////////Semestre (1-13) if (error == 0){ if (insertar[2] != "\n"){ try{ int x = int.Parse(insertar[2]); if (x < 0 && x > 14){ MessageBox.Show(campos[0] + ": Semestre no valido"); error++;}} catch { }}} ///////////Carrera (1-3) if (error == 0){ if (insertar[3] != "\n"){ try{ int x = int.Parse(insertar[3]); if (x < 0 && x > 3){ MessageBox.Show(campos[0] + ": Carrera no valido"); error++;}} catch { }}} ////////////Promedio if (error == 0){ if (insertar[4] != "\n"){ try{ double x = Convert.ToDouble(insertar[4]); while(x > 100){ x = x / 10;} insertar[4] = x.ToString();} catch{ if (campos[2] == "1"){ insertar[4] = "0";} else{ MessageBox.Show(campos[0] + " de " + insertar[2] + " semestre tiene promedio no valido"); insertar[4] = "0";}}}} ///////////Periodo if (error == 0){ if (insertar[5] != "\n"){ try{ int x = int.Parse(insertar[5]); if (x < 0 && x > 3){

Manual Tcnico

38

MessageBox.Show(campos[0] + ": Periodo no valido"); error++;}} catch { } }else{ try{ string consulta = "select clave FROM periodo where status='A';"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); string periodo = MyCmd.ExecuteScalar().ToString(); insertar[5] = periodo;} catch{ MessageBox.Show("Falta la tabla periodo"); break;}}} ///////////Especialidad if (error == 0){ if (insertar[6] != "\n"){ try{ int x = int.Parse(insertar[6]); if (x < 0 && x > 4){ MessageBox.Show(campos[0] + ": Especialidad no valido"); error++;}} catch { } }else{ try{ string consulta = "select especialidad FROM carrera where clave='" + insertar[3] + "';"; MySqlCommand MyCmd = newMySqlCommand(consulta, MyConnection); string especialidad = MyCmd.ExecuteScalar().ToString(); insertar[6] = especialidad;} catch{ MessageBox.Show("Falta la tabla carrera"); break;}}} //GRABAR? if (error == 0){ //insert string insert = "INSERT INTO alumno (numcontrol, nombre, semestre, carrera, promedio, periodo, especialidad) VALUES('" + insertar[0] + "','" + insertar[1] + "','" + insertar[2] + "','" + insertar[3] + "','" + insertar[4] + "','" + insertar[5] + "','" + insertar[6] + "')"; MySqlCommand com = newMySqlCommand(insert, MyConnection); int Done = com.ExecuteNonQuery(); contador++;} } while (leido.EndOfStream == false); leido.Close(); MyConnection.Close(); MessageBox.Show(contador.ToString() + " registros importados");}}

Manual Tcnico

39

Ventana usuario
Al cargarse la ventana se hace la conexin a la base de datos. Si la variable operacin es igual a micuenta se mostrara la ventana:

3 2 1

1. Botn Modificar: Habilita los campos y botn cambiar password para modificar su cuenta de usuario. a. Botn Guardar: Modifica en la tabla usuario los nuevos datos, muestra el mensaje Se ha modificado exitosamente y registra el movimiento Modificar usuario. 2. Botn Cancelar: Se reinician las variables y se refresca la ventana a. Botn Borrar: Pregunta Est seguro de querer realizar esta accin?, si la respuesta es S, se borra el registro de la tabla usuario, muestra el mensaje Se ha borrado exitosamente y registra el movimiento Borrar usuario. 3. Botn Cambiar password: Habilita los campos para modificar el password a. Botn Guardar password: Revisa que ambos password sean iguales, si es as, se encripta, se modifica en la tabla usuario, muestra el mensaje Se ha modificado exitosamente, registra la accin Cambiar password si no coinciden muestra el mensaje No coinciden los passwords o estn en blanco.

4. Permisos: Muestra la ventana permisos y registra la accin Modificar permisos.

Manual Tcnico

40

5. Botn Agregar: Habilita los campos para agregar un nuevo usuario del sistema. 6. Botn Guardar: Revisa los dos campos de password que sean iguales, encripta el password y agrega los datos en un nuevo registro en la tabla usuario y muestra el mensaje Se agrego exitosamente, se refresca la ventana y se registra el movimiento Agregar usuario, en caso de no coincidir muestra el mensaje No coinciden los passwords o estn en blanco.

Manual Tcnico

41

Ventana permisos
Se hace la conexin a la base de datos y se muestran todos los permisos que se pueden dar tomados de la tabla permiso y marca las que tiene actualmente el usuario seleccionado de la tabla permisoxusuario.

Botn Aceptar: Borra todos los permisos de la tabla permisoxusuario para volver a asignarlos, insertndolos de nuevo, para incluir cambios, muestra el mensaje Se agrego exitosamente y se cierra la ventana.

Ventana Movimientos
Se hace la conexin a la base de datos y se cargan los combo box usuario, movimiento y fecha de la tabla movimiento al seleccionarse algn valor de algn combo box, se muestra los movimientos con el valor seleccionado.

Botn ver todos los movimientos: Muestra toda la tabla movimiento.

Ventana configuracin
Al cargar la ventana, muestra los parmetros que se toman de config.txt para hacer la conexin a la base de datos.

1 2
1. Botn Buscar: Muestra la ventana para seleccionar el folder bin de MySql. 2. Botn Aceptar: Guarda los valores como nuevos parmetros en el archivo config.txt e intenta hacer la conexin a la base de datos, si se logra, se muestra el mensaje Se ha conectado al servidor con xito en caso contrario se muestra el mensaje Error Conectndose al servidor.

Manual Tcnico

43