Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios»

De WikiEducator
Saltar a: navegación, buscar
 
(Una revisión intermedia por el mismo usuario no mostrado)
Línea 163: Línea 163:
 
-->
 
-->
  
==[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio4|Ejercicio 4: tienda base con array]]===
+
===[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio4|Ejercicio 4: tienda base con array]]===
 
<br />
 
<br />
 
{{MRM_Actividad|Title=Tienda base con Array|
 
{{MRM_Actividad|Title=Tienda base con Array|
 
*A partir de un array de productos, por ejemplo:
 
*A partir de un array de productos, por ejemplo:
<source lanb=php>
+
<source lang=php>
 
$productos=[
 
$productos=[
 
         'lechuga' => ['unidades' => 200,
 
         'lechuga' => ['unidades' => 200,
Línea 183: Línea 183:
 
Realizamos una pequeña aplicación con los siguientes requisitos
 
Realizamos una pequeña aplicación con los siguientes requisitos
 
RF1: Un usuario debe acceder registrándos (usuario y passowrd) .
 
RF1: Un usuario debe acceder registrándos (usuario y passowrd) .
     El criterio será que usuario y password coincidan, si no, nos informará de datos incorrectos
+
     El criterio será que usuario y password coincidan, si no,  
 +
    nos informará de datos incorrectos
 
RF2: Una vez accedido nos mostrará un listado con todos los productos y sus precios
 
RF2: Una vez accedido nos mostrará un listado con todos los productos y sus precios
 
RF3: También nos mostrará un formulario para poder comprar productos
 
RF3: También nos mostrará un formulario para poder comprar productos
RF4: Una vez indicado los productos selecionados nos mostrará la factura . Nunca podrá facturar más productos de los que haya en existencias.
+
RF4: Una vez indicado los productos selecionados nos mostrará la factura .  
 +
Nunca podrá facturar más productos de los que haya en existencias.
 
RNF:Se debe programar orientado a objetos, con dos clases: Productos.php y Cesta.php
 
RNF:Se debe programar orientado a objetos, con dos clases: Productos.php y Cesta.php
 +
A continuación se muestra una posible solución
 +
{{plegable|hide|Cesta.php|
 +
<source lang=php>
 +
<?php
 +
class Cesta
 +
{
 +
    /**
 +
    * @var $cesta Un array asociativo  con los productos comprados
 +
    */
 +
    private $cesta;
 +
 +
//Inicializo los atributos de la clase
 +
    public function __construct(){
 +
        $this->cesta = [];
 +
 +
    }
 +
 +
// añade el producto en la cesta
 +
//Contabiliza no comprar más productos de las existencias
 +
    public function add_producto($productos, $producto, $unidades){
 +
        if ($unidades> $productos[$producto]['unidades']) {
 +
            $unidades = $productos[$producto]['unidades'];
 +
            var_dump($unidades);
 +
        }
 +
        $this->cesta[$producto]=$unidades;
 +
    }
 +
 +
    //Generemos una factua de la compra
 +
    public function generar_factura($productos):string{
 +
        $factura = "<fieldset><legend>Factura </legend>";
 +
        $total=0; //inicializo para evitar un warning
 +
        foreach ($this->cesta as $producto=> $unidades) {
 +
            $precio = $productos[$producto]['precio'];
 +
            $subtotal = floatval($unidades) * $precio; //convierto a float $unidades para evitar warning!!
 +
            $factura.="<h3>$unidades de $producto a $precio = $subtotal</h3>";
 +
            $total+=$subtotal;
 +
        }
 +
        $factura .="<h3> Total de productos comprados <span style='color:red'>".sizeof($this->cesta)."</span></h3>";
 +
        $factura .="<h2> Importe total de la factura <span style='color:red'>$total</span></h2>";
 +
        return $factura;
 +
    }
 +
 +
}
 +
?>
 +
 +
</source>
 +
 +
}}
 +
{{plegable|hide|Producto.php|
 +
<source lang=php>
 +
<?php
 +
 +
class Producto
 +
{
 +
    /**
 +
    * @var $productos Un array con un listado
 +
      de productos (unidades y precio) para poder comprar
 +
    */
 +
    private $productos;
 +
    const LISTADO_PRODUCTOS=[
 +
        'lechuga' => ['unidades' => 200,
 +
            'precio' => 0.90],
 +
        'tomates' =>['unidades' => 2000,
 +
            'precio' => 2.15],
 +
        'cebollas' =>['unidades' => 3200,
 +
            'precio' => 0.49],
 +
        'fresas' =>['unidades' => 4800,
 +
            'precio' => 4.50],
 +
        'manzanas' =>['unidades' => 2500,
 +
            'precio' => 2.10],
 +
    ];
 +
 +
//Inicializo los atributos de la clase
 +
    public function __construct(){
 +
        $this->productos = self::LISTADO_PRODUCTOS;
 +
 +
    }
 +
 +
 +
    public function get_productos(): array{
 +
        return $this->productos;
 +
    }
 +
 +
 +
}
 +
</source>
 +
 +
}}
 +
{{plegable|hide|index.php|
 +
<source lang=php>
 +
<?php
 +
$msj=$_GET["msj"] ?? "";
 +
 +
if (isset($_POST['submit'])){
 +
    $name = $_POST['name'];
 +
    $pass = $_POST['pass'];
 +
    if ($name ===$pass){
 +
        header ("Location:tienda.php?name=$name");
 +
        exit();
 +
    }else{
 +
        $msj ="Datos incorrectos";
 +
    }
 +
 +
}
 +
 +
?>
 +
 +
 +
<!doctype html>
 +
<html lang="en">
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <meta name="viewport"
 +
          content="width=device-width">
 +
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
 +
    <title>Document</title>
 +
    <link rel="stylesheet" href="estilo.css">
 +
</head>
 +
<body>
 +
<form action="index.php" method="post">
 +
<fieldset>
 +
    <h2><?=$msj?></h2>
 +
    <legend>Datos de acceso</legend>
 +
    usuario : <input type="text" name="name" id=""><br />
 +
    pass <input type="text" name="pass" id=""><br />
 +
    <input type="submit" value="Validar" name="submit">
 +
 +
</fieldset>
 +
</form>
 +
 +
</body>
 +
</html>
 +
 +
</source>
 +
 +
}}
 +
{{plegable|hide|tienda.php|
 +
<source lang=php>
 +
<?php
 +
spl_autoload_register(function ($clase){
 +
    require("$clase.php");
 +
});
 +
 +
 +
 +
$productos = new Producto();
 +
$listado = $productos->get_productos();
 +
 +
$opcion = $_POST['submit'] ?? null;
 +
if ($opcion =='Comprar'){
 +
  $cesta = new Cesta();
 +
  $compra = $_POST['compra'];
 +
    foreach ($compra as $producto_comprado=>$unidades) {
 +
        $cesta->add_producto($listado, $producto_comprado, $unidades);
 +
  }
 +
    $factura = $cesta->generar_factura($listado);
 +
}
 +
 +
?>
 +
<!doctype html>
 +
<html lang="en">
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <meta name="viewport"
 +
          content="width=device-width">
 +
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
 +
    <title>Listado de productos</title>
 +
    <link rel="stylesheet" href="estilo.css">
 +
</head>
 +
<body>
 +
<fieldset>
 +
    <legend>Listado de productos disponibles</legend>
 +
    <?php
 +
    foreach ($listado as $producto=>$contendio) {
 +
        echo "<h2>$producto  ({$contendio['precio']}€) </h2>";
 +
    }
 +
    ?>
 +
</fieldset>
 +
<?php
 +
//Si no hay factura muestro el formulario para comprar
 +
if (!isset($factura)):?>
 +
<fieldset>
 +
    <legend>Compra</legend>
 +
    <form action="tienda.php" method="post">
 +
        <?php
 +
        foreach ($listado as $producto=>$contendio) {
 +
            echo "<h4>$producto  ({$contendio['precio']}€)";
 +
            echo "<input type='text' name='compra[$producto]' > </h4>";
 +
        }
 +
        ?>
 +
      <input type="submit" value="Comprar" name="submit">
 +
    </form>
 +
</fieldset>
 +
<?php else:
 +
    //Si hay factura la muestro, en lugar del formulario para comprar
 +
    echo "$factura";
 +
?>
 +
<form action="tienda.php" method="post">
 +
      <input type="submit" value="Volver a comprar" name="submit">
 +
</form>
 +
<?php endif?>
 +
 +
 +
</body>
 +
</html>
 +
 +
</source>
 +
 +
}}
 +
{{plegable|hide|estilo.css|
 +
<source lang=css>
 +
fieldset{
 +
    width: 50%;
 +
    background: bisque;
 +
    margin:100px
 +
}
 +
legend{
 +
    size : 2em;
 +
    color:blue;
 +
}
 +
 +
input[type=text]{
 +
    size : 1.4em;
 +
    color:blue;
 +
 +
}
 +
input[type=submit]{
 +
    size : 1.8em;
 +
    color:blue;
 +
 +
}
 +
</source>
 +
 +
}}
 +
  
 
}}
 
}}
 
<!--
 
<!--

Última revisión de 05:10 14 feb 2022




Ejercicio 1: Clase Empleado



Icon activity.jpg
Ejercicio 1: Clase Empleado
  • Confeccionar una clase Empleado, definir como atributos su nombre y sueldo.
  • Definir un método inicializarlo para que lleguen como dato el nombre y sueldo.
  • Plantear un segundo método que imprima el nombre y un mensaje si debe o no pagar impuestos (si el sueldo supera a 3000 paga impuestos)




Ejercicio 2: Clase Menu



Icon activity.jpg
Ejercicio 1: Clase Menu
  • Confeccionar una clase llamada Menu.
  • Permitir añadir diferentes opciones al menú, según necesitáramoss.
  • Mostrar el menú en forma horizontal o vertical (según que método llamemos)





Ejercicio 3: Clase Racional



Icon activity.jpg
Clase Racional
  • Construir una clase llamado racional.

Se necesita que se pueda inicializar de diferentes formas, según se especifica:

new Racional();//      1/1
new Racional(5);//     5/1 
new Racional(5,7);//   5/7
new Racional("9/7);//  9/7
  • Implementa los siguientes métodos
  1. .-El método __toString, para visualizarlo,
  2. .-El método sumar, para sumar al objeto actual, y Racional que recibamos como argumento.
  3. .-El método restar, para restar al objeto actual, y Racional que recibamos como argumento.
  4. .-El método multiplicar, para multiplicar al objeto actual, y Racional que recibamos como argumento.
  5. .-El método dividir, para dividir al objeto actual, y Racional que recibamos como argumento.
  • Todos los métodos aritméticos anteriores me deben retornar un Racional simplificado




Ejercicio 4: tienda base con array



Icon activity.jpg
Tienda base con Array
  • A partir de un array de productos, por ejemplo:
$productos=[
        'lechuga' => ['unidades' => 200,
            'precio' => 0.90],
        'tomates' =>['unidades' => 2000,
            'precio' => 2.15],
        'cebollas' =>['unidades' => 3200,
            'precio' => 0.49],
        'fresas' =>['unidades' => 4800,
            'precio' => 4.50],
        'manzanas' =>['unidades' => 2500,
            'precio' => 2.10],
    ];

Realizamos una pequeña aplicación con los siguientes requisitos RF1: Un usuario debe acceder registrándos (usuario y passowrd) .

   El criterio será que usuario y password coincidan, si no, 
   nos informará de datos incorrectos

RF2: Una vez accedido nos mostrará un listado con todos los productos y sus precios RF3: También nos mostrará un formulario para poder comprar productos RF4: Una vez indicado los productos selecionados nos mostrará la factura .

Nunca podrá facturar más productos de los que haya en existencias.

RNF:Se debe programar orientado a objetos, con dos clases: Productos.php y Cesta.php A continuación se muestra una posible solución