Bienvenidos sean a este post, hoy vamos a crear un codigo para aplicar todo lo visto anteriormente.
Para este post vamos a crear un programa para consultar sobre un grupo de alumnos donde podremos ver sus datos y sus notas, para ello usaremos los siguientes:
- Operadores
- switch
- Arrays
- Funciones de arrays
- Arrays multidimensionales
- For
- While
- Foreach
- Funciones
- Clases
- Herencia
Si necesitan saber sobre alguno de esos temas pueden usar cada uno de los links donde se explican, para nuestro post vamos a crear un archivo llamado curso.php y le agregaremos el siguiente codigo, despues los desmenusaremos para explicarlo:
curso.php
<?php
class alumno
{
public $usuario;
public $nombre;
public $apellido;
public function __construct($usuario,
$nombre = "",
$apellido = "")
{
$this->usuario = $usuario;
$this->nombre = $nombre;
$this->apellido = $apellido;
}
}
class notas extends alumno
{
public $nota;
public function __construct($usuario, $nota)
{
parent::__construct($usuario);
$this->nota = $nota;
}
}
function ver_alumno($alumnos)
{
system('clear');
foreach($alumnos as $linea)
{
echo "Usuario: " . $linea['usuario'] . " => ";
echo $linea['nombre'] . " " . $linea['apellido'] . "\n\n";
}
readline("Presiona Enter para salir.");
}
function ver_notas($notas)
{
system('clear');
$alumno=readline("Ingresa el usuario del alumno: ");
$arreglo = explode(",",$notas[$alumno]);
foreach($arreglo as $linea)
echo $linea . "\n";
readline("Presiona Enter para seguir");
}
function ver_media($notas, $alumnos)
{
system('clear');
echo "El promedio de cada alumno:\n";
foreach($alumnos as $renglon)
{
$arreglo = explode(",",$notas[$renglon['usuario']]);
$total = 0;
for ($i = 0; $i < count($arreglo); $i++)
$total += $arreglo[$i];
$promedio = $total / count($arreglo);
echo $renglon['usuario'] . ": " . $promedio . "\n";
}
readline("Presiona Enter para salir.");
}
$alumno1 = new alumno('tinchicus','Martin','Miranda');
$alumno2 = new alumno('etortore','Enzo','Tortore');
$alumno3 = new alumno('daleman','Dark Zero','Aleman');
$alumno4 = new alumno('polizzia','Ariel','Polizzi');
$notas1 = new notas($alumno1->usuario, '6,7,8');
$notas2 = new notas($alumno2->usuario, '7,8,9');
$notas3 = new notas($alumno3->usuario, '8,9,10');
$notas4 = new notas($alumno4->usuario, '5,6,7');
$alumnos = array(
$alumno1->usuario => array(
'usuario'=>$alumno1->usuario,
'nombre'=>$alumno1->nombre,
'apellido'=>$alumno1->apellido),
$alumno2->usuario => array(
'usuario'=>$alumno2->usuario,
'nombre'=>$alumno2->nombre,
'apellido'=>$alumno2->apellido),
$alumno3->usuario => array(
'usuario'=>$alumno3->usuario,
'nombre'=>$alumno3->nombre,
'apellido'=>$alumno3->apellido),
$alumno4->usuario => array(
'usuario'=>$alumno4->usuario,
'nombre'=>$alumno4->nombre,
'apellido'=>$alumno4->apellido));
$notas = array(
$notas1->usuario=>$notas1->nota,
$notas2->usuario=>$notas2->nota,
$notas3->usuario=>$notas3->nota,
$notas4->usuario=>$notas4->nota
);
do
{
system('clear');
echo "1)Ver usuario de alumnos.\n";
echo "2)Ver notas de alumno.\n";
echo "3)Ver promedio de alumnos.\n";
echo "4)Salir\n";
echo "Ingresa la opcion: ";
$linea = readline();
switch($linea)
{
case 1:
ver_alumno($alumnos);
break;
case 2:
ver_notas($notas);
break;
case 3:
ver_media($notas,$alumnos);
break;
}
} while($linea != 4);
?>
Nota: Recuerden que la buena practica dice que la clase no deberia estar en el mismo archivo pero por un tema de practicidad lo manejaremos de esta forma.
Este es un codigo bastante complejo pero que como dijimos antes cubrimos varios temas de los vistos hasta ahora, comencemos con la primera clase:
class alumno
{
public $usuario;
public $nombre;
public $apellido;
public function __construct($usuario,
$nombre = "",
$apellido = "")
{
$this->usuario = $usuario;
$this->nombre = $nombre;
$this->apellido = $apellido;
}
}
Esta sera la clase que usaremos como base para crear a nuestros alumnos del curso, en este caso declaramos tres variables para almacenar el usuario, nombre y apellido respectivamente luego tenemos el constructor de la clase para poder iniciarlos al momento de crear el objeto y en este caso usamos los valores predeterminados para el nombre y el apellido pero de esto hablaremos en el proximo bloque, dentro de este constructor iniciaremos cada una de las propiedades o variables de esta clase, pasemos a la siguiente clase:
class notas extends alumno
{
public $nota;
public function __construct($usuario, $nota)
{
parent::__construct($usuario);
$this->nota = $nota;
}
}
En este caso tenemos una clase hija de la anterior donde agregaremos una nueva propiedad para almacenar las notas del alumno, luego tenemos el constructor que recibira dos datos uno sera el usuario y el otro con todas las notas, dentro de este constructor iniciaremos al constructor padre enviando el usuario solamente porque los otros no son necesarios, por esta razon les dimos valores predeterminados, para finalmente iniciar el valor de la propiedad nota con el valor recibido, con esto tenemos las clases cubiertas, pasemos a ver la primera de las funciones del codigo:
function ver_alumno($alumnos)
{
system('clear');
foreach($alumnos as $linea)
{
echo "Usuario: " . $linea['usuario'] . " => ";
echo $linea['nombre'] . " " . $linea['apellido'] . "\n\n";
}
readline("Presiona Enter para salir.");
}
Esta funcion la usaremos para ver cuales son los usuarios de los alumnos, como atributo recibe una variable que posee todos los alumnos, para ello usaremos primero a la funcion system, esta funcion nos permite ejecutar comandos del sistema por nuestro codigo, para esta ocasion le enviamos el comando clear que lo usamos para limpiar la pantalla, luego usamos a foreach donde pasa por todos los elementos recibidos en el argumento, lo siguiente sera mostrarnos en pantalla el usuario con el nombre y apellido que este relacionado, observen como para obtener cada dato le pasamos la etiqueta relacionada pero de esto hablaremos luego, por ultimo usamos un readline para presionar Enter y salgamos de la funcion, pasemos a la siguiente funcion:
Nota: en caso de usar Windows reemplacen clear por cls.
function ver_notas($notas)
{
system('clear');
$alumno=readline("Ingresa el usuario del alumno: ");
$arreglo = explode(",",$notas[$alumno]);
foreach($arreglo as $linea)
echo $linea . "\n";
readline("Presiona Enter para seguir");
}
Esta funcion sera para ver las notas de cada alumno, como argumento recibiremos una variable con todas las notas de cada alumno, usamos nuevamente a system para limpiar la pantalla, para esta ocasion definimos una nueva variable llamada alumno donde por medio de readline le indicaremos el usuario en cuestion, una vez informado crearemos un nuevo array llamado arreglo y por medio de explode le diremos que separe el valor de notas que corresponde con la clave informada (alumno), cuando veamos la creacion de notas entenderemos el porque, despues tenemos un bucle donde pasaremos por todos los elementos del nuevo array (arreglo) y lo mostraremos en pantalla, por ultimo volvemos a usar el readline para generar la pausa tal como hicimos anteriormente, pasemos a la siguiente funcion:
function ver_media($notas, $alumnos)
{
system('clear');
echo "El promedio de cada alumno:\n";
foreach($alumnos as $renglon)
{
$arreglo = explode(",",$notas[$renglon['usuario']]);
$total = 0;
for ($i = 0; $i < count($arreglo); $i++)
$total += $arreglo[$i];
$promedio = $total / count($arreglo);
echo $renglon['usuario'] . ": " . $promedio . "\n";
}
readline("Presiona Enter para salir.");
}
Esta funcion nos servira para ver el promedio de cada alumno, para ello no solamente recibira las notas sino a los alumnos tambien, volvemos a limpiar la pantalla, luego mostramos un mensaje en pantalla indicando que hace la funcion, despues usaremos un foreach para pasar por todos los elementos de la variable alumnos que informamos como argumento, dentro de este lo primero que haremos sera volver a obtener las notas del alumno contenida en notas y por medio de explode las almacenaremos en un nuevo array, pero si observan ahora le pasamos el valor de la clave usuario en la variable del bucle (renglon), iniciamos una variable llamada total con el valor de 0, luego usamos un bucle for donde pasara por todos los elementos del nuevo array y en base a cada valor obtenido incrementaremos a total, una vez incrementado sacaremos el promedio de este total con la cantidad de notas y lo almacenaremos en una variable llamada promedio, por ultimo mostraremos en pantalla el usuario y su promedio actual, esto lo hara por cada alumno, por ultimo tenemos de nuevo la misma pausa que las anteriores, con esto ya cubrimos las tres funciones que usaremos en el codigo, veamos el siguiente bloque:
$alumno1 = new alumno('tinchicus','Martin','Miranda');
$alumno2 = new alumno('etortore','Enzo','Tortore');
$alumno3 = new alumno('daleman','Dark Zero','Aleman');
$alumno4 = new alumno('polizzia','Ariel','Polizzi');
Estos seran los objetos que representen a nuestros alumnos, estos son solo algunos ejemplos donde primero pasaremos el usuario que tendran en nuestro «instituto», seguido del nombre y apellido para identificarlos, gracias al constructor lo hacemos todo en una sola linea, veamos el siguiente bloque:
$notas1 = new notas($alumno1->usuario, '6,7,8');
$notas2 = new notas($alumno2->usuario, '7,8,9');
$notas3 = new notas($alumno3->usuario, '8,9,10');
$notas4 = new notas($alumno4->usuario, '5,6,7');
Estos son los objetos para las notas de cada alumno, vean como en lugar de pasar el usuario a mano se lo informamos en base a los objetos creados anteriormente gracias a la propiedad usuario almacenado en cada uno de ellos, luego pasamos la nota como una string separada por comas y esta es la razon por la que usamos a explode para crear el array, de esta forma si se modifican algunos de los objetos anteriores estos cambios tambien se reflejaran en este, con esto tenemos los usuarios y las notas pasemos al siguiente bloque:
$alumnos = array(
$alumno1->usuario => array(
'usuario'=>$alumno1->usuario,
'nombre'=>$alumno1->nombre,
'apellido'=>$alumno1->apellido),
$alumno2->usuario => array(
'usuario'=>$alumno2->usuario,
'nombre'=>$alumno2->nombre,
'apellido'=>$alumno2->apellido),
$alumno3->usuario => array(
'usuario'=>$alumno3->usuario,
'nombre'=>$alumno3->nombre,
'apellido'=>$alumno3->apellido),
$alumno4->usuario => array(
'usuario'=>$alumno4->usuario,
'nombre'=>$alumno4->nombre,
'apellido'=>$alumno4->apellido));
En este caso crearemos un array de tipo bidimensional donde nuestra primera dimension sera el usuario de cada alumno, observen como pasamos cada objeto y su propiedad usuario, luego usamos nuevamente array para crear tres nuevas claves:
- usuario, donde almacenaremos el valor de la propiedad usuario
- nombre, para la propiedad nombre
- apellido, para la propiedad apellido
Esto lo haremos por cada usuario, dando como resultado el listado de usuarios que enviaremos a las funciones que sean necesarias para que sean procesadas por las mismas, pasemos al siguiente bloque:
$notas = array(
$notas1->usuario=>$notas1->nota,
$notas2->usuario=>$notas2->nota,
$notas3->usuario=>$notas3->nota,
$notas4->usuario=>$notas4->nota
);
Este es un array unidimensional pero del tipo con clave, donde la clave sera el usuario almacenado en el objeto de las notas y su valor sera el de la propiedad nota, esto lo haremos para todos los alumnos dando como resultado el array que enviaremos a las funciones que sean necesarias, con esto comentado solos nos queda el ultimo bloque:
do
{
system('clear');
echo "1)Ver usuario de alumnos.\n";
echo "2)Ver notas de alumno.\n";
echo "3)Ver promedio de alumnos.\n";
echo "4)Salir\n";
echo "Ingresa la opcion: ";
$linea = readline();
switch($linea)
{
case 1:
ver_alumno($alumnos);
break;
case 2:
ver_notas($notas);
break;
case 3:
ver_media($notas,$alumnos);
break;
}
} while($linea != 4);
Este sera la parte principal del programa porque sera el menu que vera el usuario, para ello usamos un bucle do…while, podria haber sido un while pero me resulta mas «monono» este estilo, como con todas las funciones primero limpiamos la pantalla, luego le mostramos todas las opciones que disponen y cada una sera para las tres funciones que vimos anteriormente y una para salir del programa, para ello usaremos una variable llamada linea donde luego por medio de un switch chequearemos los distintos valores que podemos pasar y en cada caso llamara a la funcion que corresponde de las anteriormente explicadas y pasara como argumento al array que corresponda de los explicados anteriormente, por ultimo tenemos el while donde chequea que linea sea distinta de 4 para repetirlo, con todo esto comentado podemos pasar a probarlo mediante el siguiente video
En el video podemos ver como nos mantenemos en el programa siempre que no informemos la opcion 4, tambien vemos como nos devolvio informacion correspondiente a cada funcion llamada desde el menu, con esto tenemos un ejemplo no muy practico pero sencillo para ver como trabaja todo lo visto hasta este post.
En resumen, hoy hemos creado un codigo que puede procesar a alumnos y sus notas, hemos pasado por todo lo visto anteriormente, hemos visto como poder integrarlo en cada uno de ellos y como cada uno nos beneficio en nuestro codigo y tareas, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
