Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios»
De WikiEducator
(→Ejercicio 2: Clase Menu) |
|||
(7 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 101: | Línea 101: | ||
</source> | </source> | ||
--> | --> | ||
− | {{MRM_Actividad| | + | <br /> |
− | Construir una clase llamado racional que | + | <br /> |
+ | ===[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio3|Ejercicio 3: Clase Racional]]=== | ||
+ | <br /> | ||
+ | {{MRM_Actividad|Title=Clase Racional| | ||
+ | *Construir una clase llamado racional. | ||
+ | Se necesita que se pueda '''''inicializar''''' de diferentes formas, según se especifica: | ||
+ | <source lang=php> | ||
+ | new Racional();// 1/1 | ||
+ | new Racional(5);// 5/1 | ||
+ | new Racional(5,7);// 5/7 | ||
+ | new Racional("9/7);// 9/7 | ||
+ | </source> | ||
+ | |||
+ | *Implementa los siguientes métodos | ||
+ | #.-El método '''''__toString''''', para visualizarlo, | ||
+ | #.-El método '''''sumar''''', para sumar al objeto actual, y Racional que recibamos como argumento. | ||
+ | #.-El método '''''restar''''', para restar al objeto actual, y Racional que recibamos como argumento. | ||
+ | #.-El método '''''multiplicar''''', para multiplicar al objeto actual, y Racional que recibamos como argumento. | ||
+ | #.-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 | ||
}} | }} | ||
+ | <!-- | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
Línea 140: | Línea 161: | ||
</source> | </source> | ||
}} | }} | ||
+ | --> | ||
+ | |||
+ | ===[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio4|Ejercicio 4: tienda base con array]]=== | ||
+ | <br /> | ||
+ | {{MRM_Actividad|Title=Tienda base con Array| | ||
+ | *A partir de un array de productos, por ejemplo: | ||
+ | <source lang=php> | ||
+ | $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], | ||
+ | ]; | ||
+ | </source> | ||
+ | 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 | ||
+ | {{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