Sunteți pe pagina 1din 95

Universidad Nacional Autónoma De Nicaragua

Unan – León

Facultad De Ciencias Puras


Departamento De Computación

Tema:
Sistema de Gestión Académica para el colegio Madre María
Luisa, en la ciudad de León.

Integrantes:

Br. Isidro Francisco Padilla Reyes.

Br. Levin Dany Pichardo Berrios.

Br. Sandra Patricia Sánchez

León, 20 de Septiembre del 2012.


Introducción

Los sistemas de información han sido desde su creación de gran utilidad para las personas,
facilitándoles cada una de las actividades que realizan y que pueden ser automatizadas, para
este fin fueron creados.

Son muchas las áreas en las que se pueden implementar los sistemas de información, tales
como instituciones gubernamentales, empresas privadas, instituciones educativas como
colegios y universidades, instituciones de salud, etc. Y son muchas los tipos de aplicaciones
que pueden ser creadas, como aplicaciones contables, de transacciones bancarias, comercial,
académicas como registro de notas, registro de matriculas, aplicaciones web, etc.

Dadas las utilidades que proporcionan estos sistemas, en el presente trabajo se ha propuesto
creación de un Sistema de Gestión Académica para el Colegio Católico Madre María Luisa a
través de un entorno web, el cual pondrá a disposición de los diferentes usuarios las
funcionalidades requeridas en el centro para llevar a cabo los procesos de gestión académica.

Entre algunas de las funciones más relevantes del sistema se encontrarán: el registro de
matriculas, calificaciones, expedientes de los docentes y nuevas asignaturas, acceso y
manipulación a los datos de alumnos, docentes y pensum del centro. También la obtención de
información tales como certificados, boletines, algunas estadísticas y otras propias del sitio
web.
Antecedentes

En el centro para el registro de matricula existe un formato en papel, éste es llenado con los
datos personales del alumno, que luego junto con otros documentos, entregados como
requisitos para matricularse, pasan a ser parte del expediente del mismo.

La gestión de notas es llevada a cabo por la docencia, la secretaría y dirección, cada docente
lleva control de las calificaciones de sus alumnos, bimensualmente debe entregar las
calificaciones en un formato especifico a la Dirección, la cual registra las notas en un libro de
actas.

La entrega de boletines se realiza bimensualmente, existe un formato de boletín, cada alumno


cuenta con un ejemplar único de este para todo el año, en el que los profesores van
registrando las notas de los mismos.

El pensum se elabora anualmente, la dirección entrega a cada docente una lista de las
asignaturas a impartir y en que grados impartirá las mismas. También se les asigna a cada
docente un grado el cual guiará, esto significa que será el encargado de llevar el control de
todas las calificaciones de los alumnos para luego entregar los boletines.

Los certificados de notas solicitados por los alumnos egresados, son elaborados revisando los
registros de los libros de actas académicos correspondientes al año en el cual el alumno curso
determinado grado.

La apertura de una sección mas para un grado se hace en base a la cantidad de alumnos que la
dirección considera tener en su momento. Y la ubicación de un alumno en otra sección se hace
por medio del apellido del mismo o a consideración personal de la dirección.
Justificación

El presente trabajo tiene como fin la elaboración de un software que facilite el registro y
obtención de datos pertenecientes a cada uno de los procesos académicos del Colegio Católico
Madre María Luisa, el cual no cuenta aun con una automatización de ninguna de las
actividades académicas.

Con este sistema se almacenarán los datos de manera digital, para luego ser impresa y
archivada cierto tipo de información, también permitirá la generación de certificados y
boletines, estadísticas, noticias académicas, datos del centro, entre otros.
Objetivos

Objetivo General

 Elaborar un sistema con interfaz web para para la Gestión Académica del colegio
Madre María Luisa.

Objetivos Específicos

 Almacenar datos personales de los docentes y los alumnos del colegio.

 Registrar las notas académicas de los alumnos.

 Generar e imprimir boletines.

 Presentar estadísticas referentes al rendimiento académico de los alumnos.

 Mostrar información del centro y sus actividades académicas.

 Permitir la actualización del pensum académico y la designación a los docentes de


las asignaturas a impartir.

 Registrar información del centro y sus actividades académicas.


MARCO TEORICO

Cliente-servidor

Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el
servidor) que le da respuesta. En esta arquitectura la capacidad de proceso está repartida
entre los clientes y los servidores, aunque son más importantes las ventajas de tipo
organizativo debidas a la centralización de la gestión de la información y la separación de
responsabilidades, lo que facilita y clarifica el diseño del sistema.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se
ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo programa. Los
tipos específicos de servidores incluyen los servidores web, los servidores de archivo, los
servidores del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la
arquitectura básica seguirá siendo la misma.

Una disposición muy común son los sistemas multicapa en los que el servidor se descompone
en diferentes programas que pueden ser ejecutados por diferentes computadoras
aumentando así el grado de distribución del sistema.

La arquitectura cliente-servidor sustituye a la arquitectura monolítica en la que no hay


distribución, tanto a nivel físico como a nivel lógico.

La red Cliente/Servidor es aquella red de comunicaciones en la que todos los clientes están
conectados a un servidor, en el que se centralizan los diversos recursos y aplicaciones con que
se cuenta; y que los pone a disposición de los clientes cada vez que estos son solicitados. Esto
significa que todas las gestiones que se realizan se concentran en el servidor, de manera que
en él se disponen los requerimientos provenientes de los clientes que tienen prioridad, los
archivos que son de uso público y los que son de uso restringido, los archivos que son de sólo
lectura y los que, por el contrario, pueden ser modificados, etc. Este tipo de red puede
utilizarse conjuntamente en caso de que se esté utilizando en una red mixta.

PHP

Es un lenguaje de programación interpretado, diseñado originalmente para la creación de


páginas web dinámicas. Es usado principalmente en interpretación del lado del servidor
(server-side scripting) pero actualmente puede ser utilizado desde una interfaz de línea de
comandos o en la creación de otros tipos de programas incluyendo aplicaciones con interfaz
gráfica usando las bibliotecas Qt o GTK+.

PHP es un acrónimo recursivo que significa PHP Hypertext Pre-processor (inicialmente PHP
Tools, o, Personal Home Page Tools). Fue creado originalmente por Rasmus Lerdorf en 1994.
Publicado bajo la PHP License, la Free Software Foundation considera esta licencia como
software libre.
Historia

Fue originalmente diseñado en Perl, con base en la escritura de un grupo de CGI binarios
escritos en el lenguaje C por el programador danés-canadiense Rasmus Lerdorf en el año 1994
para mostrar su currículum vítae y guardar ciertos datos, como la cantidad de tráfico que su
página web recibía. El 8 de junio de 1995 fue publicado "Personal Home Page Tools" después
de que Lerdorf lo combinara con su propio Form Interpreter para crear PHP/FI.

PHP 3

Dos programadores israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el
analizador sintáctico (parser en inglés) en el año 1997 y crearon la base del PHP3, cambiando
el nombre del lenguaje a la forma actual. Inmediatamente comenzaron experimentaciones
públicas de PHP3 y fue publicado oficialmente en junio del 1998.

Para 1999, Suraski y Gutmans reescribieron el código de PHP, produciendo lo que hoy se
conoce como motor Zend. También fundaron Zend Technologies en Ramat Gan, Israel.

PHP 4

En mayo de 2000 PHP 4 fue lanzado bajo el poder del motor Zend Engine 1.0. El día 13 de julio
de 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP.

PHP 5

El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine
2). La versión más reciente de PHP es la 5.3.3 (22 de julio de 2010), que incluye todas las
ventajas que provee el nuevo Zend Engine 2 como:

 Mejor soporte para la Programación Orientada a Objetos, que en versiones anteriores


era extremadamente rudimentario.

 Mejoras de rendimiento.

 Mejor soporte para MySQL con extensión completamente reescrita.

 Mejor soporte a XML ( XPath, DOM, etc. ).

 Soporte nativo para SQLite.

 Soporte integrado para SOAP.

 Iteradores de datos.

 Manejo de excepciones.

 Mejoras con la implementación con Oracle.


Características de PHP

 Es un lenguaje multiplataforma.

 Completamente orientado al desarrollo de aplicaciones web dinámicas con acceso a


información almacenada en una Base de Datos.

 El código fuente escrito en PHP es invisible al navegador y al cliente ya que es el


servidor el que se encarga de ejecutar el código y enviar su resultado HTML al
navegador. Esto hace que la programación en PHP sea segura y confiable.

 Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan
en la actualidad, destaca su conectividad con MySQL y PostgreSQL.

 Capacidad de expandir su potencial utilizando la enorme cantidad de módulos


(llamados ext's o extensiones).

 Posee una amplia documentación en su página oficial, entre la cual se destaca que
todas las funciones del sistema están explicadas y ejemplificadas en un único archivo
de ayuda.

 Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.

 Permite aplicar técnicas de programación orientada a objetos.

 Biblioteca nativa de funciones sumamente amplia e incluida.

 No requiere definición de tipos de variables aunque sus variables se pueden evaluar


también por el tipo que estén manejando en tiempo de ejecución.

 Tiene manejo de excepciones (desde PHP5).

 Si bien PHP no obliga a quien lo usa a seguir una determinada metodología a la hora de
programar (muchos otros lenguajes tampoco lo hacen), aun estando dirigido a alguna
en particular, el programador puede aplicar en su trabajo cualquier técnica de
programación y/o desarrollo que le permita escribir código ordenado, estructurado y
manejable. Un ejemplo de esto son los desarrollos que en PHP se han hecho del
patrón de diseño Modelo Vista Controlador (o MVC), que permiten separar el
tratamiento y acceso a los datos, la lógica de control y la interfaz de usuario en tres
componentes independientes (ver más abajo Frameworks en PHP).
Estándar Zend:

Los estándares nos permiten disminuir muchos costos que surgen a la hora de desarrollar
sistemas que van desde la incorporación de nuevos recursos hasta el entendimiento de los
sistemas "legacy" ("sistemas heredados") que existen en cualquier organización, ayudan a
asegurar que el código tenga una alta calidad, menos errores, y pueda ser mantenido
fácilmente. Si todos los desarrolladores programan como quieren, o cualquiera inventa su
"propio estándar" o toma el de "cualquier estándar que use otro proyecto", indudablemente
esto significará caos.

Zend es la empresa que desarrolla en la actualidad lo que puede considerarse el Framework


Oficial de PHP y también es la responsable de desarrollar el propio lenguaje PHP como se
mencionó.

El motor Zend es un motor de procesamiento para la interpretación y cifrado del código php,
desde la versión 4. Desarrollado por Zend Technologies para brindar un equipo de soporte y
acelerar la carga de aplicaciones realizadas con php.

Entre las funciones más importantes que realiza este motor de procesamiento está la
posibilidad de cifrar el código fuente de las páginas desarrolladas en php para así luego hacer
posible la comercialización de este.

Algunas de las reglas del Estándar:

General

Para archivos que contengan únicamente código PHP, la etiqueta de cierre ("?>") no está
permitida. No es requerida por PHP.

Identación

La identación suele estar compuesta por 4 espacios. Las tabulaciones no están permitidas.

Tamaño máximo de línea

La longitud recomendable para una línea de código es de 80 caracteres. Líneas más largas
pueden ser aceptables en algunas situaciones. El tamaño máximo de cualquier línea de código
PHP es de 120 caracteres.

Final de línea

El Final de Línea sigue la convención de archivos de texto Unix. Las líneas deben acabar con un
carácter linefeed (LF).

Nombres de Archivo

Para cualquier otro archivo, sólo caracteres alfanuméricos, barras bajas (_) y guiones (-) están
permitidos. Los espacios en blanco están estrictamente prohibidos.
Cualquier archivo que contenga código PHP debe terminar con la extensión " .php ", con la
excepción de los scripts de la vista.

Funciones y Métodos

Los nombres de funciones pueden contener únicamente caracteres alfanuméricos. Los guiones
bajos (_) no están permitidos.

Los nombres de funciones deben empezar siempre con una letra minúscula. Cuando un
nombre de función consiste en más de una palabra, la primera letra de cada nueva palabra
debe estar en mayúsculas. Esto es llamado comúnmente como formato "camelCase".

Variables

Los nombres de variables pueden contener caracteres alfanuméricos. Las barras bajas (_) no
están permitidas.

Para las variables de instancia que son declaradas con el modificador "private" o "protected",
el primer carácter de la variable debe ser una única barra baja (_). Este es el único caso
admisible de una barra baja en el nombre de una variable. Las variables declaradas como
"public" no pueden empezar nunca por barra baja.

Demarcación de código PHP

El código PHP debe estar delimitado siempre por la forma completa de las etiquetas PHP
estándar:

<?php ?>

Las etiquetas cortas (short tags) no se permiten nunca.

Declaración de clases

Las Clases deben ser nombradas de acuerdo a la convención de nombres de Zend Framework.

La llave "{" deberá escribirse siempre en la línea debajo del nombre de la clase ("one true
brace").

Cada clase debe contener un bloque de documentación acorde con el estándar de


PHPDocumentor.

Todo el código contenido en una clase debe ser separado con cuatro espacios.

Únicamente una clase está permitida por archivo PHP

Declaración de Funciones y Métodos

Las Funciones deben ser nombradas de acuerdo a las convenciones de nombrado de Zend
Framework.

Los métodos dentro de clases deben declarar siempre su visibilidad usando un modificador
private , protected , o public .
Como en las clases, la llave "{" debe ser escrita en la línea siguiente al nombre de la función
("one true brace" form). No está permitido un espacio entre el nombre de la función y el
paróntesis de apertura para los argumentos.

Sentencias de Control

Las sentencias de control basadas en las construcciones if y elseif deben tener un solo espacio
en blanco antes del paréntesis de apertura del condicional y un solo espacio en blanco después
del paréntesis de cierre.

Dentro de las sentencias condicionales entre paréntesis, los operadores deben separarse con
espacios, por legibilidad. Se aconseja el uso de paréntesis internos para mejorar la agrupación
lógica en expresiones condicionales más largas.

La llave de apertura "{" se escribe en la misma línea que la sentencia condicional. La llave de
cierre "}" se escribe siempre en su propia línea. Cualquier contenido dentro de las llaves debe
separarse con cuatro espacios en blanco.

XAMPP

Es un servidor independiente de plataforma, software libre, que consiste principalmente en la


base de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y
Perl. El nombre proviene del acrónimo de X (para cualquiera de los diferentes sistemas
operativos), Apache, MySQL, PHP, Perl.

El programa está liberado bajo la licencia GNU y actúa como un servidor web libre, fácil de usar
y capaz de interpretar páginas dinámicas. Actualmente XAMPP está disponible para Microsoft
Windows, GNU/Linux, Solaris y MacOS.

Características y Requisitos.

XAMPP solamente requiere descargar y ejecutar un archivo zip, tar o exe, con unas pequeñas
configuraciones en alguno de sus componentes que el servidor Web necesitará. XAMPP se
actualiza regularmente para incorporar las últimas versiones de Apache/MySQL/PHP y Perl.
También incluye otros módulos como OpenSSL y phpMyAdmin.

Aplicaciones

Realmente el propósito de los diseñadores de XAMPP era proveer de una herramienta de


desarrollo, para permitir a los diseñadores de sitios webs y programadores probar los
proyectos sin ningún acceso a Internet. Pero en la práctica, XAMPP también es utilizado
actualmente como servidor de sitios Web, puesto que solo se necesitan algunas
modificaciones para que funcione como tal y es generalmente lo suficientemente seguro para
serlo.
CSS

El nombre hojas de estilo en cascada viene del ingles Cascading Style Sheets, del que toma sus
siglas. CSS es un lenguaje usado para definir la presentación de un documento estructurado
escrito en HTML o XML (y por extensión en XHTML). El W3C (World Wide Web Consortium) es
el encargado de formular la especificación de las hojas de estilos que servirán de estándar para
los agentes de usuarios o navegadores.

La idea por lo cual CSS fue desarrollado, es para separar la estructura de un documento de
su presentación.

El código propio de los estilo puede ser agregado como un independiente separado o incluirse
en el documento HTML. Para el último caso se pueden definir estilos generales en la cabecera
del documento o en cada etiqueta particular por medio del atributo "<style>".

CSS 2.1

La primera revisión de CSS2, normalmente conocida como "CSS 2.1", permitió corregir algunos
errores que se hallaron en CSS2, eliminando funcionalidades poco soportadas o inoperables en
los navegadores y añadiendo nuevas especificaciones.

De acuerdo al sistema de estandarización técnica de las especificaciones, CSS2.1 tuvo el


estatus de "candidato" (candidate recommendation) durante varios años, pero la propuesta
fue rechazada en junio de 2005; en junio de 2007 fue propuesta una nueva versión candidata,
y ésta actualizada en 2009, pero en diciembre de 2010 fue nuevamente rechazada.

En abril de 2011, CSS 2.1 volvió a ser propuesta como candidata, y después de ser revisada por
el W3C Advisory Committee, fue finalmente publicada como recomendación oficial el 7 de
junio de 2011.

JavaScript

Es un lenguaje de programación interpretado, dialecto del estándar ECMAScript. Se define


como orientado a objeto basado en prototipos, imperativo, débilmente tipado y dinámico.

Es usado principalmente del lado del cliente (client-side), implementado como parte de
un navegador web permitiendo así mejorar la interfaz de usuario y las páginas web dinámicas,
aunque también existe una forma de JavaScript del lado del servidor (Server-side JavaScript o
SSJS).

También es usado en aplicaciones externas a la web, por ejemplo en documentos PDF,


aplicaciones de escritorio (mayoritariamente widgets) lo que hace su uso algo significativo.

JavaScript se diseñó con una sintaxis similar al lenguaje C, aunque adopta nombres y
convenciones del lenguaje de programación Java. Sin embargo Java y JavaScript no están
relacionados, sus semánticas y propósitos son diferentes.
Todos los navegadores modernos interpretan el código JavaScript integrado en las páginas
web. Para interactuar con una página web el lenguaje JavaScript es provisto de una
implementación del Document Object Model (DOM).

Anteriormente se venía utilizando en páginas web HTML para realizar operaciones y


específicamente para la aplicación cliente, sin acceso a funciones del servidor. JavaScript se
interpreta en el agente de usuario, al mismo tiempo que las sentencias van descargándose
junto con el código HTML.

XHTML

Siglas del inglés eXtensible HyperText Markup Language. XHTML es realmente HTML
expresado como XML válido. Se dice que es más estricto a nivel técnico, permitiendo así ser
más fácil al hacer cambios o buscar errores entre otros.
En la versión 1.0, XHTML es realmente una versión XML de HTML, por lo que tiene,
básicamente, las mismas funcionalidades, pero cumple las especificaciones, más estrictas, de
XML. Tiene como objetivo avanzar en el proyecto del World Wide Web Consortium de lograr
una web semántica, donde la información, y la forma de presentarla estén claramente
separadas.

Ventajas Respecto del HTMl

Las principales ventajas del XHTML sobre el HTML son:

 Se pueden incorporar elementos de distintos espacios de nombres XML (como


MathML y Scalable Vector Graphics).
 Un navegador no necesita implementar heurísticas para detectar qué quiso poner el
autor, por lo que el parser puede ser mucho más sencillo.
 Como es XML se pueden utilizar fácilmente herramientas creadas para procesamiento
de documentos XML genéricos (editores, XSLT, etc.).

SQL

El lenguaje de consulta estructurado o SQL (por sus siglas en inglés structured query language)
es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar
diversos tipos de operaciones en éstas. Una de sus características es el manejo del álgebra y el
cálculo relacional lo que permite realizar consultas con el fin de recuperar -de manera sencilla-
información de interés de una base de datos, así como también hacer cambios sobre ella. Es
un lenguaje de cuarta generación (4GL).
Orígenes y evolución

Los orígenes del SQL están ligados a los de las bases de datos relacionales. En 1970 E. F. Codd
propone el modelo relacional y asociado a éste un sublenguaje de acceso a los datos basado
en el cálculo de predicados. Los laboratorios de IBM se basaron en estas ideas para definir el
lenguaje SEQUEL (Structured English QUEry Language) que después pasaría ser ampliamente
implementado por el sistema de gestión de bases de datos experimental System R,
desarrollado en 1977 también por IBM. Pero realmente fue Oracle quien lo introdujo por
primera vez en 1979 en un programa comercial.

El SEQUEL fue el predecesor de SQL, siendo éste una versión evolucionada del primero. El SQL
pasó a ser el lenguaje por excelencia de los diversos sistemas de gestión de bases de datos
relacionales surgidos en los años siguientes y es por fin estandarizado en 1986 por el ANSI,
dando lo que dio lugar a la primera versión estándar de este lenguaje, el "SQL-86" o "SQL1".
Un año después el estándar fue también adoptado por la ISO.

Pero este primer estándar no cubrió todas las necesidades de los desarrolladores. Así que en
1992 se lanzó un nuevo estándar ampliado y revisado del SQL llamado "SQL-92" o "SQL2".

Actualmente el SQL es el estándar de facto de la gran mayoría de los SGBD comerciales.

Características generales

El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los
sistemas relacionales permitiendo gran variedad de operaciones en éstos últimos.

Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte


base teórica y su orientación al manejo de conjuntos de registros, y no a registros individuales,
permite una alta productividad en codificación y la orientación a objetos. De esta forma una
sola sentencia puede equivaler a uno o más programas que se utilizarían en un lenguaje de
bajo nivel orientado a registros.

Optimización

Como ya se ha mencionado, y suele ser común en los lenguajes de acceso a bases de datos de
alto nivel, el SQL es un lenguaje declarativo. O sea, que especifica qué es lo que se quiere y no
cómo conseguirlo, por lo que una sentencia no establece explícitamente un orden de
ejecución.

El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia del
SGBD, por lo que se hace necesario que éste lleve a cabo una optimización antes de su
ejecución. Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza
la actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso
indexado o una rápida actualización de la información. La optimización difiere sensiblemente
en cada motor de base de datos y depende de muchos factores.
Apache

El servidor HTTP Apache es un servidor web HTTP de código abierto, para


plataformas Unix (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras, que
implementa el protocolo HTTP/1.1 y la noción de sitio virtual. Cuando comenzó su desarrollo
en 1995 se basó inicialmente en código del popular NCSA HTTPd 1.3, pero más tarde fue
reescrito por completo. Su nombre se debe a que Behelendorf quería que tuviese la
connotación de algo que es firme y enérgico pero no agresivo, y la tribu Apache fue la última
en rendirse al que pronto se convertiría en gobierno de EEUU, y en esos momentos la
preocupación de su grupo era que llegasen las empresas y "civilizasen" el paisaje que habían
creado los primeros ingenieros de internet. Además Apache consistía solamente en un
conjunto de parches a aplicar al servidor de NCSA. En inglés, a patchy server (un servidor
"parcheado") suena igual que Apache Server.
El servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache
Software Foundation.
Características
Apache presenta entre otras características altamente configurables, bases de datos de
autenticación y negociado de contenido, pero fue criticado por la falta de una interfaz gráfica
que ayude en su configuración.
La mayoría de las vulnerabilidades de la seguridad descubiertas y resueltas tan sólo pueden ser
aprovechadas por usuarios locales y no remotamente. Sin embargo, algunas se pueden
accionar remotamente en ciertas situaciones, o explotar por los usuarios locales malévolos en
las disposiciones de recibimiento compartidas que utilizan PHP como módulo de Apache.
Apache es usado principalmente para enviar páginas web estáticas y dinámicas en la World
Wide Web. Muchas aplicaciones web están diseñadas asumiendo como ambiente de
implantación a Apache, o que utilizarán características propias de este servidor web.
Apache es el componente de servidor web en la popular plataforma de aplicaciones LAMP,
junto a MySQL y los lenguajes de programación PHP/Perl/Python (y ahora también Ruby).
Apache es usado para muchas otras tareas donde el contenido necesita ser puesto a
disposición en una forma segura y confiable. Un ejemplo es al momento de compartir archivos
desde una computadora personal hacia Internet. Un usuario que tiene Apache instalado en su
escritorio puede colocar arbitrariamente archivos en la raíz de documentos de Apache, desde
donde pueden ser compartidos.
Los programadores de aplicaciones web a veces utilizan una versión local de Apache con el fin
de pre visualizar y probar código mientras éste es desarrollado.
SSL

Secure Sockets Layer (SSL; en español «capa de conexión segura») y su sucesor Transport
Layer Security (TLS; en español «seguridad de la capa de transporte») son protocolos
criptográficos que proporcionan comunicaciones seguras por una red, comúnmente Internet.

Descripción
SSL proporciona autenticación y privacidad de la información entre extremos
sobre Internet mediante el uso de criptografía. Habitualmente, sólo el servidor es autenticado
(es decir, se garantiza su identidad) mientras que el cliente se mantiene sin autenticar.
SSL implica una serie de fases básicas:

 Negociar entre las partes el algoritmo que se usará en la comunicación


 Intercambio de claves públicas y autenticación basada en certificados digitales
 Cifrado del tráfico basado en cifrado simétrico
Durante la primera fase, el cliente y el servidor negocian qué algoritmos criptográficos se van a
usar. Las implementaciones actuales proporcionan las siguientes opciones:

 Para criptografía de clave pública: RSA, Diffie-Hellman, DSA (Digital Signature Algorithm)
o Fortezza;
 Para cifrado simétrico: RC2, RC4, IDEA (International Data Encryption
Algorithm), DES (Data Encryption Standard), Triple DES y AES (Advanced Encryption
Standard);
 Con funciones hash: MD5 o de la familia SHA.

Cómo funciona:

El protocolo SSL intercambia registros; opcionalmente, cada registro puede ser comprimido,
cifrado y empaquetado con un código de autenticación del mensaje (MAC). Cada registro tiene
un campo de content_type que especifica el protocolo de nivel superior que se está usando.
Cuando se inicia la conexión, el nivel de registro encapsula otro protocolo, el
protocolo handshake, que tiene el content_type 22.
El cliente envía y recibe varias estructuras handshake:

 Envía un mensaje ClientHello especificando una lista de conjunto de cifrados, métodos de


compresión y la versión del protocolo SSL más alta permitida. Éste también envía bytes
aleatorios que serán usados más tarde (llamados Challenge de Cliente o Reto). Además
puede incluir el identificador de la sesión.

 Después, recibe un registro ServerHello, en el que el servidor elige los parámetros de


conexión a partir de las opciones ofertadas con anterioridad por el cliente.
 Cuando los parámetros de la conexión son conocidos, cliente y servidor intercambian
certificados (dependiendo de las claves públicas de cifrado seleccionadas). Estos
certificados son actualmente X.509, pero hay también un borrador especificando el uso de
certificados basados en OpenPGP.
 Cliente y servidor negocian una clave secreta (simétrica) común llamada master secret,
posiblemente usando el resultado de un intercambio Diffie-Hellman, o simplemente
cifrando una clave secreta con una clave pública que es descifrada con la clave privada de
cada uno. Todos los datos de claves restantes son derivados a partir de este master
secret (y los valores aleatorios generados en el cliente y el servidor), que son pasados a
través una función pseudoaleatoria cuidadosamente elegida.
Aplicaciones
SSL se ejecuta en una capa entre los protocolos de aplicación como HTTP, SMTP, NNTP y sobre
el protocolo de transporte TCP, que forma parte de la familia de protocolos TCP/IP.
HTTPS es usado para asegurar páginas World Wide Web para aplicaciones de comercio
electrónico, utilizando certificados de clave pública para verificar la identidad de los extremos.
SSL también puede ser usado para tunelizar una red completa y crear una red privada
virtual (VPN), como en el caso de OpenVPN.

MVC

Modelo Vista Controlador (MVC) es un patrón o modelo de abstracción de desarrollo de


software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de
negocio en tres componentes distintos. El patrón de llamada y retorno MVC (según CMU), se
ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que
provee de datos dinámicos a la página. El modelo es el Sistema de Gestión de Base de Datos y
la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde
la vista.

Descripción del Patrón

 Modelo: Esta es la representación específica de la información con la cual el sistema


opera.
 Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente
la interfaz de usuario.
 Controlador: Este responde a eventos, usualmente acciones del usuario, e invoca
peticiones al modelo y, probablemente, a la vista.

Muchos de los sistemas informáticos utilizan un Sistema de Gestión de Base de Datos para
gestionar los datos: en líneas generales del MVC corresponde al modelo. La unión entre capa
de presentación y capa de negocio conocido en el paradigma de la Programación por
capas representaría la integración entre Vista y su correspondiente Controlador de eventos y
acceso a datos, MVC no pretende discriminar entre capa de negocio y capa de presentación
pero si pretende separar la capa visual gráfica de su correspondiente programación y acceso a
datos, algo que mejora el desarrollo y mantenimiento de la Vista y el Controlador en paralelo,
ya que ambos cumplen ciclos de vida muy distintos entre sí.
Metodología de Trabajo

Métodos:

Indica las técnicas utilizadas para construir el software, siguiendo diferentes tipos de modelos
(Cascada, Estructurada, Espiral, etc.), estos nos dictan los diferentes pasos a seguir en todo el
proceso de desarrollo.

Descripción del ciclo de vida.

El modelo de desarrollo de sistemas que será implementado en nuestro sistema es el Modelo


de Ciclo en Cascada.

Modelo en Cascada:

Ordena rigurosamente las etapas del ciclo de vida del software, de tal forma que el inicio de
cada etapa debe esperar a la finalización de la inmediatamente anterior.

Las etapas a seguir en el modelo en Cascada son:

 Análisis de requisitos
 Diseño del Sistema
 Diseño del Programa
 Codificación
 Pruebas
 Implantación
 Mantenimiento

Análisis de requerimientos

En esta fase se analizan las necesidades de los usuarios finales del software para determinar
qué objetivos debe cubrir. De esta fase surge una memoria llamada SRD (documento de
especificación de requisitos), que contiene la especificación completa de lo que debe hacer el
sistema sin entrar en detalles internos.

Es importante señalar que en esta etapa se debe consensuar todo lo que se requiere del
sistema y será aquello lo que seguirá en las siguientes etapas, no pudiéndose requerir nuevos
resultados a mitad del proceso de elaboración del software.
Diseño del Sistema

Se descompone y organiza el sistema en elementos que puedan elaborarse por separado,


aprovechando las ventajas del desarrollo en equipo. Como resultado surge el SDD (Documento
de Diseño del Software), que contiene la descripción de la estructura relacional global del
sistema y la especificación de lo que debe hacer cada una de sus partes, así como la manera en
que se combinan unas con otras.

Es conveniente distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El


primero de ellos tiene como objetivo definir la estructura de la solución (una vez que la fase de
análisis ha descrito el problema) identificando grandes módulos (conjuntos de funciones que
van a estar asociadas) y sus relaciones. Con ello se define la arquitectura de la solución elegida.
El segundo define los algoritmos empleados y la organización del código para comenzar la
implementación.

Diseño del Programa

Es la fase en donde se realizan los algoritmos necesarios para el cumplimiento de los


requerimientos del usuario así como también los análisis necesarios para saber que
herramientas usar en la etapa de Codificación.

Codificación o Programación

Es la fase de programación o implementación propiamente dicha. Aquí se implementa el


código fuente, haciendo uso de prototipos así como pruebas y ensayos para corregir errores.

Dependiendo del lenguaje de programación y su versión se crean las bibliotecas y


componentes reutilizables dentro del mismo proyecto para hacer que la programación sea un
proceso mucho más rápido.

Pruebas

Los elementos, ya programados, se ensamblan para componer el sistema y se comprueba que


funciona correctamente y que cumple con los requisitos, antes de ser puesto en
funcionamiento.

Implantación

El software obtenido se pone en producción. Se implantan los niveles software y hardware que
componen el proyecto. La implantación es la fase con más duración y con más cambios en el
ciclo de elaboración de un proyecto. Es una de las fases finales del proyecto.

Durante la explotación del sistema de software pueden surgir cambios, bien para corregir
errores o bien para introducir mejoras. Todo ello se recoge en los Documentos de Cambios.
Análisis y diseño

Especificación de Requisitos Software:

1. INTRODUCCION

1.1 Propósito

Con el propósito de presentar todas las funcionalidades y capacidades que tendrá el Sistema
de Gestión Académica, se ha redactado el presente documento.

1.2 Ámbito del Sistema

El Sistema de Gestión Académica tendrá por nombre SAGAT (Sistema Automatizado de


Gestión Académica Theotokos), este sistema registrará información de los estudiantes a
través del proceso de matricula así como de los docentes que se encuentren actualmente
laborando.

Se llevará un registro de las notas de los estudiantes permitiendo el fácil acceso a estas y otras
informaciones de relevancia académica a los mismos estudiantes como también a los
docentes.

Se hará posible la publicación de noticias y avisos de eventos que acontecen en la vida


estudiantil además de información del mismo centro educativo.

El sistema no pretende gestionar la distribución de becas ni horarios de clases; así tampoco la


impresión de ciertos informes como el de Retención de Estudiantes, Aprobados y Reprobados
y el de Rendimiento Académico los cuales son actualmente manejados por secretaría.

1.3 Personal Involucrado

El personal que podrá interactuar con el sistema está compuesto por la Directora, Secretaria,
Administrador del sistema, Docente y Alumno, todos y cada uno con diferentes privilegios y
funciones.

1.4 Definiciones, Acrónimos y Abreviaturas

CMML: Colegio Madre María Luis, centro educativo al cual está dirigido el sistema de gestión
académica.

SAGAT: Sistema Automatizado de Gestión Académica THEOTOKOS.

BBDD: Base de Datos.


1.5 Referencias

IEEE Std 610.12-1990. Software Engineering Standards Committee of the IEEE Computer
Society

IEEE Std 830-1998. Software Engineering Standards Committee of the IEEE Computer Society

1.6 Resumen

En las siguientes secciones del documento se describe de forma general lo que se espera del
producto, sus funciones, las características que deben poseer los usuarios del producto, las
limitaciones bajo las que el producto no podría funcionar correctamente y/o eficientemente,
algunos requisitos a futuro. También de manera más específica se describe la interfaz que
tendrá el producto, atributos que deberá tener el sistema sobre el cual funcionará, requisitos
para el rendimiento y otros requisitos.

2. DESCRIPCIÓN GENERAL

2.1 Perspectiva del Producto

SAGAT es el primer proyecto software en su clase en ser utilizado para la gestión académica en
el CMML.

2.2 Funcionalidad del Producto

SAGAT permitirá el registro de estudiantes a través de el proceso de matrícula, se llevara


además un registro de las notas la cuales van a poder ser consultadas en línea por ellos mismo.
Se guardaran los datos de cada docente que se encuentre en funciones dentro del CMML.

Se brindara fácil acceso a la información referente al CMML y a sus actividades académicas y


recreativas las cuales se podrán mantener actualizadas por la gestión de la secretaría y
dirección del CMML.

2.3 Características de los Usuarios

Los usuarios de SAGAT deberán tener conocimientos básicos en el manejo y uso de un


computador así como del navegador a través del cual van a consultar al sistema.

Adicionalmente los administradores de SAGAT en este caso Directora y Secretaria deberán


tener nociones de informática que les faciliten el llenado de los formularios para el registro de
estudiantes.

2.4 Restricciones

Políticas de la Empresa

La administración del CMML solamente permitirá contenido de carácter educativo, académico


y cultural que puedan contribuir al buen desarrollo y desenvolvimiento de la vida estudiantil.
Además estará a discreción de la misma administración la publicación de eventos o reuniones
de recreación organizadas por y para estudiantes del centro.

Limitaciones de Hardware

El computador que tendrá la función de servidor web deberá cumplir con las siguientes
características mínimas:

3 Gb de RAM

160Gb de Disco Duro

Procesador Intel CoreDuo 2.0 Ghz

Tarjeta de Red

Al menos una terminal o cliente con las siguientes características mínimas:

521 Mb de RAM

40 Gb de Disco Duro

Procesador Intel Pentium IV 2.0 Ghz

Tarjeta de Red

Lenguajes de Programación

PHP 5.0

Flash, Action Script 3.0

Javascript

MySql

Protocolos de Comunicación

HTTP 1.1

Consideraciones de Seguridad

SAGAT mantendrá la integridad de los datos además de asegurar la protección de los mismos
ante posibles modificaciones por parte de usuarios no autorizados.
2.5 Suposiciones y Dependencias

Se da por sentado que el servidor web trabajará bajo el Sistema Operativo Linux.

2.6 Evolución previsible del sistema

En un futuro los estudiantes serán capaces de matricularse en línea y de esta manera el


proceso se hará más rápido y con mayor comodidad para los padres y los mismos alumnos.

Se podría desarrollar por separado un sistema contable completo que trabajará en conjunto
con SAGAT para manejar la solvencia de los alumnos.

Con el fin de ayudar a los padres de familia muy ocupados se podría llegar a implementar los
pagos en línea con el propósito de no hacer perder tiempo preciado en grandes colas.

3. REQUISITOS ESPECIFICOS

3.1 Requisitos comunes de las Interfaces

3.1.1 Interfaces de Usuario

Como cualquier aplicación típica WEB el sistema constará con una interfaces de usuario
compuesta por formularios, menús, botones, cajas de texto, etc.

Se presentarán gráficos en caso de ser necesario con el objetivo de explicar mejor resultados
de consultas relacionadas con rendimiento. La introducción de datos se hará mayormente por
medio de cajas de texto o por selección de opciones.

La interfaz será amigable e intuitiva, para mejorar la experiencia del usuario con el sistema.

3.1.2 Interfaces de Hardware

El Computador donde estará instalado el sistema deberá constar con una tarjeta de red un
mínimo de 3 Gb de RAM, 120Gb de Disco duro y un procesador Intel Dual core a 2.0

3.1.3 Interfaces de Software

Se deberá constar con una base de datos MySql.

3.1.4 Interfaces de Comunicación

Se deberá constar con todos los protocolos de red necesarios para la comunicación entre el
servidor y las terminales, además un navegador web compatible.
3.2 Requisitos Funcionales

RF 1 Matricular Alumno

Introducción:

Este proceso deberá capturar todos los datos del futuro alumno para que su registro sea
incorporado al resto del cuerpo estudiantil.

Entradas:

Por Pantalla:
Nombre del Alumno
Apellido del Alumno
Fecha de Nacimiento (aa-mm-dd)
Cedula del Alumno
Selección del sexo del alumno
Año Académico
Selección de la religión que profesa
Nombre del padre
Apellido del padre
Cedula del padre
Trabaja (Selección de opción: Si o No.)
Oficio del padre
Lugar de Trabajo
Teléfono del padre
Nombre de la madre
Apellido de la madre
Cedula de la madre
Trabaja (Selección de opción: Si o No.)
Oficio de la madre
Lugar de Trabajo
Teléfono de la madre

Procesos:

Se ingresaran todos los datos en el formulario, se validarán los datos para comprobar
que cumplan con el formato y se guardaran los datos del alumno.

Salida:

Una vez almacenados los datos mostrará mensaje Matriculado con Éxito.
RF 2 Re matricular Alumno

Introducción:

Este proceso actualizará el grado del alumno y cualquier dato que necesite ser cambiado si la
información actual no coincide con la del año anterior.

Entradas:

Por Pantalla:
Numero de Carnet del Alumno

Por Sistema:
Cundo el sistema consulte los datos del alumno con el Numero de Carnet brindara
estos datos al proceso.

Procesos:

Se solicitará el Numero de Carnet del alumno, se hará las búsqueda de la


información del estudiante, se cargaran en pantalla los datos que se ingresaron en el
momento de la matricula y se podrá editar dicha información.

Salida:

Una vez que se valide que los campos cumplen con el formato, si el estudiante
fue matriculado en el mismo año no se guardaran los cambios y el sistema solicitara
ingresar nuevamente el número del carnet, los datos editados en este proceso solo se
guardarán si el sistema comprueba que no se había matriculado el alumno en el
mismo año.

RF 3 Actualizar Datos Alumnos

Introducción:

En esta función se podrán editar los datos de los alumnos previamente matriculado para
corregir cualquier error cometido en el proceso de matrícula o para actualizar algún dato.

Entradas:

Por Pantalla:

Numero Carnet de Alumno

Por Sistema:

Cuando el sistema consulte los datos del alumno con el Número de Carnet brindara
estos datos al proceso.
Procesos:

Se solicitará el Numero de Carnet del alumno, se hará las búsqueda de la información


del estudiante, se cargaran en pantalla los datos que se ingresaron en el momento de
la matricula y se podrá editar dicha información.

Salida:
Una vez que se valide que los campos cumplen con el formato, se actualizaran
los datos registrados en la BD. Mostrará mensaje Actualizado con Éxito.

RF 4 Retirar Alumno

Introducción:

Esta función permitirá cambiar el estado de un estudiante de activo a inactivo en el caso que
abandone el centro CMML.

Entradas:

Por Pantalla:
Selección del Grupo
Selección de la opción Retirar correspondiente al alumno elegido.

Por Sistema:
El sistema consultará los datos del alumno seleccionado y los brindará al proceso.

Procesos:

Se ingresara en el grupo en que está registrado el alumno, se elegirá la opción


Retirar del estudiante correspondiente y el estado del alumno será cambiado en la BD
a inactivo pero sin que se eliminen los datos por completo.

Salida:
Se mostrara la lista actualizada de los alumnos en el grupo.

RF 5 Ingresar Datos Docente

Introducción:

Se podrá registrar la información básica de un docente que iniciara a laborar en el CMML.

Entradas:

Por Pantalla:
Nombres
Apellidos
Fecha de nacimiento (aa-mm-dd)
Cedula
Selección del sexo del docente
Selección de la religión
Teléfono
Celular
Dirección
Profesión
Otros estudios
Documentos Entregados

Procesos:

Se ingresarán los datos de docente, llenando los campos del formulario, el


sistema validará que los datos cumplan con el formato y los campos estén llenos, se
almacenarán los datos del docente en la BD.

Salida:
Una vez que se valide el formato de los campos, si el sistema detecta que se está
realizando un duplicado de un registro existente no almacenara ningún dato en caso
contrario ingresará el nuevo registro de docente en la BD, para ambas situaciones
mostrará un formulario vacío para ingresar nuevos registros.

RF 6 Actualizar Datos Docente

Introducción:

Este proceso permitirá la edición de los datos del maestro en caso de que se necesite cambiar
los datos actuales.

Entradas:

Por Pantalla:
Selección del docente a modificar.

Por Sistema:
La identificación del docente será brindada al proceso para consultar los datos en la
BD.

Procesos:

Se ingresara al listado de los docentes del centro, se seleccionará la opción editar, se


cambiarán los datos requeridos para que el registro este actualizado, los datos serán
almacenados.

Salida:
Se mostrará el expediente del docente con los datos actualizados.
RF 7 Retirar Docente

Introducción:

Esta función permitirá cambiar el estado de un docente de activo a inactivo en el caso de no


continuar laborando en el CMML.

Entradas:

Por Pantalla:
Lista de Docentes
Selección de la opción Retirar.

Por Sistema:
Se brindara el id del docente al proceso para la búsqueda de los datos
correspondientes.

Procesos:
Se ingresará al listado de los docentes, selección de la opción Retirar para el docente
correspondiente.

Salida:
Se mostrará la lista actualizada de los docentes activos en el colegio.

RF 8 Añadir Asignatura

Introducción:

Este proceso permite que se guarde el nombre y descripción de una materia que iniciará a
impartirse en el CMML.

Entradas:

Por Pantalla:
Nombre de la Asignatura
Categoría

Por Sistema:
Id de la Asignatura será brindado al proceso.

Procesos:
Se ingresará el nombre de la asignatura y la categoría en la que estaría incluida esa
materia, se creará un id para la asignatura que será utilizado internamente por el
sistema como referencia.

Salida:
Listado Actualizado de las asignaturas en el pensum.
RF 9 Retirar Asignatura

Introducción:

Se podrá cambiar el estado de una asignatura a estado inactivo cuando no se valla a seguir
impartiendo.

Entradas:

Por Pantalla:
Listado de la asignaturas.
Selección de la opción Retirar.

Por Sistema:
Id de la Asignatura será brindado al proceso.

Procesos:
Se ingresará a las asignaturas para visualizar el listado de asignaturas inscritas, se
elegirá la opción Retirar correspondiente a la asignatura que no estará siendo
impartida.

Salida:
Listado actualizado de las asignaturas activas en el centro.

RF 10 Restablecer Asignatura

Introducción:

Será posible la activación de una asignatura que fue retirada por error o que decidió incluirse
una vez más en el pensum.

Entradas:

Por Pantalla:
Listado de la asignaturas.
Selección de la opción Activar.

Por Sistema:
Id de la Asignatura será brindado al proceso.

Procesos:
Se ingresará a las asignaturas para visualizar el listado de asignaturas inscritas, se
elegirá la opción Activar correspondiente a la asignatura que será impartida una vez
más en el CMML.

Salida:
Listado actualizado de las asignaturas activas en el centro.
RF 11 Dividir Grupo

Introducción:

Se podrá separar un grupo completo de alumnos en secciones para poder distribuir la cantidad
de estudiantes en grupos más pequeños.

Entradas:

Por Pantalla:
Grado del Grupo
Numero de Secciones.

Por Sistema:
Ninguna

Procesos:
Se elegirá el grupo que se va a separar en secciones, selección del número de
secciones en que será dividido el grupo, se registran las secciones para el grupo y el
total de estudiantes matriculados en el mismo será repartido proporcionalmente en
cada uno.

Salida:
Mostrará listado de grupos con el número de secciones actualizado.

RF 12 Restablecer Grupo

Introducción:

Esta función permitirá corregir cualquier error cometido en la división del grupo ya que se
unirán las secciones en un solo grupo o se distribuirán los alumnos en un número de secciones
menor.

Entradas:

Por Pantalla:
Listado de grupos con sus respectivas secciones.

Por Sistema:
Ninguna

Procesos:
Se visualizará el listado de grupos con sus secciones, se elegirá la opción Retirar en la
sección que se va a eliminar y el sistema unirá todos los alumnos en un solo grupo para
luego dividir o no el grupo en las secciones deseadas.
Salida:
Listado Actualizado de los grupos con sus secciones.

RF 13 Designar Asignatura

Introducción:

Esta función permitirá delegar una asignatura a un maestro específico el cual será el encargado
de impartirla.

Entradas:

Por Pantalla
Grupo y Sección
Selección del Nombre del Docente
Selección del Nombre de la Asignatura

Por Sistema:
Se brindara el id del docente y el id de la asignatura al proceso para establecer la
relación.

Procesos:
Se seleccionará el grupo para el que estamos designando las asignaturas, se elegirá el
maestro y luego la asignatura que le será encargada, si se designa un maestro con una
materia de categoría Conducta será convertido automáticamente en el profesor guía
de ese grupo.

Salida:
Se mostrará el listado de las asignaturas con el docente elegido para impartirla.

RF 14 Desasignar Materia

Introducción:

Esta función se utilizará para retirar la asignación de una materia al docente elegido,
con el propósito de utilizar un docente diferente.

Entradas:

Por Pantalla:
Grupo

Por Sistema:
La relación entre el id del docente y el id de la asignatura es brindada al proceso.
Procesos:
Se elige el grupo, se podrán ver las asignaturas con el profesor que la imparte en ese
grupo, se elegirá la opción Borrar, se eliminará la relación entre el docente y esa
asignatura.

Salida:
Listado actualizado de las Materias Asignadas.

RF 15 Publicar Noticia

Introducción:

Se podrá ingresar noticias e información para mantener a los estudiantes atentos a las
actividades académicas.

Entradas:

Por Pantalla:
Título
Descripción de la noticia
Fecha y Hora de Publicación
Fecha y Hora de Caducidad

Por Sistema:
Ninguna

Procesos:
Se registrará un titulo para la noticia, se ingresará el texto que será publicado, además
de brindar la fecha en que fue publicado y la fecha de validez.

Salida:
Se muestra el formulario vacío para el ingreso de otra noticia.

RF 16 Asignar Acta Reparación

Introducción:

En esta función podremos guardar los datos del Acta en que están registradas las notas de
reparación.

Entradas:

Por Pantalla:
Índice de acta (Libro-Acta-Folio)
Por Sistema:
Ninguna

Procesos:
Se ingresara el Número de Libro, de Acta y de Folio correspondiente y se almacenará el
dato.

Salida:
Se mostrará la lista actualizada de los grupos con su respectivo índice de acta.

RF 17 Asignar Acta Calificación

Introducción:

En esta función podremos guardar los datos del Acta en que están registradas las notas de los
parciales.

Entradas:

Por Pantalla:
Índice de acta (Libro-Acta-Folio)

Por Sistema:
Ninguna

Procesos:
Se ingresara el Número de Libro, de Acta y de Folio correspondiente y se almacenará el
dato.

Salida:
Se mostrará la lista actualizada de los grupos con su respectivo índice de acta.

RF 18 Subir Fotos

Introducción:

Se podrá ingresar fotos de las actividades académicas y extracurriculares del CMML.

Entradas:

Por Pantalla:
Titulo
Comentario de la Foto
Ruta de ubicación del archivo

Por Sistema:
Se envía la ruta de la ubicación del archivo al sistema
Procesos:
El sistema buscará la ruta que se proporcione y añadirá el archivo especificado,
además se ingresara algún comentario con la fotografía a manera de descripción de la
actividad que se estaba realizando.

Salida:
Se mostrara mensaje Se añadió foto con éxito.

RF 19 Eliminar Fotos

Introducción:

Esta función podrá utilizarse para eliminar o borrar la foto que se había añadido con el
propósito de tener una galería actualizada o corregir si se había añadido por error.

Entradas:

Por Pantalla:
Lista de las fotos actuales.
Selección de la opción Eliminar.

Por Sistema:
Se envía la ruta de ubicación del archivo al sistema.

Procesos:
El usuario seleccionará la foto que no desea permanezca en la galería y al seleccionar
la opción Eliminar se borrara de la galería.

Salida:
Se mostrará la galería actualizada.

RF 20 Editar Pagina Estática

Introducción:

Con esta función se podrá editar la información de las páginas estáticas que contienen la
información básica del CMML.

Entradas:

Por Pantalla:
Se introducirá el texto.

Por Sistema:
Ninguna
Procesos:
Se podrá actualizar la información contenida en la reseña histórica o en los
reglamentos por ejemplo, se introducirá todo el texto actualizado y se guardará
para ser presentado.

Salida:
Se mostrará mensaje de Realizado con Éxito.

RF 21 Ingresar Nota Parcial

Introducción:

Con esta función el docente será capaz de ingresar una nota parcial para la asignatura que este
impartiendo.

Entradas:

Por Pantalla:
Contraseña del Docente
Nota Parcial

Procesos:
El docente tendrá que ingresar su usuario y contraseña, se muestra la lista de
materias impartidas por el docente en cual al seleccionar para ingresar las notas
correspondientes se muestra la lista de los alumnos que llevan dicha materia, luego de
ingresar las notas se mostrarán las notas de los parciales anteriores

Salida:
Notas de los alumnos y su nota final actualizadas del alumno.

RF 22 Ingresar Nota Reparación

Introducción:

Con esta función el docente será capaz de ingresar una nota de reparación para la asignatura
que imparte.

Entradas:

Por Pantalla:
Contraseña del Docente
Nota de Reparación

Procesos:
El docente tendrá que ingresar su usuario y contraseña, se muestra la lista de
materias impartidas por el docente la cual se seleccionara para ingresar las notas
correspondientes, se muestra la lista de los alumnos que reparan dicha materia y que
alcanzaron el derecho, luego de ingresar la nota de reparación.

Salida:
Se mostraran las notas de reparación de cada alumno.
RF 23 Modificar Nota

Introducción:

Con esta función la dirección será capaz de modificar una nota parcial para una asignatura
cuando sea necesario corregirla.

Entradas:

Por Pantalla:
Carnet del Alumno
Nota Parcial

Procesos:
El proceso pedirá el número de carnet del alumno, se obtendrá como resultados las
asignaturas con las notas correspondientes, y en ese momento se hará una sustitución
de la nota actual por la nueva y se guardarán los datos.

Salida:
Se mostraran las asignaturas con sus correspondientes notas.

RF 24 Modificar Nota Reparación

Introducción:

Con esta función la dirección será capaz de modificar una nota de reparación para una
asignatura cuando sea necesario corregirla.

Entradas:

Por Pantalla:
Carnet del Alumno
Nota Reparación

Procesos:
El proceso pedirá el número de carnet del alumno, se obtendrá como resultados las
asignaturas con las notas correspondientes, en ese momento añadirá la nota de
reparación y se guardarán los datos.

Salida:
Se mostraran las asignaturas con sus correspondientes notas reparación de la materia.
RF 25 Mostrar Estadísticas

Introducción:

Este proceso permite conocer el rendimiento académico obtenido por año lectivo, en
determinada asignatura, por el grupo de Docentes, a nivel de Primaria, Secundaria y de todo el
colegio centro.

Entradas:

Por Pantalla:
Selección de la Opción Estadísticas.

Por sistema:
Año Académico
Asignatura
Grupo de Docentes
Primaria
Secundaria
Colegio

Procesos:
Se muestran cada una de las opciones mencionadas, para el caso de rendimiento de
docentes, se genera el rendimiento académico obtenido por los estudiantes de cada
docente de primaria, secundaria o todo el colegio.

Salida:
Se muestra los resultados según la opción proporcionada en la entrada.
RF 26 Cambiar Contraseña de Usuario

Introducción:

El administrador de SAGAT será capaz de administrar las cuentas de usuario, específicamente


podrá cambiar la contraseña de cada usuario del sistema.

Entradas:

Por Pantalla:
Nombre del Usuario
Contraseña Actual
Nueva Contraseña

Por Sistema:
Una vez validado el Nombre de Usuario y Contraseña, brindara los datos al proceso.

Procesos:
Se buscara los datos del usuario por medio del nombre del mismo, se validara que el
campo Contraseña Actual coincida de hecho con la contraseña del usuario, luego se
actualizara el registro de la contraseña en la BD.
Salida:
Se mostrara mensaje de Cambio realizado con éxito.

RF 27 Respaldar BD

Introducción:

Esta operación es exclusiva del Administrador del sistema y permite realizar una copia de
seguridad de los datos de toda la base de datos.

Entradas:

Por Pantalla:
Selección de la opción Copia de Seguridad.

Por Sistema:
El sistema enviara el nombre de la BD y de las tablas que la componen al proceso.

Procesos:
Se selecciona la opción Copia de Seguridad para indicar que se necesita realizar
respaldo de los datos almacenados actualmente en la BD.

Salida:
Se generará un archivo que puede ser guardado en cualquier dispositivo de
almacenamiento.

RF 28 Restaurar BD

Introducción:

Esta función permite a partir de una copia de seguridad, restaurar los datos de los respaldos

Entradas:

Por Pantalla:
Selección de la Opción Restaurar Copia de Seguridad.

Por Sistema:
Ruta de ubicación del archivo

Procesos:
Seleccionar la Opción Restablecer Copia de Seguridad, se no permitirá elegir la ruta
de ubicación del archivo de respaldo que va a ser cargado por el sistema y contiene los
datos previamente respaldados.

Salida:
Se mostrara mensaje Copia de Seguridad Restaurada.
RF 29 Visualizar Notas

Introducción:

Los estudiantes serán capaces de consultar en línea sus notas parciales, notas de reparación y
el promedio de estas notas.

Entradas:

Por Pantalla:
Numero de Carnet del Alumno

Procesos:
El alumno ingresara su número de carnet y el sistema consultara en la BD por los
datos y las notas que se han registrado para este estudiante en cada asignatura.

Salida:
Tabla de notas parciales, nota fina y/o de reparación por cada asignatura.

RF 31 Eliminar Noticia

Introducción:

Esta función permitirá al administrador del sistema la eliminación de una noticia, ya sea por un
error en la publicación o por su caducidad en fecha de valides.

Entradas:

Por Pantalla:
Lista de las noticias publicadas.

Por Sistema:
Envía el id de noticia la cual será eliminada

Procesos:
Se podrá eliminar una noticia dando en la opción del eliminar que proporciona
el sistema.

Salida:
Se muestra la lista de las noticias actualmente publicadas.
RF 32 Restablecer Docente

Introducción:

Esta función permitirá al administrador del sistema modificar el estado de un docente en el


sistema, específicamente regresar al docente a su estado activo en el centro, ya sea porque se
retiro por error o porque ha vuelto a ejercer labores en el centro.
Entradas:

Por Pantalla:
Lista de los docentes inactivos con la opción restablecer.

Por Sistema:
Envía el id del docente que será reactivado.

Procesos:
Se podrá reactivar en sus labores un docente seleccionado la opción
restablecer que proporciona el sistema.

Salida:
Se muestra la lista de los docentes inactivos.

RF 33 Restablecer Alumno

Introducción:

Esta función permitirá al administrador del sistema pasar al estado activo a un alumno que
halla sido retirado del centro por error.

Entradas:

Por Pantalla:
Introducir el número de carnet del alumno a reactivar.

Por Sistema:
Envía el id del alumno a reactivar.

Procesos:
Se podrá reactivar a un alumno dando en la opción restablecer que
proporciona el sistema.

Salida:
Se muestran el nombre, apellido, fecha nacimiento, grado y estado puesto a activo del
alumno.
2.3 Requisitos no funcionales

2.3.1 Requisitos de rendimiento

Se espera que el sistema soporte un mínimo de 10 usuarios conectados desde la red local y un
mínimo de 15 usuarios conectados desde internet. Además se estima que el sistema sea
accedido por al menos 3 usuarios diariamente y que se agreguen nuevos registros todos los
días.
Se tiene planificado que con los 120 Gb de almacenamiento mínimo se puedan guardar un
mínimo de X registros.

2.3.2 Restricciones de Diseño

El software se verá limitado por las limitaciones que tenga la plataforma en la cual se ejecute,
siempre y cuando se cumplan unos requisitos mínimos.

Requerimientos de software y hardware para el servidor

Requisitos software

Disponer de un sistema operativo


Disponer de un servidor web.
Tener instalado un motor de base de datos
Tener instalado un navegador de Internet.
Requisitos hardware

Un ordenador con procesador dual-core a 2.0 Ghz o superiores.


2Gb de RAM como mínimo, se recomienda 4Gb.
Disponer del 80% de espacio libre en disco

Requerimientos de software y hardware para el cliente

Requisitos software

Tener instalado Macromedia Flash, última versión.


Tener instalado un navegador de Internet.

Requisitos hardware

Un ordenador con procesador de 1.2Ghz o superior.


1Gb de RAM como mínimo.
2.3.3 Seguridad

El acceso a la información está restringido a ciertos usuarios del sistema, cada usuario del
sistema tiene permisos específicos para realizar operaciones sobre el mismo.

El acceso de la aplicación a la base de datos se hace por medio de un usuario y contraseña.


Además el envío de los nombres de usuarios y contraseñas se hace bajo algoritmos de
encriptación.

2.3.4 Fiabilidad

2.3.5 Disponibilidad

2.3.6 Mantenibilidad

El administrador del sistema debe realizar copias de seguridad, y hacer el respaldo de las
mismas. Se recomienda realizar las copias mensualmente

2.3.7 Portabilidad

El uso del lenguaje PHP proporciona al sistema la característica de ser accesible desde
cualquier plataforma de sistema operativo y con cualquier explorador web.

2.4 Otros requisitos


Diagramas de Casos de Usos
Diagrama de secuencia

Matricular alumno
Re matricular alumno

Retirar alumno
Retirar docente

Registrar docente
Registrar Asignatura

Retirar Asignatura
Designar Asignatura a docente

Desasignar asignatura a docente


Asignar actas a notas reparación

Deshacer secciones
Asignar actas a calificaciones

Generar Certificado
Abrir sección

Subir noticia
Registrar nota de parcial

Registrar nota de reparación


Modificar notas parciales

Eliminar imagen
Modificar notas reparación
Subir imagen
Diagrama de Clases (Proceso)

GaleriaImagen MensajeDeError
-tema: String -mensajeError: String
-imagen: String -ruta: String
-descripcion: String
+construct(mensajeError: String, ruta: string)
+construct(tema: String, image: Array, descrip: String) +determinarTipoDeMensaje(): String
+guardarGaleria(): void +obtenerOrigenDelError(): String
+obtenerURLImagen(imagen: Array): String
+obtenerGaleria(): Array
+eliminarImagen(idImagen: String): void

MiExcepcion

+construct(menssage: String, code: Integer, previous: Exeption)


+mensajePersonalizado(): String
PaginaEstatica

-titulo: String
-contenido: Text Noticia
-imagen: String
-autor: String -titulo: string
+noticia: text
+construct(titulo: String, imagen: Array, contenido: String, autor: String) -fechaPublicacion: date
+guardarPagina(): void +fechaValides: date
+obtenerPaginaPorTitulo(titulo: String): Array
+obtenerPaginaPorId(idpagina: String): Array +Construct(titulo, noticia, fechpub, fechval)
+obtenerPaginas(): Array +guardarNoticia(): void
+editarPagina(idpagina: String, imagen: Array, contenido: String): String +obtenerNoticias(): Array
+listarNoticias(): Array
+eliminarNoticias(idnoticia): Array
Progenitor IdAlumno IdAsignatura IdMatricula Asignatura

-nombre: String -id: string -id: string -id: string -asignatura: String
-apellido: String -curso: integer -añoRegistro: integer -curso: integer -area: String
-cedula: String -sexo: char -estado: Boolean
-trabaja: String +obtenerId(): String +construct(curso: Integer)
-oficio: String +construct(curso: integer, sexo: char) -idDisponible(): Integer +obtenerId(): String +construct(asignatura: Sring, area: String)
-lugar: String +obtenerId(): String -idDisponible(): Integer +guardarAsignatura(): void
-telefono: Integer -idDisponible(): Integer +listarAsignaturas(): Array
+idrhijo: String +obtenerAsignaturas(): Array
+retirarAsignatura(idAsignatura: String): String
+construct(nom: String, ape: String, ced: String, trab: String, of: Stringi, lug: String, tel: Integer, ide: String) +restablecerAsignatura(idAsignatura: String): String
+guardarProgenitor(): void ID
+obtenerProgenitores(idAlumno: String): Array
+generarId(Id: Object)

Matricula

-alumno: Alumno
-papa: Progenitor Por razón de espacio en la representación de este diagrama Imparte
-mama: Progenitor se omiten los tipos de datos en el constructor de esta clase
-año: Iinteger -idasignatura
-nivel: Integer -iddocente
-seccion: Char -nivel: String
-edad: Integer -seccion: Char

+Construct(noAl, apAl, feNa, ced, sx, niv, rel, noP, apP, cdP, trbP, ofP, lugP, telP, noM, apM, cedM, trbM, ofM, lugM, telM, vve, tut, telT, paren, dirA, bau, com, bauza, ent, obs) +construct(idasignatura: String, iddocente: String, nivel: Integer, seccion: Char)
+GuardarMatricula(void) +guardarImparte(): void
+ObtenerAlumnosPorNivel(nivel, seccion, curso): Array +asignaturasDeGrado(nivel: Integer, seccion: Char): Array
+Rematricular(nivel, relig, viv, tut, pare, direc, bau, comu, bauti, obser, entre) +impartidaPorDocente(idAsignatura): Array
+ObtenerAlumnosPorNivelyAsignatura(nivel, seccion, asignatura): Array +borrarAsignaturaImpartida(idAsignatura: String, nivel: Integer, seccion: Char): String
+ObtenerHermanosDeAlumno(idAlumno): Array +borrarAsignaturaEnImparte(idAsignatura: String): String
+ObtenerHistorialAcademico(idAlumno): Array
+actualizaDatosAlumnos(nivel, seccion, curso, religion, vive, tutor, parentesco, telefono, direccion): Array

Grupo

-nivel: Integer
-seccion: Char
-iddocente: String
+as: Char
Alumno
+construc(grado: Integer, seccion: Char, idDocent: String)
-nombre: String
+guardarGuia(): void
-apellido: String
+docenteGuia(nivel: Integer, seccion: Char)
-fechaNacimiento: Date
+yaEsGuia(iddocente: String)
-cedula: String
+eliminarGuia(nivel: Integer, seccion: Char): String
-sexo: Char
+listarGrupos(curso): Array
-religion: String
+alumnosMatriculados(nivel: Integer): Integer
-vive: String
+agregarGrupo(nivel: Integer, cantidad: Integer): String
-tutor: String
+grupoYaDividido(nivel): String
-telefono: Integer
+docenteGuia(grado: Integer, seccion: Char): String
-parentesco: String
+gradoYaDividido(nivel: Integer): Boolean
-direccion: String Por razón de espacio en la representación de este diagrama
+deshacerDivicionDeGrado(grado: Integer): String
-bautizado: Char se omiten los tipos de datos en el constructor de esta clase
-comunion: Char
-bautizarlo: Char
-entregados: Text
-observaciones: Text
-estado: Boolean

+Construct(nom, ape, fechNa, ced, sx, rel, viv, tut, tel, pare, dir, bau, com, baz, ent, obs, sta)
+guardarAlumno(): void
+obtenerExpedienteDeAlumno(idAlumno: String): Array
+obtenerDatosDeAlumno(idAlumno: String): Array
+validarAlumno(idAlumno: String, fechaNacimiento: Date): Boolean
+retirarAlumno(idAlumno: String): String
+restaurarAlumno(idAlumno: String): String
+obtenerAlumno(idAlumno: String): String
Docente

-nombre: String
Estadistica
-apellido: String
-fechaNacimiento: Date
+construct() -clave: String
+matriculaColegio(): Integer -sexo: Char
+matriculaGrado(grado: integer): Integer -religion: String
+rendimientoColegio(): Float -telefono: Integer Por razón de espacio en la representación de este diagrama
+rendimientoGrado(grado: Integer): Float -celular: Integer se omiten los tipos de datos en el constructor de esta clase
+rendimientoAsignatura(idAsignatura: String): Float -direccion: String
+rendimientoAsignaturaGrado(grado: Integer, idAsignatura: String): Float -profesion: String
+rendimientoPrimaria(): Float -estudios: Text
+rendimientoSecundaria(): Float -entregados: Text
-consultaRendimiento(parcial: Char, tipo: String): String -estado: Boolean
-consultaRendimientoGrado(parcial: Char, grado: Integer): String
-consultaRendimientoAsignatura(parcial: Char, idAsignatura: String, grado: Integer): String +construct(nombDo, apellDo, fechnac, ced, sex, relig, tele, cel, direc, prof, estud, entr)
+mejorAlumnoColegio(): Array +guardarDocente(): void
+mejorAlumnoPrimaria(): Array +obtenerExpedienteDocente(idDocente: String): Array
+mejorAlumnoSecundaria(): Array +listarDocentes(): Array
+mejorAlumnoGrado(): Array +verificarDocente(idDocente: String, fechnaci: Date, clave: String): Boolean
-consultaMejorAlumno(parcial: Char, tipo: String): String +actualizarDatoDocente(idDoce: String, tel: Integer, cel: Integer, dir: String, estu: Text, entr: Text): String
-consultaMejorAlumnoGrado(parcial: Char, grado: Integer): String +retirarDocente(idDocente: String): String
+cambiarClaveDocente(idDocente: String, clavAnti: String, nuevClav: String): Boolean
+restableceDocente(iddocente: String): String
+obtenerDocentes(): Array

Reparacion

-idralumno: String Certificado


-idrasignatira: String
-año: Integer
-anyo: Integer
-nivel: Integer
-nota: Integer
+construct(idalumno: String, anyo: Integer, nivel: Integer)
+construct(idalumno: String, idasignatura: String, anyo: Integer, nota: Integer)
+obtenerCertificado(idalumno: String, nivel: Integer): String
+guardarReparacion(): void
+obtenerMultiCertificado(idalum: String, nivelSup: Integer, nivelInfe: Integer): Array
+mostrarNotaReparacion(asignatura: String, nivel: Integer, seccion: Integer): Array
-eliminarGradosRepetidos(historial: Array): Array
+obtenerNotaAsignaturaReparada(idalumno: String, idasignatura: String, anyo: Integer): Array
+obtenerNotaDeReparacion(id: String): Array
+actualizarNotaReparacion(notaRepar: Integer, idalum: String, idasign: String): Array
+asignarLibroActaFolio(laf: Integer, grado: Integer, seccion: Integer)

Calificacion

-idalumno: String
-idasignatura: String
-anyo: Date
-nota: Integer
-parcial: Char

+construct(idalumno: String, anyo: Intger, nota: Integer, idasignatura: String, parcial: Char)
+parcialActual(idalumno: String, anyo: Integer, idAsignatura: String): Char
+guardarCalificacion(): void Usuario
+mostrarCalificaciones(nivel: Intege, seccion: Char, asignatura: String): Array
+obtenerAlumnosQueRepararan(nivel: Integer, seccion: Char, idAsignatura: String): Array
+constuct()
+verificarDerechoparaReparar(idalumno: String): Boolean
+verificarUsuario(usuario: String, clave: String): Boolean
+obtenerCalificaciones(id: String): Array
+cambiarClaveUsuario(usuario: String, clavAnt: String, nueClav: String): Boolean
+obtenerCalificacionesPorDocenteGuia(idDocente: String): Array
+asignarLibroActaFolio(laf: String, grado: Integer, seccion: Char): String
+actualizarCalificaciones(I: Integer, II: Integer, III: Integer, IV: Integer, idalum: String, idasig: String): String
+obtenerCalificacionNivel(idalumno: String, anyo: Integer): Array
Diagrama de Clases (Persistencia)
Diagrama Entidad –Relación

BBDD SGAMML idalumno


nombre nombre
apellidos apellido
cedula fechanaci cedula anyo nivel
idpadre sexo religion idmatricula
vive tutor

telefono
direccion
Matriculas
Padres tiene Alumnos registra
parentesco
comunion
idralumno
entregados bautizado
estado bautizarlo seccion edad
trabaja telefono
oficio anyo
lugar III
calificaciones
I IV fechanaci
sexo apellido
II NF clave s nombre
nivel seccion
laf iddocente
religion

Docentes
Asignaturas imparte
estado
telefono
seccion
nivel celular
laf estado idasignatura
area asignatura estudios direccion
idreparacion
profesion

Reparaciones repara
BBDD MMLRECURSOS

idgaleria tema
idusuario usuario

GaleriaImagenes
Usuarios

descripción imagen
clave

titulo
titulo idnoticia noticia
idpagina contenido

Noticias
PaginasEstaticas

fechapublicacion imagen
descripcion imagen
Diseño de Datos

TABLA PROGENITOR

Almacena la información de los padres de familia.


NOMBRE DESCRIPCION TIPO
Idpadre Llave primaria para identificar al VARCHAR(16)
progenitor.
Nombre Nombre del Progenitor. VARCHAR(20)
Apellido Apellidos del Progenitor. VARCHAR(20)
Cedula Número del documento de identidad del VARCHAR(16)
Progenitor.
Trabaja Confirmación si el Progenitor trabaja. VARCHAR(2)
Respuesta si o no.
Oficio Profesión del Progenitor. VARCHAR(20)
Lugar Lugar del trabajo del Progenitor VARCHAR(20)
Teléfono Teléfono del Progenitor VARCHAR(9)

TABLA ALUMNOS

Almacena la información de los alumnos inscritos en el centro.


NOMBRE DESCRIPCION TIPO
Idalumno Llave primaria para identificar al alumno. VARCHAR(14)
Nombre Nombre del Alumno. VARCHAR(20)
Apellido Apellidos del Alumno. VARCHAR(20)
Fechanaci Fecha de nacimiento del alumno. DATE
Cedula Número del documento de identidad del VARCHAR(16)
Alumno.
Sexo Género del Alumno. CHAR(1)
Religión Religión que profesa el alumno. VARCHAR(10)
Vive Define con quien vive el alumno. VARCHAR(6)
Tutor Nombre del responsable del alumno en caso VARCHAR(40)
de que no viva con los padres.
Teléfono Teléfono del tutor. VARCHAR(10)
Parentesco Parentesco del tutor con el alumno. VARCHAR(40)
Dirección Dirección de residencia del alumno. TEXT
Bautizado Si es o no bautizado. VARCHAR(2)
Comunión Si ha dado o no la primera comunión. VARCHAR(2)
Bautizarlo Progenitor o tutor confirma si desea bautizar VARCHAR(2)
al alumno en el centro.
Entregados Documentación entregada al momento de la TEXT
matricula.
Observaciones Cualquier información relevante a la salud TEXT
del alumno.
Estado Estado del alumno en el centro. Activo o no. BOOL
TABLA MATRICULAS

Almacena los datos de la matricula del año lectivo.


NOMBRE DESCRIPCION TIPO
Idmatricula Llame primaria, código identificador de la VARCHAR(14)
matricula.
Anyo Año Académico. YEAR
Nivel Nivel Académico del alumno. VARCHAR(3)
Sección Sección en la que se matriculará el alumno. CHAR(2)
Edad Edad del Alumno. INT(2)
Idralumno Llave Foránea que relaciona con la tabla VARCHAR(14)
Alumnos

TABLA DOCENTE

Almacena los datos de los docentes del centro.


NOMBRE DESCRIPCION TIPO
Iddocente Llave Primaria que identifica al docente. VARCHAR(16)
Nombre Nombre del docente. VARCHAR(20)
Apellido Apellidos del docente. VARCHAR(20)
Fechanaci Fecha de nacimiento del docente. DATE
Clave Clave de usuario del SGACMML VARCHAR(16)
Sexo Genero del docente. VARCHAR(1)
Religión Religión que profesa el docente. VARCHAR(10)
Teléfono Número de teléfono del docente. VARCHAR(10)
Celular Numero de celular del docente. VARCHAR(10)
Dirección Dirección de residencia del docente. VARCHAR(80)
Profesión Profesión del docente. VARCHAR(24)
Estudios Títulos profesionales del docente. Cursos TEXT
realizados por el docente.
Entregados Documentación entregada por el docente. TEXT
Nivel Nivel asignado al docente para ser el guía. VARCHAR(3)
Sección Sección asignada al docente para ser su guía. CHAR(1)
Estado Estado del docente en el centro. Activo o BOOL
Retirado.

TABLA ASIGNATURA

Almacena los datos de las asignaturas impartidas en el centro.


NOMBRE DESCRIPCION TIPO
Idasignatura Llave Primaria identifica la asignatura. VARCHAR(12)
Asignatura Nombre de la asignatura. VARCHAR(25)
Area Área académica en la que se enfoca la VARCHAR(33)
asignatura.
Estado Estado de la asignatura en el pensum. Activa o BOOL
Retirada.
TABLA CALIFICACIONES

Almacena las notas parciales y nota final que obtiene un alumno por cada asignatura.
NOMBRE DESCRIPCION TIPO
Idralumno Llave foránea que relaciona con tabla VARCHAR(14)
Alumnos
Idrasignatura Llave foránea que relaciona con tabla VARCHAR(14)
Asignatura.
Anyo Año académico que cursa el alumno. YEAR
I Nota del primer parcial. INT(3)
II Nota del segundo parcial. INT(3)
III Nota del tercer parcial. INT(3)
IV Nota del cuarto parcial. INT(3)
NF Nota final del año. Promedio de los cuatro INT(3)
parciales.
LAF Numero de Libro, Acta y Folio en que está VARCHAR(14)
inscrita la nota final del año lectivo.

TABLA REPARACIONES

Almacena la nota obtenida por el alumno en la asignatura reparada.


NOMBRE DESCRIPCION TIPO
Idreparacion Llave Primaria que identifica a la nota de INT
reparación.
Idralumcal Llave foránea que relaciona con la tabla VARCHAR(14)
Calificaciones.
Idasignacal Llave foránea que relaciona con la tabla VARCHAR(14)
Calificaciones.
LAF Numero de Libro, Acta y Folio en la que esta VARCHAR(14)
inscrita la nota de reparación.

TABLA USUARIOS

Almacena los datos de los usuarios que va


NOMBRE DESCRIPCION TIPO
Idusuario Llave Foránea que identifica al usuario. INT
Usuario Nombre del usuario. VARCHAR(15)
Clave Clave de la cuenta de usuario. VARCHAR(13)
TABLA PAGINAESTATICA

Almacena información que es presentada por el sistema.


NOMBRE DESCRIPCION TIPO
Idpagina Llave Primaria, identifica la pagina. INT
Titulo Nombre de la página. VARCHAR(25)
Contenido Información que se mostrará en la página. TEXT
Imagen Ruta de ubicación de la imagen publicada en VARCHAR(100)
la página.
Autor Nombre del autor o redactor de la información VARCHAR(25)
presentada en la página.

TABLA GALERIAIMAGEN
Almacena los datos de las imágenes presentadas en el sistema.
NOMBRE DESCRIPCION TIPO
Idgaleria Llave Primaria, identifica la imagen. INT
Tema Titulo que se le asigna a la imagen. VARCHAR(25)
Imagen Ruta de ubicación de la imagen. VARCHAR(100)
Descripción Breve descripción de lo que representa la TEXT
imagen.

TABLA NOTICIAS

Almacena la información publicada a manera de noticias.


NOMBRE DESCRIPCION TIPO
Idnoticia Llave Primaria, identifica la noticia. INT
Titulo Nombre o encabezado de la publicación. VARCHAR(50)
Noticia Descripción o detalle de la noticia que se TEXT
presenta.
Fechapublicacion Fecha en que se publicó la noticia. DATE
Fechavalidez Fecha en que la noticia no tendría validez o DATE
no seria relevante.
Modelo Relacional
Diseño Arquitectónico

Colegio Católico Madre María Luisa

Inicio Colegio Estudiantes Matricula Informes Noticias

Inicio Historia Expedient Nuevo Certificados


Ingreso

Ingresar
Reglament Nota
Reingres

Requisitos Curso
de Matricula Siguiente
Colegio Católico Madre María Luisa

Estadísticas Pensum Docente Miscelánea Consultar

Matricula Estadísticas Nuevo Ingresar


Docente Noticia

Mejores
Asignaturas Lista Asignar
Alumnos Docente Acta
Reparación

Rendimiento Abrir Sección Restaurar


Docente
Asignar
Acta
Restaurar
Alumno
Modifica
r Nota

Modificar
Nota
Reparación
Colegio Católico Madre María Luisa

Cambios Galería Contáctenos

Cambiar
Password Formulario
Docente de Contacto

Cambiar
Password
Usuario

Respaldar BD

Restaurar BD

Borrar Noticia

Subir Foto

Eliminar Foto

Editar Pagina
Diseño de Interfaz

Página de inicio

Página de inicio de sesión


Lista de asignaturas

Lista de docentes
Lista de estudiantes
Conclusiones

Con la elaboración de este sistema, se ha logrado facilitar los procesos de gestión académica
del centro, así como también el acceso a la información del mismo.

Ahora a través del sistema al personal del centro le tomará menos trabajo y tiempo ingresar la
información de los alumnos, los docentes y otros datos académicos.

Se logró cumplir con cada una de las funciones requeridas para el sistema, así como diseñar
una interfaz amigable y de fácil manejo para los usuarios comunes.

Y por último consideramos que el sistema fomentará el uso de más sistemas automatizados,
por las bondades de estos proveen, o incluso incentivará a la mejora del mismo dado que la
manera a como fue desarrollado permite una fácil actualización.
Recomendaciones

Capacitar al personal del centro en el uso del sistema.

Instruir a los usuarios del sistema sobre la importancia de no compartir o permitir que su clave
de acceso al sistema sea del conocimiento de ajenos.

Mantener una constante actualización de la información, como lo es el retiro de alumnos,


bajas de docentes o bajas de asignaturas, a manera de permitir que los datos sean
consistentes.

Realizar respaldos y restauración de la base de datos de manera periódica (se recomienda


hacerlo cada tres meses).

Que el administrador haga cambios periódicos de las claves de los usuarios, para evitar
posibles violaciones al sistema.

Eliminar información referente a noticias antiguas e imágenes que no se usen más, para evitar
datos innecesarios.
Bibliografía
Internet:
http://es.wikipedia.org

Libros:
 Creación De Un Portal Con Php Y Mysql. 3ª Edición.
Editorial Ra-Ma
PAVON PUERTAS, JACOBO

 Tecnología Y Diseño De Bases De Datos.

Editorial Ra-Ma

PIATTINI VELTHUIS, MARIO G ; MARCOS MARTINEZ, ESPERANZA ; CALERO MUÑOZ,


CORAL ; VELA SÁNCHEZ, BELÉN

 Manual Imprescindible de PHP5.


Editorial: © EDICIONES ANA YA MULTIMEDIA (GRUPO ANAYA, S.A.), 2004
Luis Miguel Cabezas Granado

 Programación Orientada a Objetos para PHP5. Edición julio 2009


Bajo licencia de Creative Commons. (http://creativecommons.org/licenses/by-nc/3.0/)
Enrique Place.
 PHP y MySQL para Dummies. 2da Edición.
Janet Valade

 Sistemas de Bases de Datos, Conceptos Fundamentales. 2da Edición.


Editado: Addison – Wesley Iberoamericana
Ramez Elmasri, Shamkant B.Navathe.

 Fundamentos de Sistemas de Bases de Datos. 5ta Edición.


Editado: Pearson Addison Wesley
Ramez Elmasri, Shamkant B.Navathe.

 Fundamentos de Bases de Datos. 5ta Edición.


Editado: McGRAW-HILLDNTERAMERICANA DE ESPANA, S. A. U
Abraham Silberschatz, Henry F. Korth, S. Sudarshan.

 Ingeniería del Software un Enfoque Practico. 5ta Edición.


Editado: McGRAW-HILLDNTERAMERICANA DE ESPANA, S. A. U
Roger S. Pressman
 Manual de PHP. Publicado 08-07-2002

Bajo licencia: Copyright © 1997, 1998, 1999, 2000, 2001, 2002 por el Grupo de
documentación de PHP

por Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben
Wilson, Rasmus Lerdorf, Andrei Zmievski, y Jouni Ahto

 Los secretos de PHP y MySQL. Numero 30


Bajo Licencia: Copyright © KnowWare E.U.R.L.
Johann – Christian Hanke
 PHP 5. Numero 28
Bajo Licencia: Copyright © KnowWare E.U.R.L.
Johann – Christian Hanke
 MySQL 5.0 Reference Manual. Documento generado el: 2008-05-03 (revisión: 502)

Bajo Licencia: Copyright 1997-2007 MySQL AB

 Curso completo de HTML


Bajo Licencia: GNU. Copyright Jorge Ferrer, Rodrigo Garcia y Victor García.
Jorge Ferrer, Víctor García, Rodrigo García

 Introducción a CSS. Versión mayo 2009


Bajo Licencia: Creative Commons (http://creativecommons.org/licenses/by-nc-
nd/3.0/deed.es)
Javier Eguíluz Pérez

 Introducción a JavaScript. Versión marzo 2009


Bajo Licencia: Creative Commons (http://creativecommons.org/licenses/by-nc-
nd/3.0/deed.es)
Javier Eguíluz Pérez

 Desarrollo Web con PHP y MySQL. 3ra Edición

Editorial: © EDICIONES ANA YA MULTIMEDIA (GRUPO ANAYA, S.A.), 2005


Luke Welling, Laura Thomson.

 IEEE Std 610.12-1990. Software Engineering Standards Committee of the IEEE


Computer Society

 IEEE Std 830-1998. Software Engineering Standards Committee of the IEEE Computer
Society
ANEXOS
Código de la clase Pagina.
<?php
session_start();
require_once('Formulario.php');

class Pagina
{
// atributos de clase pagina

public $activePage;
public $acceso='';
public $formulario;
public $content='';
public $contentSecundario='';
public $title = 'Colegio Catolico Madre Maria Luisa';
public $keywords = 'Madre Maria Luisa';
public $buttons = array('Inicio', 'Estudiantes' ,'Matricular','Pensum',
'Docentes','Miscelanias','Informes','Colegio', 'Noticias', 'Estadisticas',
'Consultar', 'Cambios', 'Galeria','Contactanos');

public $menu = array(array('Inicio' => 'index.php'),

array('Expediente'=>'ListarEstudiantes.php?grado=1&seccion=A','Ingresar Nota'=>'OpcionesDocente.php','Curso
Siguiente'=>'ExpedienteSigCiclo.php'),
array('Nuevo Ingreso'=>'NuevoIngreso.php','Reingreso'=>'Reingreso.php'),

array('Grados'=>'Grados.php?grado=1&seccion=A','Asignaturas'=>'Asignaturas.php','Abrir Seccion'=>'AbrirGrado.php'),
array('Nuevo Docente'=>'NuevoDocente.php','Lista
Docentes'=>'ListarDocentes.php','Restaurar Docente'=>'RestaurarDocente.php','Restaurar Alumno'=>'RestaurarAlumno.php'),
array('Ingresar Noticia'=>'IngresarNoticia.php','Asignar Acta
Reparacion'=>'AsignarActaReparacion.php','Asignar Acta'=>'AsignarActa.php','Modificar Nota'=>'ModificarNota.php','Modificar
Nota Reparacion'=>'ModificarNotaReparacion.php'),
array('Certificados'=>'certificados.php'),

array('Historia'=>'MostrarPagina.php?pagina=Historia','Reglamentos'=>'MostrarPagina.php?pagina=Requisitos','Requisitos de
Matricula'=>'MostrarPagina.php?pagina=Requisitos'),
array(),
array('Matricula'=>'EstadisticasMatricula.php','Mejores
Alumnos'=>'MejoresAlumnos.php','Rendimiento'=>'Rendimiento.php'),
array(),
array('Cambiar Password Docente'=>'CambiarDocente.php','Cambiar Password
Usuario'=>'CambiarPassword.php','Respaldar BD'=>'Respaldar.php','Restaurar BD'=>'Restaurar.php','Borrar
Noticia'=>'BorrarNoticia.php','Subir Fotos'=>'SubirFotos.php','Eliminar Fotos'=>'EliminarFotos.php','Editar
Pagina'=>'EditarPagina.php'),
array(),
array('Formulario de Contacto'=>'Contacto.php')

);

public $usuarios = array('direccion','secretaria','matriculador','docencia','administracion','visitante');

public $permisos = array(


array('Inicio','Pensum','Docentes','Miscelanias','Informes','Noticias','Estadisticas','Galeria','Colegio'),

array('Inicio','Estudiantes','Matricular','Informes','Noticias','Estadisticas','Contactanos','Colegio','Pagos'),

array('Inicio','Matricular','Noticias','Estadisticas','Contactos','Colegio'),

array('Inicio','Estudiantes','Noticias','Estadisticas','Contactanos','Colegio'),

array('Inicio','Noticias','Estadisticas','Contactanos','Colegio','Cambios','Galeria','Consultar'),
array('Inicio','Noticias','Estadisticas','Contactanos','Colegio','Galeria','Consultar') );

public $indicePermisos=0;

public $menu_activo='';

// Operaciones de clase

public function __construct()


{
$this->formulario = new Formulario();
}

public function __set($name, $value)


{
$this->$name = $value;
}

public function Display()


{

$usuarioSesion = $_SESSION['usuario'];
$docenteSesion = $_SESSION['docente'];
/* echo $usuarioSesion.'--'.$docenteSesion; */

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-


transitional.dtd">
';
echo "<html>\n<head>\n";

echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n" ;


/*$this -> DisplayTitle();*/
/*$this -> DisplayKeywords();*/
$this -> CargarEstilosCSS();
echo "\n</head>\n<body>\n";

echo "<div id='contenedor'>\n"; //abriendo div contenedor


echo "<div id='cabecera'>\n"; //abriendo div cabezera

/* echo '<div id="myslides">

<img src="css/images/verde.png" />


<h3>Unete Ya</h3>
<img src="css/images/azul.png" />
<h3>Exito</h3>
</div><!-- cerrando myslides-->'; */

/* $this -> DisplayHeader(); */


//$this -> DisplayAutenticar();

$this -> DisplayMenu($this->buttons);

$this -> DisplayAutenticar();


echo "\n</div><!-- cerrando cabecera-->"; //cerrando div cabezera
echo '<div id="slider">
<ul>
<li><a href="http://templatica.com/preview/30"><img src="css/images/01.jpg"
alt="Css Template Preview" /></a></li>
<li><a href="http://templatica.com/preview/7"><img src="css/images/02.jpg" alt="Css
Template Preview" /></a></li>
<li><a href="http://templatica.com/preview/25"><img src="css/images/03.jpg"
alt="Css Template Preview" /></a></li>
<li><a href="http://templatica.com/preview/26"><img src="css/images/04.jpg"
alt="Css Template Preview" /></a></li>
</ul>
</div> ';
echo "\n<div id='principal'>"; //abriendo div principal
echo "\n<div id='contenido'>"; //abriendo div contenido

$this->DisplayContentSecundario();
$this->DisplayContent();
echo '</div><!-- cerrando contenido-->'; //cerrando div contenido

echo "<div id='barra_lateral'>\n"; //abriendo div barra lateral

$this ->DisplayMenuLateral($this->menu);

echo "</div><!-- cerrando barra lateral-->";//cerrando barra lateral side

echo '<div class="cleaner"></div>';

echo '</div><!-- fin de principal-->';//fin de principal

echo '</div><!-- fin de contenedor-->';//fin de Contenedor

echo "<div id='contenedor_pie_pagina'>";

echo '<div id="pie_pagina">'; //inicio de div pie pagina


$this -> DisplayFooter();
echo '</div><!-- fin de pie de pagina-->'; //fin de div pie pagina
echo '</div><!-- fin de contenedor pie de pagina-->'; //fin de contenedor pie pagina

echo "</body>\n</html>\n";
}
public function DisplayFormulario()
{

echo $this->formulario->Display();

public function crearFormulario($opcion=0)


{

$this->formulario->CrearFormulario($opcion);

public function DisplayTitle()


{
echo '<title> '.$this->title.' </title>';
}

public function DisplayKeywords()


{
echo "<meta name=\"keywords\" content=\"$this->keywords\" />";
}

public function CargarEstilosCSS()


{
?>

<!-- Estilos-->
<link rel="stylesheet" type="text/css" href="css/ddsmoothmenu.css" />
<link href="css/estilo.css" rel="stylesheet" type="text/css" />
<link type="text/css" href="cs/jquery.validity.css" rel="Stylesheet" />
<!-- Scripts-->
<script type="text/javascript" src="scripts/jquery.min.js"></script> <!-- Agrega la libreia jquery-->
<script type="text/javascript" src="scripts/ddsmoothmenu.js"></script> <!-- script que controla el menu-->
<script type="text/javascript" src="scripts/script.js"></script> <!-- Script el resto de funcionalidades -->
<script type="text/javascript" src="scripts/jquery.validity.js"></script>
<script type="text/javascript" src="scripts/jquery.cycle.all.js"></script>
<script type="text/javascript" src="scripts/easySlider1.7.js"></script>

<script type="text/javascript">
// Selecciona todas los formularios en la pagina
// y llama validity en el resultado
$(function() {
$("form").validity(function() {
$("input")
.require('Campo Obligatorio');

$("select")
.require('Campo Obligatorio');

$(".num")
.match("number",'Numero requerido');

$(".fecha")
.match("date",'Fecha requerida')
.lessThanOrEqualTo(new Date());

$(".rango")
.range(0, 100,'Entre 0 y 100');

$(".mintext14")
.minLength(14,'14 caracteres minimo');

$("input.unico")
.distinct("Este valor debe ser unico");
});
});
</script>

<?php
}

public function DisplayHeader()


{
?>

<!--<img id='corazon' src='imagenes/corazon.png'></img>


<br/>
<!--<img src="imagenes/banner.png" id="banner" alt="Colegio Catolico Madre Maria Luisa"/>-->

<?php
}

public function DisplayAutenticar()


{

if(!isset($_SESSION['usuario']))
{
?>
<div id="caja_autenticar">
<div class=autenticar>
<strong>Visitante</strong>
<a href="Autenticar.php" class="sesion"><img id='corazon' src='css/images/iniciar.png' /></a>
</div>

<div class="cleaner"></div>
</div>

<?php

}
else
{
$docente = $_SESSION['docente'];

if($_SESSION['usuario']=='docencia' && isset($_SESSION['docente']))


{

echo '<div id="caja_autenticar">';

$usuario = $_SESSION['usuario'];

echo "<div class=autenticar>";

echo "<strong>$usuario</strong> > $docente";


echo "<a href='Desconectar.php'><img id='corazon'
src='css/images/finalizar.png' /></a>" ;
echo "</div>";

echo "<div class='cleaner'></div>";


echo '</div>';
}
else
{
echo '<div id="caja_autenticar">';

$usuario = $_SESSION['usuario'];

echo "<div class=autenticar>";


echo "<strong>$usuario </strong>";
echo "<a href='Desconectar.php'><img id='corazon' src='css/images/finalizar.png' /></a>";
echo "</div>";

echo "<div class='cleaner'></div>";


echo '</div>';

public function DisplayMenu($buttons)


{
//calculate button size
$width = 100/count($buttons);
$actual = $_SERVER['PHP_SELF'];
$partes = explode('/',$actual);

/*foreach($partes as $current)
echo "La pagina acutal es: $current";*/

//Obtener la pagina Actual y directorio actual


$indice = count($partes)-1;
$paginaActual = $partes[$indice];
$directorio = $partes[$indice-1];

//verifico si se ha iniciado seccion.


//obtengo el indice de permisos actual.
if(isset($_SESSION['usuario']))
{
foreach($this->usuarios as $key => $usuarioActual)
if($usuarioActual == $_SESSION['usuario'])
{

$this->indicePermisos = $key;
}
}
else
$this->indicePermisos = 5;

//Muestro los botones

echo "\n".'<div id="templatemo_menu" class="ddsmoothmenu marcar">


<ul>';

$_indice=-1;//Indice actual de $buttons, se utiliza para imprimir sub menu asociado


foreach($buttons as $key => $name )
{
$_indice++;

//if(isset($_SESSION['usuario']))
//{
$continuar = false;
//Este foreach verifica que el usuario tenga permiso para ver el boton actual.
foreach($this->permisos[$this->indicePermisos] as $permiso)
if($permiso == $name)
{
//echo "<br/> encontrado: $name";
//si el permiso se encontro dar paso para e imprimir el boton
$continuar = true;
}
//si el permiso no se encuentra saltar a siguiente iteracion de foreach buttons
if($continuar == false)
continue;
//}

//si encontrado igual a true hacer esto

//en el caso de que se alla indicado explicitamente la pagina actual.


if($this->activePage == $name)
{
if($this->activePage=='Inicio')
{

echo "\n<li><a id='menuselected' class='menuselected'


href='index.php'>$name</a></li>";
$this->menu_activo=$key;
}
else
{
echo "\n<li><a id='menuselected' class='menuselected' href='#'>$name</a></li>";
$this->menu_activo=$key;
}
}
//en el caso de que la pagina actual sea la portada de la seccion actual
else if($paginaActual == $name)
{
echo "\n<li><a id='menuselected' class='menuselected' href='$link'>$name</a></li>";
$this->menu_activo=$key;
}
else
{

//echo "$key=>$name";

$encontrado=0;;
foreach($this->menu[$key] as $llave => $valor)
{

if($valor == $paginaActual)
{

$encontrado=1;
echo "\n<li><a id='menuselected' class='menuselected'
href='#'>$name</a></li>";
$this->menu_activo=$key;
}

}
if($encontrado==0)
{
$link = $name.'.php';

echo "\n<li><a id='menu$key' class='menu' href=$link>$name</a>";

if(count($this->menu[$_indice])>0)
echo "\n\t<ul>";
foreach($this->menu[$_indice] as $submenu => $enlace)
{

echo "\n\t\t <li><a href='$enlace'>$submenu</a></li>";


}
if(count($this->menu[$_indice])>0)

echo "\n\t</ul>";

echo "\n</li>";

}
}

echo "\n".'</ul>'."\n".'<br style="clear: left" />';


echo "</div><!--Fin templatemo_menu -->";

public function DisplayMenuLateral($menu)


{
// echo "El menu activo es $this->menu_activo<br/>";

echo "<div class='caja_menu_lateral'>

<div id='menuLateral'>
<h3 class='cabecera_menu'>opciones</h3>
<ul>";
$mes_actual = date('n');

if(!empty($this->menu_activo))
foreach($this->menu[$this->menu_activo] as $submenu => $enlace)
{
$usuario = $_SESSION['usuario'];
if($usuario=='secretaria' && $submenu == 'Ingresar Nota')
continue;

if(!( ($mes_actual < 10) && (strcmp($submenu,'Curso Siguiente')==0) ))


echo "\n <li> <a href='$enlace' class='subMenu'>$submenu</a></li>";

}
/*
for($i=0;$i<count($menu);$i++)
{
echo "\n<div class='subMenu' id='$i'>";

foreach($menu[$i] as $key => $value)


echo "\n<a href='$value' class='subMenu'>$key<a/><br/>";

echo "\n</div>";
}*/
echo "</ul>
<div class='cleaner'></div>
</div>
</div>";

/* echo '<div id="myslides">

<img src="css/images/imagen1.jpg width="245px" height="245px" />

<img src="css/images/azul.png" width="245px" height="245px" />

<img src="css/images/azul.png" width="245px" height="245px" />

</div> <hr/> <!-- cerrando myslides-->';

/* echo "<img src='css/images/imagen1.jpg' id='banner' width='245px' height='245px' alt='Colegio Catolico Madre Maria
Luisa'/>";*/

public function DisplayContent()


{

$usuarioSesion = $_SESSION['usuario'];
$docenteSesion = $_SESSION['docente'];

$actual = $_SERVER['PHP_SELF'];
$partes = explode('/',$actual);

//Esto obliga a los profesores a autenticarse.


//Obtener la pagina Actual y directorio actual
$indice = count($partes)-1;
$paginaActual = $partes[$indice];
$directorio2 = $partes[$indice];

/* echo $usuarioSesion.'--'.$docenteSesion; */

if($_SESSION['usuario']=='docencia' && !isset($_SESSION['docente']) && $directorio2 != 'FormAutenticarDocente.php')


{ echo '<h5 class="error">Todos los profesores deben autenticarse</h5>';

echo '<script type="text/javascript">


window.location="FormAutenticarDocente.php";

/*location.reload(); */
</script>';

}
//control para que no puedan ver esta pagina quien no tenga permiso
if($this->acceso!='')
{

if(isset($_SESSION['usuario']))
{

$autorizacion = false;
foreach($this->acceso as $usuarioConPermiso)
if($usuarioConPermiso == $_SESSION['usuario'])
{
$autorizacion = true;
}

if($autorizacion==true)
{
//Bloque de seguridad de profesor

if($_SESSION['usuario']=='docencia' && !isset($_SESSION['docente']))


{
echo "Todos los Docentes deben autenticarse primero";
/*echo '<script type="text/javascript">
history.back()
</script>'; */
}
//Bloque para serguridad de profesor
else
{
echo $this->content;
$this -> DisplayFormulario();
}
}
else
{
echo '<script type="text/javascript">
history.back()
</script>';
/*echo '<h3 class="derecha">No tiene permiso para acceder a esta pagina</h3>
<h4 class="izquierda">Debe Finalizar Sesion e ingresar con un usuario Distinto</h4>
<a href="Desconectar.php" class="derecha">Finalizar Sesion</a>';*/
}
}
else
{
echo '<script type="text/javascript">
history.back()
</script>';
/*echo '<h3 class="derecha">Debe Iniciar Sesion Primero</h3>
<a href="Autenticar.php" class="izquierda">Iniciar Sesion</a>';*/
}
}
else
{

echo $this->content;
$this -> DisplayFormulario();
}

public function DisplayContentSecundario()


{

echo $this->contentSecundario;

public function DisplayFooter()


{
?>

<p class="foot"> Colegio Catolico Madre Maria Luisa.</p>

<?php
}
}

?>
Clase Alumno

<?php

require_once '../Persistencia/BaseDeDatos.php';
require_once '../Persistencia/MySQL.php';
require_once '../Persistencia/SqlInsert.php';
require_once '../Persistencia/SqlSelect.php';

class Alumno
{

private $_idalumno;
private $_nombAl;
private $_apellAl;
private $_fechanac;
private $_cedula;
private $_sexo;
private $_religion;

private $_vive;
private $_tutor;
private $_telefono;
private $_parentesco;
private $_direccion;
private $_bautizado;
private $_comunion;
private $_bautizarlo;
private $_entregados;
private $_observaciones;

private $_estado;

function __construct($ide="", $nombAl="", $apellAl="",


$fechaNacimiento="", $cedula="", $sexo="", $religion="",
$vive="", $tutor="", $telefonoTutor="", $parentesco="",
$direccionAlumno="",
$bautizado="", $comunion="", $bautizarlo="", $entregados="",
$observaciones="")

if($ide=="" and $nombAl=="" and $apellAl=="" and

$fechaNacimiento=="" and $cedula=="" and $sexo=="" and $religion=="" and


$vive=="" and $tutor=="" and $telefonoTutor=="" and $parentesco=="" and
$direccionAlumno=="" and $bautizado=="" and $comunion=="" and $bautizarlo==""
and $entregados=="" and $observaciones=="") {

//echo 'Constructor! sin parametros';


} else {

$this->_idalumno=$ide;
$this->_nombAl=$nombAl;
$this->_apellAl=$apellAl;
$this->_fechanac=$fechaNacimiento;
$this->_cedula=$cedula;
$this->_sexo=$sexo;
$this->_religion=$religion;
$this->_vive=$vive;
$this->_tutor=$tutor;
$this->_telefono=$telefonoTutor;
$this->_parentesco=$parentesco;
$this->_direccion=$direccionAlumno;
$this->_bautizado=$bautizado;
$this->_comunion=$comunion;
$this->_bautizarlo=$bautizarlo;
$this->_entregados=$entregados;
$this->_observaciones=$observaciones;
$this->_estado=1;

}
}

public function guardarAlumno()


{
global $conexBD5;
$sql = new SqlInsert();

$sql->intoTable('alumnos');
$sql->addValues("$this->_idalumno");
$sql->addValues("$this->_nombAl");
$sql->addValues("$this->_apellAl");
$sql->addValues("$this->_fechanac");
$sql->addValues("$this->_cedula");
$sql->addValues("$this->_sexo");
$sql->addValues("$this->_religion");
$sql->addValues("$this->_vive");
$sql->addValues("$this->_tutor");
$sql->addValues("$this->_telefono");
$sql->addValues("$this->_parentesco");
$sql->addValues("$this->_direccion");
$sql->addValues("$this->_bautizado");
$sql->addValues("$this->_comunion");
$sql->addValues("$this->_bautizarlo");
$sql->addValues("$this->_entregados");
$sql->addValues("$this->_observaciones");
$sql->addValues("$this->_estado");

$alumno = $conexBD5->insertar($sql);
return $alumno;
}

public function obtenerExpedienteDeAlumno($id)


{
$bdI = new BaseDeDatos(new MySQL());
$sqlI = new SqlSelect();

$sqlI->addSelect("idalumno");
$sqlI->addSelect("nombre");
$sqlI->addSelect("apellido");
$sqlI->addSelect("fechanaci");
$sqlI->addSelect("cedula");
$sqlI->addSelect("sexo");
$sqlI->addSelect("religion");
$sqlI->addSelect("vive");
$sqlI->addSelect("tutor");
$sqlI->addSelect("telefono");
$sqlI->addSelect("parentesco");
$sqlI->addSelect("direccion");
$sqlI->addSelect("bautizado");
$sqlI->addSelect("comunion");
$sqlI->addSelect("bautizarlo");
$sqlI->addSelect("entregados");
$sqlI->addSelect("observaciones");
$sqlI->addSelect("nivel");
$sqlI->addSelect("seccion");
$sqlI->addTable('alumnos');
$sqlI->addTable('matriculas');
$sqlI->addWhere("idalumno='$id'");/*como lo que se compara
es una cadena se debe encerrar entre comillas simples*/
$actual=date (Y);
$sqlI->addWhere("anyo=$actual");
$sqlI->addWhere("estado=1");
$sqlI->addWhere("idralumno=idalumno");

return $expediente = $bdI->seleccionar($sqlI);


}

public function obtenerDatosDeAlumno($id)


{
$bdI = new BaseDeDatos(new MySQL());
$sqlI = new SqlSelect();

$sqlI->addSelect("idalumno");
$sqlI->addSelect("nombre");
$sqlI->addSelect("apellido");
$sqlI->addSelect("fechanaci");
$sqlI->addSelect("cedula");
$sqlI->addSelect("sexo");
$sqlI->addSelect("religion");
$sqlI->addSelect("vive");
$sqlI->addSelect("tutor");
$sqlI->addSelect("telefono");
$sqlI->addSelect("parentesco");
$sqlI->addSelect("direccion");
$sqlI->addSelect("bautizado");
$sqlI->addSelect("comunion");
$sqlI->addSelect("bautizarlo");
$sqlI->addSelect("entregados");
$sqlI->addSelect("observaciones");
$sqlI->addSelect("nivel");
$sqlI->addTable('alumnos');
$sqlI->addTable('matriculas');
$sqlI->addWhere("idalumno='$id'");/*como lo que se compara
es una cadena se debe encerrar entre comillas simples*/
$sqlI->addWhere("idralumno=idalumno");

return $expediente = $bdI->seleccionar($sqlI);


}

public function validarAlumno($id, $fecha)


{
$bd2 = new BaseDeDatos(new MySQL());
$sqlPP = new SqlSelect();

$sqlPP->addSelect("idalumno");
$sqlPP->addSelect("fechanaci");
$sqlPP->addTable("alumnos");
$sqlPP->addWhere("idalumno='$id'");

$alumno2 = $bd2->seleccionar($sqlPP);

if(!empty($alumno2)) {
if($alumno2[0]->fechanaci != $fecha)
return $mensaje = 'clave incorrecta';
else return true; //retorna true si el alumno esta registrado
} else {
return false;//retorna false si el alumno no esta registrado
}
}
public function retirarAlumno($id)
{
$bd3 = new BaseDeDatos(new MySQL());
$sql1 = new SqlUpdate();

$sql1->addUpdate('alumnos');
$sql1->addSet("estado=0");
$sql1->addWhere("idalumno='$id'");
// el alumno no se elimina de la BBDD solo se cambia su estado para mantener sus registros
$alumno = $bd3->actualizar($sql1);
}

public function restaurarAlumno($id)


{
$bd3 = new BaseDeDatos(new MySQL());
$sql1 = new SqlUpdate();

$sql1->addUpdate('alumnos');
$sql1->addSet("estado=1");
$sql1->addWhere("idalumno='$id'");
// el alumno no se elimina de la BBDD solo se cambia su estado para mantener sus registros
$alumno = $bd3->actualizar($sql1);
}
public function obtenerAlumno($id)
{
$bdI = new BaseDeDatos(new MySQL());
$sqlI = new SqlSelect();

$sqlI->addSelect("idalumno");
$sqlI->addSelect("nombre");
$sqlI->addSelect("apellido");
$sqlI->addSelect("fechanaci");
$sqlI->addSelect("nivel");
$sqlI->addSelect("estado");
$sqlI->addTable('alumnos');
$sqlI->addTable('matriculas');
$sqlI->addWhere("idalumno='$id'");/*como lo que se compara
es una cadena se debe encerrar entre comillas simples*/
$sqlI->addWhere("idralumno=idalumno");

return $expediente = $bdI->seleccionar($sqlI);


}
}
Clase MySQL

<?php

require_once 'ManejadorBaseDeDatosInterface.php';
require_once '../Proceso/MiExcepcion.php';

class MySQL implements ManejadorBaseDeDatosInterface


{

private $_conexion;

public function conectar()


{
//contiene los valores de la conexion
require_once("../../../../xampp/cgi-bin/varconexion.inc.php");

/*
//procedural con mysql
$this->_conexion = mysql_connect(SERVIDOR,USUARIO,CLAVE );
mysql_select_db(BASE, $this->_conexion ); */

//orientada a objeto con mysli

try {
$this->_conexion = new mysqli(SERVIDOR,USUARIO,CLAVE);
if($this->_conexion->connect_error)
throw new MiExcepcion($this->_conexion->connect_error);
} catch (MiExcepcion $e) {
echo $e->mensajePersonalizado();
exit;/* se sale de la clase para que en los metodos posteriores que hacen uso del
objeto conexion que se debio haber creado, no produzcan error al no existir este
por la ocurrencia del error. */
}

try {

/* en las 2 lineas anteriores y posteriores si el atributo conect_error del objeto conexion


contiene un valor es que se ha producido un error por tanto se lanza la excepcion y se le pasa
el
mensaje del error producido para determinar que mensaje de error personalizado producir. */
$this->_conexion->select_db(BASE);
if($this->_conexion->error)
throw new MiExcepcion($this->_conexion->error);
} catch (MiExcepcion $e) {
echo $e->mensajePersonalizado();
exit;/* se sale de la clase para que en los metodos posteriores que hacen uso del
objeto conexion que se debio haber creado, no produzcan error al no existir este
por la ocurrencia del error. */
}
}
public function desconectar()
{
//procedural
//mysql_close($this->_conexion);

//orientada a objeto
$this->_conexion->close();
}

public function traerDatos(SqlSelect $sql)


{

/*
//procedural
$resultado = mysql_query($sql, $this->_conexion);
while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC)){
$todo[] = $fila;
}
return $todo;

// return $fila = mysql_fetch_object($resultado);


//while ($fila = mysql_fetch_object($resultado)){
//$todo[] = $fila;
//}
//return $todo; */

/* en las lineas de los metodos siguientes si el atributo _error del objeto conexion contiene
un valor es que se ha producido un error por tanto se lanza la excepcion y se le pasa el
mensaje del error producido para determinar que mensaje de error personalizado producir.

Si la operacion no produce error se retorna un true que le indica a la capa de presentacion


el exito de la operacion y asi presentar un mensaje de exito. */
try {
//orientado a objeto
$resultado = $this->_conexion->query($sql);
//while ($fila = $resultado->fetch_array()){//si se desea regresar una coleccion de array
if($this->_conexion->error)
throw new MiExcepcion($this->_conexion->error);
while ($fila = $resultado->fetch_object()) {
$todo[] = $fila;
}
$resultado->close();
return $todo;
} catch (MiExcepcion $e) {
return $e->mensajePersonalizado();
}
}

public function insertarDatos(SqlInsert $sql)


{
//procedural
//mysql_query($sql, $this->_conexion) or die(mysql_error());
try {
//orientado a objeto
$this->_conexion->query($sql);
if($this->_conexion->error)
throw new MiExcepcion($this->_conexion->error);
else
return true;
} catch (MiExcepcion $e) {
return $e->mensajePersonalizado();
}
}

public function actualizarDatos(SqlUpdate $sql)


{
//procedural
//mysql_query($sql, $this->_conexion) or die(mysql_error());
try {
//orientado a objeto
$this->_conexion->query($sql);
if($this->_conexion->error)
throw new MiExcepcion($this->_conexion->error);
else
return true;
} catch (MiExcepcion $e) {
return $e->mensajePersonalizado();
}
}

public function eliminarDatos(SqlDelete $sql)


{
//procedural
//mysql_query($sql, $this->_conexion) or die(mysql_error());
try {
//orientado a objeto
$this->_conexion->query($sql);
if($this->_conexion->error)
throw new MiExcepcion($this->_conexion->error);
else
return true;
} catch (MiExcepcion $e) {
return $e->mensajePersonalizado();
}
}

public function respaldarBBDD()


{
$bbdd = BASE;
$usuario = USUARIO;
$servidor = SERVIDOR;
$clave = CLAVE;
$file = $bbdd.'.sql';
$url = "C:/xampp/htdocs/tesis/Respaldar/".$file;//modificar en linux
$message = exec("mysqldump --database --host=$servidor --user=$usuario --
password=$clave $bbdd > $url");

return $url = "../Respaldar/".$file;


}

public function restaurarBBDD($file)


{
$bbdd = BASE;
$usuario = USUARIO;
$servidor = SERVIDOR;
$clave = CLAVE;
$urlfile = "C:/xampp/htdocs/tesis/Restaurar/".$file;//modificar en linux

$message = exec("mysql --user=$usuario --host=$servidor --password=$clave $bbdd <


$urlfile");

public function iniciarTransaccion()


{
$this->_conexion->autocommit(false);

public function finalizarTransaccion($bool)


{
if($bool == 1){
$this->_conexion->commit();
}

if ($bool == 0){
$this->_conexion->rollback();
}
}

S-ar putea să vă placă și