Trabajo Práctico N° 6 | Programacion PHP

Ejercicio N° 1

Cargar a través de un formulario los datos de un postulante para un puesto
de trabajo. Los datos son los siguientes:
● Nombre y Apellido
● Fecha de nacimiento
● Dirección
● Sexo
● Disponibilidad (medio tiempo o full time)
● Puesto (informática, contable, rrhh)
● Cargar CV (archivo de cualquiera de los 3 tipos: .pdf, .doc, .jpg)
Al enviar el formulario, mostrar por pantalla un mensaje de confirmación:
“El postulante [Nombre y Apellido] se inscribió en el puesto [Puesto]“.

				
					<!DOCTYPE html> 

<html>

<head>
    

    
    <meta name="tipo_contenido" content="text/html;" http-equiv="content-type" charset="utf-8">

    
    <title>Formulario de postulación</title>
</head>

<body> 

    
    <form action="procesar_formulario.php" method="post" enctype="multipart/form-data">

        
        Nombre y Apellido: <input type="text" name="nombre"><br>
        
        
        Fecha de nacimiento: <input type="date" name="fecha"><br>
        
        
        Dirección: <input type="text" name="direccion"><br>
        
        
        Sexo: <input type="text" name="sexo"><br>
        
        
        Disponibilidad: 
        <select name="disponibilidad">
            <option value="medio tiempo">Medio Tiempo</option>
            <option value="full time">Full Time</option>
        </select><br>
        
        
        Puesto: 
        <select name="puesto">
            <option value="informatica">Informática</option>
            <option value="contable">Contable</option>
            <option value="rrhh">RRHH</option>
        </select><br>
        
        
        Cargar CV: <input type="file" name="cv"><br>

        
        <input type="submit" value="Enviar">
    </form>

</body>

</html>

				
			
				
					<?php
// Verificamos si este script fue llamado mediante una solicitud POST. 
// Esto ayuda a evitar que alguien simplemente visite el archivo y cause comportamientos no deseados.
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // Aquí estamos obteniendo el valor del campo 'nombre' del formulario que fue enviado.
    // Es el nombre del postulante que ingresaron en el formulario.
    $nombre = $_POST['nombre'];

    // De manera similar, obtenemos el puesto al que el postulante quiere postularse.
    $puesto = $_POST['puesto'];

    // Finalmente, mostramos un mensaje en la página que confirma que el postulante se ha inscrito para el puesto.
    echo "El postulante " . $nombre . " se inscribió en el puesto " . $puesto . ".";
}
?>

				
			

Ejercicio N° 2

Usando herencia realice dos clases una Postulante y la otra Empleado, que
hereden de la clase Persona.
* Los datos de la clase Postulante son los mismos que se ingresan por formulario en el punto 1.
* Esta clase debe permitir calcular la edad del postulante.
* Los datos que se guardan de la clase Empleado son:
* Nombre y Apellido
* Fecha de nacimiento
* Dirección
* Sexo
* Disponibilidad (medio tiempo o full time)
* Puesto (informática, contable, rrhh)
* Fecha de ingreso
* Esta clase debe permitir calcular los años de antigüedad del empleado

				
					<?php
// Definición de la clase 'Persona' que será la base para 'Postulante' y 'Empleado'.
class Persona {
    // Propiedades protegidas, esto significa que las clases hijas pueden accederlas, pero desde fuera de la clase no.
    protected $nombre;
    protected $apellido;
    // ... otros atributos ...

    // Constructor de la clase, inicializa las propiedades con los valores pasados al crear un objeto.
    public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto) {
        $this->nombre = $nombre;
        // ... inicialización de otros atributos ...
    }
}

// La clase 'Postulante' hereda de 'Persona' y tiene características adicionales.
class Postulante extends Persona {
    private $cv;  // Propiedad específica de 'Postulante' para guardar el CV.

    // Constructor que también inicializa el CV además de las propiedades heredadas.
    public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto, $cv) {
        parent::__construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto);  // Llama al constructor de 'Persona'.
        $this->cv = $cv;  // Inicializa el CV.
    }

    // Método que calcula la edad del postulante basado en su fecha de nacimiento.
    public function calcularEdad() {
        // ... lógica de cálculo ...
        return $edad->y;  // Retorna la edad.
    }
}

// La clase 'Empleado' también hereda de 'Persona' pero tiene características distintas a 'Postulante'.
class Empleado extends Persona {
    private $fechaIngreso;  // Propiedad específica para guardar la fecha en que el empleado ingresó.

    // Constructor que inicializa la fecha de ingreso además de las propiedades heredadas.
    public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto, $fechaIngreso) {
        parent::__construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto);  // Llama al constructor de 'Persona'.
        $this->fechaIngreso = $fechaIngreso;  // Inicializa la fecha de ingreso.
    }

    // Método que calcula los años de antigüedad del empleado en base a su fecha de ingreso.
    public function calcularAntiguedad() {
        // ... lógica de cálculo ...
        return $antiguedad->y;  // Retorna los años de antigüedad.
    }
}
?>

				
			

Ejercicio N° 3

Agregue un método estático a la clase Empleado del punto anterior que permita mostrar los puestos existentes (informática, contable, rrhh). Muestre por pantalla el resultado de ejecutar dicho método.

				
					<?php
// Incluye y evalúa el archivo especificado, 'demoejercicio2.php', que se espera contenga la definición de la clase 'Empleado'.
require_once 'demoejercicio2.php';

// Define una nueva clase 'EmpleadoEjercicio3' que extiende (hereda) de la clase 'Empleado'.
class EmpleadoEjercicio3 extends Empleado {
    
    // Propiedad estática, que pertenece a la clase en sí y no a una instancia de la clase.
    public static $puestos = ["Informática", "Contable", "RRHH"];

    // Método estático que imprime todos los puestos disponibles.
    public static function mostrarPuestos() {
        // Recorre el array estático de puestos y los imprime.
        foreach (self::$puestos as $puesto) {
            echo $puesto . "<br>";
        }
    }
}

// Llama al método estático 'mostrarPuestos()' de la clase 'EmpleadoEjercicio3'.
// No es necesario instanciar la clase para llamar a este método porque es estático.
EmpleadoEjercicio3::mostrarPuestos();
?>

				
			

Ejercicio N° 4

Implementar el polimorfismo (varias formas de resolver un mismo método) para calcular el sueldo de tres tipos de Empleados:
Empleado Informático:
Sueldo = $básico + $xcantidadAplicaciones
★ $básico = $200.000
★ 1-5 aplicaciones = $10.000
★ 6 o más aplicaciones = $20.000
Empleado de RRHH:
Sueldo = $básico + $xcantidadProyectos
★ $básico = $300.000
★ 1-5 proyectos = $20.000
★ 6 o más proyectos = $30.000
Empleado Contable:
Sueldo = $básico + $xcantidadExpedientes
★ $básico = $100.000
★ 1-5 expedientes = $50.000
★ 6 o más expedientes = $80.000
Muestre el sueldo de un empleado Informático con 10 aplicaciones.

Sugerencia: Puede utilizar una clase donde estará el método calcSueldo() para su posterior implementación particular por cada tipo de Empleado.

				
					<?php
// Se incluye y evalúa el archivo 'demoejercicio2.php', que se espera contenga la definición de la clase 'Persona'.
require_once 'demoejercicio2.php';

// Se define una clase abstracta 'EmpleadoConSueldo' que extiende de 'Persona'.
abstract class EmpleadoConSueldo extends Persona {
    // Propiedades protegidas, accesibles solo por esta clase y sus subclases.
    protected $fechaIngreso;
    protected $cantidad;

    // Constructor que inicializa las propiedades.
    public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto, $fechaIngreso, $cantidad) {
        // Llamada al constructor de la clase padre 'Persona'.
        parent::__construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto);
        // Inicialización de propiedades específicas de 'EmpleadoConSueldo'.
        $this->fechaIngreso = $fechaIngreso;
        $this->cantidad = $cantidad;
    }

    // Método abstracto que obliga a las clases que extienden 'EmpleadoConSueldo' a implementarlo.
    abstract protected function calcularSueldo();
}

// Subclase que extiende 'EmpleadoConSueldo' y representa un empleado informático.
class EmpleadoInformatico extends EmpleadoConSueldo {
    // Método para calcular sueldo específico para empleados informáticos.
    public function calcularSueldo() {
        $basico = 200000;
        $extra = $this->cantidad <= 5 ? 10000 : 20000;
        return $basico + $extra;
    }
}

// Subclase para empleados de RRHH.
class EmpleadoRRHH extends EmpleadoConSueldo {
    // Método para calcular sueldo específico para empleados de RRHH.
    public function calcularSueldo() {
        $basico = 300000;
        $extra = $this->cantidad <= 5 ? 20000 : 30000;
        return $basico + $extra;
    }
}

// Subclase para empleados contables.
class EmpleadoContable extends EmpleadoConSueldo {
    // Método para calcular sueldo específico para empleados contables.
    public function calcularSueldo() {
        $basico = 100000;
        $extra = $this->cantidad <= 5 ? 50000 : 80000;
        return $basico + $extra;
    }
}

// Instancia de un empleado informático y muestra su sueldo.
$empleadoInformatico = new EmpleadoInformatico("Juan", "Perez", "1990-01-01", "Calle 123", "Masculino", "Full Time", "Informatico", "2023-01-01", 10);
echo "El sueldo del empleado informático es: $" . $empleadoInformatico->calcularSueldo();

?>

				
			
(Visited 1 times, 1 visits today)