Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
12
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
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
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.
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.
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
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
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
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.
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
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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.
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.
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.
Comando
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
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
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
TE TR
TE TR
8. Pruebas y correcciones
TE TR
TE TR
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.
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.
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.
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
40
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.
Captura de alumnos Realizar preinscripciones Imprimir reportes Manejar las bases de datos
Cerrar sesin
41
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
43
Generar reporte
Inicio
Reporte
No
Materia
No Carrera
Si Si Seleccionar carrera
Seleccionar materia
Generar reporte
Imprimir reporte
Fin
Control de usuarios
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
Sesin
Inicio
Iniciar sesin
Usuario Password
Validar
No
Correcto
Si
Cualquier men
Fin
47
Agregar alumno Borrar alumno Modificar alumno Buscar alumno Ver retcula Modificar retcula
Capturar calificaciones Preinscribir alumno Ver reporte Imprimir reporte Exportar reporte
Alumnos:
Usuarios
Usuario, nombre, password, departamento al que pertenecen, y correo electrnico status en el sistema.
48
Cada uno poseer permisos con los que podr trabajar en el sistema como realizar consulta, modificar, crear o borrar.
Materias
Clave de la materia, nombre, crditos, carrera a la que pertenecen, calificacin, status, forma de acreditacin, prerrequisito, optativa, especialidad.
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.
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
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.
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
2 forma. ppal
3 forma. frm_config
4 forma. Frm_captura
5 forma. frm_capret
53
6 forma. frm_import
7 forma. frm_pre
8 forma. frm_agregar
54
10 forma. frmuser
11 forma. frmpermisos
12 forma. frmmov
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 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
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
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 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 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 permiso
Campo clave descripcion Tipo int(10) varchar(100) Nulo No No Predeterminado Comentarios Id del permiso Nombre del permiso MIME
Tabla permisoxusuario
Campo usuario permiso Tipo varchar(10) int(10) Nulo No No Predeterminado Comentarios Id del usuario Id del permiso MIME
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 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 semestre
Campo clave descripcion Tipo int(10) varchar(45) Nulo No No Predeterminado Comentarios Id del semestre Datos del semestre MIME
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 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
Diagrama entidad-relacin
61
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.
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.
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
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
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
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
ITCJ
Manual de usuario
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
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
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
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
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
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
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
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
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.
Manual de Usuario
12
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
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
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.
Opciones de bsqueda
Listado de alumnos
Manual de Usuario
15
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
Manual de Usuario
16
Semestre
Carrera o Licenciatura en informtica plan 7 o Ingeniera en Sistemas Computacionales plan 26 o Ingeniera en Sistemas Computacionales plan 6
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
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
Listado de materias con el estatus, el cual podemos usar para recorrer la retcula
Manual de Usuario
19
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:
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
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
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
En esta ventana podemos cancelar la accin de borrar o confirmarla dando por resultado:
Manual de Usuario
23
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:
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
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 >>.
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
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
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
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
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
Manual de Usuario
29
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
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
Manual de Usuario
30
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
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
ITCJ
Manual tcnico
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
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.
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.
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.
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.
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
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.
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.
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